Tehtävät ovat täältä: http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/
Tämän harjoituksen aiheena ovat Apache-weppipalvelin ja LAMP kehitysalusta. Eli harjoittelimme Apachen asentamista ja käyttämistä.
Harjoituksia piti tehdä vähintään viisi. Olimme tehneet samoja asioita jo tunnilla, joten ne olivat tuttuja. Ongelmia tuli kuitenkin vastaan.
Tein tehtävät omalla Lenovon Thinkpad x220 kannettavalla tietokoneella. Aloitin tekemään neljää ensimmäistä tehtävää klo 11.56/13.56 ja niiden kanssa meni kaksi tuntia. Viimeistä tehtävää tein vähän yli tunnin.
Avasin xUbuntun livetikultani try-moodissa. Koneen perustoiminto oli OK (näppäimistö, hiiri, näyttö ym. toimivat kuin niiden piti toimia).
a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.
Tämän teimme jo tunnilla, joten oli helppo vain toistaa uudestaan. Olin tehnyt muistiinpanot tunnilla ja seurasin niitä suurilta osin.
- sudo apt-get update
- sudo apt-get install apache2
- TESTAUS: selaimeen localhost ja ip-osoite -> tuli ”It works!”-sivusto eli asentaminen onnistui
Tunnilla teimme reiän palomuuriin, mutta en tiennyt tarvitseeko sitä nytkin tehdä, joten en tehnyt (tämä osoittautui virheeksi!)
Seuraavaksi tein oman kotisivun käyttäjälle. Olin tehnyt muistiinpanot enkä oikein saanut kaikista kohdista selvää tai tajunnut miksi jokin asia tehtiin, mutta tein nyt miten niissä luki.
- echo ”Emma” |sudo tee /var/www/html/index.html
- TESTAUS: selaimeen localhost tai ip-osoite -> teksti ”Emma” näkyi:
- sudo a2enmod userdir (#tämä enablaa userdir moduulin)
- sudo systemctl restart apache2 (#aktivoi apache)
- TESTAUS: selaimeen ”ip-osoite”/~xubuntu -> 403 Forbidden
Täytyy tehdä hakemisto:
- mkdir public_html
- TESTAUS:
Seuraavaksi loin sinne index.html tiedoston, johon kirjoitin “Emman kotisivu”. Tallennettuani sen ja päivitettyäni kotisivun sain tekstin näkymään sinne (en ottanut kuvankaappausta).
Seuraavaksi luodaan Virtual Host, jotta saa osoitteen emma.com toimimaan.
Mennään ensiksi /etc/apache2/sites-available hakemistoon, josta näkee mitä sivuja siellä on. Sieltä löytyy 000-default.conf -tiedosto, joka on automaattinen default-sivu. Haluamme nyt muuttaa sen.
Luomme uuden sivun: sudoedit emma.com.conf, johon kirjoitamme tekstin:
- <VirtualHost *:80>
- ServerName emma.com
- ServerAlias http://www.emma.com
- DocumentRoot “/home/xubuntu/public_html/”
- </VirtualHost>
Pitää vielä muuttaa asetuksia:
- sudo a2ensite emma.com.conf (#jotta saadaan sivu enablettua)
- sudo systemctl restart apach2 (-> apache taas päälle)
- *tätä ennen olisi kannattanut testata sitä komennolla apache2ctl configtest
- sudo a2dissite 000-default.conf (#jolla sai sen sivun pois päältä)
- sudo systemctl restart apache2
Tässä kohtaa joku meni varmaan väärin, koska, kun menin emma.com tai www.emma.com sivuille, pääsin sivulle, joka myy domain nimiä enkä sille omalle palvelimeni sivulle.
Kokeilin laittaa /etc/hosts tiedostoon kohdan *ip-osoite*/~xubuntu/ emma.com www.emma.com, mutta sekään ei auttanut.
Laitoin sitten sinne hosts-tiedostoon *ip-osoite* emma.com www.emma.com. Nyt pääsin 403 Forbidden kohtaan eli sillein onnistuin saamaan sen yhteyden MUTTA vain www.emma.com osoittella, emma.com vei sinne domainostamis sivulle. Tuo 403 Forbidden tuli varmaan jostakin aiemmasta kohdasta.
Kokeilin sudo a2ensite 000-default.conf, mutta sekään ei toiminut. Disablasin sen sitten.
Kokeilin laittaa /etc/hosts tiedostoon erikseen sen emma.com (eikä siinä jatkona), mutta sekään ei auttanut. En siis pääse edes Localhost-urliin katsomaan tiedostoa. Se oli varmaan sen takia, kun tein tuon emma-sivun, poistan sen ja katson mitä tapahtuu. Nyt pääsen *ip-osoite*/~xubuntu katsomaan sitä tekstiä.
Kokeilen sitten tämän sivun https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04 ohjeilla tehdä tämän. Mutta ei onnistunut :(. Yhden sivun sain tehtyä localhostiksi. (yksi kohta raporttia varten kirjoittamista muistiinpanoistani: ”apua en tiedä mitä teen !!! labrassa onnistui todella hyvin :(”)
Olin tehnyt siis edellisessä kohdassa lisää virtual hosteja ja nettisivua (blingi.com ja http://www.blingi.com).
Palasin tekemään tehtävää ja tein sen reiän palomuuriin. (kommentti muistiinpanoistani: ”*kirosana* jos se on sen takia mennyt perseelleen” ja ”satavarmasti on”). [Tein reiän siis komennoilla: sudo ufw enable, sudo ufw allow 80/tcp]
Kuinkas ollakkaan jotakin alkoi menemään oikein: http://www.emma.com toimi (eli selaimeen tuli se sivu, jossa oli tekstiä), mutta emma.com ei toiminut. blingi.com ja http://www.blingi.com eivät toimineet. Olin ihan hukassa enkä tiennyt miten näin pääsi käymään. Varmaan on joku ilmiselvä selitys, mutten osaa sitä nyt itse sanoa.
(Olin siis siirtynyt tekemään seruaavaa tehtävää ja tehnyt sinne tuollaisen BMI-laskurin. Ajattelin, että saisin virheilmoituksia jos kirjoittaisin siihen vääriä muuttujia.)
b) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.
Onnistunut sivulataus:
En nyt muista kirjoitinko siihen *ip-osoite*/~xubuntu vai mitä. Luultavasti tuon tai sitten localhost.
| 127.0.0.1 – – [06/Feb/2020:13:16:00 +0000] ”GET / HTTP/1.1” 200 854 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
127.0.0.1 = localhostin ip-osoite
[06/Feb/2020:13:16:00 +0000] = aika, jolloin toiminto tapahtui
GET / HTTP/1.1 = GET is the request. The / is the resource we want to obtain, and the HTTP/1.0 tells the server that this is a HTTP/1.0 request
” 200 854 ” = 200 is the status code that the server sends back to the client. 854 = the size of the object returned to the client, not including the response headers
”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” = the user agent. The User-Agent request header is a characteristic string that lets servers and network peers identify the application, operating system, vendor, and/or version of the requesting user agent.
Epäonnistunut sivulataus:
Kirjoitin selaimeen väärän url:in: *ip-osoite*/~xubuntu -> ~xubunt
| *ip-osoite* – – [06/Feb/2020:13:20:39 +0000] ”GET /~xubunt HTTP/1.1” 404 493 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
Tässä on samat tiedot kuin tuossa edellisessä. Erona ovat lihavoidut kohdat. Jos status code alkaa 4:lla, virhe johtuu asiakkaasta. /~xubunt on virheellinen sivusto.
d) Tee virhe johonkin Apachen asetustiedostoon, etsi ja analysoi tuo rivi. Etsimiseen sopivat esimerkiksi Apachen omat lokit, syslog sekä ‘apache2ctl configtest’.
Tein muutoksen apachen configuration tiedostoon. Kirjoitin sinne keyboardsmash tekstiä.
- /etc/apache2$ apache2ctl configtest
Tuloksena sain:
| AH00526: Syntax error on line 2 of /etc/apache2/apache2.conf: |
| Invalid command ’sfsdsd#’, perhaps misspelled or defined by a module not included in the server configuration |
| Action ’configtest’ failed. |
| The Apache error log may have more information. |
Nyt tätä raporttia tehdessäni tajusin, että otin väärän tiedon talteen. En mennyt katsomaan error-logista, mitä siellä luki. Mutta tuossa kuitenkin kerrotaan, että siellä config-tiedostossa on invalid command.
i) Kuinka monta eri HTTP Status:ta (200, 404, 500…) saat aiheutettua lokeihin? Selitä, miten aiheutit tilanteet ja analysoi yksi rivi kustakin statuksesta.
En tätä tehtävää varten tehnyt erillisiä toimintoja. Katsoin vain, mitä olin jo saanut aikaiseksi. Sain viidestä eri statuksesta ainakin yhden merkinnän.
HTTP OK 200
| 127.0.0.1 – – [06/Feb/2020:11:59:50 +0000] ”GET / HTTP/1.1” 200 3477 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
Katso aiempi tehtävä, jossa analysoin samanlaisen rivin.
HTTP NOT FOUND 404
| *ip-osoite* – – [06/Feb/2020:13:20:39 +0000] ”GET /~xubunt HTTP/1.1” 404 493 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
Katso aiempi tehtävä, jossa analysoin samanlaisen rivin.
HTTP FORBIDDEN 403
| *ip-osoite*- – [06/Feb/2020:12:11:37 +0000] ”GET /~xubuntu HTTP/1.1” 403 496 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
403 = The server understood the request, but will not fulfill it due to client related issues.
HTTP NOT MODIFIED 304
| *ip-osoite* – – [06/Feb/2020:13:20:23 +0000] ”GET /~xubuntu/ HTTP/1.1” 304 180 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
304 = client redirection response code indicates that there is no need to retransmit the requested resources. It is an implicit redirection to a cached resource.
HTTP MOVED PERMANENTLY 301
| *ip-osoite* – – [06/Feb/2020:12:13:19 +0000] ”GET /~xubuntu HTTP/1.1” 301 587 ”-” ”Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0” |
301 = used for permanent URL redirection, meaning current links or records using the URL that the response is received for should be updated. The new URL should be provided in the Location field included with the response.
j) Asenna LAMP (Linux, Apache, MySQL, PHP). Testaa kunkin komponentin toiminta. Testaa lopuksi kokonaisuus. (Voit aloittaa tilanteesta, jossa Linux-käyttöjärjestelmä on jo asennettu, mutta ei muita (AMP) osia.
Tämän kohdan tekemisessä meni tunti. En tehnyt tätä edellisten tehtävien perään, joten jouduin aloittamaan kaiken alusta.
Sain asennettua Apachen ja PHP:n, mutta MySQL:n asennus ei onnistunut. En siis voinut käyttää koko LAMP:ia yhtenä kokonaisuutena. MySQL:n asennuksen epäonnistumisen analysointi ja debuggaus olisi vienyt varmasti todella kauan aikaa ja ongelma vaikttui suuremmalta kuin minä, joten en tehnyt sitä.
Seurasin tämän sivun: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04 ohjeita.
Vaihe 1 – Asenna Apache ja päivitä tulimuuri
- sudo apt update
- sudo apt get install apache2
- sudo ufw enable
- sudo ufw allow 80/tcp
- sudo ufw allow 443/tcp
- sudo ufw allow in ”Apache Full” (#tämä päästää HTTP ja HTTPS liikenteen sisään)
- TESTAUS: kirjoitin ip-osoitteen selaimeen ja pääsin aloitussivulle
Vaihe 2 – Asenna MySQL
- sudo apt install mysql-server
Tässä vaiheessa tuli jo virheilmoitus, ettei asennus onnistunut kunnolla, mutten tajunnut sitä, koska se luki siinä niiden asennusrivien kanssa samassa. Tuon ohjeen mukaan olisi pitänyt tulla joku salasanan määrittely kohta, mutta sellaista ei tullut. Päätin myös, etten tekisi niitä, koska niiden tekeminen vaikutti monimutkaiselta ja koska tämä oli vain testi.
Vaihe 3 – Asenna PHP
- sudo apt install php libapache2-mod-php php-mysql
- sudo nano /etc/apache2/mods-enabled/dir.conf
Alin komento tehtiin, jotta saadaan weppi palvelin antamaan index.php tiedostoja eikä .html tiedostoja ensisijaisesti. Tiedostossa siirsin index.php jonon ensimmäiseksi.
- sudo systemctl restart apache2
Nyt kuvittelin, että kaikki kolme oli asenneettu ja että LAMP oli kasassa.
Sitten lähdin testaamaan kaikkia yksitellen:
Apache 2-testaus
Testasimme jo, että weppi sivu näkyy, kun kirjoittaa ip osoitteen selaimeen. Ohjeet ehdottivat vielä, että tekisin virtual hostin. Tein sen samalla tavalla kuin edellisessä tehtävässä. Sain sen toimimaan blingi.com, mutta en www.blingi.com. Aluksi ei toiminut, kun olin tehnyt ohjeiden mukaan. Sitten menin laittamaan etc/hosts:iin sen ip-osoite www.blingi.com blingi.com, jolloin se toimi.
PHP-testaus
Ohjeet neuvoivat, miten sen toimivuutta voi testata. Luo tiedosto aikaisemmin luotuun web-rootiin:
- sudo nano /var/www/your_domain/info.php
jonne lisätään pieni koodin pätkä:
- <?php
- phpinfo();
- ?>
TESTAUS: selaimeen ip-osoite/info.php, jolloin tuli se perussivu, joka pitäisi tulla. Eli PHP toimi.
MySQL-testaus
Tämän testaus ei onnistunut, koska se ei ollut asentunut kunnolla.
Katsoin ensiksi, onko se päällä:
- mysqladmin -u root -p status
- (#pyysi salasanaa, mutta en ollut antanut sellaista ja painoin vain enteriä)
- (#sitten tuli tieto, että connect to server at localhost failed)
- /etc/init.d/mysql status
- active: failed
- (mysql ei suostunut restarttaamaan)
| $ systemctl status mysql.service ● mysql.service – MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; e Active: failed (Result: exit-code) since Tue 2020-02 Process: 15473 ExecStartPre=/usr/share/mysql/mysql-sy helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Se helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Sc helmi 11 11:37:09 xubuntu systemd[1]: Stopped MySQL Com helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: St helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Fa helmi 11 11:37:09 xubuntu systemd[1]: Failed to start M lines 1-11…skipping… ● mysql.service – MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2020-02-11 11:37:09 UTC; 13s ago Process: 15473 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE) helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Service hold-off time over, scheduling restart. helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Scheduled restart job, restart counter is at 5. helmi 11 11:37:09 xubuntu systemd[1]: Stopped MySQL Community Server. helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Start request repeated too quickly. helmi 11 11:37:09 xubuntu systemd[1]: mysql.service: Failed with result ’exit-code’. helmi 11 11:37:09 xubuntu systemd[1]: Failed to start MySQL Community Server. |
Tässä vaiheessa yritän poistaa mySQL, mutta se ei onnistunut:
| ERROR: Unable to start MySQL server: mysqld: Can’t read dir of ’/etc/mysql/conf.d/’ (Errcode: 13 – Permission denied) mysqld: [ERROR] Fatal error in defaults handling. Program aborted! Please take a look at https://wiki.debian.org/Teams/MySQL/FAQ for tips on fixing common upgrade issues. Once the problem is resolved, run apt-get –fix-broken install to retry. dpkg: error processing package mysql-server-5.7 (–configure): installed mysql-server-5.7 package post-installation script subprocess returned error exit status 1 Errors were encountered while processing: mysql-server-5.7 E: Sub-process /usr/bin/dpkg returned an error code (1) |
FML
En nyt jaksa listaa tässä, mitä kaikkea kokeilin, mutta joku virhe oli jossakin mysql:n tiedostostossa.
Päätin sammuttaa koko koneen ja tehdä koko hässäkän alusta uudestaan.
Tuli taas sama ongelma sen kanssa. Seuraava on siitä asennuksen loppuosasta:
| ● mysql.service – MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Tue 2020-02-11 12:04:31 UTC; 10ms ago Process: 6797 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=1/FAILURE) dpkg: error processing package mysql-server-5.7 (–configure): installed mysql-server-5.7 package post-installation script subprocess returned error exit status 1 dpkg: dependency problems prevent configuration of mysql-server: mysql-server depends on mysql-server-5.7; however: Package mysql-server-5.7 is not configured yet. dpkg: error processing package mysql-server (–configure): dependency problems – leaving unconfigured Processing triggers for libc-bin (2.27-3ubuntu1) … No apport report written because the error message indicates its a followup error from a previous failure. Processing triggers for ureadahead (0.100.0-21) … Processing triggers for systemd (237-3ubuntu10.24) … Errors were encountered while processing: mysql-server-5.7 mysql-server E: Sub-process /usr/bin/dpkg returned an error code (1) |
Googletin ja löysin tällaisen: https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq
Tuolla oli tullut samanlainen ongelma. Eli jossakin socketissa oli joku asia väärin.
Yritin mennä katsomaan /var/lib ja sieldä cd mysql, niin en päässyt sisään. Tuli “Permission denied”
Tässä vaiheessa päätin antaa asian olla. En päässyt testaamaan LAMP:ia kokonaisuutena, mikä on harmi.
Tässä lopuksi vähän teoriaa LAMP:ista
| A “LAMP” stack is a group of open-source software that is typically installed together to enable a server to host dynamic websites and web apps. The Apache web server is among the most popular web servers in the world. It’s well-documented and has been in wide use for much of the history of the web, which makes it a great default choice for hosting a website. MySQL is a database management system. Basically, it will organize and provide access to databases where your site can store information. PHP is the component of your setup that will process code to display dynamic content. It can run scripts, connect to your MySQL databases to get information, and hand the processed content over to your web server to display |