Niko Hukkanen

Tervetuloa verkkosivuilleni!

Tehtäviä

2021

Palvelinten hallinta kursssin tehtävien palautukset

Linkkejä tehtäviin

Salt ja idempotenssi (H1)

Niko Hukkanen 6.4.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home 2009)
  • Oracle VM VirtualBox 6.18 (OS: Debian 10.9)

Aloitus

Aloitin tehtävän luomalla uuden puhtaan Debian 10.9 virtuaalikoneen. Käytin tässä apuna aikaisempia kokemuksia käyttöjärjestelmien asennuksista Linux palvelimet kurssilla, sekä niistä tehtyjä raportteja. Kun olin asentanut uuden virtuaalikoneen ja päivittänyt järjestelmän paketinhallinnan, sekä käyttöjärjestelmän aloitin tehtävän teon. Päivitykset tapahtuivat komennoilla

sudo apt-get update
sudo apt-get dist-upgrade

Samalla asensin tulimuurin juuri asennetulle virtuaalikoneelle komennoilla:

sudo apt-get install ufw

Asennuksen jälkeen avasin tulimuuriin reiät etäyhteydelle ja saltille.

sudo ufw allow 22/tcp
sudo ufw allow 4505/tcp
sudo ufw allow 4506/tcp
sudo ufw enable

Tämän jälkeen tarkistin tulimuurin tilan komennolla sudo ufw verbose

tulimuuri

Tulimuuri on otettu käyttöön ja halutut portit ovat auki.

Salt masterin ja minionin asennus

Saltin asennuksessa käytin Teron ohjetta apuna. Tarkoituksena oli asentaa master ja minion samalle koneelle, ja saada näiden välille toimiva yhteys.

Masterin asennus

Asennuksessa kesti noin pari minuuttia ja käytin siinä seuraavia komentoja:

sudo apt-get update
sudo apt-get install salt-master

Asennuksen jälkeen selvitin master koneen IP-osoitteen komennolla:

hostname -I

Vastaukseksi sain osoitteen

10.0.2.15

Minion

Minionin asennus tapahtui seuraavilla komennoilla ja siinä meni noin minuutti:

sudo apt-get update
sudo apt-get install salt-minion

Asennuksen jälkeen siirryin muokkaamaan konfigurointi tiedostoa komennolla:

sudoedit /etc/salt/minion

Lisäsin tiedoston alkuun masterin IP-osoitteen ja id:n minionille.

minion

Tallensin tiedoston ja seuraavaksi käynnistin minionin uudelleen komennolla:

sudo systemctl restart salt-minion

Yhteys masterin ja minionin välillä

Uudelleenkäynnistyksen jälkeen hyväksyttiin minionin avain masterilla komennolla

sudo salt-key -A

avain

Kun avain oli hyväksytty, pystyin kokeilemaan toimisiko masterin ja minionin välinen yhteys komennoilla:

sudo salt '*' grains.item osfinger
sudo salt '*' cmd.run 'hostname -I'

testi

Ensimmäinen komento tulosti tiedon käyttöjärjestelmästä ja sen versiosta, toinen IP-osoitteen. Masterin ja minionin välinen yhteys oli saatu toimimaan tässä vaiheessa.

Idempotentti Saltille

Käytin idempotentin luomisessa Teron ohjetta apuna.

Loin kansion, johon tulee masterin ohjeet minioneille.

sudo mkdir /srv/salt

Seuraavaksi loin tila tiedoston kyseiseen polkuun

sudoedit /srv/salt/hello.sls

Tiedostoon lisättiin

/tmp/helloniko.txt:
  file.managed:
    - source: salt://helloniko.txt

Seuraavaksi loin tiedoston helloniko.txt komennolla sudo nano helloniko.txt Tiedostoon kirjoitin: Testi Hello world.

Tämän jälkeen ajoin komennon, jolla testasin tilan toimivuutta.

sudo salt '*' state.apply hello

salttesti

Seuraavaksi tarkistin löytyykö /tmp/ hakemistosta kyseistä tiedostoa.

tmps

Tiedosto löytyi halutusta paikasta ja sen sisältö sama, kuin aikaisemmin oli muokattu.

Tietoa koneesta Saltin avulla

Saltin verkkosivuilta löytyi tietoa siitä, kuinka grains komentoa käytetään. Komennolla: sudo salt '*' grains.items sain kaikki tiedot minionista. Kyseistä komentoa pystyi käyttämään myös siten, että jos haluaa vain tietoa tietyistä ominaisuuksista, se on mahdollista esimerkiksi seuraavalla komennolla:

sudo salt '*' grains.item cpu_model saltversion os kernelrelease osfinger

minioni

Komento tulosti tietoa prosessorista, kernelversiosta, käyttöjärjestelmästä, käyttöjärjestelmän versiosta, sekä saltin version. Tässä tapauksessa kaikki tiedot ovat samat masterilla ja minionilla, koska ne ovat samassa koneessa.

Toinen tila

Tein seuraavaksi toisenlaisen tilan, jonka tarkoituksena on asentaa kaksi ohjelmaa kaikille minioneille. Loin uuden tiedoston "packets.sls" hakemistoon /srv/salt/.

sudo nano packets.sls

Packets.sls sisältö

  /tmp/packets.txt:
 pkg.installed:
  - pkgs:
    - curl
    - htop

Seuraavaksi ajoin tilan komennolla sudo salt '*' state.apply packets

paketit

Salt ilmoitti sen, että ohjelmat ovat asentuneet. Lisäksi se ilmoitti myös niiden asennetut versiot, sekä ajan mikä kului asennuksessa.

Tämän jälkeen kokeilin asennettuja ohjelmia htoppia ja curlia. Molemmat asennetuista ohjelmista toimivat asennuksen jälkeen.

Lähteet

  • https://terokarvinen.com/2021/configuration-management-systems-palvelinten-hallinta-ict4tn022-spring-2021
  • http://terokarvinen.com/2018/salt-quickstart-salt-stack-master-and-slave-on-ubuntu-linux/index.html?fromSearch=
  • https://repo.saltstack.com/
  • https://terokarvinen.com/2018/salt-states-i-want-my-computers-like-this/
  • https://docs.saltproject.io/en/latest/topics/grains/index.html
  • https://docs.saltproject.io/en/latest/ref/states/all/salt.states.pkg.html
  • https://docs.saltproject.io/en/latest/

Package-File-Service (H2)

Niko Hukkanen 14.4.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home 2009)
  • Oracle VM VirtualBox 6.18 (OS: Debian 10.9)

Aloitus

Tarkoituksena on asentaa jokin demoni ja saada se toimimaan ensin masterilla, ja tämän jälkeen toimimaan minionilla asetusten kerran. Tässä harjoituksessa Master ja Minion ovat samalla koneella, joten joudun käyttämään komentoa sudo apt-get purge, jotta voisin poistaa ohjelman ja asentaa sen uudelleen Saltin avulla. Tässä tapauksessa päätin asentaa Apachen, koska se on jo aikaisemmalta kurssilta tuttu.

Apache demonin asennus masterille

Aloitin asennuksen ajamalla komennolla sudo apt-get update, jolla päivitin paketit. Pakettien päivityksen jälkeen käytin komentoa: sudo apt-get install apache2, jolla asensin Apachen. Kun Apache oli asentunut sen jälkeen otin käyttöön käyttäjien sivut käyttäen komentoa: sudo a2enmod userdir, komennolla jokainen henkilö voi tehdä omia verkkosivuja, kunhan heiltä löytyy oman käyttäjänsä hakemistosta kansio public_html. potkaisin demonin uudelleenkäyntiin komennolla: sudo systemctl restart apache2.

Loin itselleni public_html kansion hakemistoon /home/niko/, tähän kansioon loin index.html tiedoston ja testasin sen toimivuutta.

mkdir public_html
sudo nano index.html

asennus ja testi

Tässä vaiheessa muistin, että en ole vielä avannut porttia 80 Apachelle, joten avasin kyseisen portin komennolla: sudo ufw allow 80/tcp. Tarkistin vielä avoimet portit komennolla: sudo ufw verbose.

niko@nikonminion:/$ sudo ufw verbose
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
4505/tcp                   ALLOW       Anywhere                  
4506/tcp                   ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
4505/tcp (v6)              ALLOW       Anywhere (v6)             
4506/tcp (v6)              ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)   

Tarvittavat portit ovat avattu.

Asennus Saltilla

Asentaessani Apachea Saltilla päädyin käyttämään Teron ohjetta apunani. Aloitin siirtymällä hakemistoon /srv/salt/ ja luomalla tänne kansion komennolla:sudo mkdir apache2. Seuraavaksi loin juuri luomaani hakemistoon /srv/salt/apache2 tiedoston init.sls komennolla: sudo nano init.sls. init.sls sisältö:

apache2:
 pkg.installed
/var/www/html/index.html:
 file.managed:
   - source: salt://apache2/default-index.html
/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
apache2service:
 service.running:
   - name: apache2
   - watch:
     - file: /etc/apache2/mods-enabled/userdir.conf
     - file: /etc/apache2/mods-enabled/userdir.load

Tämän lisäksi loin samaan hakemistoon uuden tiedoston komennolla: sudo nano default-index.html. Kyseiseen tiedostoon kirjoitin: Tervetuloa vierailemaan osoitteessa: nikohukkanen.me.

Näiden toimenpiteiden jälkeen päätin ottaa luomani tilan käyttöön komennolla: sudo salt '*' state.apply apache2, joka ajaa tilan kaikilla minioneilla.

saltapache1

Tila ajaminen poisti kokonaan Apachen oletussivun, ja korvasin sen seuraavanlaisella tekstillä Tervetuloa vierailemaan osoitteessa: nikohukkanen.me

saltapache2

Tilan ajamisessa kului yhteensä 494.7 ms. Kaikki tilan osat toimivat ja toteutuivat. Tämän jälkeen, kun olin saanut varmuuden oman tilani toimivuudesta päätin poistaa apache2 asennuksen komennolla: sudo apt-get purge apache2 Kun olin poistanut Apachen ajoin tämän jälkeen tilani Saltilla komennolla: sudo salt '*' state.apply apache2, joka ajaa tilan kaikille minioneille.

final

final2

Toimintojen jälkeen kokeilin Firefoxilla miltä näyttävät seuraavat sivut localhost ja localhost/~niko/

firefoxtesti

Molemmat toimivat halutulla tavalla ja sivustoilta löytyi halutut tekstit.

Uusi ohjelma Saltilla

Päätin asentaa ja muokata UFW palomuuria seuraavaksi Saltilla. Tarkoituksena on varmistua siitä, että minioneilla on käytössä palomuuri ja siinä on avattu halutut portit. Tässä tapauksessa portit jotka halutaan auki ovat 4505, 4506, 22 ja 80. Käytin apuna Teron ohjetta jossa käytettään Saltilla komentoja. Koneessani oli jo aikaisemmin otettu käyttöön UFW palomuuri. Tämän vuoksi poistin sen ja asetukset, ennen kuin ajoin uuden tilani. Päätin kopioida halumani asetukset siten, että Salt ajaa asetukset komentoina eli esimerkiksi portin avaus:

ufw allow 4505/tcp:
 cmd.run

Loin kansion hakemistoon /srv/salt/ sudo mkdir ufw. Kun kansio oli luotu loin tänne tiedoston init.sls. Init.sls tiedoston sisältö:

ufw:
 pkg.installed
ufw allow 22/tcp:
  cmd.run
ufw allow 4505/tcp:
  cmd.run
ufw allow 4506/tcp:
  cmd.run
ufw allow 80/tcp:
  cmd.run
ufw enable:
  cmd.run
ufw.service:
  service.running:
    - enable: True
ufw verbose:
  cmd.run

Tilan kuvaus, käyttö ja testaus

Init.sls tarkistaa sen, että kyseinen ohjelma on asennettu. Seuraavat rivit avaavat halutut portit: 22, 4505, 4506 ja 80. TCP liikenteelle. Tämän jälkeen ufw otetaan käyttöön. Käyttöönoton jälkeen tarkistetaan se, että onko ufw päällä Lopuksi tila tulostaa ufw avatut portit, sekä ufw palomuurin tilan.

Ajoin tilan komennolla sudo salt '*' state.apply ufw, joka ajaa tilan kaikilla minioneilla.

niko:
----------
          ID: ufw
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: ufw
     Started: 03:08:38.204868
    Duration: 4609.781 ms
     Changes:   
              ----------
              ufw:
                  ----------
                  new:
                      0.36-1
                  old:
----------
          ID: ufw allow 22/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 22/tcp" run
     Started: 03:08:42.818855
    Duration: 167.319 ms
     Changes:   
              ----------
              pid:
                  19136
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 4505/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 4505/tcp" run
     Started: 03:08:42.986364
    Duration: 562.245 ms
     Changes:   
              ----------
              pid:
                  19171
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 4506/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 4506/tcp" run
     Started: 03:08:43.548781
    Duration: 370.854 ms
     Changes:   
              ----------
              pid:
                  19184
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 80/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 80/tcp" run
     Started: 03:08:43.919807
    Duration: 317.145 ms
     Changes:   
              ----------
              pid:
                  19197
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw enable
    Function: cmd.run
      Result: True
     Comment: Command "ufw enable" run
     Started: 03:08:44.237127
    Duration: 2834.671 ms
     Changes:   
              ----------
              pid:
                  19210
              retcode:
                  0
              stderr:
              stdout:
                  Firewall is active and enabled on system startup
----------
          ID: ufw.service
    Function: service.running
      Result: True
     Comment: The service ufw.service is already running
     Started: 03:08:47.921326
    Duration: 22.908 ms
     Changes:   
----------
          ID: ufw verbose
    Function: cmd.run
      Result: True
     Comment: Command "ufw verbose" run
     Started: 03:08:47.944420
    Duration: 84.126 ms
     Changes:   
              ----------
              pid:
                  19503
              retcode:
                  0
              stderr:
              stdout:
                  Status: active

                  To                         Action      From
                  --                         ------      ----
                  22/tcp                     ALLOW       Anywhere                  
                  4505/tcp                   ALLOW       Anywhere                  
                  4506/tcp                   ALLOW       Anywhere                  
                  80/tcp                     ALLOW       Anywhere                  
                  22/tcp (v6)                ALLOW       Anywhere (v6)             
                  4505/tcp (v6)              ALLOW       Anywhere (v6)             
                  4506/tcp (v6)              ALLOW       Anywhere (v6)             
                  80/tcp (v6)                ALLOW       Anywhere (v6)

