Harjoitus 2

Linkki tehtävänantoon


Tehtävä 1

b) Laita käyttäjien kotisivut toimimaan Apachella.

Teen nyt masterin virtuaalipalvelimelleni, jossa on ubuntu 16.04, ja minionin usb:ltä bootattuun live sessioon, jossa xubuntu 16.04. Kertaan komennot.

(master)$ sudo apt-get update && sudo apt-get -y install salt-master
# koska palomuuri ja julkinen verkko, avaan portit masterissa
(master)$ sudo ufw allow 4505/tcp
(master)$ sudo ufw allow 4506/tcp
(master)$ hostname -I

(minion)$ sudo apt-get update && sudo apt-get -y install salt-minion
(minion)$ sudoedit /etc/salt/minion
# tiedostoon kirjoitan:
master: IP-osoite, saatiin komennolla hostname -I
id: live
(minion)$ sudo systemctl restart salt-minion.service

(master)$ sudo salt-key -A
# pitää vastata y, sitten voi kokeilla toimiiko
(master)$ sudo salt '*' cmd.run 'whoami'

# poistan vielä varoitukset masterissa
(master)$ sudoedit /etc/salt/master
# lisään tämän tiedostoon
file_ignore_glob: []

Jos minion kertoo nimensä, saltstack on toimiva. Nyt voin asentaa minionille apachen.

Käytin lähteenä tätä. Tällaisia ongelmia oli:

  • pkg.installed ja apache2 meni väärinpäin.
  • Unohdin sourcesta viivan.
  • Lisäsin yksitellen tiloja apache.sls-tiedostoon, joten siinä vaiheessa kun lisäsin tilan, joka katsoo userdir-tiedostoja, ne olivat jo muuttuneet edellisellä ajokerralla, joten apachea ei käynnistetty uudelleen, eikä käyttäjän kotihakemistot aktivoituneet. Tämän jälkeen poistin apache2, ja tein uudestaan state.apply apache, jolloin ne aktivoituivat.
$ cat apache/init.sls
apache2:
  pkg.installed

/var/www/html/index.html:
  file.managed:
    - source: salt://apache/index.html.example

/etc/apache2/mods-enabled/userdir.conf:
  file.symlink:
    - target: ../mods-available/userdir.conf

/etc/apache2/mods-enabled/userdir.load:
  file.symlink:
    - target: ../mods-available/userdir.load

apache_service:
  service.running:
    - name: apache2
    - watch:
      - file: /etc/apache2/mods-enabled/userdir.conf
      - file: /etc/apache2/mods-enabled/userdir.load

Tilan asettaminen

$ sudo salt live state.apply apache --state-output terse
live:
  Name: apache2 - Function: pkg.installed - Result: Changed
  Name: /var/www/html/index.html - Function: file.managed - Result: Changed
  Name: /etc/apache2/mods-enabled/userdir.conf - Function: file.symlink - Result: Changed
  Name: /etc/apache2/mods-enabled/userdir.load - Function: file.symlink - Result: Changed
  Name: apache2 - Function: service.running - Result: Changed

Summary for live
------------
Succeeded: 5 (changed=5)
Failed:    0
------------
Total states run:     5

Kun asetin tilan uudestaan, tulee vain ”Succeeded: 5”, eli mitään ei muuteta.

Testi minionilla

Testaan, että apache ja käyttäjän kotihakemiston sivut toimivat. Seuraavat komennot minionilla:

$ cd
$ mkdir public_html
$ echo Testi > public_html/index.html

Menen selaimella osoitteseen http://localhost/~xubuntu/ ja siellä lukee Testi. Apache ja käyttäjän kotihakemiston sivut siis toimivat.


Tehtävä 2

c) Laita PHP toimimaan käyttäjien kotisivuilla. (Huomaa, että PHP toimii oletuksena kaikkialla muualla kuin käyttäjien public_html-kotisivuilla.)

