August 18, 2019
  • 2:15 pm NameCheap – Kaupallisen SSL-sertifikaatin uusiminen
  • 9:48 pm Ubuntu Server 18.04.3 – Tietoturvapäivitysten automatisointi
  • 1:54 am Tuotantopalvelimen päivitys – Ubuntu Server 16.04 -> 18.04
  • 11:15 pm Kotiverkon toteutus: Ubiquiti EdgeRouter X, Ubiquiti UniFi UAP-AC-Lite, Netgear GS108E-300PES – VLAN-verkkojen ja palomuurisääntöjen konfigurointi
  • 4:00 am Windows 10 – Järjestelmätyökalujen ja yleisten komentojen lunttilappu

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
Screenshot_2016-11-27_15-31-40.png

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

Screenshot_2016-11-27_14-51-14.png
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
Screenshot_2016-11-27_15-05-57.png
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:
Screenshot_2016-11-27_15-39-13.png
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”
Screenshot_2016-11-27_16-00-11.png
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

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html” Markus Pyhäranta
Markus Pyhäranta

RELATED ARTICLES

1 COMMENTS

  1. Joona Posted on November 27, 2016 at 4:47 pm

    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.

    Reply
LEAVE A COMMENT