Tehtävänanto
h10. Tyypit ja parametrit. Tee omat modulit, jotka käyttävät määriteltyä tyyppiä (defined type) ja parametroitua luokkaa (parametrized class).
Harjoituksessa käytetty laitteisto/ohjelmisto:
- 16GB Kingston DataTraveler 100 G3 USB 3.0 muistitikku
- Tietokone (Asus Z170-A, i7-6700K , 16GB DDR4 3200MHz, Evga 1070 sc)
- Oheishärpäkkeet
- Xubuntu 16.04.1 LTS
Alustavat valmistelut:
Seuraavat toimet suoritan aina, kun alan tekemään linux-harjoitusten eri osioita.
Boottasin Xubuntu-livetikulle valitsemalla USB-muistitikun käynnistyksen yhteydessä bootattavaksi levyksi. Kun kysyttiin haluanko testata Xubuntua vaiko asentaa sen, valitsin vaihtoehdon “Try Xubuntu without installing“. Lyhyen latauksen päästä pääsin työpöydälle.
Yhdistin heti kotini langattomaan verkkoon työpöydän oikeasta yläkulmasta sekä muutin näppäimmistön layoutin suomiversioksi terminaalin komennolla “$ setxkbmap fi”.
Seuraavaksi syötin komennon “$ sudo apt-get update“. Kyseinen komento päivittää pakettivarastot, ja se kannattaa suorittaa aina ennen kuin hyödyntää paketinhallintaa mihinkään.
Perustoimet
Aloitin harjoituksen asentamalla Puppetin ja Apachen sekä tekemällä tarvittavat hakemistopolut moduulia varten.
$ sudo apt-get install puppet apache2
$ sudo mkdir /etc/puppet/modules/apache/
$ sudo mkdir /etc/puppet/modules/apache/manifests/
$ sudo mkdir /etc/puppet/modules/apache/templates/
/etc/puppet/manifests/ sijaintiin tulee sudoeditillä site.pp ja /etc/modules/puppet/modules/apache/manifests/ taas tulee init.pp.
Tein myös kotihakemistooni public_html kansion ja sinne sitten nanolla index.html tiedoston.
$ mkdir public_html
$ nano index.html
Laitoin index.html:n sisään simppelin HTML-pohjan: http://terokarvinen.com/2012/short-html5-page
VirtualHost
Tunnilla oli ilmeisesti käyty läpi virtualhostin käyttöönotto webpalvelinta varten. Tähän Tero olikin linkannut vanhan Eino Liimatan raportin, jota hyödynsin tässä harjoituksessa: http://terokarvinen.com/otherauthors/eliimatt-wordpress-org-puppet-liimatta-2013/eliimatt.wordpress.com/tag/name-based-virtual-host/index.html.
Tämä ei kuitenkaan riittänyt, vaan huomasin, että tunnilla oli ilmeisesti opetettu hieman eri tavalla yllä olevista ohjeista poiketen, joten vilkuilin myös samalla kurssilla olevan Joonan raportista ohjausta: https://joonaleppalahti.wordpress.com/2016/11/25/palvelinten-hallinta-harjoitus-10/. Itse en ollut tunnilla, joten harjoituksen moduuliosio herättää aika paljon kysymysmerkkejä.
Ihan ensimmäisenä lisäsin /etc/hosts-tiedostoon uuden domainin, jonka olisi tarkoitus “simuloida” nimipalvelimen toimintaa. IP-osoitteena toimii tietenkin localhost eli 127.0.0.1
Eli hosts-tiedostoon tähän malliin:
127.0.0.1 localhost harjoitus.com
Tämän jälkeen tein virtualhostin.
Kopioin tiedoston 000-default.conf sisällön uuteen tiedostoon, jonka nimesin harjoitus.com.conf.
Alkuperäinen tiedosto löytyi siis sijainnista /etc/apache2/sites-available/000-default.conf ja uuden tein sudoeditillä: $ sudoedit harjoitus.com.conf.
Poistin turhat kommentit ja sisälle laitoin:
ServerName www.harjoitus.com ServerAlias harjoitus.com DocumentRoot /home/xubuntu/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/home/xubuntu/public_html"> AllowOverride ALL Require all granted # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
En väitä ymmärtäväni, miten kaikki yllä mainitut osat toimivat, mutta ServerName on se virtuaalipalvelimen nimi, jolle osoitettuun HTTP liikenteeseen se virtuaalipalvelin vastaa. ServerAlias taas on sen palvelimen vaihtoehtoinen nimi, johon se myös reagoi. DocumentRoot:ssa sijaitsee palvelimen sisältö.
Tallennettuani harjoitus.conf tiedoston käynnistin Apache-demonin uudelleen komennolla $ sudo service apache2 restart.
Nyt, kun menen URL: harjoitus.com, pitäisi näkyä se HTML-teksti, jonka laitoin index.html tiedostooni kotihakemistossa.
Harjoitus.com:issa näkyi kuitenkin vain apachen oletussivu. Unohdin ottaa harjoitus.com sivun käyttöön:
$ sudo a2ensite harjoitus.com.conf
To activate the new configuration, you need to run: service apache2 reload
$ sudo service apache2 reload
apache2.service is not active, cannot reload.
$ sudo service apache2 restart
Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
$ systemctl status apache2.service
Se selvästikin valittaa ainakin syntaksi virheestä 8. rivillä harjoitus.com.conf tiedostossa. Kun yritän avata ja muokata tiedostoa:
sudoedit: harjoitus.com.conf: editing symbolic links is not permitted
En nyt tiedä, mikä tässä mättää. Aloitan harjoituksen alusta asti uudelleen, jos siten onnistuisin välttämään ongelmat. Seuraavana päivänä muutenkin toisen kurssin tentti, joten en tähän halua jumittua liian pitkäksi aikaa.
Nyt alle 10 minuutin päästä toistaessani harjoituksen vaiheita huomasin ainakin, että harjoitus.com.conf tiedostosta puuttui “, joten lisäsin sen sinne.
ServerName www.harjoitus.com ServerAlias harjoitus.com DocumentRoot /home/xubuntu/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/home/xubuntu/public_html"> AllowOverride ALL Require all granted # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Saan kuitenkin edelleen samat virheet Apachea uudelleen käynnistettäessä. Kokeilen vielä uudelleen…
Nyt kolmannella kerralla huomasin, ettei minulla ole – tagejä tiedostossa ollenkaan. Lisäsin ne:
ServerName http://www.harjoitus.com ServerAlias harjoitus.com DocumentRoot /home/xubuntu/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/home/xubuntu/public_html"> AllowOverride ALL Require all granted # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Sivun käyttöönotto:
$ sudo a2ensite harjoitus.com.conf
Nyt en kuitenkaan antanut komentoa $ service apache2 reload, vaikka se terminaalissa sitä pyytääkin:
Enabling site harjoitus.com. To activate the new configuration, you need to run: service apache2 reload
Vaan nyt laitetaan ainoastaan:
$ sudo service apache2 restart
Virheitä ei tule, joten katsotaan toimiiko nyt:
Näyttäisi toimivan.
Moduuli
Tein sijaintiin /etc/puppet/modules/apache/manifests/ sudoeditillä init.pp tiedoston.
Ennen kuin aloin rakentamaan moduulia siihen, kopioin harjoitus.com.conf tiedostoni /etc/puppet/modules/apache/templates/ hakemistoon ja laitoin siihen Joonan tavoin .erb – päätteen.
Lisäksi tein site.pp tiedoston /etc/puppet/manifests/ sijaintiin, johon sisällytin classin:
class {apache:}
Sitten aloin muokkaamaan init.pp tiedostoa. Katsoin vanhasta harjoituksestani suoraan perus Apachen asennuksen, jota muokkasin hieman:
class apache { Package {ensure => "installed", allowcdrom => "true"} package { "apache2":} } file { "/etc/apache2/sites-available/harjoitus.com.conf": content => template("apache/harjoitus.com.conf.erb"), } file { "/etc/apache2/sites-enabled/harjoitus.com.conf": ensure => "link", target => "../sites-available/harjoitus.com.conf", } service { "apache2": ensure => "true", enable => "true", } }
Defined type & parametrized class
Yritin lukea Puppetin ohjeita aiheeseen liittyen:
Defined resource types: https://docs.puppet.com/puppet/latest/reference/lang_defined_types.html
Classes: https://docs.puppet.com/puppet/latest/reference/lang_classes.html
En kuitenkaan ymmärtänyt kovin tarkkaan, mitä olin tekemässä, joten nojauduin vahvasti samalla kurssilla olevan Joonan raporttiin, jotta sain harjoituksen tehtyä.
Init.pp tiedoston rinnalle loin sudoeditillä vhost.pp tiedoston, johon siirsin init.pp:n apachea käsittelevät file-kohdat. Hakemistopolkuihin laitettiin “title”-muuttuja ja tiedoston alkuun “define apache::vhost () {“. Eli:
define apache::vhost () { file { "/etc/apache2/sites-available/${title}.com.conf": content => template("apache/vhost.conf.erb"), } file { "/etc/apache2/sites-enabled/${title}.com.conf": ensure => "link", target => "../sites-available/${title}.com.conf", } }
Templates kansiossa oleva harjoitus.com.conf.erb tuli myös nimetä uudelleen vhost.conf.erb tiedostoksi:
$ sudo mv harjoitus.com.conf.erb vhost.conf.erb
Laitoin siihenkin sitten muuttujia:
ServerName http://www.<%=@title%>.com ServerAlias <%=@title%>.com DocumentRoot /home/xubuntu/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/home/xubuntu/public_html"> AllowOverride ALL Require all granted # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Site.pp tiedostoon tuli vhost, eli:
class {apache:} apache::vhost {"harjoitus":}
Moduulin testaus
Poistin Apachen testausta varten ja “suoritin” moduulin:
$ sudo apt-get purge apache2
$ sudo rm -r /etc/apache2
$ sudo puppet apply -e ‘class {apache:}’
Moduuli tuli taas suorittaa kahdesti, jotta alkoi pelittää oikein. Apache-demoni tuli myös restartata.
xubuntu@xubuntu:/etc/puppet/modules/apache/manifests$ sudo puppet apply -e 'class {apache:}' Notice: Compiled catalog for xubuntu in environment production in 0.22 seconds Error: /Stage[main]/Apache/Service[apache2]: Could not evaluate: Could not find init script or upstart conf file for 'apache2' Notice: /Stage[main]/Apache/Package[apache2]/ensure: ensure changed 'purged' to 'present' Notice: Finished catalog run in 3.03 seconds xubuntu@xubuntu:/etc/puppet/modules/apache/manifests$ sudo puppet apply -e 'class {apache:}' Notice: Compiled catalog for xubuntu in environment production in 0.22 seconds Notice: Finished catalog run in 0.05 seconds xubuntu@xubuntu:/etc/puppet/modules/apache/manifests$
Erroreita tuli pelottavan vähän, joten epäilen, ettei nyt kaikki ole täysin kunnossa.
$ sudo service apache2 restart
Nyt, kun menen selaimella harjoitus.com – osoitteeseen, index.html sisältö pitäisi näkyä yhä oikein.
$ firefox “harjoitus.com”
EDIT: Kuvalle käynyt jotakin, mutta harjoitus.com näytti pelkän Apachen oletussivun, eikä sitä tekstiä, joka index.html tiedostossa oli.
Pieleen meni… Valitettavasti en ehdi enää tänään perehtyä harjoitukseen tarkemmin, vaan minun tulee valmistautua huomiseen tenttiin.
Yhteenveto
Haastava harjoitus. Tässä siis tehtiin moduli, joka asentaa Apachen sekä näyttää HTML-koodia virtualhostia käytten harjoitus.com domainnimessä. Joona Leppälahden harjoituksesta oli suurta apua, mutta en siltikään saanut harjoitusta tehtyä loppuun saakka oikein, vaan määritellyn tyypin ja parametroidun luokan muokkausten jälkeen harjoitus.com näytti vaan apachen aloitussivua.
Lähteet:
Harjoituksen ohjeet
URL: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016
HMTL
URL: http://terokarvinen.com/2012/short-html5-page
Name-based Virtual Host Support
URL: https://httpd.apache.org/docs/2.4/vhosts/name-based.html
Eino Liimatan raportti VHostiin liittyen
URL: http://terokarvinen.com/otherauthors/eliimatt-wordpress-org-puppet-liimatta-2013/eliimatt.wordpress.com/tag/name-based-virtual-host/index.html
Joona Leppälahti – Harjoitus 10
URL: https://joonaleppalahti.wordpress.com/2016/11/25/palvelinten-hallinta-harjoitus-10/
Puppet – Defined resource types
URL: https://docs.puppet.com/puppet/latest/reference/lang_defined_types.html
Puppet – Classes
URL: https://docs.puppet.com/puppet/latest/reference/lang_classes.html
harjoitus.com.conf tiedostossa oleva directory tagi pitää sulkea . WordPress oli jostain syystä jättänyt sen pois tai itse sähläsin jotain, GitHubissani näytti kuitenkin olevan oikein.