Thursday, January 30, 2014

Installing LAMP, OpenSSH | Linux Palvelimena





KUVAUS:

Tässä bloggauksessa toteutan allaolevan tehtävänannon mukaisen linux-serveriympäristön tietokoneelle Linux LiveCD-käyttöjärjestelmän kautta. Alla oleva tehtävänanto (joka on alunperin linux-alkeiskurssin koe) on noukittu Tero Karvisen blogista:
LÄHDE: http://terokarvinen.com/2012/linux-koe-tyoasemat-ja-tietoverkot-25



Karttakatu Oy 
Me Karttakatu Oy:ssä teemme karttoihin liittyviä weppisovelluksia. Olemme muutaman hengen yritys.  
Asenna työasema, jolla tavallisimmat toimistotyöt onnistuvat (weppisurffailu, tekstinkäsittely). (Asentuessa voit käydä kommentoimassa kavereiden blogeja). 
Työntekijämme ovat Einari Vähäkäähkä, Pekka Winha, Åke Andersson ja Leila Laila. He haluavat kehittää PHP-kotisivuja etäkäyttöyhteydellä. Asenna tarvittavat palvelut ja tee esimerkkisivut. 
Asenna kaikkien käyttäjien käyttöön skripti (shell script) nimeltä “mystatus”, joka näyttää vapaan levytilan (df -h) ja koneen ip-osoitteen. 
Tähtäätkö huipputulokseen? Pekka Winha haluaa käyttää MySQL tietokantaa. Asenna hänelle MySQL-tietokanta ja siihen PhpMyAdmin-weppiliittymä.”




Siirrytään suorittamaan harjoitus. Aluksi harjoitusympäristö:


Työasema: joku HP Elite desktop-kokoonpano, jossa oli ainakin 3GHz prosessori. Olisiko ollut jopa i7?
Linux OS: Xubuntu 12.04 Desktop AMD64



_____XUBUNTUN JA TOIMISTOTYÖKALUJEN ASENNUS


Laitoin labraluokasta löytyvän LiveCD:een pöytäkoneen CD-pesään ja käynnistin koneen uudelleen. Tämän jälkeen tietokone meni suoraan valikkoon, jossa minulle tarjottiin vaihtoehtona “Try Xubuntu without installing” ja "Install Xubuntu". Valitsin ensimmäisen vaihtoehdon.

Tämän jälkeen kuvaruutuun ilmestyi xubuntun asennusnäkymä. Asennus kesti n. 2 minuuttia.

Nyt edessäni oli Xubuntun työpöytä.




Tämän jälkeen avasin Terminal-komentotulkin Graafisen käyttöliittymän kautta ja vaihdoin näppäimistön layoutin suomenkieliseksi komennolla: 

$ setxkbmap fi

Xubuntussa on valmiiksi jo mukana Firefox-nettiselain, joten sellaista ei tarvinnut erikseen asentaa tehtävänannon mukaista weppiselaustarvetta varten. 

Suoritin asennuspakettitietojen päivityksen, joka kertoo asentamalleni linux-palvelimelle uusimmista päivityspakettiversioista. 

$ sudo apt-get update

Jonka jälkeen asensin ilmaisen libreoffice-tekstinkäsittelyohjelmiston: 

$ sudo apt-get install libreoffice



_____KÄYTTÄJÄTILIEN LUONTI


Yrityksen työntekijöille luotiin (Terminalin kautta, as usual and always) käyttäjänimiksi heidän etunimensä ilman ääkkösiä ja ååkkosia:

Esim: Pekka Winha —-> pekka

$ sudo adduser pekka


Komennon jälkeen asetin käyttäjälle salasanan:


Adding user `pekka’ …
Adding new group `pekka’ (1002) …
Adding new user `pekka’ (1002) with group `pekka’ …
Creating home directory `/home/pekka’ …
Copying files from `/etc/skel’ …
Enter new UNIX password: 
Retype new UNIX password: passwd:
password updated successfully
Changing the user information for pekka
Enter the new value, or press ENTER for the default   
Full Name []: Pekka Winha   
Room Number []:    
Work Phone []:    
Home Phone []:    
Other []: Is the information correct? [Y/n] y

Tämän jälkeen menin tarkastamaan /home -hakemistoon, että jokaiselle käyttäjälle oli tosiaan luotu oma kotikansio. (Ja näin olikin). (Linux-käyttöjärjestelmässä käyttäjille luodaan kotikansio tähän hakemistoon käyttäjätunnuksien luonnin yhteydessä.) 

$ cd /home




_____OpenSSH-SERVERIN ASENNUS


Jotta esim. pekka voisi ottaa salatun etäyhteyden palvelimeen halutessaan koodata mistä käsin tahansa asensin OpenSSH-serverin. (Myöhemmin asennan vielä LAMP-kokonaisuuden koodausympäristöä varten.)

$ sudo apt-get install openssh-server