Summary for niko
------------
Succeeded: 8 (changed=7)
Failed:    0
------------
Total states run:     8
Total run time:   8.969 s

Tarkistin vielä ufw tilan ajamalla komennon:sudo ufw verbose

niko@nikonminion:/srv/salt/ufw$ sudo ufw verbose
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
4505/tcp                   ALLOW       Anywhere                  
4506/tcp                   ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
4505/tcp (v6)              ALLOW       Anywhere (v6)             
4506/tcp (v6)              ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)       

Palomuuri oli otettu onnistuneesti käyttöön.

Päätin vielä testata palomuurin ja luomani tilan toimivuutta. Testinä koitin ottaa yhteyttä locahost porttiin 81

niko@nikonminion:/srv/salt/ufw$ curl 127.0.0.1:81
curl: (7) Failed to connect to 127.0.0.1 port 81: Connection refused
niko@nikonminion:/srv/salt/ufw$ curl 127.0.0.1:80
Tervetuloa vierailemaan osoitteessa: nikohukkanen.me

Portti 81 oli estetty ja ei toiminut. Portti 80 toimi ja tulosti Apachen verkkosivun, jota oli aikaisemmalla tilalla muokannut. Vielä viimeisenä testinä toiminnallisuudelle suljin manuaalisesti ufw palomuurin komennolla: sudo service ufw stop Tarkistin komennolla: sudo systemctl status ufw

ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enab
   Active: inactive (dead) since Wed 2021-04-14 03:23:34 EEST; 4s ago

Ufw prosessi oli epäaktiivinen, joten se oli sammunut aikaisemmalla komennolla. Seuraavaksi ajoin tilani sudo salt '*' state.apply ufw uudelleen. Kun sain tilani ajettua tarkistin uudelleen ufw prosessin tilan kommenolla: sudo systemctl status ufw, olisiko se vaikka heräillyt ajamani tilan jälkeen.

niko@nikonminion:~$ sudo systemctl status ufw
 ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
   Active: active (exited) since Wed 2021-04-14 03:24:31 EEST; 11min ago

Tila oli vaihtunut aktiiviseksi ja ufw oli käytössä.

Find-komento

Siirryin hakemistoon mistä löytyivät ufw asetustiedostot komennolla: cd /etc/ufw/. Seuraavaksi tarkistin muuttuneet tiedostot ajamalla komennon: sudo find -printf '%T+ M %p\n%A+ A %p\n%C+ C %p\n'|sort

2021-04-14+03:08:41.0000000000 A .
2021-04-14+03:08:41.0000000000 A ./after6.rules
2021-04-14+03:08:41.0000000000 A ./after.rules
2021-04-14+03:08:41.0000000000 A ./applications.d
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-bittorent
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-chat
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-directoryserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-dnsserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-fileserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-loginserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-mailserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-printserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-proxyserver
2021-04-14+03:08:41.0000000000 A ./applications.d/ufw-webserver
2021-04-14+03:08:41.0000000000 A ./before6.rules
2021-04-14+03:08:41.0000000000 A ./before.rules
2021-04-14+03:08:41.0000000000 A ./sysctl.conf
2021-04-14+03:08:41.2980000000 C ./applications.d/ufw-bittorent
2021-04-14+03:08:41.3020000000 C ./applications.d/ufw-chat
2021-04-14+03:08:41.3020000000 C ./applications.d/ufw-directoryserver
2021-04-14+03:08:41.3060000000 C ./applications.d/ufw-dnsserver
2021-04-14+03:08:41.3060000000 C ./applications.d/ufw-fileserver
2021-04-14+03:08:41.3100000000 C ./applications.d/ufw-loginserver
2021-04-14+03:08:41.3100000000 C ./applications.d/ufw-mailserver
2021-04-14+03:08:41.3100000000 C ./applications.d/ufw-printserver
2021-04-14+03:08:41.3140000000 C ./applications.d
2021-04-14+03:08:41.3140000000 C ./applications.d/ufw-proxyserver
2021-04-14+03:08:41.3140000000 C ./applications.d/ufw-webserver
2021-04-14+03:08:41.3140000000 C ./sysctl.conf
2021-04-14+03:08:41.3140000000 M ./applications.d
2021-04-14+03:08:41.4780000000 C ./before.rules
2021-04-14+03:08:41.5460000000 C ./before6.rules
2021-04-14+03:08:41.6100000000 C ./after.rules
2021-04-14+03:08:41.6740000000 C ./after6.rules
2021-04-14+03:08:41.6780000000 A ./after.init
2021-04-14+03:08:41.6780000000 A ./before.init
2021-04-14+03:08:41.6780000000 A ./user6.rules
2021-04-14+03:08:41.6780000000 A ./user.rules
2021-04-14+03:08:41.6780000000 C ./before.init
2021-04-14+03:08:41.6780000000 M ./after.init
2021-04-14+03:08:41.6780000000 M ./before.init
2021-04-14+03:08:41.6820000000 A ./ufw.conf
2021-04-14+03:08:41.6820000000 C .
2021-04-14+03:08:41.6820000000 C ./after.init
2021-04-14+03:08:41.6820000000 M .
2021-04-14+03:08:44.2980000000 C ./ufw.conf
2021-04-14+03:08:44.2980000000 M ./ufw.conf
2021-04-14+03:24:30.6220000000 C ./user.rules
2021-04-14+03:24:30.6220000000 M ./user.rules
2021-04-14+03:24:30.6260000000 C ./user6.rules
2021-04-14+03:24:30.6260000000 M ./user6.rules

Käyttämäni etsintä komento löytyi Teron ohjeesta.

Debug-tuloste

Sain debug-tilan ajettua komennolla: sudo salt-call --local state.apply apache2 -l debug

niko@nikonminion:~$ sudo salt-call --local state.apply apache2 -l debug

[DEBUG   ] Reading configuration from /etc/salt/minion
[DEBUG   ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG   ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG   ] Configuration file path: /etc/salt/minion
[WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
[DEBUG   ] Grains refresh requested. Refreshing grains.
[DEBUG   ] Reading configuration from /etc/salt/minion
[DEBUG   ] Including configuration from '/etc/salt/minion.d/_schedule.conf'
[DEBUG   ] Reading configuration from /etc/salt/minion.d/_schedule.conf
[DEBUG   ] The `lspci` binary is not available on the system. GPU grains will not be available.
[DEBUG   ] Please install 'virt-what' to improve results of the 'virtual' grain.
[DEBUG   ] Determining pillar cache
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] LazyLoaded state.apply
[DEBUG   ] LazyLoaded saltutil.is_running
[DEBUG   ] LazyLoaded grains.get
[DEBUG   ] LazyLoaded config.get
[DEBUG   ] LazyLoaded roots.envs
[DEBUG   ] Could not LazyLoad roots.init: 'roots.init' is not available.
[DEBUG   ] Updating roots fileserver cache
[DEBUG   ] Gathering pillar data for state run
[DEBUG   ] Determining pillar cache
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] Finished gathering pillar data for state run
[INFO    ] Loading fresh modules for state activity
[DEBUG   ] LazyLoaded jinja.render
[DEBUG   ] LazyLoaded yaml.render
[DEBUG   ] Could not find file 'salt://apache2.sls' in saltenv 'base'
[DEBUG   ] In saltenv 'base', looking at rel_path 'apache2/init.sls' to resolve 'salt://apache2/init.sls'
[DEBUG   ] In saltenv 'base', ** considering ** path '/var/cache/salt/minion/files/base/apache2/init.sls' to resolve 'salt://apache2/init.sls'
[DEBUG   ] compile template: /var/cache/salt/minion/files/base/apache2/init.sls
[DEBUG   ] Jinja search path: ['/var/cache/salt/minion/files/base']
[DEBUG   ] LazyLoaded roots.envs
[DEBUG   ] Could not LazyLoad roots.init: 'roots.init' is not available.
[PROFILE ] Time (in seconds) to render '/var/cache/salt/minion/files/base/apache2/init.sls' using 'jinja' renderer: 0.019901514053344727
[DEBUG   ] Rendered data from file: /var/cache/salt/minion/files/base/apache2/init.sls:
apache2:
 pkg.installed
/var/www/html/index.html:
 file.managed:
   - source: salt://apache2/default-index.html
/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
apache2service:
 service.running:
   - name: apache2
   - watch:
     - file: /etc/apache2/mods-enabled/userdir.conf
     - file: /etc/apache2/mods-enabled/userdir.load

[DEBUG   ] Results of YAML rendering: 
OrderedDict([('apache2', 'pkg.installed'), ('/var/www/html/index.html', OrderedDict([('file.managed', [OrderedDict([('source', 'salt://apache2/default-index.html')])])])), ('/etc/apache2/mods-enabled/userdir.conf', OrderedDict([('file.symlink', [OrderedDict([('target', '../mods-available/userdir.conf')])])])), ('/etc/apache2/mods-enabled/userdir.load', OrderedDict([('file.symlink', [OrderedDict([('target', '../mods-available/userdir.load')])])])), ('apache2service', OrderedDict([('service.running', [OrderedDict([('name', 'apache2')]), OrderedDict([('watch', [OrderedDict([('file', '/etc/apache2/mods-enabled/userdir.conf')]), OrderedDict([('file', '/etc/apache2/mods-enabled/userdir.load')])])])])]))])
[PROFILE ] Time (in seconds) to render '/var/cache/salt/minion/files/base/apache2/init.sls' using 'yaml' renderer: 0.0035295486450195312
[DEBUG   ] LazyLoaded config.option
[DEBUG   ] LazyLoaded pkg.install
[DEBUG   ] LazyLoaded pkg.installed
[WARNING ] /usr/lib/python3/dist-packages/salt/utils/decorators/signature.py:31: DeprecationWarning: `formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directly
  *salt.utils.args.get_function_argspec(original_function)

[WARNING ] /usr/lib/python3/dist-packages/salt/utils/path.py:265: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  if not isinstance(exes, collections.Iterable):

[WARNING ] /usr/lib/python3/dist-packages/salt/utils/decorators/signature.py:31: DeprecationWarning: `formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directly
  *salt.utils.args.get_function_argspec(original_function)

[WARNING ] /usr/lib/python3/dist-packages/salt/utils/decorators/signature.py:31: DeprecationWarning: `formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directly
  *salt.utils.args.get_function_argspec(original_function)

[DEBUG   ] LazyLoaded systemd.booted
[DEBUG   ] DSC: Only available on Windows systems
[DEBUG   ] Module PSGet: Only available on Windows systems
[DEBUG   ] LazyLoaded platform.is_windows
[DEBUG   ] Could not LazyLoad pkg.ex_mod_init: 'pkg.ex_mod_init' is not available.
[INFO    ] Running state [apache2] at time 04:17:53.526027
[INFO    ] Executing state pkg.installed for [apache2]
[DEBUG   ] Could not LazyLoad pkg.resolve_capabilities: 'pkg.resolve_capabilities' is not available.
[INFO    ] Executing command ['dpkg-query', '--showformat', '${Status} ${Package} ${Version} ${Architecture}', '-W'] in directory '/root'
[DEBUG   ] Could not LazyLoad pkg.normalize_name: 'pkg.normalize_name' is not available.
[INFO    ] All specified packages are already installed
[INFO    ] Completed state [apache2] at time 04:17:53.930689 (duration_in_ms=404.662)
[DEBUG   ] LazyLoaded file.managed
[INFO    ] Running state [/var/www/html/index.html] at time 04:17:53.932931
[INFO    ] Executing state file.managed for [/var/www/html/index.html]
[DEBUG   ] LazyLoaded roots.envs
[DEBUG   ] Could not LazyLoad roots.init: 'roots.init' is not available.
[DEBUG   ] In saltenv 'base', looking at rel_path 'apache2/default-index.html' to resolve 'salt://apache2/default-index.html'
[DEBUG   ] In saltenv 'base', ** considering ** path '/var/cache/salt/minion/files/base/apache2/default-index.html' to resolve 'salt://apache2/default-index.html'
[INFO    ] File /var/www/html/index.html is in the correct state
[INFO    ] Completed state [/var/www/html/index.html] at time 04:17:53.952137 (duration_in_ms=19.205)
[INFO    ] Running state [/etc/apache2/mods-enabled/userdir.conf] at time 04:17:53.952256
[INFO    ] Executing state file.symlink for [/etc/apache2/mods-enabled/userdir.conf]
[INFO    ] Symlink /etc/apache2/mods-enabled/userdir.conf is present and owned by root:root
[INFO    ] Completed state [/etc/apache2/mods-enabled/userdir.conf] at time 04:17:53.953503 (duration_in_ms=1.247)
[INFO    ] Running state [/etc/apache2/mods-enabled/userdir.load] at time 04:17:53.953623
[INFO    ] Executing state file.symlink for [/etc/apache2/mods-enabled/userdir.load]
[INFO    ] Symlink /etc/apache2/mods-enabled/userdir.load is present and owned by root:root
[INFO    ] Completed state [/etc/apache2/mods-enabled/userdir.load] at time 04:17:53.954839 (duration_in_ms=1.216)
[DEBUG   ] LazyLoaded service.running
[INFO    ] Running state [apache2] at time 04:17:53.959317
[INFO    ] Executing state service.running for [apache2]
[INFO    ] Executing command ['systemctl', 'status', 'apache2.service', '-n', '0'] in directory '/root'
[DEBUG   ] stdout: * apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2021-04-13 18:44:32 EEST; 9h ago
     Docs: https://httpd.apache.org/docs/2.4/
 Main PID: 11982 (apache2)
    Tasks: 55 (limit: 4659)
   Memory: 21.8M
   CGroup: /system.slice/apache2.service
           |-11982 /usr/sbin/apache2 -k start
           |-11983 /usr/sbin/apache2 -k start
           `-11984 /usr/sbin/apache2 -k start
[INFO    ] Executing command ['systemctl', 'is-active', 'apache2.service'] in directory '/root'
[DEBUG   ] stdout: active
[INFO    ] Executing command ['systemctl', 'is-enabled', 'apache2.service'] in directory '/root'
[DEBUG   ] stdout: enabled
[INFO    ] The service apache2 is already running
[INFO    ] Completed state [apache2] at time 04:17:53.983243 (duration_in_ms=23.926)
[DEBUG   ] File /var/cache/salt/minion/accumulator/140216476096832 does not exist, no need to cleanup
[DEBUG   ] LazyLoaded state.check_result
[DEBUG   ] LazyLoaded highstate.output
local:
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 04:17:53.526027
    Duration: 404.662 ms
     Changes:   
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html is in the correct state
     Started: 04:17:53.932932
    Duration: 19.205 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.conf
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.conf is present and owned by root:root
     Started: 04:17:53.952256
    Duration: 1.247 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.load
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.load is present and owned by root:root
     Started: 04:17:53.953623
    Duration: 1.216 ms
     Changes:   