Ensin PHP pitää installoida, paketilla libapache2-mod-php. Jotta PHP toimii public_html-kansioissa, täytyy kommentoida muutama rivi tiedostossa /etc/apache2/mods-available/php7.0.conf. Saltstackillä toteutan tämän siten, että kommentoin masterilla tiedoston valmiiksi ja laitan sen saltin kopioitavaksi kansioon /srv/salt/php. Viimeinen tila tarkistaa onko tiedostoa muutettu, ja käynnistää apachen uudelleen jos on. Tämän seurauksena toisella ajokerralla mitään ei muutu.

$ cat php/init.sls
libapache2-mod-php:
  pkg.installed

/etc/apache2/mods-available/php7.0.conf:
  file.managed:
    - source: salt://php/php7.0.conf

apache2:
  service.running:
    - watch:
      - file: /etc/apache2/mods-available/php7.0.conf

Tilan asettaminen

$ sudo salt live state.apply php --state-output terse
live:
  Name: libapache2-mod-php - Function: pkg.installed - Result: Changed
  Name: /etc/apache2/mods-available/php7.0.conf - Function: file.managed - Result: Changed
  Name: apache2 - Function: service.running - Result: Changed

Summary for live
------------
Succeeded: 3 (changed=3)
Failed:    0
------------
Total states run:     3

Jälleen toisella kerralla asettaessa tilaa tulee pelkkä succeeded, mitään ei muutu.

Testi minionilla

$ cd ~/public_html
$ mv index.html index.php
$ echo '6 * 6 = ' > index.php

Käyn selaimella katsomassa, siellä näkyy oikea vastaus.
phptoimii


Tehtävä 3

d) Rakenna tila (state), joka tekee Apachelle uuden nimipohjaisen virtuaalipalvelimen (name based virtual hosting). Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.

Toteutan tämän /etc/hosts-tiedoston avulla. Teen uuden kansion /srv/salt/hosts, johon laitan kaksi tiedostoa:

$ cat hosts/hosts
127.0.0.1 localhost salt.example.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

$ cat hosts/init.sls
/etc/hosts:
  file.managed:
    - source: salt://hosts/hosts

Asetettuani tilan huomasin, että kun ajaa sudo-komentoja minionilla, tulee ilmoitus:

$ sudo echo
sudo: unable to resolve host ubuntu

Komento edelleen toimii, mutta haluan poistaa tämän ilmoituksen. Tästä selvisi, että ilmoitus johtuu siitä, että laitteen nimi on poistettu /etc/hosts-tiedostosta tilamuutoksen seurauksena. Korjasin tämän ongelman käyttämällä file.blockreplaceä file.managedin sijaan, jonka löysin tästä. Blockreplace toimii siten, että saltstack muuttaa vain osaa tiedostosta. Tällainen tuli:

$ cat hosts/init.sls
/etc/hosts:
  file.blockreplace:
    - marker_start: "# START managed zone DO NOT EDIT"
    - marker_end: "# END managed zone"
    - content: "127.0.0.1    salt.example.com"
    - append_if_not_found: True
    - backup: '.bak'
    - show_changes: True

Poistin tiedoston hosts, koska sitä ei enää tarvittu. Ensimmäisellä kerralla kun salt asettaa tämän tilan, tiedoston /etc/hosts loppuun kirjoitetaan:

# START managed zone DO NOT EDIT
127.0.0.1    salt.example.com
# END managed zone

Kunhan näitä rivejä tiedostossa ei muuteta jälkikäteen, tila pysyy ennallaan, eikä muutosta tehdä.

Tilan asettaminen

$ sudo salt live state.apply hosts --state-output terse
live:
  Name: /etc/hosts - Function: file.blockreplace - Result: Changed

Summary for live
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

Testi minionilla

Tässä käyn vain katsomassa selaimella osoitetta salt.example.com.
saltexamplecom


Tehtävä 4

e) Tee tila, joka laittaa esimerkkikotisivun uusille käyttäjille. Voit laittaa esimerkkikotisivu /etc/skel/:iin, niin se tulee automaattisesti ‘adduser tero’ komennolla käyttäjiä luodessa.

$ cd /srv/salt
$ sudo mkdir skel
$ cd skel
$ sudo cp ../apache/index.html.example .
$ sudoedit init.sls
# tiedostoon kirjoitan
/etc/skel/public_html/index.html:
  file.managed:
    - source: salt://skel/index.html.example
    - makedirs: True

