a) Hei komento! Tee järjestelmään uusi “hei maailma” -komento ja asenna se orjille Saltilla. Liitä raporttiisi ‘ls -l /usr/local/bin/’ tulosteesta ainakin se rivi, jolla näkyy uuden komentotiedostosi oikeudet. Vinkkejä: tee shell script, joka tulostaa “hei maailma”. Kokeile ensin käsin, sitten automatisoi. Luonteva paikka paketinhalllinnan ulkopuolelta asennetuille ohjelmille on /usr/local/bin/. Katso myös ‘salt-call –local sys.state_doc file.managed’. Muista (aina ja kaikessa mitä teet tietokoneella) testata lopputulos. Hyvä testi on mahdollisimman lähellä sitä, mitä käyttäjä tekisi.
Ensimmäiseksi luon uuden komentotiedoston nimeltä hello, jonka kopioin sijaintiin /usr/local/bin/. Varmistan, että tiedoston oikeudet ovat sopivat, jotta kaikki näkee ja pystyy ajamaan tiedoston mutta ainoastaan omistaja (root) pystyy tekemään muutoksia.
#!/bin/bash
echo hello world, what is out there?
$ sudo cp /home/master/hello /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/hello

Testaan, että skripti toimii pelkällä hello-komennolla.

Koska minulla on jo aikaisemmasta tehtävästä hello-tila, tein nyt uuden salt tilan nimellä hellosh, joka sisältää hei maailma shell scriptin. Kopion myös tiedoston /usr/local/bin/hello hellosh-tilaan.
$ sudo mkdir /srv/salt/hellosh
$ sudoedit /srv/salt/hellosh/init.sls
/usr/local/bin/hello:
file.managed:
- source: salt://hellosh/hello
- mode: 755
$ sudo cp /usr/local/bin/hello /srv/salt/hellosh/
Ajan tilan minioneille ja testaan, että komento toimii minion2:lle (eri kone). Tarkistan myös uuden tiedoston oikeudet.
sudo salt '*' state.apply hellosh

Onnistui ilman ongelmia!
b) whatsup.sh. Tee järjestelmään uusi komento, joka kertoo ajankohtaisia tietoja; asenna se orjille. Vinkkejä: Voit näyttää valintasi mukaan esimerkiksi päivämäärää, säätä, tietoja koneesta, verkon tilanteesta…
Aloitan taas luomalla tiedoston komennolle. Kokeilen luonnollisesti komennot, jotta tiedän mitä haluan niillä tehdä/näyttää Kun tiedosto on valmis, kopion sen /usr/local/bin/ hakemistoon ja varmistan oikeudet (-rwxr-xr-x/755). Lopuksi testaan, että skripti toimii halutulla tavalla.
whatsup
#!/bin/bash
echo date and time
date
echo machine info
hostnamectl
echo network info
netstat -at
$ sudo cp /home/master/whatsup /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/whatsup

Tämän jälkeen luon uuden salt tilan ja init.sls-tiedoston, johon kopion edellisessä vaiheessa luodun komentotiedoston.
$ sudo mkdir /srv/salt/whatsup
$ sudoedit /srv/salt/whatsup/init.sls
/usr/local/bin/whatsup:
file.managed:
- source: salt://whatsup/whatsup
- mode: 755
$ sudo cp /usr/local/bin/whatsup /srv/salt/whatsup/
Ajan tilan minioneille ja testaan, että komento toimii.
sudo salt '*' state.apply whatsup


c) hello.py. Tee järjestelmään uusi komento Pythonilla ja asenna se orjille. Vinkkejä: Hei maailma riittää, mutta propellihatut saavat toki koodaillakin. Shebang on “#!/usr/bin/python3”. Helpoin Python-komento on: print(“Hei Tero!”)
Taas kerran aloitan luomalla itse skripti, tällä kertaa python-skripti. Kopion sen /usr/local/bin/ hakemistoon ja päivitän oikeudet. Testaan, että toimii.
#!/usr/bin/python3
name = input('What is your name?\n')
print('Hello' + name)
$ sudo cp /home/master/hello.py /usr/local/bin/
$ sudo chmod ugo+rx /usr/local/bin/hello.py

