Tässä artikkelissa asennetaan LAMP-pino Xubuntuun.

1. 1 Tehtävänanto

Lainaus kurssin Moodle-sivuilta:

Asenna LAMP: Linux Apache MySQL PHP.
Tee harjoitus live-rompulla, niin pääset aloittamaan aivan alusta.

Vinkkejä:
http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4
http://terokarvinen.com/bilkent.html
PHP kotihakemistoissa: katso: grep -r “php” /etc/apache2/*

Vapaaehtoisia lisätehtäviä: Tee harjoitus Ubuntu 12.04 alphalla. Mittaa tehoa ab:lla. Laita kansio salasanan taakse (.htaccess)

2. 2 Testiympäristö

Tein harjoituksen Xubuntu 11.10:llä VirtualBoxin päällä LiveCD:n sijaan, koska niin ei tarvitse säätää usean näytön konfiguraatiota, joka ei AMD:n näytönohjaimella toimi aina kovin virheettömästi. Eli yhdessä näytössä Xubuntu ja toisessa Windows 7 ja nettiselain jolla kirjoitan raporttia. Asensin kuitenkin tämän Xubuntun ihan puhtaalta pöydältä VirtualBoxiin, joten vaikutus on sama: pääsen aloittamaan aivan alusta.

VirtualBoxissa 8 gigatavun .vdi virtuaalinen kiintolevy Xubuntulle ja 512 megatavua muistia varattuna. Tarkemmat tiedot virtuaalikoneesta liitteenä. Isäntäkoneena Windows 7 SP1 64-bit kone: Intel Core i5 2500K prosessori, AsRock Z68 Pro3 Gen3, LGA1155, Intel Z68 emolevy, 8gb Kingston HyperX DDR3 1600MHz muistia, MSI:n AMD Radeon R6950 Twin Frozr II/OC, 2GB GDDR5 näytönohjain ja Samsung 128GB 830 Series SSD-kiintolevy.

Ennen raportoinnin aloittamista asensin siis Xubuntun levykuvasta http://se.archive.ubuntu.com/mirror/cdimage.ubuntu.com/xubuntu/releases/11.10/release/xubuntu-11.10-desktop-i386.iso ja asennuksen jälkeen asensin vielä VirtualBoxin asiakaslisäosat ja päivitin Xubuntu komennoilla sudo apt-get update ja* sudo apt-get dist-upgrade*.

3. 3 Asenna LAMP

Avasin komentokehotteen ja komensin sudo apt-get install apache2 mysql-server php5 jolloin paketit apache2 apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16 libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1 mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1 php5 php5-cli php5-common asentuivat automaattisesti. Paketti mysql-server kysyi salasanaa MySQL:n root-käyttäjälle ja asetin sen. Asennus käynnisti Apachen automaattisesti ja totesin toimivuuden nettiselaimella:

Tässähän tehtävä olisi jo valmiina, tietysti jotenkin pitäisi vielä testata toimiiko myös MySQL ja PHP. Loin Apachen oletushakemistoon tiedoston testi.php ja asetin sen sisällöksi:

<?php phpinfo(); ?>

Avasin selaimen osoitteeseen localhost/testi.php:

Eipä toiminut, sen sijaan että olisin saanut eteeni sivun joka näyttää tietoja käytössä olevasta PHP:sta, selain kehottikin lataamaan tiedoston testi.php. Aloin epäillä, että joku Apachen ja PHP:n välisen yhteyden luova paketti minulta puuttuu. Oletin, että homman hoitaisin automaattisesti asentunut libapache2-mod-php5 hoitaisi homman, varsinkin kun asennus sanoi:

Setting up libapache2-mod-php5 (5.3.6-13ubuntu3.6) ...
Creating config file /etc/php5/apache2/php.ini with new version
* Reloading web server config apache2

Creating config file /etc/php5/cli/php.ini with new version
update-alternatives: using /usr/bin/php5 to provide /usr/bin/php (php) in auto mode.

Hetken aikaa tilannetta tutkittuani (etsin esimerkiksi mahdollisia puuttuvia paketteja komennolla* apt-cache search apache php* mutta en löytänyt mitään selvää puutetta) ajattelin etsiä netistä ohjeita LAMP-asennukseen, ja suuntasinkin jo tehtävänannossa mainitulle sivulle http://terokarvinen.com/bilkent.html, siellä PHP:n asennuksesta oli kerrottu vain että PHP-tuki asennettiin jo samalla kun asennettiin phpmyadmin. Yleensä tosiaan tuonkin paketin olen asentanut, koska olen sitä tottunut käyttämään MySQL:n hallinnointiin, mutta nyt päätin yksinkertaistaa asioita ja se olikin virhe. Varmasti Apachen voi conffata käyttämään PHP:tä muutenkin, mutta tuon paketin asennus teki sen automaattisesti. Asensin siis paketin komennolla sudo apt-get install phpmyadmin ja asennus kysyikin halutaanko apache2 conffata valmiiksi.

Asennuksen jälkeen nettiselain näyttikin ihan eri juttua:

Eli PHP toimii, ja tuolla sivulla näkyi myös MySQL:ään viittaavia tietoja:

Ja näistä päättelin että MySQL toimii myös ok.

3.1. 3.1 Sivut käyttäjien kotihakemistoissa

Tunnilla tehdyn harjoituksen (ja vähän tehtävänannonkin) perusteella yllä oleva ei välttämättä riitä, vaan käyttäjille halutaan mahdollisuus pitää omia sivujaan kotihakemistoissaan, ja olisi kai se PHP ja MySQL kaikille käyttäjille myös kiva. Aloitin tunnilla opitusti tekemällä hakemistoon /etc/skel/ alihakemiston public_html, luonnollisesti sudon kanssa eli komentona sudo mkdir /etc/skel/public_html. Tämän jälkeen aina kun lisätään uusi käyttäjä, ilmestyy käyttäjälle automaattisesti kotihakemistoon tyhjä hakemisto nimeltä public_html.

Seuraavaksi loin uuden käyttäjän komennolla* sudo adduser*…

…ja asensin testausta varten SSH-palvelimen komennolla sudo apt-get install openssh-server. Seuraavaksi laitoin päälle Apachen moduulin userdir komennolla* sudo a2enmod userdir, jolla käyttäjien kotisivut kotihakemistoissa hoituvat automaattisesti jokaiselle käyttäjälle. Moduulin päälle laittamisen jälkeen käynnistin Apachen uudestaan komennolla *sudo /etc/init.d/apache2 restart. Testasin toimivuutta ensin omalla käyttäjälläni luomalla hakemiston /home/jkw/public_html ja sinne tiedoston index.html:

Ja hyvin näyttää toimivan:

Seuraavaksi kokeilin toimiko /etc/skel viritys ja nettisivut toisen käyttäjän kotihakemistosta.

Hyvin näyttää pelittävän.

3.2. 3.2 PHP käyttäjien kotihakemistossa

Aloitin testaamalla nykytilanteen, toimiiko PHP vai ei. Eli loin samanlaisen testi.php tiedoston käyttäjänä testi1 jossa sisältönä vain phpinfo() -komento. Mennessäni nettiselaimella osoitteeseen localhost/~testi1/testi.php oli tilanne sama kuin raportin kohdassa 3 ennen phpmyadminin asennusta, selain pyysi tallentamaan tiedoston testi.php -> eipä toimi.

Opettajan vinkki aiheesta oli grep -r “php” /etc/apache2/* josta huomasin heti rivin

/etc/apache2/mods-enabled/php5.conf:    # To re-enable php in user directories comment the following lines

ja lähden tutkimaan tuota php5.conf tiedostoa ja muutinkin rivit

<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_value engine Off
</Directory>
</IfModule>

kommentoiduiksi, ja käynnistin apachen taas uudelleen komennolla sudo /etc/init.d/apache2 restart. Tämän jälkeen PHP toimikin kotihakemistosta käsin mainiosti:

3.3. 3.3 MySQL käyttäjille

MySQL:n käyttämiseksi jokainen käyttäjä tarvitsee tietysti käyttäjänimen mysql-serverille ja tietokannan oikeuksineen jota käyttää. Tämä olisi varmasti järkevää tehdä jollain scriptillä automaattisesti kaikille tai valikoiduille käyttäjille, mutta päädyin ajanpuutteessa vain testaamaan MySQL:ää manuaalisesti. Loin uuden käyttäjän testi1 ja samannimisen tietokannan käyttäen phpmyadminia:

Ja testasin sekä MySQL:n että PHP:n toimivuutta asentamalla WordPressin näin:

testi1@xubuntu32-vb:~/public_html$ wget http://wordpress.org/latest.tar.gz
--2012-02-20 22:30:33--  http://wordpress.org/latest.tar.gz
Resolving wordpress.org... 72.233.56.139, 72.233.56.138
Connecting to wordpress.org|72.233.56.139|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: `latest.tar.gz'

[                                <=>    ] 3,879,784    392K/s   in 13s

2012-02-20 22:30:47 (299 KB/s) - `latest.tar.gz' saved [3879784]

testi1@xubuntu32-vb:~/public_html$ tar -xvf latest.tar.gz

Yllä olevasta näkymästä Submit -painiketta painaessani WordPress ilmoitti että tiedostoa wp-config.php voitu luoda. Hakemiston /home/testi1/public_html/wordpress omistaa kyllä käyttäjä testi1, mutta epäilykseni mukaan kun tuota tiedostoa yritetään tehdä WordPressin nettiasennuksen kautta, sitä yrittää oikeasti tehdä joku www-data tms. joku apachen oma käyttäjä, jolla ei oikeuksia tuohon hakemistoon ole. Helpoin keino lienee WordPressin itsensäkin ehdottama tiedoston luonti manuaalisesti, eli loin nanolla tiedoston /home/testi1/public_html/wp-config.php ja sen sisällöksi asetin WordPressin asennuksen ehdottaman tekstin. Tämän jälkeen asennus onnistui:

Ja tästä voidaan siis päätellä että MySQL toimii. Tällä kertaa aikaa lisätehtäville ei valitettavasti ollut.

  Aikaa tämän harjoituksen tekemiseen meni noin kaksi tuntia raportin kirjoittamiseen käytetty aika mukaanlukien.