----------
          ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: The service apache2 is already running
     Started: 04:17:53.959317
    Duration: 23.926 ms
     Changes:   

Summary for local
------------
Succeeded: 5
Failed:    0
------------
Total states run:     5
Total run time: 450.256 ms

Ajoin aikaisemmin luomani Apache tilan lokaalisti. Alkuvaiheessa debug tilassa näkyy ohjelman toiminta, jota ei ilman debug tilaa näy. Ensimmäisillä riveillä ohjelma lukee konfiguraatio tiedostoja hakemistosta /etc/salt/minion. Debug tilassa näkee Saltilla ajettavan tilan ajamisen livenä. Tästä on hyötyä, mikäli tila ei toimi tai haluaa tarkastella tarkemmin ajettavan tilan toimintaa.

Lähteet

Versionhallinta (H3)

Niko Hukkanen 21.4.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home 2009)
  • Oracle VM VirtualBox 6.18 (OS: Debian 10.9)

Markdown

Olen kirjoittanut aikaisemmat kotitehtäväni käyttäen Markdownia, joten tämäkin kotitehtävä on kirjoitettu alun perin Markdownilla. Aikaisemmat kotitehtäväni löytyvät osoiteesta Github. Loppujen lopuksi olen julkaissut tehtäväni omilla verkkosivuilla. Olen muokannut Markdownin HTML tiedostoksi käyttäen erästä konvertteria, joka muuntaa markdownin HTML muotoon.

Git

Käytin Gitin käyttöönotossa ohjeena Teron kirjoittamaa artikkelia. Git ohjelmaa ei ollut vielä asennettu käyttämälleni virtuaalikoneelle, Ennen asennusta päivitin paketit komennolla: sudo apt-get update. Tämän jälkeen asensin Gitin komennolla: sudo apt-get install git . Asentamisen jälkeen muokkasin käyttäjätietoja Gitin sisällä komennoilla:

 git config --global user.email "niko.hukkanen@myy.haaga-helia.fi"
 git config --global user.name "Niko Hukkanen"

Käyttäjätiedot näkyvät muokkauksissa ja lokien tiedoissa. Asentamisen jälkeen loin paikallisen git varaston virtuaalikoneelleni git init testirepo. Paikallisen Git varaston luomisen jälkeen loin varastoon sisältöä, kuten seuraavat tiedostot README.md, ja help.md Kun olin luonut sisältöä hakemistoon ajoin seuraavat komennot.

git add .
git commit

Komento: git log

Komento Git log näyttää viimeisimmät varastoinnit varastoon, ja sen kuka on tehnyt nämä muutokset. Jokaisella varastoinnilla ja muokkauksella on oma koodinsa, jonka näkee kohdassa "commit". Git log ilmoittaa myös muokkauksen yhteydessä kirjoittaman viestin. Git log komennolla näkyy myös, tarkka aika ja päivämäärä muokkaukselle, kuten myös muokkaajan nimi ja sähköposti tässä tapauksessa. Kuvassa näkyy aikaisemmin muokkaamani nimi ja sähköpostiosoite. gitlog

Komento: git diff

Komento kertoo eron tiedostojen välillä, tässä esimerkissä on muokattu README.md tiedostoa. Eron huomaa + merkistä eli paikallisessa versiossa on lisätty tekstiä rivin "Moi" jälkeen, jota ei löydy tällä hetkellä Git varastossa olevasta README.md tiedostosta.

gitdiff

Komento: git blame

Komennolla nähdään kuka on tehnyt muutoksia tiedostoon README.md. Komentorivillä alussa näkyy versio koodit, jokaiselle muokkaukselle. Niiden tarkoitus on kertoa kaikki mitä sillä muokkaus ja tallennus keralla on tehty.

^700f3a0: Ensimmäinen muokkaus tiedostoon

39db38bb: Toinen muokkaus tiedostoon.

00000000: Muutosta ei ole vielä ajettu läpi komennoilla git add . ja git commit, joten tämä on paikallinen versio. Eikä sitä löydy Git varastossa olevasta README.md tiedostosta.

gitblame

Tyhmä muutos Gittiin ja sen korjaus

Muokkasin testirepo hakemistossa olevia help.md ja README.md tiedostoja. Lisäsin kumpaankin hieman Lorem ipsumia nanolla, aikaisempien muokkausten perään. gitdum

Kun olin tallentanut muokkaamani .md tiedostot, ajoin komennon: git reset -- hard. Komento palautti tiedostot aikaisempaan commit versioon 2908c04. Eli tässä tapauksessa ilman Lorem ipsumia olevaan aikaisempaan committiin.

gitundum

Uusi Salt-moduuli

Loin uuden Salt-moduulin, joka asentaa www-palvelinohjelman nimeltä nginx. Moduulin tarkoituksena on luoda hakemistoon var/www/ tiedosto nimeltä index.html ja seurata sitä. Lopuksi Salt tila seuraa, että ohjelma pysyy päällä. Aloitin asentamalla nginx www-palvelimen komennolla: sudo apt-get install nginx. Tämän jälkeen käynnistin kyseisen ohjelman uudelleen komennolla: sudo systemctl restart nginx. Avasin UFW-palomuurista reiän portille 80/tcp liikenteelle: sudo ufw allow 80/tcp. Tarkistin Firefoxilla locahost sivun.

nginx

Nginx oli lähtenyt toimimaan, joten seuraavaksi pystyin siirtymään Salt tilan pariin. Loin kansion hakemistoon /srv/salt/nginx. sudo mkdir nginx. Loin kyseiseen hakemistoon tiedoston nanolla: sudo nano init.sls. Init.sls tiedoston sisältö:

nginx:
  pkg.installed
/var/www/html/index.html:
  file.managed:
    - source: salt://nginx/index.html
nginx.service:
  service.running:
    - enable: True

Kun olin luonut init.sls tiedoston, loin vielä index.html tiedoston hakemistoon /srv/salt/nginx.

sudo nano index.html

index.html sisältö:

Tervetuloa vierailemaan verkkosivuilleni nikohukkanen.me!

Seuraavaksi testasin toiminnan ajamalla komennon: sudo salt '*' state.apply nginx.

niko:
----------
          ID: nginx
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 05:35:32.505075
    Duration: 448.727 ms
     Changes:   
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html is in the correct state
     Started: 05:35:32.955546
    Duration: 16.148 ms
     Changes:   
----------
          ID: nginx.service
    Function: service.running
      Result: True
     Comment: The service nginx.service is already running
     Started: 05:35:32.972142
    Duration: 33.143 ms
     Changes:   

Summary for niko
------------
Succeeded: 3
Failed:    0
------------
Total states run:     3
Total run time: 498.018 ms

Tekemäni ohjelma toimi halutusti. Tämän jälkeen päätin poistaa index.html tiedoston hakemistosta var/www/html/. Myös tässä vaiheessa poistin nginx komennolla: sudo apt-get purge nginx. Ajoin vielä komennon: sudo apt-get autoremove. Tässä vaiheessa jouduin käyttämään ohjetta, miten nginx poistetaan kokonaan, koska en saanut sitä poistettua aikaisemmin käyttämilläni komennoilla. Löysin ohjeen Nginx poistolle. Ajoin seuraavat komennot:

sudo apt-get purge nginx
sudo service nginx stop
sudo rm -rf /etc/nginx /etc/default/nginx /usr/sbin/nginx* /usr/local/nginx /var/run/nginx.pid /var/log/nginx 
sudo rm -rf /etc/init.d/nginx /etc/logrotate.d/nginx /var/lib/update-rc.d/nginx
sudo rm -rf /var/www
sudo update-rc.d -f nginx disable

Näiden komentojen jälkeen sain poistettua Nginx kokonaan. Kun olin poistanut tiedostot ajoin ohjelman uudelleen komennolla: sudo salt '*' state.apply nginx.

niko:
----------
          ID: nginx
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: nginx
     Started: 05:56:32.202031
    Duration: 4814.85 ms
     Changes:   
              ----------
              httpd:
                  ----------
                  new:
                      1
                  old:
              httpd-cgi:
                  ----------
                  new:
                      1
                  old:
              libnginx-mod-http-auth-pam:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-dav-ext:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-echo:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-geoip:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-image-filter:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-subs-filter:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-upstream-fair:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-http-xslt-filter:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-mail:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              libnginx-mod-stream:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              nginx:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              nginx-common:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
              nginx-full:
                  ----------
                  new:
                      1.14.2-2+deb10u3
                  old:
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html updated
     Started: 05:56:37.021677
    Duration: 25.067 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0644
----------
          ID: nginx.service
    Function: service.running
      Result: True
     Comment: Service nginx.service is already enabled, and is running
     Started: 05:56:37.889339
    Duration: 73.658 ms
     Changes:   
              ----------
              nginx.service:
                  True

Summary for niko
------------
Succeeded: 3 (changed=3)
Failed:    0
------------
Total states run:     3
Total run time:   4.914 s

Asennus onnistui ja Nginx oli nyt toiminnassa. Tämän jälkeen testasin localhost sivuston Firefoxilla.

works

Locahost osoitteessa oli näkyvillä aikaisemmin muokkaamani index.html tiedosto, joten tila toimi halutulla tavalla.

Lähteet

Uusi komento (H4)

Niko Hukkanen 22.4.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home 2009)
  • Oracle VM VirtualBox 6.18 (OS: Debian 10.9)
  • Salt: minion ja master löytyvät samasta virtuaalikoneesta.

Hello world uusi komento

Tarkoituksena on luoda uusi komento, joka toimii minioneilla ja se jaetaan Saltin avulla. shebangin #!/bin/bash ansiosta tiedosto voidaan tallentaa ilma .sh loppua. Aloitin luomalla uuden kansion hakemistoon /srv/salt/ komennolla: sudo mkdir helloworld. Kun olin luonut uuden kansion loin sinne oman komentotiedoston helloworld. Helloworld tiedoston sisältö:

#!/bin/bash
echo Hello world!
echo Visit nikohukkanen.me

Seuraavaksi muokkasin helloworld tiedoston oikeuksia komennolla: sudo chmod 755 helloworld.

helloworld

Tarkistin vielä komennolla: ls -l sen, että tiedoston helloworld oikeudet ovat muuttuneet. Kun ajoin bash scriptin se tulosti haluamani tekstin:

Hello world!
Visit nikohukkanen.me

Tämän jälkeen siirryin muokkaamaan init.sls tiedostoa. init.sls tiedoston sisältö:

/usr/local/bin/helloworld:
  file.managed:
  - source: salt://helloworld/helloworld/
  - mode: "0755"

Salt tila lisää tiedoston hakemistoon /usr/local/bin/ ja antaa sille oikeuden lukea ja ajaa kyseisen tiedoston. Seuraavaksi ajoin Salt tilan komennolla: sudo salt '*' state.apply helloworld. Tämän jälkeen kokeilin kirjoittaa komentoriville: "helloworld" ja se tulosti seuraavanlaisen tulosteen:

niko@nikonminion:~$ helloworld
Hello world!
Visit nikohukkanen.me

Tiedosto toimi halutulla tavalla ja tulosti halutun tekstin. Testasin vielä poistaa kyseisen tiedoston ja ajaa Salt tilan uudelleen.

sudo rm /usr/local/bin/helloworld
sudo salt '*' state.apply helloworld

Salt tuloste:

niko@nikonminion:/usr/local/bin$ sudo salt '*' state.apply helloworld
niko:
----------
          ID: /usr/local/bin/helloworld
    Function: file.managed
      Result: True
     Comment: File /usr/local/bin/helloworld updated
     Started: 12:46:12.172480
    Duration: 20.618 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0755

Summary for niko
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  20.618 ms

Tämän jälkeen testasin vielä ajaa komennon helloworld komentorivillä. Se toimi halutulla tavalla ja tulosti:

Hello world!
Visit nikohukkanen.me

Tarkistin hakemistossa usr/local/bin olevan helloworld tiedoston oikeudet sen jälkeen kun, olin ajanut Salt tilani.

oikeudet

Tiedostolle oli siirtynyt halutut oikeudet, kun se oli siirretty Saltilla.

Whatsup-komento

Tarkoituksena on luoda komento, joka kerto seuraavia asioita: päivämäärän ja tietoja koneesta. Kyseinen tiedosto siirretään Salt tilan avulla masterilta minioneille hakemistoon /usr/local/bin/, jotta se toimisi suoraan komentoriviltä ilman sudo oikeuksia. Aloitin luomalla kansion whatsup svr/salt/ hakemistoon. Loin kansion komennolla sudo mkdir whatsup. Kun olin luonut kansion siirryin tekemään komentoa: sudoedit whatsup. Tallensin tiedoston uuden whatsup kansion sisälle. Tiedoston whatsup sisältö:

#!/bin/bash
echo Hello
whoami
echo and welcome!

echo Date and time:
Year=`date +%Y`
Month=`date +%m`
Day=`date +%d`
Hour=`date +%H`
Minute=`date +%M`
Second=`date +%S`
echo "Date: $Day-$Month-$Year"
echo "Time: $Hour:$Minute:$Second"

echo Host information:
hostname
hostname -i
echo Uptime:
uptime

Kun olin luonut haluamani komennon muokkasin vielä tiedoston oikeuksia komennolla: sudo chmod 755 whatsup. Seuraavaksi ajoin komennon kirjoittamalla komentoriville ./whatsup.

whatsupp

Ajamani komento tulosti halutun lopputuloksen.

Kun olin saanut whatsup tiedoston toimimaan siirryin luomaan Salt tilaa kyseiselle tiedostolle. Loin uuden init.sls tiedoston komennolla: sudoedit init.sls Tiedoston sisältö:

/usr/local/bin/whatsup:
      file.managed:
      - source: salt://whatsup/whatsup/
      - mode: "0755"

Ajoin komennon ja se toimi halutulla tavalla. Seuraavaksi kokeilin antaa komentorivillä komennon: whatsup. Komento tulosti halutut tiedot whatsup tiedostosta. Lopuksi kokeilin vielä poistaa kyseisen tiedoston hakemistosta /usr/local/bin/ ja ajaa sen.

sudo rm /usr/local/bin/whatsup

