Sunday, March 2, 2014

h5: Amazon VPC/VPS & Name Based VirtualHost


TEHTÄVÄNANTO Haaga-helian ammattikorkeakoulun "Linux palvelimena"-kurssilta:
http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014 

h5. 
Tee nimipohjainen virtuaalipalvelin Apachelle (name based virtual hosting). Muista
laittaa sekä http://www.example.com että example.com. Voit simuloida asiakkaan
nimipalvelua muuttamalla /etc/hosts -tiedostoa. 
Kokeile virtuaalipalvelinta (VPS). Voit vuokrata palvelimen esimerkiksi Linodelta,
Amazonilta, DigitalOceanilta tai monista muista paikoista. Linodella ja Amazonilla
saattaa olla myös ilmainen kokeilupaketti. Vaihtoehto: jos et jostain syystä halua
vuokrata virtuaalipalvelinta, voit kokeilla tehdä oman vagrantilla.






AMAZON VPS


Menin amazonin pilvipalvelusivustolle osoitteessa: aws.amazon.com

Sivustolta selviää, että Amazon tarjoaa ilmaista "AWS Free Tier" VPS-palvelua, joka sisältää 750 tuntia Linux ja Windows Micro Instansseja per kuukausi yhden vuoden ajan. Ilmaisena käyttäjänä on mahdollisuus käyttää vain Micro-Instansseja.


"Popular uses for micro instances include low traffic websites or blogs, small 
administrative applications, bastion hosts, and free trials to explore EC2 
functionality."

Luotuani ilmaisen amazon-tilin menin luomaan ensimmäistä instanssiani valitsemalla "Launch Instance".

Tämän jälkeen minun täytyi valita minkä serverikäyttöjärjestelmän asennan virtuaalipalvelimelleni Amazonin AMI-valikoimasta (AMI = Amazon Machine Image). Vaihtoehtoina oli mm. Red Hat Enterprise Linux 6.4 (PV), SuSE Linux Enterprise Server 11 sp3 32- ja 64-bittisinä versioina sekä eri windows-server-versioita.



Valitsin käyttikseksi "Ubuntu server 12.04 LTS"-imagen, koska se oli entuudestaan tuttu. Speksit annoin pysytellä kaikista pienimmällä tasolla:

Currently selected: t1.micro (up to 2 ECUs, 1 vCPUs, 0.613 GiB memory, EBS only) 8GB HD

Tämän jälkeen oli vuorossa instanssin yksityiskohtien konfigurointia.

Seuraava kohta oli: "Configure Security Group", jossa konfiguroitiin virtuaaliserverin sisäänmeneviä ja ulosmenevää liikennettä.
"A security group is a set of firewall rules that control the traffic for your instance.
On this page, you can add rules to allow specific traffic to reach your instance. For
example, if you want to set up a web server and allow Internet traffic to reach your
instance, add rules that allow unrestricted access to the HTTP and HTTPS ports. You can create a new security group or select from an existing one below. Learn more about
Amazon EC2 security groups."
-Valitsin näin alkuun "default security group"-oletuskonfiguraation.

-Tämän jälkeen minulla oli vaihtoehtona joko käyttää "olemassaolevaa avainparia tai luoda uusi" serverille etäyhteyden ottamisen autentikointia varten. Valitsin uuden avainparin luomisen (Select and existing key pair or create a new key), jonka nimesin "h5" >>> Latasin avaimen tietokoneelleni (Download Key Pair).

"You have to download the private key file (pem file) before you can continue.
Store it in a secure and accessible location. you will not be able to download the file
again after its created."

-Tämän jälkeen valitsin "Launch" ja instanssi oli luotu.



-Tämän jälkeen ilmoitettiin siitä, että halutessani voin luoda/pyytää Amazonilta sähköpostimuistutuksen, jos virtuaaliserverini käyttö ylittää ilmaisen käyttöoikeuden rajat. Siinähän tapauksessa, jos virtuaalipalvelimen resurssien käyttöni ylittäisi "Free Tier"-käyttäjän rajat ylimenevästä osasta minulta veloitettaisiin normaalituntihintojen mukaisesti.

Listattuna olivat linkit:
- siitä kuinka etäyhteyden luominen virtuaaliserveriin onnistuu.
- Virtuaalipalvelimien käyttöoppaaseen
- Amazonin virtuaalipalvelimien keskustelufoorumille


-Muutaman minuutin jälkeen klikkasin "View Instances" josta näin, että instanssin tila oli "running".
Valitsin "Connect To Your Instance", josta avautuivat vaihtoehtoisia ohjeita etäyhteyden ottamiseen windows-koneelta putty-ohjelman kautta tai linux/mac-koneen komentotulkin kautta suoraan.





Security Group

-Tässä vaiheessa kävin ohjeiden mukaisesti muokkaamassa aikaisemmin luotua "Security Group"-konfiguraatiota niin, että :
1. Sallin sisääntulevan SSH-yhteyden ottamisen (Security Group > Inbound > Create a new rule > Add new rule > SSH )
2. Sallin HTTP-yhteyden ottamisen ip-osoitteestani (testatakseni onnistuuko mm. apache2-webbiserverin asennus.) 
-Seuraavaksi otin ssh-etäyhteyden serveriini amazonin ohjeiden mukaisesti. Otin yhteyttä Ubuntu-käyttöjärjestelmän default-käyttäjänä "ubuntu". Lisäämällä -i osoittaa se missä salainen avainpari sijaitsee client-koneellani.

$ ssh -i /avaimen/sijainti/koneellani/keypair.pem ubuntu@instanssin-ip-osoite

Päivitin paketinhallinnan ja asensin apache-webbiserverin.

$ sudo apt-get update
$ sudo apt-get install apache2 

Webbiserveri oli asentunut oikein koska surffaamalla instanssin ip-osoitteeseen "http://ip-osoite" löytyi teksti
"It works! This is thedefault web page..."



Huomioitavia asioita Amazonin instansseista:

-Jos ylittää "Free tier"-käyttäjän minimivaatimukset alkaa automaattinen laskutus amazonin hinnastojen mukaisesti esim. jos ylittyy 750h käyttö kuukaudessa.

-Virtuaaliserveri käyttää oletuksena dynaamisia IP-osoitteita, joka tarkoittaa sitä, että serverin ip-osoite vaihtuu, joka kerta kun sen käynnistää uudelleen.

-Levytila on oletusarvoisesti  "kertakäyttöistä" eli jos instanssi sammutetaan vahingossa tai vastaavaa niin tiedot ovat kadonneet eikä niitä enää saa takaisin.

*****************
*****************


TESTIKONEEN SPEKSIT:

HP Elitebook 8530p
Intel Core 2 Duo CPU P8600 @ 2.40GHz
4GB RAM 

KÄYTTÖJÄRJESTELMÄ: Xubuntu Live-CD, Ubuntu 13.10



Name Based Virtual Hosting


Seurasin löytämiäni ohjeita:
https://www.digitalocean.com/community/articles/how-to-set-up-apache-virtual-hosts-on-ubuntu-12-04-lts

Ensiksi asensin apache2-webbiserverin:

$ sudo apt-get install apache2

Jonka jälkeen luotiin "Document Root" virtuaali-hostia varten. Tässä luon hakemistoon /srv kansion "www" ja sen alle "example.com", ja sen alle "public_html"-kansion, jonne testisivusto tulee. -p luo automaattisesti tarpeelliset "parent"-hakemistot.

$ sudo mkdir -p /var/www/example.com/public_html

Tämän jälkeen siirryin hakemistoon ja loin sinne index.html-tiedoston komennolla

