|
|
- Palvelinten hallinta - Harjoitus 1
- ==============
-
- *Disclaimer:*
- --------------
-
- Tämä harjoitus on tehty osana Haaga-Helian Tietojenkäsittelyn koulutusohjelman kurssia [Palvelinten hallinta (ICT4TN022, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN022). Kurssin pitäjänä toimii [Tero Karvinen](http://terokarvinen.com/), joka on määritellyt tämän harjoituksen tehtävänkuvaukset. Tehtävien vastaukset ovat Pekka Heleniuksen (allekirjoittanut) tuottamia.
-
- *SISÄLLYSLUETTELO*
- --------------
-
- - [c) Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.](https://github.com/Fincer-altego/central-management-of-multiple-servers/blob/master/h1.md#c-asenna-salt-master-ja-slave-pull-arkkitehtuurilla-eli-master-on-server-voit-laittaa-herran-ja-orjan-my%C3%B6s-samalle-koneelle-kokeile-suorittamalla-saltilla-komentoja-et%C3%A4n%C3%A4)
-
- - [d) Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.](https://github.com/Fincer-altego/central-management-of-multiple-servers/blob/master/h1.md#d-kokeile-jotain-laineen-esimerkist%C3%A4-lainattua-tilaa-tai-tee-jostain-tilasta-oma-muunnelma-muista-testata-lopputuloksen-toimivuus-huomaa-ett%C3%A4-varastossa-on-my%C3%B6s-keskener%C3%A4isi%C3%A4-esimerkkej%C3%A4-kuten-battlenet-asennus-windowsille)
-
- - [e) Kerää laitetietoja koneilta saltin grains-mekanismilla.](https://github.com/Fincer-altego/central-management-of-multiple-servers/blob/master/h1.md#e-ker%C3%A4%C3%A4-laitetietoja-koneilta-saltin-grains-mekanismilla)
-
- - [f) Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).](https://github.com/Fincer-altego/central-management-of-multiple-servers/blob/master/h1.md#f-oikeaa-el%C3%A4m%C3%A4%C3%A4-s%C3%A4%C3%A4d%C3%A4-saltilla-jotain-pient%C3%A4-mutta-oikeaa-esimerkiksi-omalta-koneeltasi-tai-omalta-virtuaalipalvelimelta-kannattaa-kokeilla-saltia-oikeassa-el%C3%A4m%C3%A4ss%C3%A4-mutta-jos-se-ei-onnistu-rakenna-jotain-oikeaa-konettasi-vastaava-virtuaaliymp%C3%A4rist%C3%B6-ja-tee-asetus-siin%C3%A4)
-
- **c)** Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.
- --------------
-
- **Vastaus:**
-
- ```
- sudo apt-get update && sudo apt-get install salt-common salt-master salt-minion salt-ssh ssh
- ```
-
- Näistä salt-master ja salt-ssh (sekä ssh-palvelin) tulee asentaa isäntäkoneelle, salt-minion ja ssh-asiakasohjelma taas asiakaskoneelle. Tässä tapauksessa asennamme molemmat samalle koneelle.
-
- Käynnistetään salt-master:
-
- ```
- sudo systemctl enable salt-master.service
- sudo systemctl start salt-master.service
- ```
-
- Tarkistetaan salt-masterin status:
-
- ```
- systemctl status salt-master.service
- ```
-
- Käynnistetään salt-minion:
-
- ```
- sudo systemctl enable salt-minion.service
- sudo systemctl start salt-minion.service
- ```
-
- Tarkistetaan salt-minionin status:
-
- ```
- systemctl status salt-minion.service
- ```
-
- Haetaan salt-masterin IP-osoite komennolla ifconfig*. IP-osoitetta indikoi tulosteen kohta inet.
-
- *En käytä tässä Debian-pohjaisista jakeluista löytyvää [hostname -I](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562830) -komentoa, koska sitä ei ole muissa jakeluperheissä laajalti saatavilla oletuksena.
-
- Kerrotaan salt-minionille salt-masterin IP-osoite (tai koneen nimi) luotuun salt-minionin konfiguraatiotiedostoon /etc/salt/minion.
- Lisätään minionille ID-tunnus "orja".
-
- Lisätään seuraavat kentät (/etc/salt/minion):
-
- ```
- master: 127.0.0.1
- id: orja
- ```
-
- Käynnistetään salt-minion uudelleen:
-
- ```
- sudo systemctl restart salt-minion.service
- ```
-
- Ajetaan master-koneella komennot:
-
- ```
- sudo salt-key
- sudo salt-key -A
- ```
-
- Esimerkkituloste:
-
- ```
- fincer@computer:~$ sudo salt-key
- Accepted Keys:
- Denied Keys:
- Unaccepted Keys:
- orja
- Rejected Keys:
- fincer@computer:~$ sudo salt-key -A
- The following keys are going to be accepted:
- Unaccepted Keys:
- orja
- Proceed? [n/Y] y
- Key for minion orja accepted.
- ```
-
- Käynnistetään vielä salt-minion uudelleen:
-
- ```
- sudo systemctl restart salt-minion.service
- ```
-
- Ajetaan esimerkkikomento:
-
- ```
- fincer@computer:~$ sudo salt '*' cmd.run "ls /boot"
- orja:
- System.map-4.15.0-13-generic
- abi-4.15.0-13-generic
- config-4.15.0-13-generic
- grub
- initrd.img-4.15.0-13-generic
- memtest86+.bin
- memtest86+.elf
- memtest86+_multiboot.bin
- retpoline-4.15.0-13-generic
- vmlinuz-4.15.0-13-generic
- ```
-
- **d)** Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.
- --------------
-
- **Vastaus:**
-
- Luodaan master-koneelle kansiopolku /srv/salt
-
- ```
- sudo mkdir -p /srv/salt
- ```
-
- Lisätään tiedosto /srv/salt/top.sls ja /srv/salt/firewall.sls
-
- ```
- sudo touch /srv/salt/{top.sls,firewall.sls}
- ```
-
- Lisätään firewall.sls:een seuraava sisältö (sudoedit /srv/salt/firewall.sls):
-
- ```
- ufw:
- pkg.installed
-
- ufw-enable:
- cmd.run:
- - name: 'ufw --force enable'
- - require:
- - pkg: ufw
-
- ```
-
- Lähde: [joonaleppalahti - firewall.sls](https://github.com/joonaleppalahti/CCM/blob/master/salt/srv/salt/firewall.sls)
-
- Lisätään top.sls:een seuraava sisältö:
-
- ```
- base:
- 'orja':
- - firewall
-
- ```
-
- missä 'orja' on minionin (tai minioneiden, jos regex) ID-tunnus verkossa, ja 'firewall' viittaa masterin kansiossa /srv/salt olevaan tiedostoon firewall.sls, jonka sisältö orjalle ajetaan.
-
- Ajetaan masterilla komento:
-
- ```
- sudo salt '*' state.highstate
- ```
-
- jonka output on seuraavaa:
-
- ```
- fincer@computer:~$ sudo salt '*' state.highstate
- orja:
- ----------
- ID: ufw
- Function: pkg.installed
- Result: True
- Comment: All specified packages are already installed
- Started: 13:28:16.290668
- Duration: 858.482 ms
- Changes:
- ----------
- ID: ufw-enable
- Function: cmd.run
- Name: ufw --force enable
- Result: True
- Comment: Command "ufw --force enable" run
- Started: 13:28:17.190531
- Duration: 843.309 ms
- Changes:
- ----------
- pid:
- 10265
- retcode:
- 0
- stderr:
- stdout:
- Firewall is active and enabled on system startup
-
- Summary for orja
- ------------
- Succeeded: 2 (changed=1)
- Failed: 0
- ------------
- Total states run: 2
- Total run time: 1.718 s
-
- ```
-
- UFW-palomuuri oli jo orjakoneelle asennettuna, mutta ei kytkettynä päälle. Täten suoritettiin vain yksi muutos, joskin ajettiin kaksi komentoa orjalle.
-
- **e)** Kerää laitetietoja koneilta saltin grains-mekanismilla.
- --------------
-
- **Vastaus:**
-
- Kaikkien masterin hyväksymien minion-koneiden kaikki grains:t saa esille master-koneella ajettavalla komennolla:
-
- ```
- sudo salt '*' grains.ls
- ```
-
- Minioneiden salt:sta saa tietoja esimerkiksi seuraavasti (koskee kaikkia minion-koneita verkossa, ks. tähtimerkki):
-
- ```
- fincer@computer:~$ sudo salt '*' grains.items | grep saltversion -C 4
- - candidate
- - 1
- saltpath:
- /usr/lib/python3/dist-packages/salt
- saltversion:
- 2017.7.4
- saltversioninfo:
- - 2017
- - 7
- - 4
- - 0
- ```
-
- ja systemd:n pakettitietoja (flags) sekä versionumero:
-
- ```
- fincer@computer:~$ sudo salt '*' grains.item systemd
- orja:
- ----------
- systemd:
- ----------
- features:
- +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
- version:
- 237
- ```
-
- Jne.
-
- **f)** Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).
- --------------
-
- **Vastaus:**
-
- **HUOM!** Tehtävässä ei käytetty salt-ssh:ta!
-
- Asetetaan kaksi konetta samaan verkkoon. Toinen koneista on master, toinen minion.
-
- - Master-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.101
-
- - Minion-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.102
-
- - IP-osoitteet määriteltiin koneille DHCP-palvelimella
-
- Asennetaan Master ja Minion -konfiguraatiot kohdan c) -ohjeita mukaillen. Minion-koneella /etc/salt/minion -tiedostoon annetaan masterin IP-osoite ja orjakoneen ID muodossa
-
- ```
- master: 10.11.11.101
- id: orjakone
- ```
-
- minkä jälkeen ajetaan master-koneella komennot (HUOM! minion-kone ei heti näy salt-key:n listauksessa):
-
- ```
- sudo salt-key && sudo salt-key -A
- ```
-
- Output:
-
- ```
- fincer@master:~$ sudo salt-key && sudo salt-key -A
- Accepted Keys:
- Denied Keys:
- Unaccepted Keys:
- orjakone
- Rejected Keys:
- The following keys are going to be accepted:
- Unaccepted Keys:
- orjakone
- Proceed? [n/Y] y
- Key for minion orjakone accepted.
- ```
-
- Asennetaan LAMP-ympäristö ja /var/www/html/index.php orjakoneelle. Ajetaan masterilla seuraavat komennot:
-
- ```
- sudo mkdir -p /srv/salt
- echo "<?php phpinfo(); ?>" | sudo tee /srv/salt/index.php
- sudo wget https://raw.githubusercontent.com/joonaleppalahti/CCM/master/salt/srv/salt/lamp.sls -O /srv/salt/lamp.sls
- sudo sed -i '14,18d; s/salt\:\/\/webserver\//salt\:\/\//' /srv/salt/lamp.sls
- sudo salt 'orja*' state.apply lamp
- ```
-
- Wget:llä ladattu tiedosto sisältää määritykset myös index.html:lle, joita ei tässä laiteta. Siksi kys. tiedostoa koskevat rivit poistetaan em. sed-komennolla. Sed-komennolla poistetaan myös viittaus alihakemistoon webserver.
-
- Output onnistuneesta salt-komennosta (masterilla):
-
- ```
- fincer@master:~$ cat /srv/salt/lamp.sls
- install_lamp:
- pkg.installed:
- - pkgs:
- - apache2
- - libapache2-mod-php
-
- /var/www/html/index.php:
- file:
- - managed
- - source: salt://index.php
- - require:
- - pkg: install_lamp
-
- fincer@master:~$ sudo salt 'orja*' state.apply lamp
- orjakone:
- ----------
- ID: install_lamp
- Function: pkg.installed
- Result: True
- Comment: 2 targeted packages were installed/updated.
- Started: 15:07:24.960653
- Duration: 50817.827 ms
- Changes:
- ----------
- apache2:
- ----------
- new:
- 2.4.29-1ubuntu4
- old:
- apache2-api-20120211:
- ----------
- new:
- 1
- old:
- apache2-api-20120211-openssl1.1:
- ----------
- new:
- 1
- old:
- apache2-bin:
- ----------
- new:
- 2.4.29-1ubuntu4
- old:
- apache2-data:
- ----------
- new:
- 2.4.29-1ubuntu4
- old:
- apache2-utils:
- ----------
- new:
- 2.4.29-1ubuntu4
- old:
- httpd:
- ----------
- new:
- 1
- old:
- httpd-cgi:
- ----------
- new:
- 1
- old:
- libapache2-mod-php:
- ----------
- new:
- 1:7.2+60ubuntu1
- old:
- libapache2-mod-php7.2:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- libapr1:
- ----------
- new:
- 1.6.3-2
- old:
- libaprutil1:
- ----------
- new:
- 1.6.1-2
- old:
- libaprutil1-dbd-sqlite3:
- ----------
- new:
- 1.6.1-2
- old:
- libaprutil1-ldap:
- ----------
- new:
- 1.6.1-2
- old:
- liblua5.2-0:
- ----------
- new:
- 5.2.4-1.1build1
- old:
- php-calendar:
- ----------
- new:
- 1
- old:
- php-cli:
- ----------
- new:
- 1
- old:
- php-common:
- ----------
- new:
- 1:60ubuntu1
- old:
- php-ctype:
- ----------
- new:
- 1
- old:
- php-exif:
- ----------
- new:
- 1
- old:
- php-fileinfo:
- ----------
- new:
- 1
- old:
- php-ftp:
- ----------
- new:
- 1
- old:
- php-iconv:
- ----------
- new:
- 1
- old:
- php-json:
- ----------
- new:
- 1
- old:
- php-opcache:
- ----------
- new:
- 1
- old:
- php-pdo:
- ----------
- new:
- 1
- old:
- php-phar:
- ----------
- new:
- 1
- old:
- php-posix:
- ----------
- new:
- 1
- old:
- php-readline:
- ----------
- new:
- 1
- old:
- php-shmop:
- ----------
- new:
- 1
- old:
- php-sockets:
- ----------
- new:
- 1
- old:
- php-sysvmsg:
- ----------
- new:
- 1
- old:
- php-sysvsem:
- ----------
- new:
- 1
- old:
- php-sysvshm:
- ----------
- new:
- 1
- old:
- php-tokenizer:
- ----------
- new:
- 1
- old:
- php7.2-calendar:
- ----------
- new:
- 1
- old:
- php7.2-cli:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- php7.2-common:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- php7.2-ctype:
- ----------
- new:
- 1
- old:
- php7.2-exif:
- ----------
- new:
- 1
- old:
- php7.2-fileinfo:
- ----------
- new:
- 1
- old:
- php7.2-ftp:
- ----------
- new:
- 1
- old:
- php7.2-gettext:
- ----------
- new:
- 1
- old:
- php7.2-iconv:
- ----------
- new:
- 1
- old:
- php7.2-json:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- php7.2-opcache:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- php7.2-pdo:
- ----------
- new:
- 1
- old:
- php7.2-phar:
- ----------
- new:
- 1
- old:
- php7.2-posix:
- ----------
- new:
- 1
- old:
- php7.2-readline:
- ----------
- new:
- 7.2.3-1ubuntu1
- old:
- php7.2-shmop:
- ----------
- new:
- 1
- old:
- php7.2-sockets:
- ----------
- new:
- 1
- old:
- php7.2-sysvmsg:
- ----------
- new:
- 1
- old:
- php7.2-sysvsem:
- ----------
- new:
- 1
- old:
- php7.2-sysvshm:
- ----------
- new:
- 1
- old:
- php7.2-tokenizer:
- ----------
- new:
- 1
- old:
- phpapi-20170718:
- ----------
- new:
- 1
- old:
- ----------
- ID: /var/www/html/index.php
- Function: file.managed
- Result: True
- Comment: File /var/www/html/index.php updated
- Started: 15:08:15.783571
- Duration: 67.439 ms
- Changes:
- ----------
- diff:
- New file
- mode:
- 0644
-
- Summary for orjakone
- ------------
- Succeeded: 2 (changed=2)
- Failed: 0
- ------------
- Total states run: 2
- Total run time: 50.885 s
- ```
-
- Sekä:
-
- ```
- fincer@master:~$ sudo salt 'orjakone' cmd.run 'dpkg --get-selections | grep apache'
- orjakone:
- apache2 install
- apache2-bin install
- apache2-data install
- apache2-utils install
- libapache2-mod-php install
- libapache2-mod-php7.2 install
- ```
|