Kun olin poistanut kyseisen tiedoston kokeilin ajaa sen kirjoittamalla komentoriville: whatsup. Vastaukseksi sain:

niko@nikonminion:~$whatsup
bash: whatsup: command not found

Komento ei toiminut tämän jälkeen. Seuraavaksi ajoin Salt tilani uudelleen ja testasin, toimiiko whatsup komento sen jälkeen.

sudo salt '*' state.apply whatsup

Salt tuloste:

niko@nikonminion:/usr/local/bin$ sudo salt '*' state.apply whatsup
niko:
----------
          ID: /usr/local/bin/whatsup
    Function: file.managed
      Result: True
     Comment: File /usr/local/bin/whatsup updated
     Started: 13:10:07.935053
    Duration: 21.833 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0755

Summary for niko
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  21.833 ms

Salt tilan ajamisen jälkeen komento whatsup toimi jälleen komentorivillä kirjoittamalla whatsup komentoriville.

whatsupp2

Python3 hei mailma

Loin kansion hakemistoon /srv/salt/ komennolla: sudo mkdir hellopython. Kansion luonnin jälkeen loin tiedoston heipy komennolla: sudoedit heipy. Python tiedoston heipy sisältö:

#!/usr/bin/python3
print("Hello world this is Python!")

Pythonin tarkoitus on tulostaa seuraavanlainen teksti: Hello world this is Python! Testasin pythonin toimivuuden ajamalla sen komennolla: python heipy. Ohjelma tulosti seuraavanlaisen tekstin: Hello world this is Python!.

Kun olin testannut python ohjelmani toimivuuden siirryin luomaan Salt tilaa, joka asentaa kyseisen ohjelman masterilta minioneille. Loin tiedoston init.sls hakemistoon /srv/salt/hellopython. init.sls tiedoston sisältö:

/usr/local/bin/heipy:
  file.managed:
    - source: salt://hellopython/heipy/
    - mode: "0755"

Kun olin luonut init.sls tiedoston, päätin kokeilla ajaa kyseisen Salt tilan komennolla: sudo salt '*' state.apply hellopython. Salt:

niko@nikonminion:/srv/salt/hellopython$ sudo salt '*' state.apply hellopython
niko:
----------
          ID: /usr/local/bin/heipy
    Function: file.managed
      Result: True
     Comment: File /usr/local/bin/heipy updated
     Started: 13:54:03.363630
    Duration: 20.466 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0755

Summary for niko
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  20.466 ms

Kun olin ajanut tilan kokeilin, ajaa komennon heipy komentorivillä. Vastaukseksi sain seuraavan:

heipy

Python ohjelmani oli ajettavissa suoraan komentoriviltä, käyttäen komentoa heipy.

Kansio scripteille

Kansion tarkoituksena on siirtää masterilta minioneille kansion sisältö ja sieltä löytyvät tiedostot haluttuun paikkaan. Aloitin luomalla kansion hakemistoon srv/salt/ komennolla: sudo mkdir scripts. Tämän lisäksi loin tähän hakemistoon uuden kansion scripteille. sudo mkdir folder, jonka sisälle tuli siirrettävät tiedostot. Loin kyseiseen kansioon kaksi uutta tiedostoa ja muokkasin niiden oikeuksia komennolla: sudo chmod 755 heiniko information.

scriptit

heiniko tiedoston sisältö:

#!/bin/bash
echo Hei Niko!

Tiedoston information sisältö:

#!/bin/bash
echo Host information:
hostname
hostname -i
echo Uptime:
uptime

Kun olin luonut kaksi uutta tiedostoa kansioon scripts siirryin tekemään Salt tilaa, jolla siirretään kansion tiedostot hakemistoon /usr/local/bin/.

sudoedit init.sls

Tiedoston init.sls sisältö:

/usr/local/bin/:
  file.recurse:
    - source: salt://scripts/folder
    - file_mode: "0755"

Kun olin luonut Salt tilan ja ajoin kyseisen tilan komennolla: sudo salt '*' state.apply scripts.

Salt tila:

niko@nikonminion:/srv/salt/scripts$ sudo salt '*' state.apply scripts
niko:
----------
          ID: /usr/local/bin/
    Function: file.recurse
      Result: True
     Comment: Recursively updated /usr/local/bin/
     Started: 14:21:04.324202
    Duration: 94.083 ms
     Changes:   
              ----------
              /usr/local/bin/heiniko:
                  ----------
                  diff:
                      New file
                  mode:
                      0755
              /usr/local/bin/information:
                  ----------
                  diff:
                      New file
                  mode:
                      0755

Summary for niko
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  94.083 ms

Ajettuani Salt tilan tarkistin hakemistosta /usr/local/bin/ ovatko tiedostoni siirtyneet, sekä ovatko ne saaneet oikeat oikeudet. Tämän lisäksi ajoin vielä siirtämäni komennot: heiniko ja information.

scriptit2

Siirtämäni kaksi tiedostoa olivat siirtyneet Salt tilalla oikeilla oikeuksilla, sekä ne toimivat, kun niitä kokeili ajaa.

Kolme vanhaa loppuprojektia

Ensimmäinen loppuprojekti - Ella Parviainen

Ella Parviainen

Raportissa asennetaan Salt master/minion ja näiden sen avulla LAMP ja UFW. LAMP (apache, php, mariadb) asennettiin ensin käsin ja sen jälkeen Saltilla. Apachea asennettaessa käytettiin Teron ohjetta ja siinä muokattiin Apachen oletussivua index.html ja otettiin käyttöön userdir ominaisuus. Tämän lisäksi asennettiin UFW-palomuuri ja muokattiin sen asetustiedostoja. Kun nämä Salt tilat olivat tehty, luotiin top.sls tiedosto ja sillä ajettiin kaikki nämä tilat ja niiden muokkaukset yhdellä komennolla.

Toinen loppuprojekti - Teemu Heinonen

Teemu Heinonen

Toisessa lukemassani loppuraportissa asennetaan Apache, Salt master/minion, Python ja Pythonflask. Näiden avulla luodaan tila jolla, otetaan Apache käyttöön ja luodaan modwsgi tiedosto. Tämän lisäksi Python flaskilla ja wtformsilla luodaan lomake, jolla voidaan antaa palautetta, joka tallentuu tietokantaan.

Kolmas loppuprojekti - Jarno Wermundsen

Jarno Wermundsen

Kolmannessa loppuprojektissa asennetaan ohjelmia ja päivitetään niitä Salt tilojen avulla, Masterina toimii Ubuntu linuxpalvelin. Mielenkiintoista oli se, että hallitavina koneina oli Linux sekä Windows koneita. Raportissa oli asennettu seuraavat ohjelmat: Chrome, Git, Chocolateyn ja Cygwin Windows koneille ja Linux koneille ssh, Git, Firefox ja päivitykset ohjelmille.

Infraa koodina

Samalla kun etsin vanhoja moduuleita, löysin monia erilaisia valmiita Salt tiloja Githubista. Valitsin Githubista Sampo Hautalan Apachen asennuksen Saltilla. Latasin Apache kansion ja siirsin sen omalla virtuaalikoneellani hakemistoon srv/salt/apache ja jouduin hieman muokkaamaan alkuperäistä koodia. Alla olevassa koodissa jouduin muokkaamaan /home/ kohtaa ja korvaaman xubuntu käyttäjän omallani eli, /home/niko/public_html/index.html, Jouduin myös muokkaamaan mode: 660 kohtaa seuraavanlaisesti mode: "0755". Jotta pystyisin ajamaan käyttäjähakemistossa olevaa index.html tiedostoa.

/home/xubuntu/public_html/index.html:
  file.managed:
    - mode: 660
    - source: salt://apache/index.html
    - makedirs: True

Tämän jälkeen otin käyttöön tilan komennolla: sudo salt '*' state.apply apache.

    niko@nikonminion:/srv/salt/apache$ sudo salt '*' state.apply apache
    niko:
    ----------
              ID: apache2
        Function: pkg.installed
          Result: True
         Comment: The following packages were installed/updated: apache2
         Started: 16:38:27.463371
        Duration: 7492.719 ms
         Changes:   
                  ----------
                  apache2:
                      ----------
                      new:
                          2.4.38-3+deb10u4
                      old:
                  apache2-api-20120211:
                      ----------
                      new:
                          1
                      old:
                  apache2-api-20120211-openssl1.1:
                      ----------
                      new:
                          1
                      old:
                  apache2-bin:
                      ----------
                      new:
                          2.4.38-3+deb10u4
                      old:
                  apache2-data:
                      ----------
                      new:
                          2.4.38-3+deb10u4
                      old:
                  apache2-utils:
                      ----------
                      new:
                          2.4.38-3+deb10u4
                      old:
                  libapr1:
                      ----------
                      new:
                          1.6.5-1+b1
                      old:
                  libaprutil1:
                      ----------
                      new:
                          1.6.1-4
                      old:
                  libaprutil1-dbd-sqlite3:
                      ----------
                      new:
                          1.6.1-4
                      old:
                  libaprutil1-ldap:
                      ----------
                      new:
                          1.6.1-4
                      old:
                  ssl-cert:
                      ----------
                      new:
                          1.0.39
                      old:
    ----------
              ID: /var/www/html/index.html
        Function: file.managed
          Result: True
         Comment: File /var/www/html/index.html updated
         Started: 16:38:34.961065
        Duration: 32.82 ms
         Changes:   
                  ----------
                  diff:
                      --- 
                      +++ 
                      @@ -1 +1 @@
                      -Tervetuloa vierailemaan verkkosivuilleni nikohukkanen.me!
                      +Default page away
    ----------
              ID: /home/niko/public_html/index.html
        Function: file.managed
          Result: True
         Comment: File /home/niko/public_html/index.html updated
         Started: 16:38:34.994000
        Duration: 14.284 ms
         Changes:   
                  ----------
                  diff:
                      --- 
                      +++ 
                      @@ -1,2 +1,13 @@
                      -Hello world!
                      -Visit nikohukkanen.me
                      +<!DOCTYPE html>
                      +<html>
                      +<head>
                      +<meta charset="UTF-8">
                      +<title>Users homepage template</title>
                      +</head>
                      +
                      +<body>
                      +Empty HTML5 template.
                      +</body>
                      +
                      +</html> 
                      +
                  mode:
                      0660
    ----------
              ID: /etc/apache2/mods-enabled/userdir.conf
        Function: file.symlink
          Result: True
         Comment: Created new symlink /etc/apache2/mods-enabled/userdir.conf -> ../mods-available/userdir.conf
         Started: 16:38:35.008391
        Duration: 9.385 ms
         Changes:   
                  ----------
                  new:
                      /etc/apache2/mods-enabled/userdir.conf
    ----------
              ID: /etc/apache2/mods-enabled/userdir.load
        Function: file.symlink
          Result: True
         Comment: Created new symlink /etc/apache2/mods-enabled/userdir.load -> ../mods-available/userdir.load
         Started: 16:38:35.017895
        Duration: 0.849 ms
         Changes:   
                  ----------
                  new:
                      /etc/apache2/mods-enabled/userdir.load
    ----------
                 ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: Started Service apache2
     Started: 16:42:30.623541
    Duration: 78.442 ms
     Changes:   
              ----------
              apache2:
                  True
Summary for niko

    ------------
    Succeeded: 6 (changed=6)
    Failed:    0
    ------------
    Total states run:     6
    Total run time:   7.636 s

Salt tilan ajamisen jälkeen siirryin Firefoxilla tarkistamaan localhost ja localhost/~niko/ osoitteet ja niiden toimivuuden.

firefox

Sivut olivat vaihtuneet halutulla tavalla ja ne toimivat. Tarkistin vielä Apachen tilan komennolla: sudo systemctl status apache2.

 apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: 
   Active: active (running) since Tue 2021-04-27 16:42:30 EEST; 18min ago

Olin saanut Salt tilan toimimaan halutulla tavalla, pienten muokkausten jälkeen.

Lähteet

Aikajana (H5)

Niko Hukkanen 4.5.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home 2009)
  • Oracle VM VirtualBox 6.1.22 (OS: Debian 10.9)
  • Salt: Master ja Minion löytyvät samasta virtuaalikoneesta.

Kymmenen ohjelmaa Saltilla

Asensin kymmenen lempiohjelmaani Saltin avulla. Loin yhden Salt tilan, jonka avulla ohjelmien asennus tapahtuu. Ennen asentamista ajoin komennot:

sudo apt-get update
sudo apt-get upgrade

Ajoin komennot, jotta paketit ja ohjelmat olisivat ajan tasalla. Seuraavaksi loin Salt tilalle oman kansion hakemistoon /srv/salt. Komennolla: sudo mkdir apps. Loin init.sls tiedoston hakemistoon /srv/salt/apps/ komennolla: sudoedit init.sls.

Init.sls tiedoston sisältö:

git:
  pkg.installed
python3:
  pkg.installed
nano:
  pkg.installed
apache2:
  pkg.installed
htop:
  pkg.installed
gimp:
  pkg.installed
openssh-server:
  pkg.installed
neofetch:
  pkg.installed
curl:
  pkg.installed
vlc:
  pkg.installed

Salt tila asentaa seuraavat ohjelmat: Git, Python3, Nano, Apache, Htop, Gimp, Curl, Neofetch, Curl ja VLC.

Kun olin saanut init.sls tiedoston valmiiksi ajoin Salt tilan komennolla: sudo salt '*' state.apply apps. Tila:

niko@nikonminion:/srv/salt/apps$ sudo salt '*' state.apply apps
niko:
----------
          ID: git
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:41.333254
    Duration: 473.154 ms
     Changes:   
----------
          ID: python3
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:41.806572
    Duration: 23.832 ms
     Changes:   
----------
          ID: nano
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:41.830498
    Duration: 24.669 ms
     Changes:   
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:41.855260
    Duration: 24.546 ms
     Changes:   
----------
          ID: htop
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:41.879901
    Duration: 25.221 ms
     Changes:   
----------
          ID: gimp
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: gimp
     Started: 09:05:41.905208
    Duration: 5910.67 ms
     Changes:   
              ----------
              gimp:
                  ----------
                  new:
                      2.10.8-2
                  old:
              libmypaint-1.3-0:
                  ----------
                  new:
                      1.3.0-2.1
                  old:
              libmypaint-common:
                  ----------
                  new:
                      1.3.0-2.1
                  old:
              libwmf0.2-7:
                  ----------
                  new:
                      0.2.8.4-14
                  old:
----------
          ID: openssh-server
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: openssh-server
     Started: 09:05:47.823537
    Duration: 7518.182 ms
     Changes:   
              ----------
              openssh-server:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              openssh-sftp-server:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              ssh-server:
                  ----------
                  new:
                      1
                  old:
----------
          ID: neofetch
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:55.349706
    Duration: 4253.724 ms
     Changes:   
----------
          ID: curl
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 09:05:59.603542
    Duration: 24.931 ms
     Changes:   
----------
          ID: vlc
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: vlc
     Started: 09:05:59.628563
    Duration: 11374.789 ms
     Changes:   
              ----------
              libaribb24-0:
                  ----------
                  new:
                      1.0.3-2
                  old:
              libbasicusageenvironment1:
                  ----------
                  new:
                      2018.11.26-1.1
                  old:
              libcddb2:
                  ----------
                  new:
                      1.3.2-6
                  old:
              libdvbpsi10:
                  ----------
                  new:
                      1.3.2-1
                  old:
              libebml4v5:
                  ----------
                  new:
                      1.3.6-2
                  old:
              libgroupsock8:
                  ----------
                  new:
                      2018.11.26-1.1
                  old:
              libixml10:
                  ----------
                  new:
                      1:1.8.4-2
                  old:
              liblirc-client0:
                  ----------
                  new:
                      0.10.1-6.3~deb10u1
                  old:
              liblivemedia64:
                  ----------
                  new:
                      2018.11.26-1.1
                  old:
              libmad0:
                  ----------
                  new:
                      0.15.1b-10
                  old:
              libmatroska6v5:
                  ----------
                  new:
                      1.4.9-1+deb10u1
                  old:
              libmtp-common:
                  ----------
                  new:
                      1.1.16-2
                  old:
              libmtp-runtime:
                  ----------
                  new:
                      1.1.16-2
                  old:
              libmtp9:
                  ----------
                  new:
                      1.1.16-2
                  old:
              libnfs12:
                  ----------
                  new:
                      3.0.0-2
                  old:
              libopenmpt-modplug1:
                  ----------
                  new:
                      0.4.3-1+deb10u1
                  old:
              libplacebo7:
                  ----------
                  new:
                      1.7.0-2
                  old:
              libprotobuf-lite17:
                  ----------
                  new:
                      3.6.1.3-2
                  old:
              libproxy-tools:
                  ----------
                  new:
                      0.4.15-5+deb10u1
                  old:
              libresid-builder0c2a:
                  ----------
                  new:
                      2.1.1-15
                  old:
              libsdl-image1.2:
                  ----------
                  new:
                      1.2.12-10+deb10u1
                  old:
              libsidplay2:
                  ----------
                  new:
                      2.1.1-15
                  old:
              libspatialaudio0:
                  ----------
                  new:
                      0.3.0+git20180730+dfsg1-2
                  old:
              libupnp13:
                  ----------
                  new:
                      1:1.8.4-2
                  old:
              libusageenvironment3:
                  ----------
                  new:
                      2018.11.26-1.1
                  old:
              libva-wayland2:
                  ----------
                  new:
                      2.4.0-1
                  old:
              libvlc-bin:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              libvlc5:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              libvlccore9:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              libxcb-xv0:
                  ----------
                  new:
                      1.13.1-2
                  old:
              mp3-decoder:
                  ----------
                  new:
                      1
                  old:
              vlc:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-bin:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-data:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-l10n:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-abi-3-0-0f:
                  ----------
                  new:
                      1
                  old:
              vlc-plugin-base:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-notify:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-qt:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-samba:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-skins2:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-video-output:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-video-splitter:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:
              vlc-plugin-visualization:
                  ----------
                  new:
                      3.0.12-0+deb10u1
                  old:

Summary for niko
-------------
Succeeded: 10 (changed=3)
Failed:     0
-------------
Total states run:     10
Total run time:   29.654 s

Salt tilani asensi 3 uutta ohjelmaa koneelleni, 7 ohjelmaa oli jo aikaisemmin asennettu.

Sammakko ja skorpioni

Asensin Visual Studio Coden ja otin käyttöön Microsoftin pakettivarasto. Käyttäen ohjeena Linuxizen ohjetta. Aloitin ajamalla seuraavat komennot, jotta muut ohjelmat ja paketit olisivat ajan tasalla.

sudo apt-get update
sudo apt-get upgrade

Kun olin päivittänyt ohjelmani ja pakettini siirryin lisäämään Microsoftin pakettivarastoa.

Asensin ohjelman, jolla voidaan ottaa käyttöön ulkopuolisia pakettivarastoja komennolla: sudo apt install software-properties-common apt-transport-https curl. Kun olin asentanut kyseisen ohjelman hain Microsoftin pakettivaraston heidän sivustoltansa. Curlilla sain haettua GPG avaimen, ja sen loppuosassa olevalla komennolla hyväksyttyä avaimen.

curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

Seuraavaksi ajoin komennon, jolla lisätään paketinhallintaan Microsoftin vscode pakettivarasto:

sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"

Seuraavaksi ajoin komennon: sudo apt-get update, jotta paketit päivittyisivät. Samalla kun ajoin komennon huomasin sen, että seuraava rivi Hit:4 https://packages.microsoft.com/repos/vscode stable InRelease oli lisätty updateen aikaisempien antamani komentojen seurauksena.

Päivityksen jälkeen kokeilin asentaa Visual Studio Coden ajamalla komennon: sudo apt-get install code. Asennuksen jälkeen käynnistin Visual Studio Coden kirjoittamalla code komentoriville.

vscode

Visual Studio Code oli asentunut ja se lähti käyntiin.

CSI Pasila

Alla käytettävällä komennolla saa aikajanan viimeisimmistä muutoksista halutussa hakemistossa. Tässä tapauksessa tarkastelin hakemistossa /etc/ tapahtuvia muutoksia. Siirryin hakemistoon komennolla: cd /etc/.

sudo find -printf '%T+ %p\n'|sort|tail

Komento avattuna:

sudo: Ajetaan seuraava komento pääkäyttäjänä. find: Komennolla etsitään tiedostoja, siitä hakemistosta, jonka sisällä ollaan. printf: Tapa, jolla tiedot tulostetaan. %T: Tulostaa tiedostojen muokkausajan. %p: Tiedostojen nimet. /n: Rivinvaihto. sort: Järjestää rivit aikajärjestykseen. tail: 10 viimeisintä riviä.

Muokkasin hosts tiedostoa, joka löytyy hakemistosta /etc/. Seuraavaksi ajoin yllä avatun komennon ja sain seuraavanlaisen tulosteen:

niko@nikonminion:/etc$ cd /etc/; sudo find -printf '%T+ %p\n'|sort|tail
2021-05-04+09:10:27.3660625090 ./apt/sources.list.save
2021-05-04+09:10:27.4060825090 ./apt/sources.list
2021-05-04+09:20:56.1563005220 ./apt/sources.list.d
2021-05-04+09:20:56.1563005220 ./apt/sources.list.d/vscode.list
2021-05-04+09:20:56.1563005220 ./apt/trusted.gpg.d
2021-05-04+09:20:56.1563005220 ./apt/trusted.gpg.d/microsoft.gpg
2021-05-04+09:44:55.7637446610 ./mailcap
2021-05-04+09:45:07.2574886600 .
2021-05-04+09:45:07.2574886600 ./ld.so.cache
2021-05-04+09:58:36.3338247420 ./hosts

Tässä näkyy aikaisempaan tehtävään liittyviä muutoksia. Viimeisellä rivillä näkyy juuri tekemäni muutos, jossa lisäsin uuden rivin tekstiä tiedostoon hosts.

Tiedän mitä teit viime kesän HHH komennolla

Asennetaan uusi ohjelma ensin käsin, ja tämän jälkeen se asennetaan Salt tilana. Salt tilalla muokataan myös kyseisen ohjelman asetuksia. Asensin ohjelman nimeltä GIMP. Kun olin asentanut kyseisen ohjelman, muokkasin sen asetuksia ohjelman sisältä. Vaihdoin sovelluksen teemaa ja muita asioita. Yritin etsiä aikaisemmin käyttämälläni komennolla muuttuneita tiedostoja hakemistosta /etc/, mutta täältä ei löytynyt muuttuneita tiedostoja. Hain muuttuneita tiedostoja hakemistosta /home/niko ja löysin muuttuneita tiedostoja.

niko@nikonminion:~$ sudo find -printf '%T+ %p\n'|sort|tail
2021-05-04+10:30:22.2302969450 ./.config/GIMP/2.10/parasiterc
2021-05-04+10:30:22.2302969450 ./.config/GIMP/2.10/templaterc
2021-05-04+10:30:22.2302969450 ./.config/GIMP/2.10/unitrc
2021-05-04+10:30:22.2943289450 ./.cache/babl
2021-05-04+10:30:22.2943289450 ./.cache/babl/babl-fishes
2021-05-04+11:12:57.8273499700 ./.config/GIMP/2.10/pluginrc
2021-05-04+11:13:08.2073499700 ./.config/GIMP/2.10/themerc
2021-05-04+11:13:09.7553499700 ./.config/GIMP/2.10/gimprc
2021-05-04+11:13:09.7873499700 ./.config/GIMP/2.10/profilerc
2021-05-04+11:13:09.7913499700 ./.config/GIMP/2.10

Täältä löytyi myös käyttäjäkohtaiset asetukset tiedostosta gimprc. Kun avasin tiedoston gimprc sen alussa kerrottiin, että koko järjestelmää koskevat asetukset löytyvät hakemistosta /etc/gimp/, ja tarkemmin tiedostosta gimprc. Päätin tässä tapauksessa muokata kaikkien käyttäjien Gimp ohjelman asetuksia, joten siirryin /etc/gimp/ hakemistoon ja muokkasin täälägimprc tiedostoa. Tiedostossa muokkasin kohtia jotka vaikuttavat siihen, että ohjelma näyttää tietyissä kohdissa enemmän tietoa tooltippien avulla. Sovelluksen Teema muokattiin oletusasetuksesta "dark" vaaleaksi eli "light". Muokatut rivit tiedostossa gimprc:

(show-tooltips yes)
(theme "Light")

Tämän jälkeen siirryin luomaan Salt tilaa, joka asentaa Gimpin, ja muokkaa sen kaikkia käyttäjiä koskevaa asetustiedostoa. Loin kansion Salt kansiooni /srv/salt/ komennolla: sudo mkdir gimp. Kansion sisälle loin tiedoston init.sls komennolla: sudoedit init.sls. Samalla kopioin gimprc tiedoston Salt kansiooni komennolla: sudo cp gimprc /srv/salt/gimp. init.sls tiedoston sisältö:

gimp:
  pkg.installed
/etc/gimp/gimprc:
  file.managed:
    - source: salt://gimp/gimprc

Tämän jälkeen poistin Gimpin komennoilla: sudo apt-get purge gimp ja sudo apt-get autoremove. Poistamisen jälkeen ajoin tilani komennolla: sudo salt '*' state.apply gimp.

niko@nikonminion:/srv/salt/gimp$ sudo salt '*' state.apply gimp
niko:
----------
          ID: gimp
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: gimp
     Started: 11:42:10.509687
    Duration: 4891.471 ms
     Changes:   
              ----------
              gimp:
                  ----------
                  new:
                      2.10.8-2
                  old:
              libmypaint-1.3-0:
                  ----------
                  new:
                      1.3.0-2.1
                  old:
              libmypaint-common:
                  ----------
                  new:
                      1.3.0-2.1
                  old:
              libwmf0.2-7:
                  ----------
                  new:
                      0.2.8.4-14
                  old:
----------
          ID: /etc/gimp/2.0/gimprc
    Function: file.managed
      Result: True
     Comment: File /etc/gimp/2.0/gimprc updated
     Started: 11:42:15.406243
    Duration: 23.629 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0644

Summary for niko
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
Total run time:   4.915 s

Seuraavaksi tarkistin oliko ohjelman teema vaihtunut? ja olivatko tooltipit tulleet käyttöön? Avasin GIMP ohjelman.

gimprc

Ohjelman teema oli vaihtunut vaaleaksi, ja tooltipit näkyivät, joten halutut muutokset saatiin aikaan Salt tilalla.

Jokin toinen ohjelma

Päätin toiseksi ohjelmaksi ottaa Firefoxin, tarkoituksena on muokata Salt tilalla käyttäjän oletuskotisivuja. Tarkistin hakemistosta /etc/ löytyykö sieltä asetustiedostoa Firefoxille. Löysin hakemiston /etc/firefox-esr/ ja sieltä tiedoston firefox-esr.js. Seuraavaksi lisäsin tiedostoon rivin: pref("browser.startup.homepage", "https://nikohukkanen.me"); tekstiä, joka muokkaa käyttäjän oletuskotisivuksi omat verkkosivuni.

Seuraavaksi aloitin luomaan Salt tilaa, loin uuden kansion Salt hakemistooni /srv/salt/ komennolla: sudo mkdir firefox. Kopioin hakemistosta /etc/firefox-esr/ tiedoston firefox-esr.js Salt hakemistooni /srv/salt/ komennolla: sudo cp firefox-esr.js /srv/salt/firefox/. Kansioon loin uuden init.sls tiedoston. Tiedoston init.sls sisältö:

firefox-esr:
  pkg.installed
/etc/firefox-esr/firefox-esr.js:
  file.managed:
    - source: salt://firefox/firefox-esr.js

Kun olin luonut init.sls tiedoston poistin seuraavaksi Firefoxin komennoilla: sudo apt-get purge firefox-esr ja sudo apt-get autoremove.

Kun olin poistanut Firefoxin ajoin Salt tilani komennolla: sudo salt '*' state.apply firefox.

niko@nikonminion:/srv/salt/firefox$ sudo salt '*' state.apply firefox
niko:
----------
          ID: firefox-esr
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: firefox-esr
     Started: 12:57:19.824868
    Duration: 9270.54 ms
     Changes:   
              ----------
              firefox-esr:
                  ----------
                  new:
                      78.10.0esr-1~deb10u1
                  old:
              libevent-2.1-6:
                  ----------
                  new:
                      2.1.8-stable-4
                  old:
----------
          ID: /etc/firefox-esr/firefox-esr.js
    Function: file.managed
      Result: True
     Comment: File /etc/firefox-esr/firefox-esr.js updated
     Started: 12:57:29.100969
    Duration: 27.911 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -28,3 +28,5 @@
                   // Default to no suggestions in the urlbar. This still brings a panel asking
                   // the user whether they want to opt-in on first use.
                   pref("browser.urlbar.suggest.searches", false);
                  +
                  +pref("browser.startup.homepage", "https://nikohukkanen.me");