$ sudo nano index.html

Lisäsin sisällöksi testausta varten.

<html>
  <head>
    <title>www.example.com</title>
  </head>
  <body>
    <h1>Success: You Have Set Up a Virtual Host</h1>
  </body>
</html>


Muutin hieman luomieni hakemistojen oikeuksia, jotta sivusto näkyisi ja niitä voisi muokkailla.

$ chown -R $USER:$USER /var/www/example.com/public_html/
$ sudo chmod -R 775 /var/www



Sitten siirryin apachen konffaus-hakemistoon $ cd /etc/apache2/sites-available ja kopioin default-konffitiedoston "example.conf"-nimiseksi:

$ sudo cp 000-default.conf example.conf

Muokkasin kopioitua tiedostoa seuraavasti: Kommentoin "ServerName"-kohdan käyttöön ja lisäsin sille aliakseksi www.example.com ja  "Document Root"-paikaksi määritin luomani hakemiston "public_html"-hakemiston.

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/example.com/public_html
.....
Nyt oli aika aktivoida virtuaali-hosti apache-komennolla ja reloadaamaalla apache-serverin konffaustiedostot.

$ sudo a2ensite example.conf
$ sudo service apache2 reload


 *****

Seuraavaksi menin muokkaamaan tiedostoa  "/etc/hosts":

$ sudo nano /etc/hosts

Ja lisäsin sen loppuun paikallisen ip-osoitteeni sekä example.com-verkkotunnuksen. (Paikallisen ip-osoitteeni selvitin komennolla $ ifconfig ja etsimällä kohta "inet addr".)

127.0.0.1 localhost
127.0.1.1 xubuntu

192.168.0.16  example.com
Näin tekemällä saadaan aikaiseksi se, että käytän omaa konettani DNS-palvelimena, joka kääntää example.com-verkkotunnuksen oikeaan ip-osoitteeseen. Päästessään ip-osoitteeseen selailu ohjautuu oikeaan "Document Root"-hakemistoon aikaisemmin tehtyjen "sites-enabled"-hakemiston konffausten johdosta.

Virtual Hostin määrittely oli onnistunut, koska aikaisemmin "Document Root"-hakemistoon luodun "index.html"-tiedoston sisältö ilmestyi firefox-selaimen ruutuun kirjoittaessani siihen "example.com".

"Success: You Have Set Up a Virtual Host"




LÄHTEITÄ:
https://www.digitalocean.com/community/articles/how-to-set-up-apache-virtual-hosts-on-ubuntu-12-04-lts
http://ubuntu-tutorials.com/2008/01/09/setting-up-name-based-virtual-hosting/
http://serverfault.com/questions/124127/linux-fhs-srv-vs-var-where-do-i-put-stuff
https://httpd.apache.org/docs/2.2/vhosts/name-based.html

Sunday, February 16, 2014

h4: Metapaketin luominen, pakettivarasto with reprepro, Skriptin paketoiminen

Tämä harjoitus on osa Linux Palvelimena-kurssia (Haaga-helia AMK, opettaja: Tero Karvinen).
Lähde: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014
h4:
- Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista.
- Tee pakettivarasto repreprolla
- Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn
Vapaaehtoiset bonus-tehtävät:
- Kertaa Apachen asennus, käyttäjien kotisivujen teko ja lokin lukeminen
- Allekirjoita reprerolla tekemäsi varasto


Harjoitusympäristö:


HP Compaq 8200 Elite CMT PC
Intel Core i5-2400 3.10GHz
8GB RAM
64-bit

Käytetyt ohjemat/työkalut:

-equivs
-gdebi
-lintian
-reprepro


Mikä on metapaketti?

"It is a package that only exists to supply random information or link to other packages to form a collection."
              Lähde: http://forums.debian.net/viewtopic.php?f=30&t=75656

Eli se on paketti, joka on olemassa ainoastaan antaakseen satunnaista informaatiota tai linkittää toisiin paketteihin muodostaakseen kokoelman. öhömph..


"a meta package is a Debian package that simply tells the package manager to download a whole bunch of other packages. Meta packages are useful for allowing for the quick installation of an entire group of packages."
Lähde: http://jeffhoogland.blogspot.fi/2011/08/howto-create-debian-   meta-package.html

Hieman selkeämpi selitys. Ja sitten googlaus "How to create a metapackage". Ja ensimmäinen hakutulos löytyy askubuntu.com-sivustolta:
Lähde: http://askubuntu.com/questions/33413/how-to-create-a-meta-package-that-automatically-installs-other-packages






    Creating a metapackage with equivs


"Tee metapaketti, joka asentaa suosikkiohjelmasi. Katso, että se menee läpi lintianista."


Sivuston mukaan metapaketin voi luoda equivs-nimisen työkalun avulla, joka luo paketin ainoastaan pelkällä riippuvaisuus-informaatiolla. Seuraan ohjeita. Ensiksi tehdään metapaketti-niminen hakemisto kotikansiooni, jonka jälkeen siirryn luomaani hakemistoon.

$ mkdir metapaketti
$ cd metapaketti


Nyt minun pitää asentaa equivs-ohjelma.

$ sudo apt-get install equivs

Loin equivs-ohjelman komennolla metapaketti-paketin konffaus-tiedoston, jonka jälkeen siirryin muokkaamaan sitä nano-tekstieditorilla.



 $ equivs-control metapaketti.cfg
 $ nano metapaketti.cfg
 
Avatessani metapaketti.cfg-tiedoston nano-tekstieditorilla aloin
täyttämään sinne metapaketin asentamiseen liittyviä tietoja. 
 
   Package: <metapaketti>
   Depends: munin, libreoffice 
   Description: Tämä paketti asentaa seuraavat ohjelmat: munin, libreoffice  
 
Tämän jälkeen komensin equivs-ohjelman rakentamaan metapaketti.cfg-tiedoston:


 $ equivs-build metapaketti.cfg

Ei mennyt läpi ennenkuin poistin "Package"-kohdasta "<>" -merkit. 
 
   Package: metapaketti
   Depends: munin, libreoffice 
   Description: Tämä paketti asentaa seuraavat ohjelmat: munin, libreoffice 
 
The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
 
 
Nyt katsoin mallia Teron blogista, jossa lopuksi kehotettiin testaa-
maan metapaketin luonnin onnistumista. edellinen komentohan oli luonut
kyseiseen kansioon metapaketti_1.0_all.deb -nimisen paketin. Testaus siis
tehtiin kohdistamalla seuraava komento juuri mainittuun .deb-tiedostoon. 
 

$ sudo gdebi -n metapaketti_1.0_all.deb
 
Mikä on gdebi? woot? 

Komento ei onnistunut ja tuli ilmoitus "sudo: gdebi: command not found". 
 
Googlasin hieman ja sain selville, että kyseessä on paketti-installeri-ohjelma. Koitin ladata
sen mututuntumalla: 
 
 $ sudo apt-get install gdebi 
 
...ja sieltähän se tuli heti alas. Asennettuani gdebin kokeilin uudestaan.
 
$ sudo gdebi -n metapaketti_1.0_all.deb
 
Ohjelma lähti lataamaan ubuntun sivuilta paketteja ja asensi munin- ja libreoffice-ohjelmiston
automaattisesti koneelle.  Kätevää. METAPAKETTI LUOTU.
 
 
Metapaketin laadun tarkistus: Lintian
 
Lopuksi tarkistetaan metapaketin laatu käyttämällä siihen luotua lintian-ohjelmaa.
(Jos paketissa on jotain vialla kun lisää -i kertoo se sen yksityiskohtaisemmin). 

