Linux Palvelimet: Harjoitus 3 raportti

Tässä postauksessa raportoin Tero Karvisen Linux Palvelimet-kurssin tehtävää 3.

Käyttämäni tietokone on HP:n 655 G1 läppäri. Raportin aloitus klo 17.30.

Ennen tehtävien aloittamista annoin terminaaliin komennot sudo-apt get update ja sudo apt-get upgrade päivittääkseni kaiken ajan tasalle.

Tehtävässä on tarkoituksena valita viisi tehtävää kahdestatoista. Valitsen tehtävät a, b, c, f ja e.

Koska käytössäni on useampi kuin yksi tietokone, tulen tekemään kaikki testit eri koneella (Windows 10 Pro, selaimena uusin versio Firefoxista, eli 58.0.1) kuin missä palvelin on.

IP-osoitteet mitä tehtävissä saattaa vilkkua ovat DHCP:n jakamia lokaaleja osoitteita. En tule tuhrimaan niitä kuvista, mutta jos joku tätä dokkaria sattuu lukemaan muistuttaisin, että osoiteavaruus omalla kohdalla on mitä luultavimmin eri.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.

Tämä ehdittiinkin jo katsoa tunnilla, mutta yritän tehdä tehtävän ilman ohjetta. Jos joudun jossain kohtaan ohjetta käyttämään, se löytyy täältä.

Koska Apache löytyy jo koneeltani ja haluan aloittaa puhtaalta pöydältä annan komennon sudo apt-get purge apache2 ja poistan viime tunnilla luomani public_html-kansion kotihakemistostani komennolla sudo rm -r public_html/ (olin valmiiksi omassa kotihakemistossani).

Aloitetaan itse tehtävä asentamalla Apache. Muistan ettei paketin nimi ollut pelkästään “apache” vaan “apache2” eli asennetaan Apache komennolla sudo apt-get install -y apache2.

Testataan sen asennuksen toiminta surffaamalla selaimessa localhostiin. Sen sain selville komennolla ip addr, komennon tulostuksesta etsin DHCP:n jakamaa osoitetta, omassa tapauksessa 192-alkuinen.

Selatessani huomaan, ettei vastaan tullutkaan tuttu Apachen testisivu, vaan tyhjä sivu, jossa lukee “Moi”. Tämä on siis viime tunnilla luotu Apachen oletussivun päälle.

moi

Komento, jolla koitin päästä Apachesta eroon ei siis poistanutkaan ihan kaikkea, jota halusin. Kokeillaan vielä ennen lisähäsläystä komentoa sudo systemclt restart apache2.service ja päivitetään selain, jos se vaikuttaisi asiaan jotenkin.

Nope. Koska haluan aloittaa puhtaalta pöydältä, googlataan hieman ja palataan asiaan. Mahdollinen ratkaisu on löytynyt.

Annetaan komennot:

  • sudo service apache2 stop palvelimen pysäyttämiseksi
  • sudo apt-get purge apache2 apache2-utils apache2.2-bin apache2-common kaiken Apacheen liittyvän poistamiseksi, jonka apt-get voi tehdä
  • sudo apt-get autoremove jäännöksien poistamiseksi

Tutkitaan sitten, löytyykö vielä mitään jäännöksiä, komentoriville whereis apache2. Käy ilmi, että apache2-tiedostoja löytyy parista hakemistosta.

Annetaan komento sudo rm -rf /usr/sbin/apache2 /usr/lib/apache2 /etc/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz ja tarkistetaan uudelleen komennolla whereis apache2. Tyhjää näyttää.

Asennetaan nyt siis vihdoin Apache samalla tavalla kuin aikaisemmin. sudo apt-get install -y apache2. Kokeillaan nyt surffata localhostiin. Ei toimi. Tajutaan sekunnin päästä, että olen pysäyttänyt apache2 aiemmin, kokeillaan pistää se päälle komennolla sudo service apache2 start. Ei tapahdu mitään.

Google auki ja mahdollinen ratkaisu on löytynyt. Annetaan komento sudo apt-get install –reinstall apache2 apache2-bin. Vaikuttaisi siltä, että oon poistanut jotain extraa tai muutenvaan ollut yli-innokkaana liikenteessä. Uudelleenasennuksen jälkeen sudo apache2ctl start. Virheilmoituksena “apache2: Could not open configuration file /etc/apache2/apache2.conf: No such file or directory”, “Action start failed.” ja “The Apache error log may have more information.”. Googlataan kyseinen lokimerkintä ja kokeillaan tätä. Kokeillaan siis komentoa sudo apt-get remove –purge $(dpkg -l apache* | grep ii | awk ‘{print $2}’) && sudo apt-get install apache2.