Seuraavaksi luon salt-tilan pyscript ja init.sls tiedoston sekä kopion skriptitiedoston sinne.
/srv/salt/pyscript/init.sls
/usr/local/bin/hello.py:
file.managed:
- source: salt://pyscript/hello.py
- mode: 755
$ sudo cp /usr/local/bin/hello.py /srv/salt/pyscript/
Ajan tilan minioneille ja testaan skriptin taas minion2:lla.
$ sudo salt '*' state.apply pyscript


Onnistunut harjoitus!
d) Laiskaa skriptailua. Tee kansio, josta jokainen skripti kopioituu orjille. Vinkki: ‘salt-call –local sys.state_doc file.recurse’. Kun tämä on valmis, on todella helppoa laittaa orjille mikä tahansa yhden tiedoston shell script, Python-ohjelma, Perl-ohjelma, Go-binääri tai muu yhden binäärin ohjelma.
Ensimmäiseksi tutustun file.recursen dokumentaatioon, jotta tiedän mistä on kyse.
Recurse through a subdirectory on the master and copy said subdirectory over to the specified path.
Recursive directory management allows for a directory on the salt master to be recursively copied down to the minion. This is a great tool for deploying large code and configuration systems.
file.recurse
Luettuani dokumentaation uskon ymmärtäväni miten recurse toimii. Tässä tehtävässä kuitenkin haasteita aiheuttaa tuo kansiollinen skriptejä. Käsittääkseni shell scriptin ajaminen ilman ./ lisäystä vaatii, että se on koneen pathissa. Tarkistan master koneeni pathin.

Käsittääkseni kansio, jossa kommennot sijaitsevat pitää löytyä täältä. Eli yksi vaihtoehto on lisätä haluamani kansion pathiin. Ongelma on kuitenkin, että minion2:n path on eri, joten se ei tule löytämään skriptit. Enkä tiedä miten saltilla saisi lisättyä uuden pathin. Päätän kuitenkin nyt kokeilemaan jotain, eli kokeilen nyt ensin luoda kansiollinen skriptejä, ja kopioida kansion /usr/local/bin/ hakemistoon.
Luon paikallisen kansion (mkdir scripts) ja siihen sekalaisia skriptejä.
/scripts/showfiles
#!/bin/bash
ls -l
/scripts/weather
#!/bin/bash
# show weather in location /etc/timezonels
# source code https://github.com/chubin/wttr.in
curl wttr.in
/scripts/corona
#!/bin/bash
curl https://corona-stats.online
/scripts/calculator
#!/usr/bin/python3
def calculate():
operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Please enter the first number: '))
number_2 = int(input('Please enter the second number: '))
if operation == '+':
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
elif operation == '-':
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
elif operation == '*':
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
elif operation == '/':
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)
else:
print('You have not typed a valid operator, please run the program again.')
# Add again() function to calculate() function
again()
def again():
calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')
if calc_again.upper() == 'Y':
calculate()
elif calc_again.upper() == 'N':
print('See you later.')
else: again()
calculate()
# from https://www.digitalocean.com/community/tutorials/how-to-make-a-calculator-program-in-python-3
Kopion kansion sisältöineen (-r) /usr/local/bin/ hakemistoon. Päivitän ja tarkistan oikeudet (kaikille lisätään x).
$ sudo cp -r /home/master/scripts/ /usr/local/bin/
$ cd /usr/local/bin/scripts/
$ sudo chmod ugo+x calculator corona showfiles weather

Lopuksi testaan skriptit. Kuten arvasin tehtävän alussa, en onnistunut ajaamaan skriptejä ilman ./.

Ratkaisuksi tähän löydän kaksi vaihtoehtoa, joko lisätä kansion pathiin tai luoda skripteille symboliset linkit. Kumpikaan vaihtoehto ei kuulosta kovin hyvältä tai tehokkaalta. Symboliset linkit aiheuttaa lisää rivejä /usr/local/bin hakemistoon ja path ei ole pysyvä ratkaisu, sillä se nollaantuu rebootissa.
Jotain tapaa pitää kuitenkin valita, joten menen symlinkeillä. Testaan ne ensin käsin.


Hyvin toimii, joten teen saman vielä muille skripteille. Törmäsin yhteen pieneen ongelmaan.

Eli /usr/local/bin hakemistossa oli jo ennestään showfiles tiedosto, jonka olin luonut tunnilla. Niinpä päätän nimetä uudelleen scripts kansiossa olevan showfiles skriptin content-nimiseksi.