Summary for niko
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
Total run time:   9.298 s

Tilani oli asentanut Firefoxin ja muuttanut asetustiedostoa. Tarkistin tilanteen avaamalla Firefoxin.

firefox

Firefox oli asentunut ja se latasi muutetun kotisivun halutulla tavalla.

Lähteet

Windows ja Salt (H6)

Niko Hukkanen 12.5.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home Versio: 20H2)
  • Oracle VM VirtualBox 6.1.22 (Guest OS: Windows 10 Home, Versio: 20H2, OS Build: 19042.928. Ja Debian 10.9.0.)
  • Salt: Master: Debian 10.9.0. Minion: Windows 10 Home, Versio: 20H2.

Windows asennus

Harjoitusta aloittaessa päätin kokeilla Windows 10 virtualisointia. Aikaisemmin olen käyttänyt Vmwaren ohjelmistoa Windows 10 virtualisoinnissa. Päätin tällä kertaa kokeilla VirtualBoxia tässä. Aloitin hakemalla Windowsin ohjelman, jolla luodaan levykuva. Kyseinen ohjelma löytyy Microsoftin verkkosivuilta osoitteesta Media Tool. Kun olin luonut ohjelmalla ISO tiedoston, siirryin Virtualboxin asetuksiin. Annoin uudelle Windows 10 virtuaalikoneelle seuraavat asetukset Virtualboxissa.

  • 4096 GB RAM
  • 4x Prosessoreita
  • 50 GB Disk space
  • Samalla liitin tulevan minion koneen samaan verkkoon masterin kanssa virtualboxin avulla.

Asetusten jälkeen liitin siihen lataamani Windows käyttöjärjestelmän ISO tiedoston. Käyttöjärjestelmän kieleksi valitsin englannin, aika ja näppäimistö asetukset valtisin suomeksi.

windows1

Kielivalintojen jälkeen klikkasin kohtaa "install now".

windows2

Windows 10 käyttöjärjestelmän pystyy asentamaan ilman aktivointiavainta, joten tässä vaiheessa valitsin kohdan "I don’t have a product key".

windows3

Seuraavaksi valitsin Windows version, jonka haluan asentaa. Tässä tapauksessa valitsin versioksi Windows 10 Home.

windows4

Seuraavaksi hyväksyin käyttöehdot.

windows5

Tässä vaiheessa valitsin Custom vaihtoehdon.

windows6

Levylle ei tarvinnut tehdä mitään erikoista tässä vaiheessa, joten jatkoin asennusta painamalla kohtaa "Next".

windows7

Näiden asetusten jälkeen Windows lähti asentumaan.

windows8

Käyttöjärjestelmän luonnin jälkeen Windows käynnistyi uudelleen pari kertaa ja tämän jälkeen päästiin itse käyttöjärjestelmän asetuksiin.

winsetting4

Asetuksissa loin Windowsille loin uuden lokaalin käyttäjän nimeltä Minion, ja loin turvallisen salasanan käyttäjälle.

Kun olin säätänyt käyttäjäasetukset ja muut asetukset käyttöjärjestelmä käynnistyi uudelleen asetusten säädön jälkeen.

fistboot

Ensinmäisen käynnistyksen yhteydessä, otin käyttöön VirtualBox Guest Additions, jotta virtuaalikone toimisi paremmin isäntä koneen kanssa. Löysin ohjeet tämän tekoon Oraclen verkkosivuilta. Ensimmäisenä ajoin VirtualBox Guest additions tiedoston "This Pc" paikasta koneesta.

vmbox1

Asennuksessa valittiin paikka johon VirtualBox Guest Additions asennetaan.

vmbox2

Asensin VirtualBox Guest Additionsin seuraavilla asetuksilla, jatkoin painamalla "Install".

vmbox3

Asennuksen jälkeen asennusohjelman pyynnöstä virtuaalikone käynnistettiin uudelleen, jotta asennus olisi valmis.

vmbox4

Kun olin saanut ohjelman asennettua ja virtuaalikoneen päälle uudelleen siirryin Saltin asennuksen pariin.

Saltin asennus Windowsille

Aloitin Saltin asennuksen lataamalla Saltin verkkosivuilta Salt asennusohjelman täältä. Latasin Salt-Minion-3003-Py3-AMD64-Setup.exe tiedoston. Lataamisen jälkeen käynnistin Salt asennusohjelman.

salt1

Tämän jälkeen painoin "Next" kohtaa

salt2

Hyväksyin ehdot ja painoin "I Agree".

salt3

Seuraavaksi annoin asennuksessa Debian masterin IP-osoitteen 10.0.2.4 ja annoin minionille nimeksi windowsminion.

Saltin käyttöönotto

Asennuksen jälkeen testasin Saltin toimivuutta ajamalla komennon paikallisesti Windows 10 virtuaalikoneella. Avasin PowerShell ohjelman järjestelmänvalvojana ja ajoin lokaalinkomennon:salt-call --local cmd.run hostname.

saltlocal

Salt toimii paikallisesti, joten siirryin seuraavaksi masterin ja minionin yhteyden muodostamiseen. Tämän jälkeen tarkistin Debian masterilta oliko asennuksen yhteydessä Windows minionilta lähtenyt avain masterille. Ajoin masterilla komennon: sudo salt-key.

masteravain

Asennuksen yhteydessä lähetetty avain oli saapunut masterille.

Seuraavaksi hyväksyin avaimen komennolla: sudo salt-key -A.

addkey

Sain avaimen hyväksyttyä masterilla.

Jotta Windows 10 minionille löytyisi haluttavat ohjelmat, tulisi ottaa käyttöön masterilla Saltin Windows repositorio. Tämä onnistui komennoilla, jotka löytyivät Teron ohjeesta. Ohjeessa luotiin uusi kansio win repolle, ja muokattiin sen kansion oikeuksia.

 sudo mkdir /srv/salt/win
 sudo chown root.salt /srv/salt/win
 sudo chmod ug+rwx /srv/salt/win_

Kun kansio ja niiden oikeudet olivat muokattu, siirryin ajamaan komentoa jolla haetaan repo Gitin avulla. Samalla tässä vaiheessa tarkistin sen, että koneella oli asennettuna Git komennolla: sudo apt-get -y install git.

winrepos

Seuraavaksi lisäsin Windows repon komennoilla:

  sudo salt-run winrepo.update_git_repos
  sudo salt -G 'os:windows' pkg.refresh_db

Repon käyttöönoton jälkeen loin Windows minionille uuden Salt tilan seuraavanlaisesti. Seuraavaksi loin kansion paikkaan: etc/srv/salt komennolla: sudo mkdir windows. Samalla loin tänne uuden tiedoston nimeltä init.sls komennolla: sudoedit init.sls.

init.sls tiedoston sisältö:

vlc:
  pkg.installed
python3:
  pkg.installed
winrar:
  pkg.installed
vscode:
  pkg.installed
steam:
  pkg.installed
chrome:
  pkg.installed

Tämän jälkeen ajoin luomani tilan Debian masterilla Windows 10 virtuaalikoneelle komennolla: sudo salt 'windowsminion' state.apply windows.

Tila:

windowsminion:
----------
          ID: vlc
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: vlc
     Started: 05:21:58.927207
    Duration: 32481.375 ms
     Changes:   
              ----------
              vlc:
                  ----------
                  new:
                      3.0.12
                  old:
----------
          ID: python3
    Function: pkg.installed
      Result: False
     Comment: The following packages failed to install/update: python3
     Started: 05:22:31.487783
    Duration: 3749.661 ms
     Changes:   
              ----------
              python3:
                  Unable to locate package python3
----------
          ID: winrar
    Function: pkg.installed
      Result: False
     Comment: The following packages failed to install/update: winrar
     Started: 05:22:35.315188
    Duration: 6156.225 ms
     Changes:   
              ----------
              winrar:
                  ----------
                  install status:
                      success
----------
          ID: vscode
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: vscode
     Started: 05:22:41.550168
    Duration: 22936.555 ms
     Changes:   
              ----------
              vscode:
                  ----------
                  new:
                      1.50.1
                  old:
----------
          ID: steam
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: steam
     Started: 05:23:04.581061
    Duration: 7094.203 ms
     Changes:   
              ----------
              steam:
                  ----------
                  new:
                      2.10.91.91
                  old:
----------
          ID: chrome
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: chrome
     Started: 05:23:11.768494
    Duration: 49999.979 ms
     Changes:   
              ----------
              chrome:
                  ----------
                  new:
                      68.83.32861
                  old:

Summary for windowsminion
------------
Succeeded: 4 (changed=6)
Failed:    2
------------
Total states run:     6
Total run time: 122.418 s
ERROR: Minions returned with non-zero exit code

Vaikka tila tulostaa kaksi virhettä kuudesta, oikeasti 5 tiloista onnistui halutusti ainoa tila, joka ei toiminut oli tässä tapauksessa python3. Python3 ei asentunut, koska paketilla on toinen nimi käytössä repossa. Virheeksi ilmoitettu Winrar ohjelma löytyi Windows 10 virtuaalikoneelta. Testasin sen toimivuuden pakkaamalla ja purkamalla .rar päätteisen tiedoston, jonka kyseinen ohjelma suoritti ilman ongelmia.

aftersalt

Windows 10 minionin työpöydälle oli Salt tilan ajamisen jälkeen ilmestynyt pikakuvakkeita ohjelmille, sekä C:/Program Files hakemistoon oli lisätty Salt tilalla asennetut ohjelmat paitsi Python3. Lopuksi testasin käynnistää Saltilla asennetut ohjelmat. Suurin osa Saltilla asentamistani ohjelmista, eivät olleet ajan tasalla ja niitä joutui hetken päivittämään. Kaikki ohjelmat käynnistyivät asennuksen ja päivitysten jälkeen.

Oma moduulin aihe ja alustava kuvaus

Tarkoituksena olisi mahdollisimman pitkälle automatisoida uusien järjestelmien käyttöönotto Salt tilojen avulla. Hallittavia koneita hallittaisiin Saltin avulla. Omassa moduulissani olisi tarkoituksena luoda ympäristö, josta löytyisi erilaisia käyttöjärjestelmiä. Moduulissa olisi Linux virtuaalikoneita 2–3, joiden distroina olisi alustavasti Debian ja Xubuntu. Tämän lisäksi mukana olisi myös yksi Windows 10 käyttöjärjestelmää käyttävä tietokone. Tarkoituksena olisi saada kokemusta erilaisten ympäristöjen keskitetystä hallinnasta, tämän vuoksi ajattelin valita eri käyttöjärjestelmiä käyttäviä virtuaalikoneita ympäristöön. Järjestelmässä toimisi masterina yksi Debian kone, ja loput koneista olisivat minioneita. Moduulin avulla asennettaisiin ohjelmia ja erilaisia demoneja, sekä näiden asetuksia.

Ennen moduulin tekoa tulisi selvittää miten esimerkiksi top.sls tiedostoa käytetään. Muina selvitysalueina näkisin miten joitain ohjelmien ja demonien asetuksia halittaisiin.

Lähteet

Oma moduli (H7)

Niko Hukkanen 18.5.2021

Haaga-Helia ammattikorkeakoulu

Kurssi: Palvelinten hallinta

Kurssin opettaja: Tero Karvinen

Lisenssi: GNU GENERAL PUBLIC LICENSE (3.0)

Harjoituksessa käytetyt laitteet ja järjestelmät

  • Lenovon Legion Y540 kannettava tietokone (Intel i7-9750H CPU, RAM 16GB, Nvidia GTX 1660 Ti GPU, Host OS: Win 10 Home Versio: 20H2)
  • Oracle VM VirtualBox 6.1.22.
  • Salt Master: Debian 10.9.0.
  • Salt Minions: Windows 10 Home, Versio: 20H2, Debian 10.9.0, Xubuntu 20.04 LTS.

Oman moduulin kuvaus

Moduulin tarkoituksena on hallita eri käyttöjärjestelmiä käyttäviä koneita Saltin avulla. Tässä tapauksessa kahta Linux (Debian, Xubuntu) virtuaalikonetta ja yhtä Windows 10 virtuaalikonetta, Masterina toimii Debian virtuaalikone. Uusien virtuaalikoneiden käyttöönoton tulisi helpottua Saltin ja sen tilojen avulla. Linux pohjaisille virtuaalikoneille asennetaan ohjelmia ja muokataan niiden asetuksia. Ohjelmia joiden asetuksia muokataan tässä moduulissa ovat: Apache2 ja UFW. Windows 10 virtuaalikoneelle asennetaan ohjelmia ja näiden asetuksia ei tässä moduulissa muokata. Koneiden hallinta tapahtuu Saltin avulla käyttäen sen tiloja asentamiseen ja hallintaan. Highstaten ja top.sls tiedoston avulla virtuaalikoneet ovat jaettu käyttöjärjestelmien mukaan, joten niillä ajettavia tiloja voidaan kohdentaa Windows tai Linux koneille. Tämän ansiosta yhdellä komennolla voidaan hallita kaikkia minioneita halutulla tavalla.

Asennettavia ohjelmia Linux virtuaalikoneille ovat:

  • Apache2
  • UFW
  • Htop
  • Git
  • Curl
  • Tree
  • SSH

Windows virtuaalikoneelle asennettavat ohjelmat:

  • Firefox
  • Chrome
  • Libreoffice
  • VLC
  • VScode
  • Git
  • Winrar

Ohjelmat valitsin sen mukaan, mitä olen itse joutunut käyttämään virtuaalikoneilla. Tarkoituksena olisi poistaa manuaalinen ohjelmien asentaminen, kun otetaan käyttöön uusia koneita. Tämän ansiosta uusien koneiden käyttöönotossa kuluisi vähemmän aikaa.

Aloitus

Aloitin asentamalla täysin uudet ja puhtaat virtuaalikoneet omaa moduulia ja sen testausta varten. Asennuksessa käytin ohjeena aikaisempia Linux kurssin tehtäviä. Koneina moduulissani ovat:

  • Debian 10.9.0 (master) id: debianmaster
  • Debian 10.9.0 (minion) id: debianminion
  • Xubuntu 20.04 LTS (minion) id: xubuntuminion
  • Windows 10 20H2 (minion) id : windowsminion

Liitin koneet samaan verkkoon lähiverkkoon VirtualBoxin kautta, jotta saisin virtuaalikoneiden välille yhteyden.