Piti muistaa lisätä makedirs: True, jotta salt luo myös public_html-kansion.

Tilan asettaminen

$ sudo salt live state.apply skel --state-output terse
live:
  Name: /etc/skel/public_html/index.html - Function: file.managed - Result: Changed

Summary for live
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

Testi minionilla

Teen uuden käyttäjän minionilla ja katson, että sille tosiaan luodaan omat sivut.

$ sudo adduser test1

Taas selaimella, tämän käyttäjän sivuille.
skeltest1

highstate ongelma

Tehtyäni tämän tehtävän halusin ottaa top.sls-käyttöön, jotta kaikki tilat päivittyvät automaattisesti. Mutta tuli tällainen virhe:

$ sudo salt '*' state.highstate
live:
    Data failed to compile:
----------
    Detected conflicting IDs, SLS IDs need to be globally unique.
    The conflicting ID is 'apache2' and is found in SLS 'base:apache' and SLS 'base:php'

Eli kahdella eri tilalla on samanniminen id, tämä ei näköjään ole sallittua. Katsoin grepillä missä tiedostoissa on samat id:t:

$ grep -rA 1 apache2:
apache/init.sls:apache2:
apache/init.sls-  pkg.installed
--
php/init.sls:apache2:
php/init.sls-  service.running:

Vielä en kuitenkaan korjannut tätä ongelmaa, mutta luulen, että se onnistuisi siten, että keksittäisiin id:t, ja laitettaisiin apache2 nameksi.


Tehtävä 5 (fail)

f) Eri asetukset. Tee Package-File-Service tilalla eri asetuksia kuin ne, mitä tehtiin tunnilla; ja eri kuin mitä teit/teet h2 muissa kohdissa. Voit muuttaa jotain toista asetusta samoista demoneista tai valita kokonaan eri demonit.

Firefoxin spell check on ihan turha minusta, joten haluan laittaa sen pois päältä. Yritän ensin manuaalisesti laittaa spell checkin pois, ja katsoa mitä firefoxin asetuksissa muuttuu. Jokaisella käyttäjällä on omat asetukset kansiossa ~/.mozilla. Siirryn tähän kansioon ja ajan komennon, joka etsii tekstiä ”spell” kaikista tiedostoista.

$ cd ~/.mozilla
$ grep -ri "spell" .
./m6qar7wg.default/prefs.js:user_pref("layout.spellcheckDefault", 0);
Binary file ./m6qar7wg.default/kinto.sqlite matches

Eli asetus näyttäisi olevan tiedostossa prefs.js. Kokeilen muuttaa sitä jollain tekstieditorilla ja katson firefoxissa muuttaako se oikeasti asetusta.

$ nano m6qar7wg.default/prefs.js
# painan ctrl-w avatakseni hakutoiminnon, kirjoitan "spell"
# vaihdan numeroksi 1

Käynnistin firefoxin uudelleen, asetus ei toimi näin. Huomasin, että pelkästään 0 toimii, koska jos haluaa että spell check on käytössä niin riviä ei ole tiedostossa lainkaan.

Tässä vaiheessa tajusin, että en osaa tehdä tätä SaltStackillä, enkä tiedä onko se edes mahdollista. Kansio, jossa tiedosto on, on kaikilla eriniminen, joten en tiedä miten Salt löytäisi sen. Tämän lisäksi jokaisella käyttäjällä on oma firefox kansio, joten Saltin pitäisi käydä kaikki käyttäjät läpi jotenkin.

Päivitys 30.4.2018: Sain tehtyä haluamani tilan harjoituksessa 5, käyttäen cmd.run-tilaa. Tila ei ole idempotentti, ja se tekee paljon oletuksia, mutta sopii minun käyttötarkoitukseen, Xubuntu live sessionin konffaamiseen.

Mainokset

Yksi vastaus artikkeliiin “Harjoitus 2

  1. Päivitysilmoitus: Harjoitus 3 – Veijonen.com

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s