$ lintian -i metapaketti_1.0_all.deb
 
xubuntu@xubuntu:~/metapaketti$ lintian -i metapaketti_1.0_all.deb 
E: metapaketti: debian-changelog-file-contains-invalid-email-address xubuntu@xubuntu
N: 
N:    The changelog file contains an invalid email address: the domain needs
N:    at least one dot. This looks like a mistake.
N:    
N:    Severity: important, Certainty: certain
N:    
N:    Check: changelog-file, Type: binary
N: 
E: metapaketti: maintainer-address-malformed Live session user <xubuntu@xubuntu>
N: 
N:    The maintainer field could not be parsed according to the rules in the
N:    Policy Manual.
N:    
N:    Refer to Debian Policy Manual section 5.6.2 (Maintainer) for details.
N:    
N:    Severity: serious, Certainty: certain
N:    
N:    Check: fields, Type: binary, udeb, source
N: 
Katsomalla lintian-ohjelman manuaalia komennolla $ man lintian löydän linkin selaimen kautta
luettavaan lintian-manuaaliin hakemistossa file:/usr/share/doc/lintian/lintian.html/index.html.
Avaaman tämän firefox-selaimessa ja selviää, että E (Errors) tarkoittaa:
 
The displayed message indicates a policy violation or a
packaging error. For policy violations, Lintian will
cite the appropriate policy section when it is invoked
with the -i option.
             
ja N (Notes) tarkoittaa.
The displayed message is a debugging message which informs you about the current state of Lintian.
Ohjelma siis antoi minulle error-ilmoituksen siitä, että minulla ei ole paketissa
validia sähköpostiosoitetta mikä pitääkin paikkansa, koska en sinne mitään lisännyt
alunperinkään ja toinen error viittaa "Live Session User"-käyttäjään. "The maintainer
field could not be parsed according to the rules on the Policy Manual."





 
 
     Tee pakettivarasto repreprolla

 
"Tee pakettivarasto repreprolla" 
 
 
 
Mikä on reprepro?

"Reprepro is a tool for managing APT repositories. It's definitely much more versatile 
than the simple script update-repository that we have been using before."
LÄHDE: https://wikitech.wikimedia.org/wiki/Reprepro

 Mikä on pakettivarasto?
"Pakettivarastoja käyttämällä voidaan automatisoida ohjelmapakettien asentaminen ja päivittäminen sekä tietojen etsiminen asentamattomista paketeista. Pakettivarasto voi sijaita esimerkiksi Internetissä HTTP- tai FTP-palvelimella, verkkolevyllä, CD- tai DVD-levyllä tai paikallisella kiintolevyllä." 
 LÄHDE: http://linux.fi/wiki/Pakettivarasto


Ensimmäiseksi lataan ja asennan työasemalle reprepro-ohjelman.


$ sudo apt-get install reprepro

....Processing triggers for man-db ...
Setting up libpth20 (2.0.7-16ubuntu3) ...
Setting up libgpgme11 (1.2.0-1.4ubuntu2) ...
Setting up reprepro (4.8.2-1build1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
xubuntu@xubuntu:~/metapaketti$
Jostain syystä ohjeissa neuvottiin tekemään "public_html"-kansio kotikansiooni ja tämän jälkeen piti siirtää/kopioida aikaisemmin luotu "metapaketti_1.0_all.deb"-tiedosto siihen.

$ cp metapaketti_1.0_all.deb ~/public_html

Täytyi luoda repository/conf-kansio, jonne lisätä asetustiedosto distributions.

$ mkdir -p repository/conf
$ nano repository/conf/distributions

Ohjeiden mukaan distributions-tiedostoon piti lisätä seuraavat tiedot:

$ nano repository/conf/distributions

Codename: lucid
Components: main
Suite: lucid
Architectures: i386 amd64 source

Ohjeiden mukaan minulla täytyi myös olla asennettuna apache-webbipalvelin tehtävän suoritusta varten (ja siinä piti olla käyttäjien kotisivut enabloituna), joten asensin sen tässä vaiheessa komennolla $ sudo apt-get install apache2

Seurasin omaa aikaisemmin tekemääni LAMP-asennusharjoitusta virkistääkseni muistiani. Tein käyttäjien kotisivujen enabloinnin $ sudo a2enmod userdir , jonka jälkeen käynnistin apache-serverin uudelleen, jotta muutokset tulisivat voimaan. (Selvitin myös oman ip osoitteeni komennolla $ ip addr huvin vuoksi ja näin että se oli 172.28.9.78)


****

Lisäsin tekemäni deb-paketin (metapaketti_1.0_all.deb) reprepro-ohjelman komennon avulla varastointipaikkaan.

xubuntu@xubuntu:~/public_html$ reprepro -VVVV -b repository/ includedeb lucid /home/xubuntu/metapaketti/metapaketti_1.0_all.deb
Created directory "repository//db"
/home/xubuntu/metapaketti/metapaketti_1.0_all.deb: component guessed as 'main'
Created directory "repository//pool"
Created directory "repository//pool/main"
Created directory "repository//pool/main/m"
Created directory "repository//pool/main/m/metapaketti"
Adding reference to 'pool/main/m/metapaketti/metapaketti_1.0_all.deb' by 'lucid|main|i386'
Adding reference to 'pool/main/m/metapaketti/metapaketti_1.0_all.deb' by 'lucid|main|amd64'
Exporting indices...
Created directory "repository//dists"
Created directory "repository//dists/lucid"
Created directory "repository//dists/lucid/main"
Created directory "repository//dists/lucid/main/binary-i386"
 looking for changes in 'lucid|main|i386'...
  creating 'repository//dists/lucid/main/binary-i386/Packages' (uncompressed,gzipped)
Created directory "repository//dists/lucid/main/binary-amd64"
 looking for changes in 'lucid|main|amd64'...
  creating 'repository//dists/lucid/main/binary-amd64/Packages' (uncompressed,gzipped)
Created directory "repository//dists/lucid/main/source"
 looking for changes in 'lucid|main|source'...
  creating 'repository//dists/lucid/main/source/Sources' (gzipped)
xubuntu@xubuntu:~/public_html$
Sitä varten, että clientit/käyttäjät voisivat asentaa pakettivaraston koneelleen clientin täytyi ajaa seuraava komento, joka lisää kyseisen repositoryn
"repository"-listaan.

$ sudo nano /etc/apt/sources.list.d/repository.list deb http://localhost/~xubuntu/repository lucid main

Testasin oliko luomani metapaketin lisääminen pakettivarastolistalle onnistunut kokeilemalla asentaa paketin pakettiasennuskomennolla.

$ sudo apt-get update    (pakettitietojen päivitys)
$ sudo apt-get install metapaketti    

Pakettivaraston tekeminen ja lisääminen repository-listaan oli onnistunut, koska komento oli käynyt tarkastamassa päivittämäni pakettilistat ja löytänyt sieltä "metapaketti"-nimisen metapaketin. Metapaketti oli jo kuitenkin asennettu koneelle aikaisemmin tässä harjoituksessa, joten sitä ei ollut järkeä asentaa uudelleen (komennolla $ sudo gdebi -n metapaketti.1.0_all.deb). Eihän siihen ollut tullut päivityksiäkään.

xubuntu@xubuntu:~/metapaketti$ sudo apt-get install metapaketti
Reading package lists... Done
Building dependency tree      
Reading state information... Done
metapaketti is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 207 not upgraded.


***** ***** ***** ***** *****


     Skriptin paketointi järjestelmän käyttäjille


"Paketoi jokin skriptisi, niin että paketti asentaa järjestelmän käyttäjille uuden käskyn"


Ensimmäiseksi loin tekstitiedoston nimeltä "h4-skripti" nano-tekstieditorilla.

$ nano h4-skripti

Lisäsin sisällöksi muutamia komentoja:

#!/bin/bash
#tyhjentää näkymän

clear

#kirjoittaa tekstin ruutuun
echo "Hei tämä on uusi käsky, jonka metapaketti asensi sinulle äsken ja kertoo sinulle vapaan levytilan."


# vapaan levytilan määrä-komento 
df -h 

Tämän jälkeen annoin skriptille oikeudet suoriutumiseen järjestelmässä ja kokeilin skriptin suorittamista "./"-komennolla. Komento palautti vihreällä olevan.

$ chmod a+x
$ ./h4-skripti
Hei tämä on uusi käsky, jonka metapaketti asensi sinulle äsken ja kertoo sinulle vapaan levytilan.
Filesystem      Size  Used Avail Use% Mounted on
/cow            2.0G  375M  1.6G  20% /
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           394M  1.3M  393M   1% /run
/dev/sr0        834M  834M     0 100% /cdrom
/dev/loop0      803M  803M     0 100% /rofs
none            4.0K     0  4.0K   0% /sys/fs/cgroup
tmpfs           2.0G   48K  2.0G   1% /tmp
none            5.0M  4.0K  5.0M   1% /run/lock
none            2.0G   80K  2.0G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  5.5G  2.1G  74% /media/xubuntu/USB DISK

Nyt minun piti keksiä miten saan sen liitettyä pakettivarastoon niin, että se asentuu komennoksi paketin lataajan järjestelmään. Paketin asennuksessa pitäisi varmaankin saada siirrettyä luomani h4-skripti kohdejärjestelmän hakemistoon /usr/bin/local , jossa se aktivoituu ajettavaksi komennoksi $ h4-skripti


hmhh...


Lähteitä:
http://askubuntu.com/questions/33413/how-to-create-a-meta-package-that-automatically-installs-other-packages
http://linux.fi/wiki/Deb-paketin_tekeminen
http://blog.perttu.im/2013/09/linux-palvelimena-kotitehtava-4-debian-metapaketti/ http://tekoske.wordpress.com/4-linux-palvelimena/ 
https://miroseppala.wordpress.com/tag/reprepro/   
http://terokarvinen.com/2011/update-all-your-computers-with-a-deb-repository
http://jaakkovalja.wordpress.com/2012/02/14/linux-palvelimena-metapaketteja/
http://www.linfo.org/create_shell_1.html
https://samisoikkeli.wordpress.com/2012/02/06/lamp-linux-apache-mysql-php/

Sunday, February 9, 2014

OWASP + Sleuthkit: recovering deleted files | Linux palvelimena


AIHEALUE: Rosvoja ja kunnon kansalaisia - dd


Tehtävänanto Tero Karvisen blogista:
URL: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014


h3: a) Ratkaise HoneyNet Scan of the Month 15.
b) Selitä omin sanoin tiiviisti valitsemasi hyökkäys OWASP Top 10 -listalta. Pelkkä sanallinen kuvaus riittää, tässä OWASP alakohdassa ei tarvitse tehdä mitään kokeiluja.
ps. Käsittele haittaohjelmia sisältäviä levykuvia huolellisesti, älä laita niitä tuotantokoneille äläkä aja niiltä löytyviä ohjelmia. Noudata hyviä tapoja ja lakeja, älä hyökkää kenenkään koneisiin. Katso myös http://terokarvinen.com/2013/forensic-file-recovery-with-linux
ps2. Jos on vaikea valita tutustuttava hyökkäys, tutustu SQL injektioon.