Seuraavaksi luon uuden lazyscript salt-tilan ja init.sls. Kopion skriptikansion kyseiseen tilaan.
/srv/salt/lazyscript/init.sls
/usr/local/bin/scripts:
file.recurse:
- source: salt://lazyscript/scripts
- include_empty: True
Testasin ensin vain tämän osan, ja se onnistui osittain. Kansio ja sisältö päätyi minioneille, mutta oikeudet olivat väärin.

Lisätty vielä oikeudet tilaan sekä alla olevat symlinkit.
/srv/salt/lazyscript/init.sls
/usr/local/bin/scripts:
file.recurse:
- source: salt://lazyscript/scripts
- include_empty: True
- mode: 755
/usr/local/bin/calculator:
file.symlink:
- target: /usr/local/bin/scripts/calculator
/usr/local/bin/corona:
file.symlink:
- target: /usr/local/bin/scripts/corona
/usr/local/bin/content:
file.symlink:
- target: /usr/local/bin/scripts/content
/usr/local/bin/weather:
file.symlink:
- target: /usr/local/bin/scripts/weather

Symlinkkien luonti näytti onnistuvan mutta tiedostojen oikeuksien muokkaaminen epäonnistui. Nähtävästi file.recursen kanssa tulee käyttää file_mode tai dir_mode. Korjaan vielä sen ennen lopullista testiä.

Hyvältä näyttää ohjelmat minion2:lla. Ainoa mikä ei toimi on weather, mutta testattuani sen masterille, totean, että kyseessä on ilmeisesti palvelun huolto.