Huvittavaa, etten halunnut käyttää ohjeita tehtävään, mutta tähänmennessä en ole muuta tehnytkään kun googlettanut. Itseppä tein tämänkin vaikeaksi kun halusin aloittaa puhtaalta pöydältä. Komennon jälkeen kokeillaan surffata localhostiin. Sama valkoinen “Moi”-sivu kuin aikaisemmin. Ainakin apache toimii nyt. Koitetaan poistaa sivuhistoria. “Moi”. Mennään katsomaan perusindex-sivua. Muistetaan tässä kohtaa, että se on hakemistossa /var/www/html/, eli ei ihme, ettei sivu ole muuttunut. Kokeillaan huviksi poistaa tiedosto ja katsotaan mitä tapahtuu, kun käynnistää Apachen uudestaan, index.html-tiedostossa ei kuitenkaan ollut mitään muuta kuin “Moi” ja .html pääte, eli ei mitenkään korvaamaton menetys. Komennot cd /var/www/htmlsudo rm index.html ja sudo systemctl restart apache2.service. Hyvä että testasin, opin jotain uutta. Apache ei luo uutta tiedostoa, vaan näyttää puhtaasti, mitä hakemistossa /var/www/html/ on.

hyvätietää.PNG

Tässä kohtaa joudun kyllä luovuttamaan oletussivun palauttamisen. Tyydytään tiedostoon index.html jossa lukee “Hello maailma!”. Tämän tein siis komennolla sudo nanosudo siksi, että koska emme ole omassa kotihakemistossani, tarvitaan root-oikeudet. Kokeillaan sivua selaimessa.

toimii
Homma toimii

Klo 19.07 mennään ihan oikeasti tähän tehtävään. Tavoitteena oli siis asentaa Apache, check, ja pistää käyttäjien kotisivut toimintaan.

Tehdään ensimmäinen testi, eli mennään oman käyttäjäni sivulle selaimessa, tyylillä ip-osoite/~käyttäjä. Avataan tässä kohtaa loki pyörimään, niin voidaan tarkastella virheviestejä. Komennot cd /var/log/apache2 siirtyäkseni oikeaan hakemistoon ja multitail access.log error.log (multitail on siis asennettu ohjelma, asennetaan komennolla sudo apt-get install -y multitail). Mennään sivulle ip-osoite/~roope. Accesslokiin tuli merkintä, että joku koitti yhdistää, mutta ei sen enempää infoa, josta olisi hyötyä.

Muistan tunneilta, että käyttäjien kotisivujen toimintaa varten pitää laittaa joku moduli päälle, jonka nimeä en muista. Katsotaan tämä kohta Teron ohjeesta. sudo a2enmod userdir jonka jälkeen restartataan Apache sudo systemctl restart apache2.service. Loki ilmoittaa iloisesti onnistuneesta restartista. Kokeillaan nyt selata käyttäjän sivua.

“You don’t have permission to access /~roope on this server.” Tässä kohtaa emme mene paniikkiin, vaan muistetaan, että public_html kansiota ei ole olemassa, joka luultavasti on ongelman syy. cd ja mkdir public_html. Päivitetään sivu (shift + refreshnappia selaimessa).

toimii2.PNG

Tehdään vielä nopea testisivu.

testisivu

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

b) Tutkitaan Apachen lokeja ja etsitään onnistunut ja epäonnistunut sivulataus.

Päivitetään sivu ja kokeillaan onnistunutta latausta.

onnistunutsivulataus

  • 192.168.1.3 on palvelimeni ip-osoite
  • – – , oletan, että näillä on jokin tarkoitus (tiedosto-oikeuksien merkintätavan takia). Tarkistetaan googlesta. Niillä on merkitys! Ensimmäinen kertoo, ettei IdentityCheck ole päällä eikä se yritä hakea RFC 1431-identiteettiä selaajalta. Toinen – kertoo, ettei tiedosto ole salasanasuojattu. Jos se olisi, viivan kohdalla olisi tapahtumaa pyytäneen userdir
  • Seuraavana kellonaika. Todetaan se oikeaksi katsomalla netistä oikea kellonaika.
  • “GET /~roope/ HTTP/1.1” kertoo, että käytetty metodi (jota selain käyttää) on GET, mitä metodi hakee, eli tässä tapauksessa hakemistoa /~roope/ ja käyttää HTTP-protokollaa ja sen versiota 1.1
  • 200 on onnistuneen latauksen statuskoodi, 504 en ole varma. Tarkistetaan ja todetaan, että se on sivun koko, jonka selain latasi. Testataan lisäämällä sivuun lisää kokoa tämän jälkeen.
  • “-“ en osaa sanoa. Tarkistetaan taas. Siinä pitäisi lukea mistä hakemistosta, eli tässä tapauksessa ip-osoite/~roope/ jossa index.html tiedosto on. Oletan, ettei tietoa näy lokissa, koska olen päivittänyt sivun.
  • Seuraavana asiakasohjelman tietoja, mikä selain, mikä käyttöjärjestelmä, mikä selainversio, mikä user agent (tässä tapauksessa siis Gecko/20100101) ja viimeisenä taas selain ja sen versio.