Asennustiedostot latautuivat nopeasti ja ei kestänyt edes minuuttia kun se oli ohi. Testatakseni, että asennus oli onnistunut kokeilin ottaa etäyhteyden ssh-serveriin pekan käyttäjätunnuksilla:

$ ssh pekka@localhost

The authenticity of host ‘localhost (127.0.0.1)’ can’t be established.
ECDSA key fingerprint is cb:eb:da:88:d0:bf:27:8f:33:20:1b:78:15:e5:14:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘localhost’ (ECDSA) to the list of known hosts.
pekka@localhost’s password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.pekka@xubuntu:~$ 
The authenticity of host ‘localhost (127.0.0.1)’ can’t be established.
ECDSA key fingerprint is cb:eb:da:88:d0:bf:27:8f:33:20:1b:78:15:e5:14:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘localhost’ (ECDSA) to the list of known hosts.
pekka@localhost’s password: 
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.pekka@xubuntu:~$
Yhteyden muodostaminen onnistui. Tämän jälkeen suljin etäyhteyden komennolla:

 $ exit




_____APACHE


Asensin apache-serverin LAMP-kehitysympäristöä (Linux + Apache + MySQL + PHP) varten komennolla:

$ sudo apt-get install apache2
Ajettuani komennon Terminalin ruutuun ilmestyi teksti:

After this operation, 5,590 kB of additional disk space will be used. Do you want to continue?” 

Valitsin kyllä ja alle minuutin päästä asennus oli ohi. Kokeilin oliko asennus onnistunut surffaamalla firefox-selaimella sivulle “http://localhost" .
It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

Asennus oli onnistunut koska sivu palautti minulle ylläolevan tekstin. Tämän jälkeen menin  enabloimaan userdir-moduulin, jonka tehtävä oli...?
$ sudo a2enmod userdir

...ja käynnistin apache2-serverin uudelleen, koska "To activate the new configuration, you need to run: service apache2 restart". (Toteutin toiminnon hieman erimuodossa olevalla komennolla kuin mitä kehoitettiin, joka kuitenkin suorittaa täysin saman tehtävän, eli käynnistää apache-serverin uudelleen.)

$ sudo /etc/init.d/apache2 restart
Uudelleenkäynnistyksen yhteydessä tuli ilmoitus:
          * Restarting web server apache2                                               
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName … waiting .apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName


Loin vielä pekan kotikansioon (/home/pekka) hakemiston nimeltä public_html komennolla: 

$ mkdir public_html 

Apache-serverin a2enmod userdir moduulin asennus oli onnistunut, koska surffatessani pekan kotikansiosta luodulle henk.koht. nettisivulle osoitteeseen: http://localhost/~pekka/ oli siellä näkymässä "Index of /~pekka".



_____PHP
Seuraavaksi oli vuorossa asentaa PHP LAMP-kokonaisuutta varten (Linux, Apache, MySQL, PHP). Aikaa tähän meni korkeintaan puoli minuuttia. Asennuskomento:

$ sudo apt-get install php5

Terminal ilmoitti, että php5-asennuspaketti loi erinäköisiä config-tiedostoja ja enabloi monen monta moduulia.

1.
Tässä vaiheessa oli syytä testata, että php-serverin asennus oli onnistunut. Tämä onnistui sillä tavalla, että otin ssh etäyhteyden käyttäjällä pekka. ($ ssh pekka@localhost).  Suunnistin pekan kotikansiossa sijaitsevaan public_html-kansioon (/home/pekka/public_html), koska jokaisen käyttäjän kotikansiossa sijaitsevana tämä kansio näkyisi ulkomaailmalle internetissä selaimen kautta. 

Ollessani kansiossa loin sinne index.php tiedoston komennolla:

$ sudo nano index.php 

(Komento avaa/luo index.php-tiedoston nano-tekstieditorissa.)

2.
Lisäsin tiedostoon pätkän php-koodia testatakseni, että se toimii. 

<?php
print(100+100)
?>

3.
Ennen PHP:een testausta piti vielä tehdä yksi konfigurointi tiedostoon: /etc/apache2/mods-available/php5.conf
Tekstitiedoston lopussa oli pari koodipätkää, jotka piti disabloida niin, että php näkyisi selaimella.
Eli tiedoston lopusta löytyvä kohta: php_my_admin_value engine off piti kommentoida pois käytöstä kirjoittamalla risuaita sen eteen tekstieditorilla.

4.
Tämän jälkeen piti weppiselain eli apache vielä käynnistää uudelleen, että asetukset tulisivat voimaan.

$ sudo service apache2 restart


5. 
Ja niinhän ne tulivatkin sillä testaus tapahtui (taas kerran) selaimen kautta menemällä käyttäjän serverikohtaiseen kotiosoitteeseen "http://localhost/~pekka/".

PHP-tiedostoon oli koodattu vaikea matemaattinen lasku. Surffatessani selaimella ylläolevaan urliin ilmestyi silmieni eteen numero 200 eli php-koodi oli laskenut siihen kirjoittamani laskun yhteen. 




