Kaikki tällä sivulla listatut tehtävät ovat Tero Karvisen Linux-palvelin kurssilta. Katso Tero Karvisen sivut täältä ja tehtävälista täältä

Ubuntu asennus USB-tikkuun Windows 10 käyttöjärjestelmällä

  1. Lataa viimeisen Ubuntu LTS image viralliselta verkkosivulta täältä, odota kunnes lataus valmistuu
  2. Lataa ohjelma nimeltä Rufus täältä ja asenna se
    1. Ohjelman tarkoitus on mahdollistaa Ubuntun asentaminen USB-tikullesi. Ohjelmalla alustetaan USB-tikkusi oikeaan formaattiin
  3. Lataa UNetbootin täältä
    1. Ohjelma luo Ubuntu imagesta Ubuntun käyttöjärjestelmän käynnistettäväksi Windows käyttöjärjestelmille
  4. Aseta USB-tikku vapaaseen USB-porttiin
  5. Käynnistä Rufus
    1. Valitse Device valikosta USB-tikkusi.
    2. Valitse Boot Selection valikosta Non bootable
    3. Varmista, että File System valikossa lukee FAT32
    4. Jos valikossa lukee jotain muuta niin vaihda se FAT32
    5. Paina Start painiketta ja formatointi valmistuu
    6. Sulje Rufus

Nyt, kun formatointi on valmis, voimme siirtyä eteenpäin.

  1. Käynnistä UNetbootin
  2. Valitse DiskImage radiovalinta, viereisestä valikosta ISO ja sitten paina reunimmaista ”…” painiketta
  3. Valitse juuri avautuneesta ikkunasta kohdassa 1. ladattu Ubuntu image
  4. Aseta “Space used to preserve...” kohdan numerokenttään “kovalevyy” tilaa
    1. Ubuntu itsessään vie noin 2 gigatavua USB-tikulta, joten jos sinulla on 8 gigatavun USB-tikku voi maksimissaan asettaa 6 gigatavua kovalevy tilaa
    2. Esimerkkinä 32 gigatavun USB-tikulle asetin 4 gigatavua kovalevy tilaa, joka riittää tähän tarkoitukseen
  5. Paina OK käynnistääksesi Ubuntun asennuksen
  6. 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

  1. Aseta USB-tikku Windows tietokone olevaan USB-porttiin
  2. Selvitä miten laitteellasi pääsee BIOS Boot menuun
  3. Käynnistä tietokone
  4. BIOS käynnistyessä, paina Boot Menu näppäintä (tyypillisesti joku funktionäppäin esim. F8)
  5. Valitse Boot Menusta USB-tikkusi
  6. Tietokoneesi käynnistyy nyt USB-tikku ympäristöstä
  7. Valitse Unetbootin valikosta ”Try Ubuntu Without Installing”

Hetken kuluttua sinun pitäisi saapua Ubuntu työpöytäympäristöön

Raudan listaaminen

  1. Avaa terminaali painamalla CTRL+ALT+T näppäinyhdistelmää
  2. 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

  1. Avaa terminaali painamalla CTRL+ALT+T näppäinyhdistelmää
  2. 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)
  • 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

  1. Avaa terminaali
  2. 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

  1. logger "Moikka Tero"
  2. tail -n 1 /var/log/syslog

Feb 2 07:32:50 ubuntu ubuntu: Moikka Tero

Sovelluksien asennus

Ohjelma 1: Asenna shutter

  1. Kirjaudu roottiin
  2. 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:

  1. add-apt-repository universe
  2. apt update
  3. apt-get -y install shutter

Ohjelma 2: Google Chrome

  1. cd ~
  2. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  3. dpkg -i google-chrome-stable_current_amd64.deb

Ohjelma 3: VLC

  1. apt-get -y install vlc

Apachen asentaminen

  1. 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.

Voit asentaa PHP:n samalla sitä tarvitaan myöhemmässä tehtävässä komennolla:

sudo apt-get -y install php

Apache käyttäjähakemistojen käyttöönotto ja kotisivun luonti

  1. sudo a2enmod userdir
  2. mkdir ~/public_html && echo "This is your homepage" >> ~/public_html/index.html
  3. 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

  1. Avaa selaimella paikallinen verkkosivusi tästä
  2. Epäonnistuneen merkinnän saa esimerkiksi kirjoittamalla kenoviivan jälkeen "abcd". Esim localhost/abcd
  3. 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ä

  1. cd ~/public_html && mv index.html true.php
  2. cp true.php false.php
  3. nano true.php
  4. Kopio alla oleva php skripti ja liitä se tiedostoon

    <?php print_r([]);

    Tallenna tiedosto

  5. nano false.php
  6. 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.

  1. Avaa tiedosto: sudo nano /etc/apache2/apache2.conf
  2. Etsi tiedostosta: "directory /var/www/"
  3. Lisää rivin: "Require all granted" alle uusi rivi, johon kirjoitat kirjoitusvirheen:
  4. requires All cranted
  5. Tallenna tiedosto

Aja alle oleva tiedosto testaaksesi konfigurointitiedosto

apachectl configtest

Apachen oletussivun vaihtaminen

Määritetään landing page apache2.conf tiedostossa.

  1. Avaa tiedosto: sudo nano /etc/apache2/apache2.conf
  2. Etsi tiedostosta: "directory /var/www/"
  3. Lisää rivin: "Require all granted" alle uusi rivi, johon kirjoitat kirjoitusvirheen:
  4. DirectoryIndex new.html index.html
  5. Luodaan new.html tiedosto yllä olevaan hakemistoon: sudo touch /var/www/html/new.html && sudo nano new.html
  6. Lisää sinne tekstiä: "Moikka Tero"
  7. Tallenna tiedosto

Lopuski kannattaa ajaa komento:

apachetcl configtest

  • Avaa selaimella paikallinen verkkosivusi tästä. Nyt uusi html tiedostosi pitäisi näkyä.
  • 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

    1. Avataan juuri luotu tiedosto
    2. sudo nano /etc/apache2/sites-available/questioner.local.conf
    3. Muutetaan kohta DocumentRoot siten, että arvoksi tulee
    4. "/var/www/html" -> "/var/www/questioner.local"
    5. Lisätään myös osoitteet:
    6. ServerName questioner.local
    7. ServerAlias www.questioner.local
    8. 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

    1. Kirjaudutaan sisään:
    2. mysql -u root
    3. Luodaan uusi käyttäjä mysqliin:
    4. 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
    5. Kirjautudaan ulos komennolla:
    6. 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

    1. python ja paina enter
    2. 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