Puh! Eipäs tuntunut oikein laiskalta tämän tehtävän tekoa. Monta tuntia tähän upposi. Olen kyllä melko varma, että tähän on parempi ratkaisu kuin symlinkit, mutta itse en muuta keksinyt.
e) Intel. Etsi kolme loppuprojektia joltain vanhalta kurssitoteutukselta. Kuvaile projektit tiiviisti ja linkitä alkuperäiseeen raporttin. Vinkkejä: Loppuprojekteja löydät etsimällä opiskelijoiden raportteja vanhoilta kursseilta ja selailemalla sivuja, joilta ne löytyivät. Raportteja löytyy vanhojen kurssitotetusten kommenteista. Ja tietysti kannattaa silmäillä listaa sieltä täältä, niin näet eri projektit kuin muut. Voi hakea myös Googlella ja DuckDuckGolla.
- Rikun projekti https://tenhunenr.wordpress.com/h7-palvelinten-hallinta/
Riku on asentanut SCCM, eli System Center Configuration Manager, joka on Windowsin työkalu etähallintaan. Tämä käytetään tänä päivänä monessa työpaikassa. SCCM:llä hallinnoidaan toimialueen laitteita, hallinnoidaan vakioidun imagen asennus, kerätään erilaisia tietoja laitteista, sekä hallinnoidaan asennuksia ja päivityksiä.
Riku on projektia varten asentanut virtuaaliympäristön, joka koostuu yhdestä työasemasta ja kahdesta palvelimesta, joista toisella palvelimella pyörii SCCM. Riku kertoo raportissaan yksityiskohtaisesti miten SCCM on asennettu sekä minkälaisia konfiguratioita toimialueelle on tehty. Konfigurointia tarvittiin mm. Active Directorya (AD), palomuuria, SQL serveriä sekä toimialueen verkkoa ja DNS:ä varten. Lisäksi toimialueen palvelimille oli määriteltävä rooleja, eli SCCM-palvelimelle Riku määritteli WSUS ja IIS roolit sekä AD-palvelimelle DNS, DHCP ja AD roolit. Raportissa ei oikein selvinnyt miksi roolit jaettin tällä tavalla, mutta varmaankin selvisi Rikun käyttämässä ohjeessa.
Lopuksi Riku on kuvilla näyttänyt miltä SCCM näyttää, miten työasemalle voi asentaa SCCM-clientin sekä miten SCCM:llä voi asentaa työasemalle paketin tai ohjelman. Työasema vastaanottaa paketit Software Centeriin. Paketit voi olla pakotetusti tai vapaaehtoisesti asennettavia. Riku kertoo ja näyttää kuvilla lisäksi miten SCCM kerää tietoja SQL tietokantoihin.
Rikun raportista päätellen voisin todeta, että SCCM vaikuttaa monimutkaiselta sekä asentaa että käyttää. Salt vaikuttaa paljon loogisemmalta ja kivemmalta!
2. Juhon projekti https://jomhak.github.io/ICT4TN022/#h7
Juho on projektissaan luonut salt-tilan, joka asentaa Vagrantin avulla minioneille virtuaalikoneen, johon asennetetaan Apache, joka näyttää nettisivun.
Ensin Juho asensi master-koneelle käsin Vagrantin ja Virtualboxin. Tässä hänellä esiintyi ensin ongelmia, mutta sai virtualboxin käyntiin aktivoimalla virtualisointi. Juho asensi Saltstackin masterkoneelle bootstrap-menetelmällä, eli hakemalla ensin repo ja gpg-avain ja sen jälkeen asentamalla. Ensimmäiseksi tilaksi Juho loi tilan joka asentaa Vagrantin ja Virtualboxin, kopioi Vagrantfile (varmaankin Vagrantin jokin konfigurointitiedosto) sekä määrittää ja käynnistää uuden virtuaalikoneen (VM). Tilalla hän ei saanut kuitenkaan Vagrantia käyntiin, ja selvitti, että Vagrantfilen sekä sen parentkansion oikeudet ja omistajuus olivat rootilla. Ajettuaan korjatun tilan Juho pystyi onnistuneesti testaamaan yhteyden koneiden välillä ssh:lla.
Lopuksi Juho loi skriptin, jonka avulla hän asensi Apachen ja loi siihen testisivun apachen vakiosivun tilalle. Vagrantfileen hän myös lisäsi porttiohjaukset, jotta testisivu näkyisi myös master koneella. Nämä loput lisäykset näyttivät onnistuvan ongelmitta.
Juholla oli mukavan näköinen projekti, jolla saa nopeasti pystyyn apachen.
3. Antin projekti https://oispadotka.wordpress.com/2020/05/16/h7-oma-moduli/
Antti on projektissaan luonut yhden salt-tilan jolla hän on pystyttänyt Mumble-palvelimen.
Antti on ensin asentanut palvelimen käsin ja testannut sen oletusasetuksia sekä lukenut dokumentaatiota. Antti sai palvelimen toimimaan paikallisesti, mutta ei internetissä. Sen selvittämiseksi hän luki Virtual Boxin dokumentaatiota, sekä testasi ensin NAT + port forwardingia ennen kuin päätyi käyttämään Bridged Adapteria. Lisäksi Antti avaa portin 64738, jota Murmur oletuksena käyttää. Kun Antti testasi ja totesi yhteyden toimivaksi, hän siirtyi Murmur asetuksiin, jotka sijaitsevat tiedostossa /etc/mumble-server.ini. Hän päättää haluavansa lisää kanavia, ja testaa sitä murmus superuserilla.
Kun käsin tehty asennus on todettu tomivaksi, ja asetustiedosto tutkittu, Antti siirtyy luomaan salt-tilan. Antti luo ensin minion-koneen vagrantilla ja testaa yhteyden toimivuuttaa hei maailma-tilalla. Murmuria varten Antti luo tilan, joka asentaa mumble-palvelimen ja joka päivittää tiedostot /etc/default/mumble-server sekä /etc/mumble-server.ini sekä lisäksi valvoo, että palvelin on käynnissä. Testattuaan Mumble-palvelinta Antti toteaa kuitenkin, että asetukset eivät päivity, ja arvelee, että asetukset ovat tallennettu tietokantaa. Hän testaa teorian lisäämällö /var/lib/mumble-server/mumble-server.sqlite salt tilaansa. Tämän jälkeen palvelin toimii halutulla tavalla.
Hienosti tehty projekti ja hyvin dokumentoitu. Ainoa, mikä jäi ehkä epäselväksi, oli mitä asioita noissa asetustiedostoissa oli muutettu, ja oliko niihin kaikkiin tehty muutoksia.
e) Lukua, ei luottamusta. Kokeile yhtä kohdassa d-Intel löytämääsi modulia koneella. Tämä on infraa koodina, joten luottamusta ei tarvita. Voit lukea koodista, mitä olet ajamassa.
Tutkituista projekteista päätän yrittää toistaa viimeisen, eli Antin projektin. Päädyin tähän, sillä Rikun SCCM vaikuttaa aivan liian monimutkaiselta ja työläältä (ja lisäksi Windows…). Juhon projekti olisi muuten varmaankin myös kiinnostava, mutta koska itse käytän kurssissa VirtualBoxia, epäilen, että se ei oikein tykkäisi, että virtuaalikoneelle asentaisi VirtualBoxia. Vaikuttaa ns. doomed to fail -ajatukselta.
Vaihe 1. Asennus käsin
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install -y mumble-server
$ sudo apt install -y mumble
Asennus onnistui ongelmitta ja seuraavaksi käynnistän palvelimen sekä teen alkukonfiguraatiot.
$ sudo dpkg-reconfigure mumble-server
Lisäksi tarkistan, että palvelin on käynnissä.