*******************************************************************************


Harjoitusympäristönä: 

HP Elitebook 8530p kannettava tietokone
Intel Core 2 Duo CPU P8600 @ 2.40GHz
4GB RAM

Käyttöjärjestelmä:

Linux xubuntu 3.11.0-12-generic i686  (Live-CD:eeltä ajettuna)
(Linuxin käyttöjärjestelmäversion saa selville Terminalin kautta komennolla  
$ uname -a)





      RAPORTTI

 HoneyNet Scan of the Month 15
 (Lähde: old.honeynet.org/scans/scan15 )

Käytetyt ohjelmat:
-sleuthkit (sudo apt-get install sleuthkit)





Tehtävänä oli siis ratkaista honeynut.org-sivuston "Scan Of the Month 15" -tehtävä:


The Challenge:


On 15 March. 2001, a Linux honeypot was successfully compromised, a rootkit was download to the / partition and then deleted from the system. Your mission is to find and recover the deleted rootkit.
  1. Show step by step how you identify and recover the deleted rootkit from the / partition.
  2. What files make up the deleted rootkit?
Bonus Question:
Was the rootkit ever actually installed on the system? How do you know?

Ensiksi selvitin itselleni vähän mitä eri termit tarkoittivat, perehdytin itseäni asiaan, ettei joka toinen asia tuntuisi vieraalta.

Mikä on rootkit?

Rootkit is an application (or set of applications), that hides its presence or presence of another application (virus, spyware, etc.) on the computer, using some of the lower layers of the operating system (API function redirection, using of undocumented OS functions, etc.), which makes them almost undetectable by common anti-malware software.”

Mikä on Linux honeypot?

A honeypot is a computer software or device that exists simply to be attacked.”

“They can easily capture zero-day exploits, freshly minted malware, and roaming APT hackers. Honeypots are great at detecting malicious activity from both outsiders and insiders; they turn up rogue exploits the other tools miss.”
- Roger Grimes, security adviser, www.infoworld.com

Lähde:


Guidelinenä käytin seuraavaa blogikirjoitusta:



     md5

