Kotitehtävä #3

a) Asenna Apache ja laita käyttäjän kotisivut kuntoon.

Aloitin Apachen asennuksen terminaalista komennolla:

sudo apt-get install -y apache2

Jonka jälkeen  annoin vielä komennon:

sudo apt-get install -y libapache2-mod-php

Asennus oli nyt valmis ja seuraavaksi pystyinkin kokeilemaan, että toimiiko Apachen default-sivu selaimessa. Menin siis Chromium-selaimella koneen localhost-osoitteeseen (http://127.0.0.1 tai http://localhost) ja psädäm – It works!

apache_default_page

Kokeilin myös toisella koneella yhdistää Apache-koneen sisäiseen ipv4-osoitteeseen ja sama sivu näkyi onnistuneesti. Ulkoisella ipv4-osoitteella yhdistäminen ei toiminut, mutta tuo varmaan vaatisi jotain porttikonfigurointia.

Jotta käyttäjän kotisivut saataisiin toimimaan niin se vaatisi vielä muutaman toimenpiteen. Aloitin antamalla komennon:

sudo a2enmod userdir

Kyseinen komento enabloi moduulin, joka mahdollistaa käyttäjän kotisivut. Tehtävänanto vaati myös, että käyttäjä voi suorittaa php-koodia sivuillaan. Sitä varten piti muokata Apachen asetuksista löytyvää tiedostoa.

cd /etc/apache2/mods-available (vaihtaa hakemiston Apachen kansion sisälle, josta tarvittava tiedosto löytyy)

sudo nano php7.0.conf (muokataan tiedostoa ohjeiden mukaisesti)

sudo systemctl restart apache2.service (käynnistetään apache2-palvelu uudelleen)

php_enable.pngRisuaidat lisätty ja tallennettu ctrl + x + y + enter.

Näiden muutosten jälkeen voidaan luoda public_html-kansio, jossa käyttäjän Apache-palvelimen tiedostot näkyvät.

cd (paluu kotihakemistoon)

mkdir public_html (luodaan kansio)

nano index.php (luodaan kotisivu)

indexphpKuva index.php-tiedostosta nano-editorin kautta.

indexphpchromium

Samainen tiedosto Chromium-selaimesta avattuna. Toimii!

 

b) Apachen lokeista onnistunut ja epäonnistunut sivulataus

Sivustoon liittyvät ongelmat löytyvät logista access.log, johon pääsee kätevästi kiinni komennolla:

tail -f /var/log/apache2/access.log

Halutut tulokset löytyivät neljältä viimeiseltä riviltä:

error_log

Riveiltä selviää koneen IP-osoite (tässä tapauksessa localhost), päivämäärä ja kellonaika, sivusto jota yritettiin tavoittaa, HTTP-koodi, selain ja käyttöjärjestelmä. Ihmettelin tuota mainintaa Mozilla 5.0, mistäköhän mahtaa tulla? Nyt kuitenkin oli käytössä Chromium.

Mainitsin tuossa sivuston ja HTML-virhekoodin, jotka ovat tässä meitä eniten kiinnostavat asiat. Ottaessani onnistuneesti yhteyden index.php-osoitteeseen sain HTTP-koodin 200 sen merkiksi (success). Mietin myös asiaa niin, että käyttäjä olisi typottanut osoitteen (eli kirjoittanut index.php sijaan indeks.php) ja siitä seurasi nuo kaksi keskimmäistä riviä, eli error 404 page not found. Virheitä tuli kaksi sen takia, koska refreshasin sivun vielä ennen kuin korjasin osoitteen takaisin index.php-muotoon. Tästä seurasi taas onnistunut koodi (viimeinen rivi).

c) Virhe PHP- tai Python-koodissa. Virheen analysointi.

Loin virheen tehtävässä jo aiemmin käytetyn index.php:n koodiin.

error_koodi

Vaihdoin koodista print-funktion muotoon printtaa. Tuommoista funktiota ei ole olemassakaan, joten siitä pitäisi muodostua virhe lokeihin.

Lokeja menin katsomaan komennolla:

tail -f /var/log/apache2/error.log

Josta paljastuikin juuri tuo tekemäni virhe:

error_php

Riviä tutkimalla huomataan taas tuttuja asioita, kuten kellonaika ja päivämäärä. Näitä seuraa prosessin ID ja ip-osoite. Yksi tärkeimmistä asioista on PHP fatal error, joka jo itsessään kertoo paljon. Lukijan onneksi helpotusta tuo myös sitä seuraava teksti, jossa kerrotaan mikä meni pieleen (call to undefined function printtaa()), tiedosto jossa virhe sijaitsee (in /home/bere/public_html/index.php) ja rivinumero tiedoston sisällä, josta virhe tarkasti löytyy (on line 11).

d) Virhe apachen asetustiedostossa. Virheen analysointi.

Etsitään sopiva uhri vaihtamalla sijainti kansioon, joka sisältää Apachen asetustiedostot:

cd /etc/apache2

Muokataan vaikka apache2.conf-tiedostoa:

sudo nano apache2.conf

apacheconftest_error2

Ajetaan komento, joka testaa Apachen asetukset.

apache2ctl configtest

apache_error_results

Komennosta seuraa virheilmoitus, josta selviää mikä tiedosto on kyseessä, mistä vika kiikastaa ja millä rivillä se sijaitsee tiedostossa. Näiden tietojen avulla on jo hyvä lähteä korjaamaan virhettä.

f) Palvelimella ajettava weppiohjelma, joka toteuttaa yksinkertaisen laskun.

Päätin tehdä palvelimelleni erittäin yksinkertaisen muuntimen euron ja dollarin välille. Kirjoitushetkellä euron ja dollarin välinen kurssi oli noin 1 EUR = 1,23 USD, joten käytin sitä myös koodissani.

Tein nanolla tiedoston “muunnin.php” kansioon public_html. Tiedostossa oli seuraava koodi:

muunninphp
Huom: jokin aivopieru käynyt tätä kirjoittaessa. <?doctype html> kuuluisi olla huutomerkki kysymysmerkin sijaan, ja sitä kuuluisi seurata <html>-tagi.

Ohjelma ottaa käyttäjältä luvun vastaan, kertoo sen 1.23:lla ja tulostaa sen ruudulle. Simppeliä ja vaikutti toimivan!

Kuva lopputuloksesta:

muunninhtml

 

Lähteet:

HTTP -koodit katsottu osoitteesta https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Tero Karvinen, Install Apache Web Server on Ubuntu. URL: http://terokarvinen.com/2008/install-apache-web-server-on-ubuntu-4

Tero Karvinen, Read MySQL database with PHP. URL: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo

Tehtävänanto URL: http://terokarvinen.com/2017/aikataulu-%e2%80%93-linux-palvelimet-ict4tn021-7-ti-ja-6-to-alkukevat-2018-5-op

Muutoshistoria:

9.3.2018 klo 11.09 edit: lisätty lähteitä.
9.3.2018 klo 11.03 edit: lisätty kuvateksti f-kohdan ensimmäisen kuvan alle.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s