Lisätään nyt index.html tiedostoon lisää kokoa yksinkertaisesti hakkaamalla näppäimistöä paragraphin (<p>) sisällöksi.

lisäsikokoa.png

Luku on nyt 570, eli kohta siis kertoo ladatun sivun koosta jonka asiakasohjelma lataa.

Epäonnistuneeseen versioon. Koitetaan ladata sivua ip-osoite/~roope/eioleolemassa. Poistetaan sivuhistoria ennen kokeilua, jos “-“ kohtaan ilmestyisi hakemistopolku

eiolevittu

  • Aluksi taas palvelimen IP
  • Seuraavaksi – –, IdentifyCheck ei ole vieläkään päällä, eikä “tiedosto” ole salasanan takana.
  • Kellonaika on edelleen oikeassa
  • “GET /~roope/eioleolemassa HTTP/1.1” 404 512 sivu ei latautunut eli statuskoodi 404 ja sivun koko 512 (bittiä?)
  • “-“ ei vieläkään mitään. Kokeillaan ladata sivu seuraavaksi Xubuntulla, ja katsotaan vielä tätä kohtaa lokista nopeasti.
  • Viimeisenä taas tietoja asiakasohjelmasta

Avataan sivu komennolla firefox “http://localhost/~roope/&#8221;

eitoiminut

Ei muutosta. Kokeillaan vielä käynnistää Apache uudelleen komennolla sudo systemctl restart apache2.service ja kokeillaan uudestaan molemmilla koneilla. Tämäkään ei vaikuttanut asiaan. “-” jää siis mysteeriksi.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

c) Tehdään tahallaan virhe palvelimella ajettavaan koodiin. Käytän tehtävässä PHP:tä.

Asennetaan ensin PHP-moduli Apacheen komennolla sudo apt-get install libapache2-mod-php

Käyttäjien kotihakemistoissa PHP-koodin käyttö on estetty. Tunneilla muistan muokanneenn .conf-tiedostoa, josta kyseinen esto johtuu.

cd /etc/apache2 ja tutkitaan. Hakemisto mods-enabled on hakemani hakemisto, cd mods-enabled/. Katsotaan mitä hakemistossa on komennolla ls. Löysin hakemani php7.0.conf-tiedoston, muokataan sitä komennolla sudo nano php7.0.conf. Seurataan ohjeita ja muokataan rivit <IfModule mod_userdir.c> – </IfModule> asti kommenteiksi lisäämällä niiden eteen #. Tallennetaan painamalla CTRL + X, y ja enter.

Käynnistetään palvelin uudelleen komennolla sudo systemctl restart apache2.service.

Lisätään index.html-tiedostoon himan PHP:tä.

Lisäsin yksinkertaisen laskun <?php printtaa(71+75) ?> joka on siis tahallisesti väärin (printtaa pitäisi olla print). Tallennetaan tiedosto CTRL + x, y ja enter. Vaihdetaan tiedostomuoto komennolla mv index.html index.php.

errorphp.png

  • Todetaan kellonaika taas oikeaksi
  • :error kertoo varmaan virheestä
  • pid 4419 on luultavasti virhekoodin numero
  • Seuraavana taas asiakasohjelman (selaimen) IP
  • Seuraava numero kertoo luultavasti lokimerkinnän numeron. Jokaisessa lokimerkinnässä on juoksevaan tyyliin yhtä isompi luku.
  • PHP Fatal error: Uncaught Error: Call to undefined function printtaa() in /home/roope/public_html/index.php:13\nStack – PHP-koodissa on tapahtunut virhe, jossa on yritetty suorittaa tunnistamatonta funktiota printtaa, jota ei ole olemassa. Tämän jälkeen tiedostopolku ja rivinumero, missä virhe on. \nStack en osaa kommentoida.
  • thrown in /home/roope/public_html/index.php on line 13 kertoo uudelleen millä rivillä kyseinen virhe on tapahtunut

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 f) Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle yksinkertaisen laskun

En vielä osaa PHP:tä ja ajattelin että tää olisi hyvä harjoitus. Tehtävän aloitus 21.04

Pyritään tekemään laskuri, joka laskee kuinka monta päivää on tietyssä määrässä vuosia. Käyttäjä siis antaa vuosien lukumäärän.

Aloitetaan uusi .php tiedosto komennolla sudo nano vuosihomma.php

Haluan laskurin, jonka muoto on:

“How many days in [syötä vuodet tähän] years?” jonka jälkeen rivinvaihto ja laskun tulos:

“X days.”

Käytän apunani w3schoolsia.

21.47: koodi toimii! Ainoa vaan, että se näyttää aina sivulle tullessa jo valmiiksi “0 days.” Annan asian olla, kun en koodaamisesta erityisesti pidä. Onnistunut ensimmäinen yritys, tyydytään siihen.

phpkoodi

Koodi näyttää tältä

<!DOCTYPE html>

<html>

<head>
 <title>Vuosikalkulaattori</title>
 <meta charset="UTF-8">
 </head>

<body>
 <h3>Find out how many days in a certain amount of years</h3>

<form method="POST" action="vuosihomma.php">How many days in <input type="text" name="years"> years? <input type="submit">
 </form>

<?php
 $years = $_POST["years"];
 $days = $years*365;

echo "$days days.";

?>

</body>
</html>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 e) Testaillaan PhpMyAdminia

PhpMyAdmin vaatii toimiakseen riittävän uudet versiot MySQL:stä ja PHP:stä. PHP on juuri äskettäin asennettu, eli sen versio luultavasti riittää. MySQL:ää ei ole ollenkaan, eli asennetaan se komennolla sudo apt-get install -y mysql-server mysql-client (komento täältä).

Asentaessa MySQL kysyy uutta root-salasanaa. Käytän ohjelmaa pwgen sellaisen generoimiseen komennolla pwgen 20 ja saan 20-merkkisen salasanan, jonka otan talteen ja asetan MySQL:n root-käyttäjän salasanaksi.

Tämän jälkeen komento sudo apt-get install -y phpmyadmin. Asentaessa kysytään mitä webpalvelinta haluan käyttää. Valitaan Apache painamalla Enter.

phpmyadmin asennus

Tämän jälkeen kysytään haluanko konfiguroida asioita itse vai annanko sen hoitua automaattisesti. Valitaan vielä ainakin ensimmäisellä asennuskerralla automaattinen vaihtoehto.

Seuraavaksi kysytään salasanaa PhpMyAdminille. Jätetään tyhjäksi ja annetaan ohjelman generoida satunnainen salasana.

Nyt kun asennus on valmis, sen pitäisi löytyä osoitteesta localhost/phpmyadmin eli myös ip-osoite/phpmyadmin. Näin ei kuitenkaan ole. Virhekoodi 404. Käynnistetään Apache uudelleen komennolla sudo systemctl restart apache2.service. Eipä auttanut.

Kone kysyy uudelleenkäynnistystä. Toivotaan että se ratkaisee kaikki ongelmat. Se ratkaisi kaikki ongelmat.

phpmyadmin toimii.PNG

Tässä vaiheessa raportoijan on pidettävä tauko, kello on 22:12.

Raportin jatkaminen klo 00:03

Kirjaudutaan sisään MySQL root-tunnuksella ja mun omalla custom 20-merkkisellä salasanalla. Ennen sisäänkirjautumista vaihdoin myös pudotusvalikosta kieleksi englannin.

phpmyadminetusivu.PNG

Testataan PhpMyAdminia sen tärkeimmässä käyttötarkoituksessa, eli tehdään vaikka uusi tietokanta ja sinne vähän sisältöä. Valitaan vasemmalta New, annetaan nimeksi “Testi” ja se avautuukin luodessa automaattisesti. Tehdään table “table”, jätetään kolumnien määrä oletukseksi, eli neljään.

Olen viimeksi tehnyt tietokantojen kanssa hommia joskus ammattikoulussa, enkä muista siitä lähes mitään, kokeilin kaikenlaista testimielessä.

toimivadatabase

Homma toimii.

Raportin lopettaminen klo 0:35.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 Yhteenveto ja pohdintaa

Työskentelytapani oli parempi tässä tehtävässä, opin paljon (myös uutta) ja yritin välttää ohjeiden katsomista aina kun mahdollista. En tiedä miten aina onnistun tekemään jotain vaikeimman kautta, pitää ehkä lopettaa se. Siinä kyllä oppii tiettyjä troubleshooting-tilanteita ja tulihan tossa peruskomentoja opeteltua enemmän rutiinitoiminnaksi, mutta aikaa kuluu ylimääräiseen tehtäviä tehdessä ehkä vähän liikaa. WordPressin kanssa en joutunut yhtä paljon taistelemaan, kuin viimeksi. Jotenkin onnistun tosin törmäämään mitä kummallisimpiin ongelmiin, mutta onneksi moni muukin on niihin törmännyt ja kaikkeen on tähän mennessä löytynyt ohje, jos sellaista on tarvinnut.

EDIT 14.4.2018: Lisäsin tehtävään f) php-koodin (aiemmin linkki githubiin, josta koodi löytyi)

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

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