Aloitin tehtävän lataamalla tar.gz-muotoon pakatun imagen honeynet.org-sivulta. Tämän jälkeen vertasin tiedoston md5-tarkistuslukua honeynet-sivustolla ilmoitettuun tarkistuslukuun varmistaakseni, että lataus oli onnistunut virheettömästi. Tämä onnistui “md5sum”-ohjelmalla syöttämällä $ md5sum komento ja tiedoston nimi. (md5sum-ohjelma tulee vakiona linux-käyttöjärjestelmissä mukana http://fi.wikipedia.org/wiki/MD5Sum ).

$ cd ~/Downloads
$ md5sum honeynet.tar.gz
0dff8fb9fe022ea80d8f1a4e4ae33e21 honeynet.tar.gz

Tarkistusluku täsmäsi. Tämän jälkeen purkasin .tar.gz-pakkaustiedostomuodossa olleen imagen ~/Downloads/honeynet-hakemistoon.


$ sudo tar -xzvf honeynet.tar.gz

-x extract files from an archive
-z tells the tar command that the extracted file is in tar.gz-type (gunzip)
-v verbosely list files that are extracted
-f use archive file or device ARCHIVE, f means to extract it here in the filesystem (and the need for it is an artifact of the older common use of tar, to create and extract tape archives).”

Tämän jälkeen Downloads-hakemistoon ilmestyi honeynet-kansio, joka sisälsi imagen: honeypot.hda8.dd sekä tekstitiedoston README, joka sisälsi ohjeistusta. Testasin imagen md5-tarkistusluvun, joka täsmäsi.

Seuraavaksi käytin hyväkseni vinkkejä blogikirjoituksesta “Forensic file recovery with linux”. Lähde: http://terokarvinen.com/2013/forensic-file-recovery-with-linux


   Sleuthkit

Tehtävänantoon kuului näyttää askel kerrallaan miten identifioin ja palautan takaisin poistetun rootkitin / partitiolta: Ensiksi kokeilin palauttaa imagen sisältämät ei-poistetut tiedostot ilman “mounttausta”.

$ tsk_recover -a honeypot.hda8.hdd ~/Downloads/honeynut/normaalit

Sain ilmoituksen: “The program 'tsk_recover' is currently not installed. You can install it by typing:
apt-get install sleuthkit ”. Sleuthkit on kokoelma tietokoneeseen kohdistuvaan rikostekniseen tutkimukseen soveltuvia linux-työkaluja.Tehtyäni tämän kokeilin uudestaan nyt asennetun sleuthkit-ohjelman komennolla ja nyt normaalit-kansioon oli ilmestynyt seuraavat linuxin filesystem hiearchyn mukaiset hakemistot:

bin
dev
etc
lib
root
sbin
tmp

Terminal myös ilmoitti: “Files Recovered: 1614”


Tämän jälkeen kokeilin palauttaa imagelta poistetut tiedostot sleuthkit”-työkalupaketin avulla. Palautin tiedostot "palautetut"-nimiseen hakemistoon.

$ tsk_recover honeypot.hda8.hdd ~/Downloads/honeynut/palautetut

Files recovered: 37”

Menin palautetut-kansioon komennolla $ cd palautetut. Ja tarkastin sen sisällön. $ ls -la

total 512
drwxr-xr-x 4 root root 100 Feb 9 21:07 .
drwxr-x--- 4 500 500 120 Feb 9 21:07 ..
drwxr-xr-x 5 root root 140 Feb 9 21:07 etc
-rw-r--r-- 1 root root 520333 Feb 9 21:07 lk.tgz
drwxr-xr-x 2 root root 560 Feb 9 21:07 $OrphanFiles

Siellä oli etc-kansio, sekä lk.tgz-tiedostomuotoon pakattu tiedosto sekä dollarin merkki edessään “OrphanFiles”.



TIEDOSTOJEN ANALYSOINTI

En tiedä mitä tehdä, joten kokeilen vain oppimateriaalissa esiteltyjä työkaluja/komentoja, koska haluan testata niitä.

Kokeilin komentoja. Ensimmäinen komento kerää imagelta löytyvistä tiedostoista (sisältäen myös poistetut tiedostot) aikatiedot ja toinen komento taas avaa tiedot less-sovelluksella aikajärjestyksessä:

$ tsk_gettimes honeypot.hda8.dd >rawtimes
$ mactime -b rawtimes|less


Seurasi aika monta riviä aikatietoja. Ensimmäinen merkintä oli vuodelta 1970?:

Thu Jan 01 1970 00:00:00 1024 ...b d/drwxr-xr-x 0 0 10041 etc/sysconfig/console

Kun viimeinen merkintä taas oli vuodelta 2002:

Fri Feb 08 2002 13:08:13 611931 m... -/rrwxr-xr-x 0 0 2039 $OrphanFiles/OrphanFile-2039 (deleted)
(END)





Kokeilin “mountata” imagen turvallisesti mount-pisteeseen “~/Downloads/honeynut/honeynutmount”. “nodev” osa komennosta pitää huolen siitä, että “Do not interpret character or block special devices on the file system”. Ja noexec taas piti huolen sitä, että “mounttaukselta” ei pysty ajamaan mitään ohjelmia:

$ sudo mount -o "loop,nodev,noexec,ro" honeypot.hda8.hdd honehoneynutmount/

Mountatulla imagella olevien “ei-poistettujen” tiedostojen timelinen voi saada selville seuraavalla “helposti muistettavalla” komennolla. (Mountatun imagen poistetuista tiedostoista ei voi saada timeline-tietoja):

$ sudo find -printf '%T+ M %p\n%A+ A %p\n%C+ C %p\n'|sort|less

komento palautti alkupäästä seuraavaa:

1994-07-14+01:57:49.0000000000 M ./root/.bash_logout
1994-07-14+02:05:25.0000000000 M ./etc/skel/.bash_logout
1995-08-23+15:56:14.0000000000 M ./etc/skel/.bashrc
1995-08-23+19:02:38.0000000000 A ./root/.Xdefaults
1995-08-23+19:02:38.0000000000 M ./root/.Xdefaults
1995-08-23+19:03:58.0000000000 M ./root/.bash_profile
1995-08-23+19:04:30.0000000000 M ./root/.bashrc
1996-02-06+21:04:01.0000000000 M ./mnt/floppy
1996-03-04+15:07:42.0000000000 M ./root/.tcshrc
1997-09-16+14:12:06.0000000000 A ./etc/ppp/ip-down
1997-09-16+14:12:06.0000000000 M ./etc/ppp/ip-down

Ensimmäinen MAC timeline-merkintä on vuodelta 1994 ja siitä näkee, että sen tyyppi on M eli modified. Vuonna 1995 taas yhden tiedoston kohdalla on A eli Accessed timeline-merkintä. Myös olisi vielä kolmas C, status Changed. Katsotaanpa vielä viimeisimmät lokimerkinnät.

2001-03-16+16:28:30.0000000000 C ./dev/ida/.drag-on/tcp.log
2001-03-16+16:28:30.0000000000 M ./dev/ida/.drag-on/tcp.log
2001-03-16+16:28:39.0000000000 A ./etc/localtime
2001-03-16+17:01:00.0000000000 A ./etc/cron.hourly
2001-03-16+17:01:00.0000000000 A ./etc/cron.hourly/inn-cron-nntpsend
2001-03-16+17:01:00.0000000000 A ./etc/rc.d/rc3.d
2001-03-16+17:01:00.0000000000 A ./sbin/chkconfig
2001-03-16+17:01:00.0000000000 A ./sbin/runlevel
2001-03-16+17:20:00.0000000000 A ./bin/bash
2001-03-16+17:20:00.0000000000 A ./bin/sh
2001-03-16+17:20:00.0000000000 A ./etc/group
2001-03-16+17:20:00.0000000000 A ./etc/ld.so.cache
2001-03-16+17:20:00.0000000000 A ./lib/ld-2.1.3.so
2001-03-16+17:20:00.0000000000 A ./lib/ld-linux.so.2
2001-03-16+17:20:00.0000000000 A ./lib/libc-2.1.3.so
2001-03-16+17:20:00.0000000000 A ./lib/libc.so.6
2001-03-16+17:20:00.0000000000 A ./lib/libdl-2.1.3.so
2001-03-16+17:20:00.0000000000 A ./lib/libdl.so.2
2001-03-16+17:20:00.0000000000 A ./lib/libtermcap.so.2
2001-03-16+17:20:00.0000000000 A ./lib/libtermcap.so.2.0.8
2001-03-16+17:20:00.0000000000 A ./sbin/insmod
2001-03-16+17:20:00.0000000000 A ./sbin/rmmod
(END)


Nyt olen kuluttanut tehtävien tekemiseen jo monta tuntia lukien  aiheeseen liittyvää materiaalia  yrittäen ymmärtää perusteet mutta nyt pakko mennä nukkumaan. Aikaa sai kyllä helposti kulumaan vain perusasioihin perehtymiseen ja artikkelien lukemiseen.

Tämä olisi vaatinut minun osalta huomattavasti enemmän aikaa, jotta olisin päässyt enemmän kärryille. Minun tasolleni melkoisen vaativa (ainakin tarvittavan aikamäärän suhteen).

Lopputuloksena sain siis:
-tarkistettua ladatun pakatun image-tiedoston MD5-tarkistusluvut, 
-jonka jälkeen onnistuin palauttamaan image-tiedostolta poistetut tiedostot omaan kansioonsa ja pystyin tutkailemaan niitä hieman. 
-Käytin sleuthkit-työkaluja sitä varten, että pystyin lukemaan tiedostojen timeline-merkintöjä. En osannut niistä tehdä sen kummemmin johtopäätöksiä liittyen tehtävänantoon. Jos aikaa olisi ollut niin olisin voinut purkaa palautetuista tiedostoista lk.tgz-tiedoston ja selvittää mikä sen tarkoitus oli.







       OWASP Top 10

Mikä on OWASP?
 

OWASP (Open Web Application Security Project)



"The primary aim of the OWASP Top 10 is to educate developers, designers, architects, managers, and organizations about the
consequences of the most important web application security weaknesses. The Top 10 provides basic techniques to protect
against these high risk problem areas – and also provides guidance on where to go from here."
- www.owasp.org
 URL: https://www.owasp.org/index.php/Top_10_2013

Owasp-sivustojen mukaan kyseessä on avoimen yhteisön perustama voittoa tavoittelematon projekti, jonka tarkoituksena on valistaa organisaatioita yleisimmistä tietoturvariskeistä ja siitä miten niiltä voidaan suojautua. OWASP-yhteisöön kuuluu yrityksiä, koulutusorganisaatioita sekä yksilöitä ympäri maailmaa ja se julkaisee vapaasti-saatavilla olevia artikkeleita, metodeja, dokumentaatiota, työkaluja ja teknologioita.
"The OWASP community includes corporations, educational
organizations, and individuals from around the world. This
community works to create freely-available articles, methodologies,
documentation, tools, and technologies."
- (Lähde: wikipedia)


Vuoden 2013 OWASP Top 10-listan yksi vaarallisimmista/yleisimmistä/tärkeimmistä hyökkäyksistä oli kohta A1, "Injektiot" (A1-Injections). (Esimerkiksi  SQL-injektiot.) Erilaiset injektiovirheet järjestelmien koodissa ovat hyvin yleisiä. 



Mikä on SQL-injektio?

Injektiovirheet ovat tapahtumia, joissa pystytään ujuttamaan korkeampia oikeuksia vaativia komentoja/hakuja web-applikaation kautta, jota ei siihen ole tarkoitettu (Esim. selaimen URL-kenttä.)

Esimerkki SQL-injektiosta: Hyökkääjä menee jonkun tietyn sivuston sisäänkirjautumissivulle ja ujuttaa käyttäjänimikenttään SQL-injektion joka päätyy järjestelmän ajettavaksi sellaista reittiä mitä ei siihen ole tarkoitettu.

Normaalitilanteessa kun käyttäjä syöttää tietonsa kirjautumisikkunaan ja painaa "Kirjaudu sisään"-nappia niin siitä lähtee tiedustelu SQL-tietokantataulukkoon, joka tarkistaa löytyykö taulukosta kyseinen käyttäjä ja täsmääkö syötetty salasana. Jos sisäänkirjautumistapahtumaan liittyvää koodia ja tapahtumaketjua ei ole suojattu asianmukaisella tavalla voidaan käyttäjänimen perään ujuttaa pätkä haitallista SQL-komentoa, joka päätyy järjestelmän ajettavaksi kun painetaan kirjautumisnappia. Komento voidaan ujuttaa myös selaimen URL:in kautta.

Tällaisessa tilanteessa hyökkääjä voisi siis lähettää SQL-injektioita kyseiseen järjestelmään aiheuttaen arkaluontoisen datan varastetuksi joutumista, tietojen muokkausta tai  koko SQL-tietokannan tuhoutumista. Joissain tapauksissa Injektio on johtanut jopa host-takeoveriin.


Miten tätä vastaan voidaan suojautua?

-Pitämällä huoli siitä, että järjestelmien koodi on ajantasalla
-Helpoiten injektiovirheet pystyy löytämään tutkimalla koodia ja varmistamalla, että datan tulkitsijat applikaatioissa erottelevat selkeästi "epäluotettavan" datan komennosta tai hausta (query).
-ottamalla käyttöön OWASP:in julkaisemia ohjeita ja safeAPIa





Tuesday, February 4, 2014

Installing MUNIN & Using STRESS | Linux Palvelimena



AIHEALUE: Järjestelmäntilan seuranta ja prosessinhallinta.

KÄYTETYT LINUX OHJELMAT:
-MUNIN
-STRESS
-TOP
-IOTOP

Tämä harjoitus on osa Haaga-helian ammattikorkeakoulun "Linux Palvelimena"-kurssia. TEHTÄVÄNANTO Tero Karvisen blogista:
URL: http://terokarvinen.com/2013/aikataulu-%E2%80%93-linux-palvelimena-ict4tn003-11-ja-12-kevaalla-2014

h2:- Kerää kuormitustietoja munin -ohjelmalla- Kuormita konetta stress:llä- Käytä tunnilla käytyjä työkaluja arvioidaksesi kuormitusta: cpu, mem, io…- Lopuksi analysoi munin keräämiä käyriä- Aiheuta valitsemaasi lokiin muutamia rivejä ja analysoi niistä 2-3 riviä perusteellisesti

*******************************************************************************


KONEEN SPEKSIT:

HP Elitebook 8530p
Intel Core 2 Duo CPU P8600 @ 2.40GHz
4GB RAM

KÄYTTÖJÄRJESTELMÄ: Käytin harjoituksessa Xubuntun liveCD:eetä.






      RAPORTTI


Vaihdoin näppäimistön layoutin suomenkieliseksi.

 $ setxkbmap fi


1. MUNIN-Ohjelman asennus:

Laitoin Tero Karvisen kotisivuilla osoitteessa terokarvinen.com "Search"-hakukenttään "munin" ja löytyi bloggaus nimeltä "Munin Monitors your Ubuntu Linux - One Step Install". Noudatin ohjeita.

$ sudo apt-get update                        (pakettitietojen päivitys)

$ sudo apt-get -y install munin          (munin paketin nouto ja installointi)

Installointi meni nopeasti.
Tämän jälkeen ilmeisesti Munin jo monitoroi Xubuntuani.
Tämän pystyin tarkastamaan avaamalla firefox selaimella hakemiston:

/var/cache/munin/www/index.html

Tämä onnistui seuraavalla komennolla:

$ firefox /var/cache/munin/www/index.html

Komennolla aukesi muninin graafinen webbiselain käyttöliittymä. Aluksi sen näyttämät graafiset kuvaajat olivat tyhjiä. Tämä johtui siitä, että munin ei ollut vielä päivittänyt juuri keräämään alkaneita tietoja.





2.                                 STRESS
      - KUORMITA KONETTA STRESSILLÄ

Kokeilin asentaa koneelle STRESS-ohjelman komennolla.

$ sudo apt-get -y install stress

Asennus onnistui. Päätin etsiä ohjeita stressin käytöstä. Googlasin "How to use stress linux" enkä vakuuttunut näkemästäni joten kokeilin vielä "stress ubuntu" ja löysin selkeän artikkelin aiheesta.
URL: http://www.hecticgeek.com/2012/11/stress-test-your-ubuntu-computer-with-stress/

Artikkelin mukaan:

STRESS-ohjelman käyttötarkoitus: 
-Stress-ohjelma koettelee koneen prosessoria (CPU), keskusmuistia (RAM) sekä kovalevyä (HDD) (vain kirjoitustestit).
-stress-ohjelman suoritukselle voi asettaa haluamansa aikamäärän.
-stress ei anna mitään nopeuteen liittyviä tuloksia
-sitä voi käyttää work load generaattorina
-Ohjelmalla voi stressata joko kaikkia  tietokoneen osasia yksitellen tai
kerrallaan (CPU, RAM, DISK DRIVE)


Tässä vaiheessa päätin ottaa selville koneeni speksit terminaalin kautta
komennolla:

$ sudo dmidecode |less
(Lähde: http://ubuntuforums.org/showthread.php?t=1435015 )

Sain ylös seuraavanlaisia speksejä:
HP Elitebook 8530p
Intel Core 2 Duo CPU P8600 £ 2.40GHz
4GB RAM    2048MB DDR2 tyypin muistikampoja /(left ja right)

Palasin takaisin stress-test-ohjeeseen, jossa kehoitettiin kokeilemaan esim.
prosessoristressausta lukumäärällä, joka vastaa prosessorin ytimien määrää.

Esimerkiksi jos haluan "stressata" 2-ytimisen Intel Core 2 Duo-prosessorin
kumpaakin ydintä minun tulee syöttää stress-ohjelman komentoon cpu-kohdan
parametriksi 2 seuraavalla tavalla (luvun voi laittaa suuremmaksikin kuin
ytimien lukumäärä jos haluaa stressata oikein kunnolla):

$ stress -c 2

(Stress-ohjelmiston voi sammuttaa milloin tahansa painamalla ctrl+c tai
sulkemalla Terminalin ikkunan.)

Muistin stressaus: jos haluan stressata muistia niin komennoksi:

$ stress -m 4--vm-bytes 400M

...jossa numerolla 4 ilmoitan, kuinka monta prosessia stressi laittaa suoriu-
tumaan samanaikaisesti. Lisäämällä perään "--vm-bytes 400M" voin määritellä
suoritettavien prosessiin suurinpiirteisen koon (oletusarvona n. 256Megatavua).
(tämä stressitesti kuluttaa myös prosessoria)

Levyn stressaus:

$ stress -d 1

Luku 1 ilmoittaa prosessien määrän, joita käytetään diskin stressaukseen.
Oletusarvona "Stress" käyttää 1 Gigatavun tiedostokokoa jokaista prosessia
kohtaan. Tätä voi muuttaa lisäämällä komennon perään "--hdd-bytes"
(Ei kuluta paljon prosessoria).

$ stress -d 1 --hdd-bytes 300M


PÄÄTIN stressata prosessoria, RAMia ja kovalevyä samanaikaisesti säästääkseni aikaa.
niin, että kulutin intel core 2 duo-prosessorin kumpaakin ydintä (-c 2) sekä keskus-
muistia neljällä prosessilla, joista jokainen kooltaan n. 256megatavua (oletusarvo)
(-m 4) sekä päätin stressata kovalevyä kahdella prosessilla, joissa käytössä 1Gigatavun
tiedostokoko (oletusarvo) (-d 2).

$ stress -c 2 -m 4 -d 2

Tämän jälkeen minulle palautui seuraava näkymä Terminalista:

xubuntu@xubuntu:~$ stress -c 2 -m 4 -d 2
stress: info: [12899] dispatching hogs: 2 cpu, 0 io, 4 vm, 2 hdd
stress: FAIL: [12905] (584) write failed: No space left on device
stress: FAIL: [12902] (584) write failed: No space left on device
stress: FAIL: [12899] (395) <-- worker 12905 returned error 1
stress: WARN: [12899] (397) now reaping child worker processes
stress: FAIL: [12899] (395) <-- worker 12902 returned error 1
stress: WARN: [12899] (397) now reaping child worker processes
stress: FAIL: [12899] (452) failed run completed in 5s
xubuntu@xubuntu:~$
Jotain meni pieleen? Liittyykö siihen, että oli LiveCD-Ubuntu käytössä. Kokeilin vaihtaa lukuja:

$ stress -c 4 -m 2 -d 1

Kone alkoi pitämään ääntä ikään kuin sillä olisi
stressiä. Painoin ctrl+z  ja sen jälkeen syötin komennon $ bg , jotta
stressi juoksisi taustalla niin, että samalla voisin myös syötellä muita komentoja.
Halusin tarkastella samaan aikaan mitä saisin aikaan  $ top-komennolla.

 5375 xubuntu   20   0  574m 147m  38m S  30.5  3.7   3:34.76 firefox  
13266 xubuntu   20   0  2340   72    0 R  27.8  0.0   0:30.10 stress   
13268 xubuntu   20   0  3244 1100  120 R  23.9  0.0   0:30.15 stress   
13272 xubuntu   20   0  2340   72    0 R  22.9  0.0   0:29.92 stress   
13269 xubuntu   20   0  2340   72    0 R  21.2  0.0   0:29.92 stress   
13267 xubuntu   20   0  258m 3428  188 R  20.9  0.1   0:30.34 stress   
13270 xubuntu   20   0  258m  50m  188 R  20.2  1.3   0:29.69 stress   
13271 xubuntu   20   0  2340   72    0 R  20.2  0.0   0:29.59 stress   
 4688 root      20   0 86168  28m  13m S   9.3  0.7   1:42.21 Xorg     
 5322 xubuntu   20   0  118m  13m   9m S   0.7  0.3   0:03.54 xfce4-terminal
    9 root      20   0     0    0    0 S   0.3  0.0   0:02.68 rcu_sched
 1163 root     -51   0     0    0    0 S   0.3  0.0   0:13.47 irq/50-iwlwifi
 1283 root      20   0     0    0    0 S   0.3  0.0   0:05.09 kworker/0:3
 4809 xubuntu   20   0 25976  10m 8628 S   0.3  0.3   0:08.08 xfwm4    
13608 xubuntu   20   0  5472 1352  968 R   0.3  0.0   0:00.17 top      
    1 root      20   0  4144 2444 1396 S   0.0  0.1   0:03.36 init     
    2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd 
    3 root      20   0     0    0    0 S   0.0  0.0   0:01.66 ksoftirqd/0
    5 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0H  

Nyt top-näkymässä oli yhteensä 7 stress-prosessia.

Lopetin stressitestin CTRL+C ja päätin kokeilla Stress-manuaalista löytyvällä
esimerkillä ja katsoa mitä siitä seuraa (stressin kestoksi laitoin 500 sekuntia).

$ stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 500s

Tarkastelin manuaalia vähän lisää ja päättelin, että:

"--cpu" tarkoitti samaa kuin "-c" eli prosessorin
stressausta.

"--io" ilmeisesti viittasi johonkin mystiseen "spawn N workers spinning on sync()",
en oikein ymmärtänyt. Stressistä löytyi vielä lisää tietoa komennolla "stress info"
(vinkki löytyi "man stress"-komennolla).

"--vm" tarkoitti samaa kuin "-m" eli muistin stressausta ja tähän oli vielä
määritelty jokaisen prosessin kooksi 128M.

"--timeout"-kohta määritteli kuinka monta sekuntia kyseinen stressitesti tulisi
kestämään.


Olin tässä vaiheessa tosiaan laittanut tuon manuaalin esimerkki stressikomennon ja
halusin tarkastella mitä se teki koneella launchaamalla top-ohjelman, joka
kuvaa Linux-prosesseja kertoen niistä tietoja.

Tätä ennen minun täytyi muistaa siirtää stress pyörimään taustalle komennoilla:
 "ctrl+Z" ja "bg" (background).

$ top




KUVA: top-näkymästä näin, että nyt stress-prosesseja oli 14, joista kaikki käytti yli
10 prosenttia prosessorista jatkuvasti. Muistin kulutus oli hyvin vähäinen.
Painamall shift+p sain top-näkymän listaamaan kaikki eniten CPU:ta kuluttavat
prosessit ylhäältä alas. Painamalla shift+m sai saman näkymäjärjestyksen muistia
kuluttaville prosesseille.

load average: oli 14,56 (per minuutti) 11.22 (per 5 minuuttia) 7 (per 15 minuuttia)
Eli load average tarkoitti kuinka monta prosessia keskimäärin oli odottamassa
prosessorin käsittelyyn pääsyä.



Kirjoittaessani tämän ylös huomasin, että stressitesti katosi top-näkymästä. 500 sekuntia oli jo kulunut.

Syötin terminaaliin harjoituksen tehtävänannon yhteydessä listattuja
komentoja:

$ free -m

xubuntu@xubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3935       1481       2454          0        157        631
-/+ buffers/cache:        692       3242
Swap:         3994          3       3991
Muistista oli käytössä vain 1481/3935MB.

$ sudo iotop -oa

Ekaksi en tiennyt mitä kyseinen komento teki ja syöttäessäni sen herjattiin, että
komentoa ei löytynyt. Googlasin "sudo iotop ubuntu" ja löysin seuraavaa:
Lähde: http://articles.slicehost.com/2010/11/12/using-iotop-to-check-i-o-and-swap
"Using iotop to check I/O and swap"

"The iotop utility provides an easy-to-use interface for monitoring swap and disk
I/O on a per-process basis."

iotop, KÄYTTÖTARKOITUS:

iotop-ohjelman avulla pystyy jäljittämään laitteiden input/output-tilanteen prosessikohtaisesti.
(iotop-vaatimukset: vähintään kernel-versio 2.6.20 ja vähintään python 2.5)
(Artikkelissa mainitaan, että vaatimukset täyttämättömiä kernel-versioita varten
voi käyttää samankaltaista dstat-komentoa).

Kernel-versionsa saa selville esim. syöttämällä "$ iostat" tai "$ uname -r"
(minulla oli 3.11.0-12-generic)
Python version saa selville $ python -V  (minulla oli 2.7.5+)

***** ***** ***** ***** *****

The program 'iotop' is currently not installed. You can install it by typing:
sudo apt-get install iotop

$ sudo apt-get -y install iotop

Artikkelin mukaan oletusarvoisesti iotop järjestää prosessit
Input/output-parametrin mukaan. (I/O)

Käynnistin iotop-ohjelman:

$ sudo iotop




(Halutakseen vaihtaa järjestysperustetta pitää painaa vain vasemmalle tai oikealle nuoli-
näppäimillä.)

Painamalla:
"r" järjestää prosessit päinvastaiseen suuntaan. 
"o" näyttää vain prosessit, joilla on aktiivinen I/O.



***** **** ****

$ sudo iotop -oa   

-o,            näyttää ainostaan prosessit ja threadit jotka tekevät I/O:ota.
-a,             "show accumulated I/O instead of bandwidth. In this mode, iotop shows the amount of I/O                             processes have done since iotop started."

Tehtävänannon yhteydessä esimerkkikomentona oli $ iotop -oa, joka ilmeisesti saa iotop-ohjelman:

1. Näyttämään ainoastaan prosessit ja threadit, jotka tekevät I/O:ota.
2. Näyttämään kerrytetyn I/O:oon kaistanleveyden sijasta (mitä tämä nyt tarkoittaakaan?). Tässä modessa iotop näyttää I/O-määrän mitä prosessit ovat tehneet siitä lähtien kun iotop käynnistettiin.

Tällä komennolla sain siis seuraavan näkymän:



***Eli ilmeisesti ainoastaan käyttäjän root prosesseilla oli I/O-toimintaa.


Seuraavalla komennolla pystyin tarkastelemaan ainoastaan
käyttäjän Xubuntu-prosesseja.

$ sudo iotop -u xubuntu



3.        BACK TO MUNIN >>>> ANALYSING


Nyt kun olin suorittanut stressiä jo jonkin aikaa ja tutkinut eri työkaluja samalla noin neljän tunnin ajan oli aika analysoida Munin-ohjelman tuottamia käyriä menemällä selaimella seuraavaan hakemistoon /var/cache/munin/www/index.html.

Laitteella "sr0" (myöhemmin selvisi, että tämän oli Xubuntun live-CD) oli huomattavasti eniten miinus-liikennettä eli lukemista kun taas laite "sda" (sisäinen kovalevy) kirjoitti elinkaaren alussa jonkun verran.



Selvittääkseni mistä laitteista oli tarkalleen kyse Googlasin hieman, kunnes löysin vinkin sivustolta ubuntuforums.org käyttää komentoa $ sudo fdisk -l joka palautti minulle seuraavanlaisia tietoja.
(Lähde: http://ubuntuforums.org/archive/index.php/t-1240343.html )

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9bda2241

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   349549195   174774566+   7  HPFS/NTFS/exFAT
/dev/sda2       349550590   488396799    69423105    5  Extended
/dev/sda5       349550592   480212991    65331200   83  Linux
/dev/sda6       480215040   488396799     4090880   82  Linux swap / Solaris



JOHTOPÄÄTÖS:
- sda-laite oli selvästikin koneen sisäinen kovalevy 250GB.

Disk /dev/sdb: 8019 MB, 8019509248 bytes
251 heads, 44 sectors/track, 1418 cylinders, total 15663104 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18



JOHTOPÄÄTÖS:

- sdb-laite oli selvästikin USB-muistitikkuni, joka oli 8GB-kokoinen. Tälläkin täytyi olla jonkin verran aktiviteettia, koska tallensin harjoitusmuistiinpanoni aluksi suoraan USB-tikulla olevaan tekstitiedostoon.

KUVA: CPU frequency sailing: CPU ei selvästikään käynyt missään vaiheessa äärirajoillansa. Maximi oli 1.63Ghz  (/2.4GHz).




KUVA: CPU Usage: Maksimissaan CPU:n käyttö kävi harjoituksen toisella kolmanneksella, jolloin "system" ja "user" käyttivät tehoja eniten. Olisikohan system sitten "root"-käyttäjä ja "user" xubuntu-käyttäjä, joka myös juoksutti nuo stressiprosessit muun muassa.






KUVA: Memory Usage:  Kuvasta näkee, että välimuistissa (cache) on keskimäärin ollut 754.13MB ja käyttämättömänä keskimäärin 2.46GB. Sovelluksetkaan (apps) eivät ole keskimäärin tarvinneet kuin 423MB. Keskimäärin sitoutuneena (committed) on ollut jatkuvasti 2GB:eetä. Mitäköhän tämäkin tarkoittaa?




Stressistä huolimatta kone tuntui toimivan ihan hyvin. Ensi kerralla lisää stressiä, nyt pitää lopettaa ja mennä nukkumaan ja palauttaa harjoitus. Aikaa meni n. 5 ja puoli tuntia ja silti jäi vähän kesken. Over and Out.




********************************************
********************************************
cheet sheet:
********************************************

Työkaluja kuormituksen ja tilan arviointiin

top M P load avg %wa

free -m

sudo iotop -oa

netstat -pea –inet -n

tail -F /var/log/* /var/log/apache/*log

htop

nmon

==========

gedit &
gedit ^Z
fg
^Z
bg
ps waux|grep tero
kill 1234
kill -9 1234
killall foobar
killall -9 foobar

*****************

user@debian:/var/log$ sudo tail syslog
$ sudo tail -F * apache2/access.log apache2/error.log
$ sudo less syslog
$ sudo grep -i error *
$ sudo grep -i error *|less