Ubuntu asennus USB-tikkuun Windows 10 käyttöjärjestelmällä
- Lataa viimeisen Ubuntu LTS image viralliselta verkkosivulta täältä, odota kunnes lataus valmistuu
- Lataa ohjelma nimeltä Rufus täältä ja asenna se
- Ohjelman tarkoitus on mahdollistaa Ubuntun asentaminen USB-tikullesi. Ohjelmalla alustetaan USB-tikkusi oikeaan formaattiin
- Lataa UNetbootin täältä
- Ohjelma luo Ubuntu imagesta Ubuntun käyttöjärjestelmän käynnistettäväksi Windows käyttöjärjestelmille
- Aseta USB-tikku vapaaseen USB-porttiin
- Käynnistä Rufus
- Valitse Device valikosta USB-tikkusi.
- Valitse Boot Selection valikosta Non bootable
- Varmista, että File System valikossa lukee FAT32
- Jos valikossa lukee jotain muuta niin vaihda se FAT32
- Paina Start painiketta ja formatointi valmistuu
- Sulje Rufus
Nyt, kun formatointi on valmis, voimme siirtyä eteenpäin.
- Käynnistä UNetbootin
- Valitse DiskImage radiovalinta, viereisestä valikosta ISO ja sitten paina reunimmaista ”…” painiketta
- Valitse juuri avautuneesta ikkunasta kohdassa 1. ladattu Ubuntu image
- Aseta “Space used to preserve...” kohdan numerokenttään “kovalevyy” tilaa
- Ubuntu itsessään vie noin 2 gigatavua USB-tikulta, joten jos sinulla on 8 gigatavun USB-tikku voi maksimissaan asettaa 6 gigatavua kovalevy tilaa
- Esimerkkinä 32 gigatavun USB-tikulle asetin 4 gigatavua kovalevy tilaa, joka riittää tähän tarkoitukseen
- Paina OK käynnistääksesi Ubuntun asennuksen
- Odota kunnes asennus valmistuu, jonka jälkeen voit sulkea ohjelmiston
Nyt Ubuntu on asennettu USB-tikullesi onnistuneesti.
Tässä vaiheessa voit poistaa ladatun Ubuntu imagen, Rufus- ja UNetbootin ohjelmistot järjestelmästäsi.
Ubuntun käynnistäminen
- Aseta USB-tikku Windows tietokone olevaan USB-porttiin
- Selvitä miten laitteellasi pääsee BIOS Boot menuun
- Käynnistä tietokone
- BIOS käynnistyessä, paina Boot Menu näppäintä (tyypillisesti joku funktionäppäin esim. F8)
- Valitse Boot Menusta USB-tikkusi
- Tietokoneesi käynnistyy nyt USB-tikku ympäristöstä
- Valitse Unetbootin valikosta ”Try Ubuntu Without Installing”
Hetken kuluttua sinun pitäisi saapua Ubuntu työpöytäympäristöön
Raudan listaaminen
- Avaa terminaali painamalla CTRL+ALT+T näppäinyhdistelmää
- Kirjoita "sudo lshw -short -sanitize"
H/W path | Device | Class | Description |
---|---|---|---|
. | |||
. | |||
/0/7/0 | memory | 2GiB DIMM DDR3 Synchronous | |
/0/7/1 | memory | 4GiB DIMM DDR3 Synchronous | |
/0/7/2 | memory | 2GiB DIMM DDR3 Synchronous | |
/0/7/3 | memory | 4GiB DIMM DDR3 Synchronous | |
/0/43 | processor | Intel(R) Core(TM) i5-2500K | |
/0/100 | bridge | 2nd Generation Core Process | |
/0/100/1 | bridge | Xeon E3-1200/2nd Generation | |
/0/100/1/0 | display | GP106 [GeForce GTX 1060 6GB | |
. | |||
. | |||
. |
Pakettien asentaminen
- Avaa terminaali painamalla CTRL+ALT+T näppäinyhdistelmää
- Kirjoita ”sudo apt install paketin-nimi”
esim. sudo apt install cowsay apache2 php7
Ohjelma | Lisenssi | Lisenssin versio |
---|---|---|
Cowsay | GPL (General Public License) | 2 |
Apache 2 | GPL (General Public License) | 3 |
PHP | PHP License | ? |
- GPL (General Public License)
- Version 2: Voit vapaasti käyttää, kopioida, jakaa (myös myydä) ja muokkaa ohjelmistoa, kunhan vain muistaa lisensöidä ohjelmiston GPL lisensillä https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- Version 3: Voit vapaasti käyttää, kopioida, jakaa (myös myydä) ja muokkaa ohjelmistoa, kunhan vain muistaa lisensöidä ohjelmiston GPL lisenssillä. Se suojaa paremmin patentti uhilta ja tarjoaa paremman yhteensopivuuden muiden lisenssien kanssa https://www.gnu.org/licenses/quick-guide-gplv3.html
- PHP Lisenssi
- Käyttö, muokkaaminen ja jakaminen on sallittua kun; ei käytä PHP sanaa ohjelmiston nimessä suoraan ilman group@php.net suostumusta (php:n käytön saa silti indikoida nimessä esim. "Foo for PHP") ja ohjelmistosta löytyy seuraava tunnustus "This product includes PHP software, freely available from http://www.php.net/software/"
Listaa käyttämäsi ohjelmat
Windows Ohjelma | Vastaava Linux Ohjelma |
---|---|
Office Suite | Calligra Suite |
Windows Media Player | VLC |
Windows Photo Viewer | gThumb |
Onnistumisia ja epäonnistumisia SysLogissa
- Avaa terminaali
- Kirjoita siihen "cron" ja paina röttöstä
Feb 2 07:32:50 ubuntu cron[5105]: (CRON) DEATH (can't open or create /var/run/crond.pid: Permission denied)
Selitys: ohjelmaa ei voida käynnistää, koska sinulla ei ole riittäviä oikeuksia
Vastaus: vaatii ylemmät oikeudet
Kirjoita onnistuneesti logiin
- logger "Moikka Tero"
- tail -n 1 /var/log/syslog
Feb 2 07:32:50 ubuntu ubuntu: Moikka Tero
Sovelluksien asennus
Ohjelma 1: Asenna shutter
- Kirjaudu roottiin
- apt-get -y install shutter
Jos törmäät kyseiseen alla mainittuu erroriin
Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package shutter <---
Niin kannattaa kokeilla ensi päivittää repository cache, joka onnistuu komennolla:
apt update
Kokeile paketin asentamista uudelleeno. Jos asentaminen ei vieläkään toimi niin kokeile lisätä uusi repository listaan, joka onnistuu komennoilla:
- add-apt-repository universe
- apt update
- apt-get -y install shutter
Ohjelma 2: Google Chrome
- cd ~
- wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- dpkg -i google-chrome-stable_current_amd64.deb
Ohjelma 3: VLC
- apt-get -y install vlc
Apachen asentaminen
- sudo apt-get -y install apache2
Osoitteesta Localhost voit tarkistaa onko apache2 päällä. Vaihtoehtoisesti voit myös CLI:sta tarkistaa komennolla:
service apache2 status
Vihreä pylpyrä kuvastaa käynnissä olemista.
sudo apt-get -y install php
Apache käyttäjähakemistojen käyttöönotto ja kotisivun luonti
- sudo a2enmod userdir
- mkdir ~/public_html && echo "This is your homepage" >> ~/public_html/index.html
- service apache2 restart
Aktivoidaan userdir mahdollisuus, koska apachessa se ei ole defaultisti päällä. Luodaan kansio käyttäjän kotihakemistoon, johon lisätään uusi HTML tiedosto. Lopuksi täytyy käynnistää apache uudelleen.
Tarkemmat ohjeet löydät täältä.
Apache Access Log
Avataan terminaalista Apache2:n access.log, sieltä näkee esimerkiksi GET ja POST pyynnöt.
tail -f /var/log/apache2/access.log
- Avaa selaimella paikallinen verkkosivusi tästä
- Epäonnistuneen merkinnän saa esimerkiksi kirjoittamalla kenoviivan jälkeen "abcd". Esim localhost/abcd
- Onnistuneen merkinnän saa esimerkiksi localhost
127.0.0.1 - - [09/Feb/2020:10:40:54 +0000] "GET / HTTP/1.1" 200 3477 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" Selitys: Osoittesta 127.0.0.1 Sunnuntaina Klo 10:40 HTTP GET pyyntö osoitteeseen 127.0.0.1 onnistui. URL osoite on olemassa ja se palauttaa onnistuneesti Apache Welcome Sivun. Clientti avasi sivun Ubuntulla FireFoxilla. 127.0.0.1 - - [09/Feb/2020:10:41:14 +0000] "GET /abcd HTTP/1.1" 404 488 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" Selitys: Osoittesta 127.0.0.1 Sunnuntaina Klo 10:40 HTTP GET pyyntö osoitteeseen 127.0.0.1/abcd epäonnistui. 404 -> Palvelimelta ei löydy kyseistä "abcd" tiedostoa. Clientti avasi sivun Ubuntulla FireFoxilla.
Apache Error Log
Avataan terminaalista Apache2:n error.log.
tail -f /var/log/apache2/error.log
Muutetaan aiemmin luotu index.html .php tiedostoksi ja luodaan yksi uusi tiedosto nimeltä
- cd ~/public_html && mv index.html true.php
- cp true.php false.php
- nano true.php
-
Kopio alla oleva php skripti ja liitä se tiedostoon
<?php print_r([]);
Tallenna tiedosto
- nano false.php
-
Kopio alla oleva php skripti ja liitä se tiedostoon
<?php echo "Moikka Tero " . $a;
Tallenna tiedosto
PHP Notice: Undefined variable: a in /home/ubuntu/public_html/false.php on line 1 Selitys: PHP huomautus: Määrittelemätön muuttuja A false.php tiedostossa rivillä 1 Array() Selitys: PHP skripti ei aiheittanut virheitä
Apache konfigurointivirhe
Määritetään kansioden turvallisuus asetuksia apache2.conf tiedostossa.
- Avaa tiedosto: sudo nano /etc/apache2/apache2.conf
- Etsi tiedostosta: "directory /var/www/"
- Lisää rivin: "Require all granted" alle uusi rivi, johon kirjoitat kirjoitusvirheen:
- requires All cranted
- Tallenna tiedosto
Aja alle oleva tiedosto testaaksesi konfigurointitiedosto
apachectl configtest
Apachen oletussivun vaihtaminen
Määritetään landing page apache2.conf tiedostossa.
- Avaa tiedosto: sudo nano /etc/apache2/apache2.conf
- Etsi tiedostosta: "directory /var/www/"
- Lisää rivin: "Require all granted" alle uusi rivi, johon kirjoitat kirjoitusvirheen:
- DirectoryIndex new.html index.html
- Luodaan new.html tiedosto yllä olevaan hakemistoon: sudo touch /var/www/html/new.html && sudo nano new.html
- Lisää sinne tekstiä: "Moikka Tero"
- Tallenna tiedosto
Lopuski kannattaa ajaa komento:
apachetcl configtest
Web palvelimen asennus ja pienen kysymysapplikaation luonti
Rakennamme pienen kysymysapplikaation, jossa kuka tahansa pystyy luomaan kysymyksen ja kuka tahansa vastaamaan kyseiseen kysymykseen
Käytettäviä ohjelmointikieli on PHP, applikaatio pyörii Apache2 päällä ja tallennamme tiedot MySQL palvelimelle
Jos yllä olevat sovellukset ovat asennettu, voit skippaa kohtaan 4
1. Päivitetään järjestelmäsi paketit
sudo apt update && sudo apt upgrade
2. Asennettaan Tasksel
sudo apt -y install tasksel
Tasksellillä voidaan helposti asentaa esimerkiksi Lamp stack (apache2, php ja mysql)
3. Asennetaan Lamp stack
sudo tasksel install lamp-server
Installeri aukeaa, joka näyttää asennuksen vaiheet ja asentaa yllä mainitut sovellukset
4. Apachen asetuksien määrittäminen
Nyt kun sovellukset on asennettu, voimme siirtyä asetuksien asettamiseen
Sovelluksen nimeksi tulee questioner.local, joten luomme projektille kansion ja tyhjän etusivun, joka tapahtuu seuraavasti
sudo mkdir /var/www/questioner.local && touch /var/www/questioner.local/index.php
Nyt kun sovelluksellamme on kotikansio, määritämme apacheen uuden Virtual Hostingin (eli virtuaalipalvelun)
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/questioner.local.conf
Kopioimme oletusmääritystiedoston uudeksi tiedostoksi ohjelmamme nimellä, joka on tässä tapauksessa questioner.local.conf
- Avataan juuri luotu tiedosto
- sudo nano /etc/apache2/sites-available/questioner.local.conf
- Muutetaan kohta DocumentRoot siten, että arvoksi tulee
- "/var/www/html" -> "/var/www/questioner.local"
- Lisätään myös osoitteet:
- ServerName questioner.local
- ServerAlias www.questioner.local
- Tallenna ja sulje tiedosto
Nyt kun tarvittavat määritykset virtuaalipalvelun osalta ovat tehty, voimme aktivoida palvelun komennolla
sudo a2ensite questioner.local.conf
Jonka jälkeen apache täytyy soft bootata komennolla:
sudo systemctl reload apache2
5. Testaaminen
Jos http://questioner.local ei toimi. Voit joutua vielä lisäämään /etc/hosts tiedostoon ko. domainin.
Avaa kyseinen hosts tiedosto ja lisää ylimmälle riville, jossa lukee 127.0.0.1 localhost perään sovelluksen virtuaalipalvelun nimi.
127.0.0.1 localhost questioner.local
MySQL palvelun käyttöönotto projektia varten
Käyttäjän luonti
- Kirjaudutaan sisään:
- mysql -u root
- Luodaan uusi käyttäjä mysqliin:
- GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'localhost' IDENTIFIED BY 'verysecretpassword';
- myuser on käyttäjän nimi
- verysecretpassword on yllä mainitun käyttäjän salasana
- Kirjautudaan ulos komennolla:
- exit;
Kirjaudutaan juuri luodulle käyttäjälle
mysql -u myuser -p verysecretpassword
Luodaan tietokanta ja taulut valmiiksi:
CREATE DATABASE questionapp; USE questionapp; CREATE TABLE `questions` ( `id` INT NOT NULL AUTO_INCREMENT, `question` VARCHAR(1024) NOT NULL, `nickname` VARCHAR(255) NOT NULL, `created` DATETIME default CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB; CREATE TABLE `answers` ( `id` INT NOT NULL AUTO_INCREMENT, `answer` VARCHAR(1024) NOT NULL, `nickname` VARCHAR(255) NOT NULL, `created` DATETIME default CURRENT_TIMESTAMP, `question_id` INT NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Kopio yllä olevat rivit ja liitä ne MySQL komentoriville!
Lataa valmiiksi koodattu ohjelma alla olevasta osoitteesta
ICT4TN021-3010.jaakkouusitalo.fi ja tallenna sen sisältö aiemmin luotuun kotihakemistoon /var/www/questioner.local
Flask:n asennus
Asennetaan pakettimanageri pythonille nimeltä pip
sudo apt-get install python-pip
Asennetaan Flask pipillä
pip install flask
Testataan Flask:n toimivuus
- python ja paina enter
- kirjoita import flask ja paina enter
Jos ei tule erroria Flask toimii
Hello World Flaskillä!
Onnistuuu siten, että luodaan tiedosto main.py vaikka työpöydälle
cd ~/Desktop && nano main.py
Lisätään siihen koodia:
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello World'
Tallenna ja sulje tiedosto
Asetetaan kyseinen tiedosto ympäristömuuttujaksi komennolla
export flask_app=main.py
Käynnitetään skripti komennolla
python -m flask main.py
Kopio linkki terminaalista selaimeesi ja Volá!
Foo tuotantoon
Varmista, että apache2 on asennettu, jos ei ole niin asenna se ensin
sudo apt-get update sudo apt-get install apache2
Jos on niin voit skippaa asennus vaiheen
Tarkista python versio
python --version
Minulla on asennettuna 2.7 sekä joku kolmas versio, mutta käytän tässä esimerkissä 2.7
Asennetaan siihen sopiva wsgi moduuli apacheen
sudo apt-get install libapache2-mod-wsgi
Terminaalin pitäisi logata seuraavasti, jos kaikki meni niinkuin piti
apache2_invoke: Enable module wsgi
Luodaan seuraavaa hakemisto
mkdir /var/projects/FooFlask && cd $_
Luo tiedostot __init__.py, FooFlask.py
touch __init.py FooFlask.py
Luo uusi hakemisto ja sinne uusi tiedosto nimeltä FooFlask.wsgi
mkdir ../wsgiSettings/ && touch $_/FooFlask.wsgi
__init__.py tiedosto jätetään tyhjäksi
Avaa tiedosto FooFlask.py nanolla ja liitä siihen alla oleva koodin pätkä
from flask import Flask app = Flask(__name__) @app.route("/") def foo(): return "Foo!" if __name__ == "__main__": app.run()
Tallenna ja sulje tiedosto
Avaa aiemmin luotu FooFlask.wsgi tiedosto
#!/usr/bin/env python2.7 <- shebangiin merkitse käyttämäsi python versio import logging import sys logging.basicConfig(stream=sys.stderr) sys.path.insert(0, '/var/projects/FooFlask/') <- projektin hakemisto from FooFlask import app as application application.secret_key = '1two3four5six' <- joku tosi salainen avain
Luodaan uusi virtuaalipalvelimen konffitiedosto kopioimalla default konffitiedosto. Lopuksi avataan kyseinen tiedosto nanolla.
cd /etc/apache2/sites-available && sudo cp 000-default.conf FooFlask.conf && nano FooFlask.conf
Muokkaa tiedostoa alla olevien ohjeiden muokaisesti
ServerName www.fooflaskprod.com <- Anna virtuaalipalvelimelle osoite DocumentRoot /var/projects/FooFlask <- määritä vastaamaan hakemistoa, jossa FooFlaskin tiedostot ovat WSGIScriptAlias / /var/projects/wsgiSettings/FooFlask.wsgi <- määritä vastaamaan hakemistoa, jossa wsgi tiedosto sijaitsee <Directory /var/projects/FooFlask/gt <- Annetaan riittävät oikeudet Options FollowSymLinks AllowOverride None Require all granted </Directory> <Directory /var/projects/wsgiSettings/> <- Annetaan riittävät oikeudet Require all granted </Directory>
Tallenna ja sulje tiedosto
Aktivoidaan virtualhost komennolla
sudo a2ensite /etc/apache2/sites-available/FooFlask.conf
Lopuksi käynnistetään apache varmuuden vuoksi uudelleen
service apache2 restart
Kokeile osoitetta: http://www.fooflaskprod.com/
Muottien lisäys
Lisätään FooFlask kansioon uusi hakemisto nimeltä templates ja sinne kaksi uutta tiedostoa
mkdir templates && touch $_/header.html $_/footer.html
header.html
<!DOCTYPE html> <html> <head> <title>Very nice title over here!</title> </head> <body> <h1>Body starts here</h1>
footer.html
<h4>Body ends here</h4> <h1>Footer starts here</h1> </body> <footer> <p>This is a fantasticly simple footer message that acknowledges you where the footer resides. <b>This also marks where the footer ends</b></p> </footer> </html>
Avataan päätiedosto FooFlask.py ja muokataan sitä seuraavasti
from flask import Flask, render_template <- lisätään render_template app = Flask(__name__) @app.route("/") def index(): return getHeader() + ' Not a very functional MVC ' + getFooter() def getHeader(): return render_template('header.html') <- palauttaa header tiedoston sisällön def getFooter(): return render_template('footer.html') <- palauttaa footer tiedoston sisällön if __name__ == "__main__": app.run()
Kokeile osoitetta: http://www.fooflaskprod.com/
Kirjataan käyttäjätietoja!
Luodaan uusi template tiedosto kansioon templates nimeltä userDetails.html
nano templates/userDetails.html
Lisätään sinne alla olevat koodin pätkät
<ul> <li>User Agent: {{ request.user_agent.string }}</li> <li>Remote Address: {{ request.remote_addr }}</li> </ul>
Lisätään alla olevat rivit FooFlask.py tiedostoon
@app.route("/user") def ipPage(): return getHeader() + getUserDetails() + getFooter() def getUserDetails(): return render_template('userDetails.html', request=request)
Muista importata request niinkuin Tero tehtävässä mainitsi!
MyDay | Avaa pyörivä versio täältä
Uusi hakemisto
mkdir MyDay
Avaa kansio ja lisää tiedostot
cd MyDay && touch __init__.py MyDay.py
Lisää templates ja pages kansiot
mkdir pages templates
Avaa templates kansio ja lisää tiedostot
touch header.html footer.html
Avaa pages kansio ja lisää tiedosto
cd ../pages && touch index.html
tai lataa kyseiset tiedostot täältä
Paketoi tiedosto
zip myday.zip
Jos sinulla ei ole zip ohjelmaa asenna se yum tai apt:lla
Siirretään paketti palvelimelle SCP:llä palvelille käyttäjän kotihakemistoon
scp myday.zip 'username'@'ip tai hostname':~
Siirretään paketti /var/html kansioon
mv myday.zip /var/html
Puretaan paketti ja poistetaan paketti
unzip myday.zip && rm myday.zip
Jos unzip ohjelmaa ei löydy
apt-get -y install unzip
Annetaan apachelle oikeudet kansioon
chown -R apache:apache /var/www/MyDay/ chmod -R 755 /var/www
Flask kirjaston asennus CentOS 7:lla
Asennetaan mysqldb kirjasto flaskille
pip install flask-mysqldb
Jos ei toimi niin kokeile yum install -y mariadb-devel
Virtuaalipalvelun lisäys
Luodaan uusi conf tiedosto ja kopio siihen alla olevan kuvan sisältö. Muuta ServerNamea tarvittaessa :)
nano /etc/httpd/conf.d/MyDay.conf
WSGI asennus apacheen
yum install mod_wsgi
Lopuksi kannattaa tarkistaa, että toimiiko mod_wsgi
sudo httpd -M | grep wsgi <-- enter wsgi_module (shared) <-- pitäisi toimia
MySQL käyttäjän, kannan ja taulukon luonti
Roottina sisään
mysql -u root -p
Luodaan käyttäjä
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'verysecretpassword';
Kirjaudu ulos ja kirjaudu takaisin sisään käyttäjälle
exit; <-- enter mysql -u myuser -p <-- enter
Kopio alla oleva skripti ja paina enter
CREATE DATABASE myday; USE myday; CREATE TABLE `stories` ( `id` INT NOT NULL AUTO_INCREMENT, `story` VARCHAR(1024) NOT NULL, `nickname` VARCHAR(255) NOT NULL, `likes` INT default 0, `created` DATETIME default CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Labratyö: arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-6-torstai-alkukevat-2018-5-op
Asennetaan ensin tasksel ja sitten lamp serveri
sudo apt install -y tasksel && sudo tasksel lamp-server
Kirjaudutaan MYSQL palvelimelle roottina, jonka jälkeen luodaan uusi käyttäjä
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'verysecretpassword';
Kirjaudutaan myuserilla MYSQLiin
Luodaan uusi MYSQL taulukko
CREATE DATABASE clients; USE clients; CREATE TABLE `customers` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(1024) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Luodaan muutaman rivi valmiiksi
INSERT INTO clients (name) VALUES ("Kulta ja Kaivos ky") INSERT INTO clients (name) VALUES ("Piilosana ry") INSERT INTO clients (name) VALUES ("MetalliMake")
Luodaan uusi kansio ja index.php tiedosto
sudo mkdir /var/www/sorkkacrm.example.com && touch /var/www/sorkkacrm.example.com/index.php
<?php include "config.php"; function getClients(){ $db = dbConn(); $getClients = $db->prepare('SELECT * FROM clients'); $getClients->execute(); $clients = $getClients->fetchAll(); return $clients; } $clients = getClients(); ?> <!DOCTYPE html> <html> <head> <title>Sorkkacrm</title> </head> <body> <main> <h1>Sorkkacrm</h1> <p>Järjestelmässä olevat asiakkaat:</p> <ul> <?php foreach($clients as $client) { echo "<li>" . $client['name']. "</li>"; } ?> </ul> </main> </body> </html>
Luodaan config.php tiedosto
touch /var/www/sorkkacrm.example.com/config.php
<?php function dbConn() { try { $conn = new PDO("mysql:host=localhost;dbname=clients", "myuser", "verysecretpassword"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $conn; } catch(PDOException $e) { die("Connection failed: " . $e->getMessage()); } } ?>
Sorkan sivut
Luodaan uusi kansio ja staattinen nettisivu
sudo mkdir /var/www/rauta.example.com && touch /var/www/rauta.example.com/index.html
<!DOCTYPE> <html> <head> <title>Sorkka ja Rauta Oy</title> </head> <body> <h1>Sorkka ja Rauta Oy</h1> </body> </html>
Lisätään osoitteet hosts tiedostoon
sudo nano /etc/hosts
Ensimmäiselle riville localhostin perään kirjoitetaan ko. osoitteet
127.0.0.1 localhost sorkkacrm.example.com rauta.example.com
Luodaan conf tiedostot apacheen
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/sorkkacrm.example.com.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/rauta.example.com.conf
Muutetaan kummankin juuri kopioidun tiedoston DocumentRoot kohta vastaamaan aiemmin luotujen kansioiden polkuja
Esimerkkinä :
"/var/www/html" -> "/var/www/sorkkacrm.example.com"
ja toinen:
"/var/www/html" -> "/var/www/rauta.example.com"
Lisätään myös kummallekkin omat ServerName sekä ServerAlias attribuutit
ServerName sorkkacrm.example.com ServerAlias www.sorkkacrm.example.com
ja toinen:
ServerName rauta.example.com ServerAlias www.rauta.example.com
Lopuksi aktivoidaan virtuaalipalveluiden käyttö kummankin kohdalla
sudo a2ensite sorkkacrm.example.conf && sudo a2ensite rauta.example.conf
Sitten vain soft bootataan apache
sudo systemctl reload apache2
Einari koodaa!
Ensin aktivoidaan Userdir
sudo a2enmod userdir
Luoodaan Einarille kotihakemistoon uusi kansio
sudo mkdir /home/einari/public_html
Luodaan index.php tiedosto
sudo touch /home/einari/public_html/index.php
Kirjoitetaan sinne php "skripti"
sudo echo "<?php print('Einari') ?>" > /home/einari/public_html/index.php
Jos ei näy niin kokeile avata tiedosto php7.* konfigurointitiedosto
sudo nano etc/apache2/mods-available/php7.0.conf
Ja kommentoi ifmodule rivit pois
Restarttaa apache uudelleen
Prosessinhallintaa ja lokeja
Kuormituksen seuraus
Asennetaan kuormitusta seuraava ohjelmisto nimeltä "sysstat"
sudo apt-get install -y sysstat
Kuormittaminen stressillä
Asennetaan "stress" ohjelmisto
sudo apt-get install -y stress
Jos ohjelmistoa ei löydy niin tarkista, että main sekä universe löytyvät apt-repositoreista
sudo apt-add-repository main
sudo apt-add-repository universe
Kokeile sitten uudelleen
Tämän jälkeen avaamme kaksi terminaalia vierekkäin
Ensin selvitetään cpu tietoja
lscpu
Kohdassa "CPU(s)" lukee 2, joten testataan kaikilla ytimillä
Testataan CPU ensin
stress -c 2 --timeout 30s
-c tai --cpu tarkoittaa testattavien CPU määrää, --timeoutilla varmistetaan ettei tämä homma unohdu päälle
Kuten kuvan yläosasta huomaa, niin lähes tulkoon kummatkin CPU ovat 100% käytössä. Sovelluksien käyttäminen on aika hidasta tällä hetkellä.
Jos Ubuntu ei näy ylinpänä paina vasemmassa terminaali-ikkunassa (Shift + m)
Testataan RAM seuraavaksi
stress -m 20
Yhden testin default arvo on 256mb, joten, koska minulla on 8 gigatavua keskusmuistia ~8000 / 256 = 30 niin päädyin kuormittamaan 20 instanssilla
Kuten kuvan yläosasta huomaa, niin lähes tulkoon kummatkin 20 instanssia on käytössä. Jokainen prosessi näyttää myös vievän aika ison palan prossessorin resursseista.
Jos Ubuntu ei näy ylinpänä paina vasemmassa terminaali-ikkunassa (Shift + m)
Iotop ja dstat
Asennetaan kummatkin heti kerrallaan
sudo apt-get install -y iotop dstat
Simple top-like I/O monitor
iotop -oa
Testasin mitä tapahtuu kun avaa uuden Firefox ikkunan -> uusi rivi ilmeistyi.
Versatile tool for generating system resource statistics
dstat -C 0,1,total
-C flagin perään voidaan määrittää jokainen monitoroitava prosessori erikseen ja sitten niiden yhteismäärä
Ensimmäisellä rivillä käynnistäessä huomataan, että cpu0 ja cpu1 on varsin käyttämättömänä. Ensimmäinen rivi kertoo tilanteen kun järjestelmä on bootattu. Riveillä 2-4 CPUt pysyvät edelleen käyttämättöminä, mutta rivillä 5 tapahtuu levyn luentaa. 1071 kilotavun edestä tavaraa. Mitään ei kuitenkaan kirjoiteta ainakaan juuri sillä hetkellä, joten kuvittelisin tämän johtuvat siitä, että avasin Pictures kansio, jossa oli kuvia.
SS - another utility to investigate sockets
Toimii vähän samalla tavalla kuin netstat. Näyttää enempi TCP (transmission control protocol) tietoja
ss --listening --tcp --numeric
Kuvassa näkyy kaikki tcp socketit ilman niiden palvelunimeä
Kuvassa näkyy kaikki tcp socketit palvelunimien kanssa mm. domain ja ipp
ss --listening --tcp
ss --tcp
Testiksi käynnistin firefoxin ja otin yhteyttä logitechin sivulle. Vain kaikki tcp socketit taas listattu. Peer Address:Port näyttää loppupään osoitteen. Näkyy useita eri ip osoitteita varmaan siksi, että sivulla on ohjauksia muille sivuille noutamaan esimerkiksi jotain css ja js tiedostoja...
Aiemman testin perään kokeilin --udp flagillä ja nyt näkyy vain UDP socketit
ss --listening --udp
Uptime
Tell how long the system has been running.
uptime
Keskiarvo on keskiarvo prosessien määrästä, jotka ovat joko käynnistetävissä tai keskeyttämättömässä tilassa.
- Miten load average tulkitaan?
- Viimeisen 1, 5 ja 15 minuutin keskiarvo (eli viimeisen minuutin aikana 0.24, viimeisen viiden minuutin aikana 0.35 ja viimeisen 15 minuutin 0.52). Viimeisen yhden minuutin aikana keskimääräisesti CPU:t olivat 48% idlenä tai 52% käytössä
- Miksi prosessoriydinten määrä on tässä kiinnostava?
- Tähän kohtaan en oikein keksinyt mitään
Kuormituksen analysointia
Suurimmat spiket tulivat selkeästi kun tehtiin cpun stress testiä. Toinen piikki oli kun asensin logitechin ohjelmiston laitteelle. Firefoxia käyttäessä oli kanssa pikkupiikkejä ilmeisesti sen takia, koska usb ubuntulla firefox defaultisti tallentaa tikulle evästeitä ja tämä on hidasta, koska tikuissa kirjoitusnopeus ei ole hiphiphurraamisen arvoinen asia.
Kaikissa harjoituksen kohdissa käytin apuna man ohjelmaa, kun piti selvittää mitä mikäkin flagi oikein tarkoittaa. Silloin tällöin käytin myös linux.die.net