_____MySQL


Nyt oli aika asentaa LAMP-kokonaisuuden (Linux + Apache + MySQL + PHP) MySQL-tietokantapalvelu komennolla:

$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client 

Kun komennon suorittamisesta oli mennyt noin 40 sekuntia tuli pyyntö asettaa "New password for the MySQL "root" user": Syötin tähän salasanan, jota en tässä paljasta. (Melko helppo muistaa ja ei siksi kovin hyvä). Tämän jälkeen meni 20 sekuntia ja asennus oli valmis.

MySQL-tietokannan hallinnoimiseen taas olisi fiksua asentaa phpMyAdmin-palvelu. PhpMyAdmin on on graafinen käyttöliittymä MySQL-tietokantojen ja mm. linux-serverin käyttäjien yhteistyön hallinnoimiseen ja kun se on asennettu sitä operoidaan selaimen kautta osoitteessa "http://localhost/phpmyadmin". Asennuskomento:

$ sudo apt-get install phpmyadmin

Kesti noin 20 sekuntia kun Terminaliin ilmestyi sinisellä taustalla oleva harmaa ruutu, josta piti valita: 

"Web server to reconfigure automatically:

[ ] apache2
[ ] lighttpd"




Valitsin vaihtoehdon apache2, koska olin asentanut sen juuri vähän aikaa sitten LAMP-kokonaisuutta ajatellen.(LAMP = Linux, Apache, MySQL, PHP). Ensimmäisellä kerralla (..ja toisella..ja kolmannella kerralla) kun tein tämän painoin suoraan enteriä tässä valikossa, koska luulin, että apache2 serveri oli jo valittu, koska sen kohdalla oli punainen laatikko kun taas "lighttpd"-valinnan kohdalla ei. Myöhemmin minulle vasta selvisi, että tämä punainen laatikko oli vasta valinnan kohdistin, ei siis sen varmistaja ja tässä vaiheessa piti vielä varmentaa punainen valinta täppäämällä sen päälle tähti painamalla space-näppäintä! Tähän minulla meni älytön määrä aikaa kun asensin ja uudelleenasensin kun en saanut phpmyadminia toimimaan. Mielestäni tämä ei ollut kovin intuitiivista.




.... ... ....

Valittuani apache2-serverin onnistuneesti meni n. 20 sekuntia taas ja minulta kysyttiin taas halusinko, että database configuroidaan "for phpmyadmin with dbconfig-common"? (En oikein tiennyt oliko tämä hyvä vai huono juttu. Ajattelin kuitenkin, että tarvitsen kaiken avun mitä voin saada, joten valitsin "Yes").



Tämän jälkeen pääsin taas syöttämään salasanan phpmyadmin-palvelun administrative userille. 

Tämän jälkeen meni 5 sekuntia ja viimeisimmät terminalin ilmoitukse asennuksesta olivat kutakuinkin 

      verifying access for phpmyadmin@localhost 
      creating database phpmyadmin jne...

Kaikki nämä olivat menestyksiä ("verifying database phpmyadmin exists: success"). 
Lokitiedostoista päätellen asennus oli suuri menestys! Lopuksi web server apache2 uudelleenlastattiin (Reloading web server apache2).



TESTING phpmyadmin INSTALLATION: Testatakseni, että phpmyadmin-asennus onnistui surffasin firefox-selaimella osoitteeseen "http://localhost/phpmyadmin", jonne olisi asennuksen jälkeen pitänyt ilmestyä käyttöliittymän sisäänkirjautumisikkuna ja näinhän siinä oli päässyt käymään.




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



SHELL SCRIPT Kaikkien käyttäjien käyttöön

"Asenna kaikkien käyttäjien käyttöön skripti (shell script) nimeltä “mystatus”, joka näyttää vapaan levytilan (df -h) ja koneen ip-osoitteen." 

1. Koneen ip-osoitteen saa selville esim. komennolla. (Tämä tosin vaatii, että on asentanut curl-paketin serverille jossei sitä siellä vielä ole):

$ curl ipecho.net/plain ; echo
( http://askubuntu.com/questions/145012/how-can-i-find-my-public-ip-using-the-terminal )


2. vapaan levytilan saa selville komennolla (df -h).


3. Shell Scriptin luonti tapahtuu niin, että ensiksi luodaan vaikka nano-editorilla kyseinen tiedosto "mystatus":

$ sudo nano mystatus

Jonka jälkeen tiedostoon kirjoitetaan..

http://www.linfo.org/create_shell_1.html 



Itseasiassa nyt on pakko mennä nukkumaan ja katsoa tuo shell script ja loppujuttu loppuun toinen kerta. Mutta tuossa viimeisimmässä linkissä oli aika hyvin selitetty shell scriptistä. Nyt on hirveä väsy. Nukkumaan. (Raportoiminen on aikaa vievää touhua)