Minulla on jo ennestään virtuaalikoneellani käytössä Bridged Adapter verkkoa, joten avaan ainoastaan reiän palomuuriin.

En pystynyt testamaan yhteyttä ulkomaailmasta kuten Antti, sillä minulla käytettävissä ainoastaan yksi verkko.
Siirryn seuraavaksi tutkimaan asetuksia. /etc/mumble-server.ini

Kirjaudun superuserilla.

Minulla on vaikeuksia löytää kanava-asetukset, joita Antti on muokannut. Joudun tässä vaiheessa tutkimaan dokumentaatiota https://wiki.mumble.info/wiki/Main_Page. Sivulta https://wiki.mumble.info/wiki/Murmurguide löytyi jonkun verran hyödyllistä tietoa täysin uudelle käyttäjälle. Tältä sivulta löytyi myös ohjeet, miten pääsen kirjautumaan superUserina sekä lisäämään ja muokkaamaan kanavia.

Vaihe 2. Salt
Seuraavaksi siirryn salt tilan luomiseen. Minulla on jo ennestään toimiva master-slave ympäristö, joten en luo tässä vaiheessa uutta.

/srv/salt/mumble-server/init.sls
mumble-server:
pkg.installed
/etc/default/mumble-server:
file.managed:
- source: salt://mumble-server/mumble-server
/etc/mumble-server.ini:
file.managed:
- source: salt://mumble-server/mumble-server.ini
/var/lib/mumble-server/mumble-server.sqlite:
file.managed:
- source: salt://mumble-server/mumble-server.sqlite
mumble-server.service:
service.running:
- watch:
- file: /etc/mumble-server.ini
Tässä välissä poistan käsin asennetun mumble-serverin, ennen kuin testaan salt-tilan.
$ sudo apt purge mumble-server
$ sudo apt purge mumble
Vaihe 3. Testaus
Seuraavaksi ajan salt tilan ja testaan.
$ sudo salt '* state.apply mumble-server
Asennus onnistui mutta tiedostojen muokkaus epäonnistui.

Saattaa olla, että tiedostoja voi luoda vasta kun palvelu on käynnissä, joten kokeilen ajaa tilan uudelleen. Se ei kuitenkaan auta, ja sama virhe tulee edelleen, eli näköjään ei löydä sourcefilejä… Tarkistan, että nämä ovat paikallaan ja tuplatarkistan pathit, enkä löydä mitään ongelmia…


Epäonnistuneiden tiedostojen oikeudet ovat kuitenkin rootilla, kun taas mumble-serverillä kaikilla on read-oikeudet. Testaan mikäli read-oikeuden lisääminen korjaa tilanteen.


Ja sehän korjasi sen!
Lopuksi testaan vielä mumblen minion2:lla.

En saa sitä kuitenkaan avattua, enkä löydä ohjelmaa koneella… Mietin käsin tehtyä asennusvaihetta, kun siinä asennetaan mumble-server ja sitten erikseen vielä mumble, siihen on varmaan jokin syy. Molempia paketteja ei ole kuitenkaan tällä salt-tilalla asennettu, joten muokkaan hieman init.sls -tiedostoa.

Ja sehän auttoi! Minion2:lla avautui Mumble Audio Wizard.


Vaikuttaisi toimivan, mutta en kuitenkaan pääse kirjautumaan, vaan saan vain virheviestin “connection refused”. Näyttää kuitenkin toimivan, veikkaan että tässä on nyt käyttäjässä vika, kun en yhtään osaa tätä mumblea käyttää.
Lähteet:
Pieniä ohjelmia: https://github.com/chubin/wttr.in
https://www.digitalocean.com/community/tutorials/how-to-make-a-calculator-program-in-python-3
Intel-projektit: https://tenhunenr.wordpress.com/h7-palvelinten-hallinta/
https://jomhak.github.io/ICT4TN022/#h7
https://oispadotka.wordpress.com/2020/05/16/h7-oma-moduli/
Mumble-server: https://wiki.mumble.info/wiki/Murmurguide