Salt master

Aloitin ajamalla komennot sudo apt-get update ja sudo apt-get upgrade. Asensin Debian masterille Salt masterin komennolla: sudo apt-get install salt-master. Selvitin Debian masterin ip-osoitteen komennolla: ip a. Masterin IP-osoite löytyi ja se oli 10.0.2.15

Salt minion

Aloitin ajamalla komennot sudo apt-get update ja sudo apt-get upgrade. Asensin Salt minionin Debian minionille komennolla: sudo apt-get install salt-minion. Xubuntu koneelle jouduin asentamaan Curlin ja sen avulla lisäämään Salt repon. Ohjeena käytin Saltin asennus ohjetta. Tämän jälkeen asennus tapahtui samalla komennolla kuin Debiannissa.

Windows virtuaalikoneelle jouduin asentamaan Saltin asennusohjelman avulla. Latasin sen verkostosta osoitteesta Saltstack. Windows koneilla minionin ja masterin yhteyden saa luotua helposti, kun asennusohjelmassa kysytään masterin IP-osoitetta ja samalla voidaan luoda Windows minionille oma id.

Muokkasin Salt minioneiden tietoja masterista muokkaamalla asetustiedostoja minioneilla, joka löytyy Linux koneilla polusta /etc/salt/. Muokkaaminen tapahtui komennolla: sudoedit /etc/salt/minion/. Tiedostoon lisäsin masterin IP-osoitteen: 10.0.2.15, tämän lisäksi annoin jokaiselle koneelle oman ID:n.

minionsettings

Seuraavaksi käynnistin Linux minioneiden Saltit uudelleen komennolla: sudo systemctl restart salt-minion.service. Uudelleenkäynnistyksen jälkeen ajoin komennon sudo salt-key masterilla. Näin sen, että minioneiden avaimet olivat saapuneet masterille. Hyväksyin avaimet komennolla: sudo salt-key -A.

saltkeys

Avainten hyväksymisen jälkeen testasin yhteyden masterin ja minioneiden välillä käyttäen seuraavaa komentoa: sudo salt '*' test.ping masterilla. Kaikki minionit vastasivat testiin.

Salt tilat

Loin Salt tiloille kansion Debian masterilla komennolla: sudo mkdir /srv/salt. Kun olin luonut kansion aloitin luomalla Windows repolle kansion ja lisäsin siihen enemmän oikeuksia komennoilla. Ohjeena käytin aikaisempaa tehtävääni ja Teron ohjetta .

 sudo mkdir /srv/salt/win
 sudo chown root.salt /srv/salt/win
 sudo chmod ug+rwx /srv/salt/win

Asensin tässä vaiheessa Gitin, jotta seuraava vaihe toimisi. Käytin komentoa: sudo apt-get -y install git. Tämän jälkeen otin käyttöön Saltin Windows repon komennoilla:

  sudo salt-run winrepo.update_git_repos
  sudo salt -G 'os:windows' pkg.refresh_db

winrepo

Komentoja ajaessa huomasin sen, että Windows virtuaalikoneeni ei ollut käynnissä, kun päivitin repoja. Käynnistin Windows virtuaalikoneen ja ajoin komennon uudelleen, jonka jälkeen se toimi.

Windows tila

Loin kansion polkuun /srv/salt/ komennolla: sudo mkdir windows. Kansion sisälle loin init.sls tiedoston komennolla: sudoedit init.sls. Init.sls tiedoston sisältö:

vlc:
  pkg.installed
firefox:
  pkg.installed
winrar:
  pkg.installed
vscode:
  pkg.installed
libreoffice:
  pkg.installed
chrome:
  pkg.installed
git:
  pkg.installed

Seuraavaksi ajoin Windows tilani Windows virtuaalikoneella, tässä käytin komentoa sudo salt 'windowsminion' state.apply windows masterilla.

niko@debianmaster:/srv/salt/packets$ sudo salt 'windowsminion' state.apply windows
windowsminion:
----------
          ID: vlc
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: vlc
     Started: 12:10:36.496481
    Duration: 41753.899 ms
     Changes:   
              ----------
              vlc:
                  ----------
                  new:
                      3.0.12
                  old:
----------
          ID: firefox
    Function: pkg.installed
      Result: False
     Comment: The following packages failed to install/update: firefox
     Started: 12:11:18.314373
    Duration: 3170.559 ms
     Changes:   
              ----------
              firefox:
                  Unable to locate package firefox
----------
          ID: winrar
    Function: pkg.installed
      Result: False
     Comment: The following packages failed to install/update: winrar
     Started: 12:11:21.549025
    Duration: 4652.484 ms
     Changes:   
              ----------
              winrar:
                  ----------
                  install status:
                      success
----------
          ID: vscode
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: vscode
     Started: 12:11:26.274258
    Duration: 18890.483 ms
     Changes:   
              ----------
              vscode:
                  ----------
                  new:
                      1.50.1
                  old:
----------
          ID: libreoffice
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: libreoffice
     Started: 12:11:45.212199
    Duration: 624944.146 ms
     Changes:   
              ----------
              libreoffice:
                  ----------
                  new:
                      7.0.3.1
                  old:
----------
          ID: chrome
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: chrome
     Started: 12:22:10.234715
    Duration: 41248.882 ms
     Changes:   
              ----------
              chrome:
                  ----------
                  new:
                      68.83.32980
                  old:
----------
          ID: git
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: git
     Started: 12:22:51.552970
    Duration: 28512.146 ms
     Changes:   
              ----------
              chrome:
                  ----------
                  new:
                      90.0.4430.212
                  old:
                      68.83.32980
              git:
                  ----------
                  new:
                      2.31.1
                  old:

Summary for windowsminion
------------
Succeeded: 5 (changed=7)
Failed:    2
------------
Total states run:     7
Total run time: 763.173 s
ERROR: Minions returned with non-zero exit code

Jälleen kohtasin saman ongelman kuin aikaisemmassa harjoituksessa (H6). WinRAR ohjelma ei ollut asentunut oikealla tavalla Saltin mukaan. Kyseinen ohjelma oli kuitenkin asennettu Windows minionille ja se löytyi C:/Program Files/WinRAR hakemistosta. Testasin tässä vaiheessa WinRAR ohjelman toimivuuden pakkaamalla ja purkamalla tiedoston. Sain testin tehtyä ja ohjelma toimi halutulla tavalla.

Firefox pakettia ei löytynyt, joten tarkistin GitHub reposta millä nimellä Firefox löytyi sieltä. Oikea nimi Firefox paketille tässä tapauksessa oli: firefox_x64 Avasin Windows tilan init.sls tiedoston ja muokkasin sitä komennolla: sudoedit init.sls.

firefox_x64:
  pkg.installed

Vaihdoin paketin nimen ja ajoin uudelleen Windows Salt tilan komennolla: sudo salt 'windowsminion' state.apply windows.

niko@debianmaster:/srv/salt/windows$ sudo salt 'windowsminion' state.apply windows
windowsminion:
----------
          ID: vlc
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:37:54.287230
    Duration: 812.569 ms
     Changes:   
----------
          ID: firefox_x64
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: firefox_x64
     Started: 12:37:55.099799
    Duration: 15766.08 ms
     Changes:   
              ----------
              Mozilla Maintenance Service:
                  ----------
                  new:
                      88.0.1
                  old:
              firefox_x64:
                  ----------
                  new:
                      88.0.1
                  old:
----------
          ID: winrar
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:38:10.958544
    Duration: 3281.643 ms
     Changes:   
----------
          ID: vscode
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:38:14.240187
    Duration: 108.994 ms
     Changes:   
----------
          ID: libreoffice
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:38:14.349181
    Duration: 109.596 ms
     Changes:   
----------
          ID: chrome
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:38:14.458777
    Duration: 109.66 ms
     Changes:   
----------
          ID: git
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 12:38:14.568437
    Duration: 109.33 ms
     Changes:   

Summary for windowsminion
------------
Succeeded: 7 (changed=1)
Failed:    0
------------
Total states run:     7
Total run time:  20.298 s

Tällä kertaa Firefox asentui minionille. Samalla huomasin sen, että Salt ei enää ilmoittanut virhettä WinRAR ohjelmasta ja sen asennuksesta, vaan sekin oli asentunut. windowsminion

Asennetut ohjelmat löytyivät polusta C:/Program Files/, myös osasta ohjelmista oli tullut pikakuvakkeet työpöydälle.

Apache tila

Tila asentaa Apache2 demonin asetusten kanssa minioneille, ja ottaa käyttöön käyttäjähakemistot, sekä vaihtaa Apachen oletussivun. Apuna käytin Teron ohjetta. Aloitin asentamalla Apachen käsin Debian masterille. Asensin demonin komennolla sudo apt-get install apache2. Asennuksen jälkeen käynnistin Apachen uudelleen komennolla sudo systemctl restart apache2. Testasin Apachen toimivuuden Curlin avulla.

niko@debianmaster:/srv/salt$ curl localhost |grep title
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1070    <title>Apache2 Debian Default Page: It works</title>--:--:--     0
1  100 10701    0     0  10.2M      0 --:--:-- --:--:-- --:--:-- 10.2M

Apache oli lähtenyt päälle ja toimimaan. Seuraavaksi loin Salt tilalle kansion polkuun /srv/salt komennolla: sudo mkdir apache. Tänne loin uuden init.sls tiedoston komennolla: sudoedit init.sls. init.sls tiedoston sisältö:

apache2:
 pkg.installed
/var/www/html/index.html:
 file.managed:
   - source: salt://apache/default-index.html
/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
apache2service:
 service.running:
   - name: apache2
   - watch:
     - file: /etc/apache2/mods-enabled/userdir.conf
     - file: /etc/apache2/mods-enabled/userdir.load

Tämän lisäksi loin samaan hakemistoon uuden tiedoston komennolla: sudoedit default-index.html. default-index.html tiedoston sisältö:

<!DOCTYPE html>
<html lang="fi">

<head>
    <meta charset="utf-8">
    <title>Testi</title>
</head>
<body>

  <h1>Testisivusto</h1>

  <p>Lisää mukavia asioita löydät sivustolta <a href="https://nikohukkanen.me/">nikohukkanen.me</a></p>

</body>
</html>

Kun olin luonut tiedostot init.sls ja default-index.html, seuraavaksi poistin Apachen komennoilla: sudo apt-get purge apache2 ja sudo apt-get autoremove. Tämän jälkeen ajoin Apache Salt tilani paikallisesti komennolla: sudo salt-call --local state.apply apache.

niko@debianmaster:/srv/salt/apache$ sudo salt-call --local state.apply apache
local:
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: apache2
     Started: 16:40:49.166391
    Duration: 7092.723 ms
     Changes:   
              ----------
              apache2:
                  ----------
                  new:
                      2.4.38-3+deb10u4
                  old:
              apache2-api-20120211:
                  ----------
                  new:
                      1
                  old:
              apache2-api-20120211-openssl1.1:
                  ----------
                  new:
                      1
                  old:
              apache2-bin:
                  ----------
                  new:
                      2.4.38-3+deb10u4
                  old:
              apache2-data:
                  ----------
                  new:
                      2.4.38-3+deb10u4
                  old:
              apache2-utils:
                  ----------
                  new:
                      2.4.38-3+deb10u4
                  old:
              httpd:
                  ----------
                  new:
                      1
                  old:
              httpd-cgi:
                  ----------
                  new:
                      1
                  old:
              libapr1:
                  ----------
                  new:
                      1.6.5-1+b1
                  old:
              libaprutil1:
                  ----------
                  new:
                      1.6.1-4
                  old:
              libaprutil1-dbd-sqlite3:
                  ----------
                  new:
                      1.6.1-4
                  old:
              libaprutil1-ldap:
                  ----------
                  new:
                      1.6.1-4
                  old:
              ssl-cert:
                  ----------
                  new:
                      1.0.39
                  old:
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html updated
     Started: 16:40:56.264081
    Duration: 29.418 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -1,6 +1,6 @@
                   <!DOCTYPE html>
                   <html lang="fi">
                  -<html>
                  +
                   <head>
                       <meta charset="utf-8">
                       <title>Testi</title>
----------
          ID: /etc/apache2/mods-enabled/userdir.conf
    Function: file.symlink
      Result: True
     Comment: Created new symlink /etc/apache2/mods-enabled/userdir.conf -> ../mods-available/userdir.conf
     Started: 16:40:56.293592
    Duration: 8.363 ms
     Changes:   
              ----------
              new:
                  /etc/apache2/mods-enabled/userdir.conf
----------
          ID: /etc/apache2/mods-enabled/userdir.load
    Function: file.symlink
      Result: True
     Comment: Created new symlink /etc/apache2/mods-enabled/userdir.load -> ../mods-available/userdir.load
     Started: 16:40:56.302043
    Duration: 0.839 ms
     Changes:   
              ----------
              new:
                  /etc/apache2/mods-enabled/userdir.load
----------
          ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: Service restarted
     Started: 16:40:57.171443
    Duration: 118.862 ms
     Changes:   
              ----------
              apache2:
                  True

Summary for local
------------
Succeeded: 5 (changed=5)
Failed:    0
------------
Total states run:     5
Total run time:   7.250 s

Testasin vielä ajaa kyseisen tilan uudelleen samalla komennolla:

niko@debianmaster:/srv/salt/apache$ sudo salt-call --local state.apply apache
local:
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 16:41:33.432503
    Duration: 396.723 ms
     Changes:   
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html is in the correct state
     Started: 16:41:33.831076
    Duration: 18.828 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.conf
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.conf is present and owned by root:root
     Started: 16:41:33.849987
    Duration: 0.997 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.load
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.load is present and owned by root:root
     Started: 16:41:33.851076
    Duration: 0.901 ms
     Changes:   
----------
          ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: The service apache2 is already running
     Started: 16:41:33.853109
    Duration: 21.275 ms
     Changes:   

Summary for local
------------
Succeeded: 5
Failed:    0
------------
Total states run:     5
Total run time: 438.724 ms

Tilan uudelleen ajamisessa ei tapahtunut muutoksia.

UFW tila

Tilan tarkoitus: Ohjelman asennus. Porttien avaus: 22, 80, 4505, 4506 tcp liikenteelle. Palomuurin käyttöönotto. Aloitin luomalla Salt tilalle kansion polkuun /srv/salt komennolla: sudo mkdir ufw. Tänne loin uuden init.sls tiedoston komennolla: sudoedit init.sls. init.sls sisältö:

ufw:
  pkg.installed
'ufw allow 22/tcp':
  cmd.run:
    - unless: "sudo ufw status verbose|grep '^22/tcp '"
'ufw allow 80/tcp':
  cmd.run:
    - unless: "sudo ufw status verbose|grep '^80/tcp '"
'ufw allow 4505/tcp':
  cmd.run:
    - unless: "sudo ufw status verbose|grep '^4505/tcp '"
'ufw allow 4506/tcp':
  cmd.run:
    - unless: "sudo ufw status verbose|grep '^4506/tcp '"
'ufw enable':
  cmd.run:
    - unless: "sudo ufw enable|grep 'active'"
ufw.service:
  service.running:
    - name: ufw
    - enable: True

Ajoin tilan paikallisesti masterilla komennolla: sudo salt-call --local state.apply ufw, mutta ennen tilan ajoa poistin UFW palomuurin komennolla sudo apt-get purge ufw ja sudo apt-get autoremove.

niko@debianmaster:/srv/salt/ufw$ sudo salt-call --local state.apply ufw
local:
----------
          ID: ufw
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: ufw
     Started: 15:02:19.123069
    Duration: 4117.447 ms
     Changes:   
              ----------
              ufw:
                  ----------
                  new:
                      0.36-1
                  old:
----------
          ID: ufw allow 22/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 22/tcp" run
     Started: 15:02:23.244582
    Duration: 254.491 ms
     Changes:   
              ----------
              pid:
                  16071
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 80/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 80/tcp" run
     Started: 15:02:23.499269
    Duration: 235.113 ms
     Changes:   
              ----------
              pid:
                  16089
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 4505/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 4505/tcp" run
     Started: 15:02:23.734553
    Duration: 237.201 ms
     Changes:   
              ----------
              pid:
                  16107
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw allow 4506/tcp
    Function: cmd.run
      Result: True
     Comment: Command "ufw allow 4506/tcp" run
     Started: 15:02:23.971945
    Duration: 225.48 ms
     Changes:   
              ----------
              pid:
                  16125
              retcode:
                  0
              stderr:
              stdout:
                  Rules updated
                  Rules updated (v6)
----------
          ID: ufw enable
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:02:24.197617
    Duration: 1818.084 ms
     Changes:   
----------
          ID: ufw.service
    Function: service.running
        Name: ufw
      Result: True
     Comment: The service ufw is already running
     Started: 15:02:26.847698
    Duration: 19.306 ms
     Changes:   

Summary for local
------------
Succeeded: 7 (changed=5)
Failed:    0
------------
Total states run:     7
Total run time:   6.907 s

Ajoin tilan uudelleen paikallisesti, jotta näkisin muuttuisiko asetuksia uudelleen.

niko@debianmaster:/srv/salt/ufw$ sudo salt-call --local state.apply ufw
local:
----------
          ID: ufw
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 15:03:07.839001
    Duration: 396.674 ms
     Changes:   
----------
          ID: ufw allow 22/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:03:08.236960
    Duration: 89.65 ms
     Changes:   
----------
          ID: ufw allow 80/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:03:08.326817
    Duration: 86.96 ms
     Changes:   
----------
          ID: ufw allow 4505/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:03:08.413965
    Duration: 86.987 ms
     Changes:   
----------
          ID: ufw allow 4506/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:03:08.501159
    Duration: 87.653 ms
     Changes:   
----------
          ID: ufw enable
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 15:03:08.589015
    Duration: 814.321 ms
     Changes:   
----------
          ID: ufw.service
    Function: service.running
        Name: ufw
      Result: True
     Comment: The service ufw is already running
     Started: 15:03:09.404199
    Duration: 21.454 ms
     Changes:   

Summary for local
------------
Succeeded: 7
Failed:    0
------------
Total states run:     7
Total run time:   1.584 s

Tilassa ei tapahtunut muutoksia, joten tässä tapauksessa oli päästy tilaan jossa muutoksia tapahtuu vain, jos asetukset ovat muuttuneet. Lopuksi tarkistin vielä manuaalisesti komennolla: sudo ufw verbose, olivatko muutokset oikeasti tapahtuneet.

niko@debianmaster:/srv/salt/ufw$ sudo ufw verbose
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
4505/tcp                   ALLOW       Anywhere                  
4506/tcp                   ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
4505/tcp (v6)              ALLOW       Anywhere (v6)             
4506/tcp (v6)              ALLOW       Anywhere (v6)             

Muutokset olivat tapahtuneet ja palomuuri oli päällä.

Paketti tila

Tila asentaa seuraavat ohjelmat ilman asetuksia:

  • Git
  • Curl
  • Tree
  • Htop
  • SSH

Aloitin luomalla kansion tilalle polkuun srv/salt/ komennolla: sudo mkdir packets Loin kansioon apps init.sls tiedoston komennolla: sudoedit init.sls init.sls tiedoston sisältö:

packets:
  pkg.installed:
    - pkgs:
      - curl
      - git
      - tree
      - htop
      - ssh

Seuraavaksi poistin ohjelmat: Curl, Git, Tree, SSH ja htop käyttäen komentoa: sudo apt-get purge curl git tree htop ssh ja sudo apt-get autoremove. Tämän jälkeen ajoin Salt paketti tilani paikallisesti komennolla: sudo salt-call --local state.apply packets.

niko@debianmaster:/srv/salt/packets$ sudo salt-call --local state.apply packets
local:
----------
          ID: packets
    Function: pkg.installed
      Result: True
     Comment: 5 targeted packages were installed/updated.
     Started: 11:29:49.647693
    Duration: 6959.315 ms
     Changes:   
              ----------
              curl:
                  ----------
                  new:
                      7.64.0-4+deb10u2
                  old:
              git:
                  ----------
                  new:
                      1:2.20.1-2+deb10u3
                  old:
              git-completion:
                  ----------
                  new:
                      1
                  old:
              git-core:
                  ----------
                  new:
                      1
                  old:
              git-man:
                  ----------
                  new:
                      1:2.20.1-2+deb10u3
                  old:
              htop:
                  ----------
                  new:
                      2.2.0-1+b1
                  old:
              liberror-perl:
                  ----------
                  new:
                      0.17027-2
                  old:
              openssh-client:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              openssh-server:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              openssh-sftp-server:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              rsh-client:
                  ----------
                  new:
                      1
                  old:
              ssh:
                  ----------
                  new:
                      1:7.9p1-10+deb10u2
                  old:
              ssh-client:
                  ----------
                  new:
                      1
                  old:
              ssh-server:
                  ----------
                  new:
                      1
                  old:
              tree:
                  ----------
                  new:
                      1.8.0-1
                  old:

Summary for local
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   6.959 s

Ajoin tilan vielä uudelleen.

niko@debianmaster:/srv/salt/packets$ sudo salt-call --local state.apply packets
local:
----------
          ID: packets
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 11:32:49.182273
    Duration: 429.769 ms
     Changes:   

Summary for local
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 429.769 ms

Ohjelmat olivat asentuneet ensimmäisellä tilan ajo kerralla, eikä toisella kertaa tapahtunut mitään muutoksia. Testasin lyhyesti asennetut ohjelmat ja ne toimivat kaikki moitteetta.

Ylätila (Highstate top.sls)

Ylimmässä tilassa erotellaan Linux ja Windows virtuaalikoneet. Linux virtuaalikoneet (Debian, Xubuntu) erotellaan muista käyttöjärjestelmistä käytettävän kernelin avulla. Windows virtuaalikone erotellaan käyttöjärjestelmän nimen mukaan. Kun käyttöjärjestelmät ovat eroteltu voidaan jatkossa ottaa käyttöön uusia koneita ja ajaa Highstate, jolloin se ajaa tilat halutuilla käyttöjärjestelmillä.

top.sls tiedoston sisältö:

base:
  'kernel:Linux':
    - match: grain
    - packets
    - apache
    - ufw
  'os:Windows':
    - match: grain
    - windows

Windows virtuaalikoneille ajetaan ainoastaan "windows" tila. Linux virtuaalikoneille ajetaan seuraavat tilat: packets, apache ja ufw.

Ajoin yhteys testin minioneiden ja masterin välillä ennen kuin, ajoin highstaten.

niko@debianmaster:~$ sudo salt '*' test.ping
debianminion:
    True
xubuntuminion:
    True
windowsminion:
    True

Kaikki minionit vastasivat testiin, ja yhteys toimi masterin ja minioneiden välillä. Testasin highstate tilan toimivuuden ajamalla sen kaikilla virtuaalikoneilla komennolla: sudo salt '*' state.highstate

 niko@debianmaster:/srv/salt$ sudo salt '*' state.highstate
xubuntuminion:
----------
          ID: packets
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.260645
    Duration: 96.349 ms
     Changes:   
----------
          ID: ufw
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.357238
    Duration: 13.845 ms
     Changes:   
----------
          ID: ufw allow 22/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:23.373648
    Duration: 721.004 ms
     Changes:   
----------
          ID: ufw allow 80/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:24.094924
    Duration: 95.057 ms
     Changes:   
----------
          ID: ufw allow 4505/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:24.190408
    Duration: 97.19 ms
     Changes:   
----------
          ID: ufw allow 4506/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:24.287889
    Duration: 97.248 ms
     Changes:   
----------
          ID: ufw enable
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:24.385482
    Duration: 232.035 ms
     Changes:   
----------
          ID: ufw.service
    Function: service.running
        Name: ufw
      Result: True
     Comment: The service ufw is already running
     Started: 13:31:24.617832
    Duration: 33.205 ms
     Changes:   
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:24.651396
    Duration: 16.898 ms
     Changes:   
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html is in the correct state
     Started: 13:31:24.668481
    Duration: 27.025 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.conf
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.conf is present and owned by root:root
     Started: 13:31:24.695645
    Duration: 1.907 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.load
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.load is present and owned by root:root
     Started: 13:31:24.697690
    Duration: 1.765 ms
     Changes:   
----------
          ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: The service apache2 is already running
     Started: 13:31:24.700375
    Duration: 53.685 ms
     Changes:   

Summary for xubuntuminion
-------------
Succeeded: 13
Failed:     0
-------------
Total states run:     13
Total run time:    1.487 s
debianminion:
----------
          ID: packets
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:26.491294
    Duration: 647.307 ms
     Changes:   
----------
          ID: ufw
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:27.138773
    Duration: 26.458 ms
     Changes:   
----------
          ID: ufw allow 22/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:27.167272
    Duration: 118.636 ms
     Changes:   
----------
          ID: ufw allow 80/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:27.286121
    Duration: 102.827 ms
     Changes:   
----------
          ID: ufw allow 4505/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:27.389192
    Duration: 106.553 ms
     Changes:   
----------
          ID: ufw allow 4506/tcp
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:27.495972
    Duration: 107.731 ms
     Changes:   
----------
          ID: ufw enable
    Function: cmd.run
      Result: True
     Comment: unless condition is true
     Started: 13:31:27.603931
    Duration: 1713.782 ms
     Changes:   
----------
          ID: ufw.service
    Function: service.running
        Name: ufw
      Result: True
     Comment: The service ufw is already running
     Started: 13:31:29.319421
    Duration: 31.227 ms
     Changes:   
----------
          ID: apache2
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:29.350857
    Duration: 28.436 ms
     Changes:   
----------
          ID: /var/www/html/index.html
    Function: file.managed
      Result: True
     Comment: File /var/www/html/index.html is in the correct state
     Started: 13:31:29.382431
    Duration: 22.703 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.conf
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.conf is present and owned by root:root
     Started: 13:31:29.405290
    Duration: 1.558 ms
     Changes:   
----------
          ID: /etc/apache2/mods-enabled/userdir.load
    Function: file.symlink
      Result: True
     Comment: Symlink /etc/apache2/mods-enabled/userdir.load is present and owned by root:root
     Started: 13:31:29.406977
    Duration: 1.19 ms
     Changes:   
----------
          ID: apache2service
    Function: service.running
        Name: apache2
      Result: True
     Comment: The service apache2 is already running
     Started: 13:31:29.409295
    Duration: 26.398 ms
     Changes:   

Summary for debianminion
-------------
Succeeded: 13
Failed:     0
-------------
Total states run:     13
Total run time:    2.935 s
windowsminion:
----------
          ID: vlc
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:22.883836
    Duration: 741.348 ms
     Changes:   
----------
          ID: firefox_x64
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.625184
    Duration: 105.371 ms
     Changes:   
----------
          ID: winrar
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.730555
    Duration: 93.244 ms
     Changes:   
----------
          ID: vscode
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.823799
    Duration: 105.539 ms
     Changes:   
----------
          ID: libreoffice
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:23.929338
    Duration: 92.991 ms
     Changes:   
----------
          ID: chrome
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:24.022329
    Duration: 105.651 ms
     Changes:   
----------
          ID: git
    Function: pkg.installed
      Result: True
     Comment: All specified packages are already installed
     Started: 13:31:24.127980
    Duration: 92.727 ms
     Changes:   

Summary for windowsminion
------------
Succeeded: 7
Failed:    0
------------
Total states run:     7
Total run time:   1.337 s

Ajoin komennon kahteen kertaan, jotta näkisin tulisiko siinä virheitä vastaan, kun kaikki on asennettu. Salt ei ilmoittanut virheitä highstate tilaa ajaessa. Testasin vielä osaa asennutuista ohjelmista xubuntu minionilla.

xubuntutest

Ainakin Apache, UFW, Curl, Tree ja Git olivat asentuneet Salt tilojen avulla ja olivat toiminnassa. Testasin myös muut ohjelmat, jotka asensin Salt tilojen avulla Linux virtuaalikoneilla, sekä Windows virtuaalikoneella. Testeissä en huomannut virheitä tai poikkeavuuksia, joten oletan että kaikki toimivat oikealla tavalla.

Johtopäätös

Omasta mielestäni moduulini onnistui suunnitellulla tavalla, mutta kyllähän sitä voisi parantaa jatkossa. Esimerkiksi voisi ottaa käyttöön enemmän tiloja, joissa muokataan demonien tai ohjelmien asetuksia. Ajattelin itse mahdollisesti ottaa Saltin käyttöön omissa virtuaalikoneissa ja mahdollisesti myös palvelimissa. Koen siitä olevan todella paljon hyötyä uusien koneiden käyttöönotossa ja hallinnassa. Kurssin aikana opin paljon uutta Linuxista, sekä Saltin käytöstä. Uskon että kyseiset uudet taidot tulevat käyttöön hyvin pian itselläni

Lähteet

2021@Niko