Ylös
Hello Salt! Package-File-Service Git Uusi komento Aikajana Windows Oma moduli

Palvelinten Hallinta

Configuration Management Systems - Palvelinten Hallinta - Spring 2021
Haaga-Helia ammattikorkeakoulu
ICT4TN022-3011 - Kevät 2021
Opettajana: Tero Karvinen


Harjoitus 1 - Hello Salt! - 04.04.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Tehtävä A

a) Asenna Salt ja siihen uusi orja. Voit tehdä ne esimerkiksi uudelle virtuaalikoneelle, niin pääset kokeilemaan puhtaalta pöydältä.

Master ja Minion

Seurataan Tero Karvisen 'Salt Quickstart' ohjetta: Salt Quickstart – Salt Stack Master and Slave on Ubuntu Linux. Tässä ohjeessa asennetaan master ja minion samalle koneelle.

Aloitetaan asentamalla master ja minion

$ sudo apt-get install salt-master -y
$ sudo apt-get install salt-minion -y

Tässä virtuaalikoneessa ei ole palomuuria asennettuna, jos olisi, avaisimme portit 4505/tcp ja 4506/tcp master koneesta, jotta minion saisi siihen yhteyden.

Tarkistetaan koneen osoite

$ hostname -I

Muokataan minionia, kerrotaan sille että master sijaitsee tuossa osoitteessa ja annetaan minion koneelle id joka näkyy masterille.

$ sudoedit /etc/salt/minion

Ja kuten aina muutosten jälkeen, käynnistetään minion uusiksi

$ sudo systemctl restart salt-minion.service

Hyväksytään minion masteriin.

$ sudo salt-key -A

Kokeillaan toimivuutta.

$ sudo salt '*' cmd.run 'whoami'

Minion vastaa masterin komentoon, yhteys siis pelaa.

Tehtävä B

b) Tee saltille idempotentti hei maailma (siis tiedostosta, foo.sls)

file.managed

Seurataan Tero Karvisen 'Salt States – I Want My Computers Like This' ohjetta: https://terokarvinen.com/2018/salt-states-i-want-my-computers-like-this/

Tehdään saltille oma kansio ja sen sisään hello kansio

$ sudo mkdir -p /srv/salt/hello/

Ja sinne init.sls tiedosto

$ sudoedit /srv/salt/hello/init.sls

Tiedoston sisälle kirjoitetaan seuraava pätkä, jossa pyydetään konetta päivittämään /tmp/hello.txt tiedosto vastaamaan sisällöltään salt/hello/hello.txt tiedostoa

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

Seuraavaksi tehdään hello.txt tiedosto ja kirjoitetaan sinne testiviesti

$ sudoedit /srv/salt/hello/hello.txt

Tarkastetaan että toimii

$ sudo salt '*' state.apply hello

"File /tmp/hello.txt updated" eli ohjelma toimii.

Tehtävä D

Kerää tietoa koneesta saltin avulla (grains.items)

grains.items

$ sudo salt '*' grains.items|less

Tämän avulla saamme paljon tieto minion koneesta


Tehtävä E

Kokeile jotain toista tilaa kuin file.managed. Tärkeitä ovat pkg.installed, file.managed, service.running, file.symlink, user.present, group.present. Ohjeita saa esim "sudo salt '*' sys.state_doc pkg.installed|less"

pkg.installed

Tehdään käsky asentaa tulimuuri. Aloitetan tekemällä uusi kansio nimeltään ufw, salt kansion sisälle.

$ sudo mkdir -p /srv/salt/ufw

Tehdään sinne init.sls tiedosto ja laitetaan sen sisälle pyyntö tarkastaa onko tulimuuri asennettu ja jos ei ole niin asentaa se.

ufw:
pkg.installed

Testataan toiminta.

$ sudo salt '*' state.apply ufw

Ja jos ajetaan sama käsky uudestaan, niin tuloksen pitäis olla hieman eri. Ufw ohjelman ei asennu uusiksi, eli kommenteissa "All specified packages are already installed" tuli näkyviin.


Tehtävä F

Vapaaehtoinen: Laita Salt Master palvelimelle, joka näkyy Internetiin. Silloin orjat saavat siihen yhteyden tulimuurin läpi, ei-julkisista (NAT) osoitteista ja vaikkapa virtuaalikoneista.

Master pilvessä

Luodaan pilvikone 'linux palvelimet' kurssilla tehtyjen oppien mukaan, Johan Lindell - Harjoitus 4 - Julkinen palvelin Kirjaudutaan pilvikoneeseen ja asennetaan siihen salt-master. Tarkastetaan osoite ja otetaan se talteen. Vaihdetaan minion koneeseen tuo uusi osoite.

$ sudoedit /etc/salt/minion

Minionin uudelleen käynnistys

$ sudo systemctl restart salt-minion.service

Master koneen puolella hyväksytään kaikki uudet minionit

$ sudo salt-key -A

Testinä ajetaan komento whoami

$ sudo salt '*' cmd.run 'whoami'


Minion did not return. [No response]
Ei toimi, googltataan tuo error viesti ja avataan linkki joka parhaiten kuvaa ongelmaa https://stackoverflow.com/questions/35458952/salt-minion-returns-no-response-after-being-accepted
Ratkaisuehdotuksena on tarkastaa minionin status ja edetä sen mukaan, tehdään se

$ sudo service salt-minion status|less

Paljon tekstiä mutta meitä kiinnostaa kohta:

Apr 04 19:39:43 testikone108 salt-minion[9782]: If you are confident that you are connecting to a valid Salt Master, then remove the master public key and restart the Salt Minion.
Apr 04 19:39:43 testikone108 salt-minion[9782]: The master public key can be found at:
Apr 04 19:39:43 testikone108 salt-minion[9782]: /var/lib/salt/pki/minion/minion_master.pub

Poistetaan tuo avain ja käynnistetään minion uudelleen.

Lisäys: Olimme tätä samaa konetta käyttäneet aikaisemmissa tehtävissä ja tämän koneen mielestä sen master on vielä se itse. Joten tiedämme syyn miksi tämä error viesti tulee ja voimme poistaa tuon vanhan masterin avaimen turvallisesti.

$ sudo rm /var/lib/salt/pki/minion/minion_master.pub
$ sudo systemctl restart salt-minion.service

Masterin puolella koitetaan uudestaan whoami komentoa

$ sudo salt '*' cmd.run 'whoami'

Minion vastasi, yhteys siis toimii kotikoneella olevan minionin ja pilvessä olevan masterin välissä.


Harjoitus 2 - Package-File-Service - 11.04.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Tehtävä A

a) Demonin asetukset. Säädä jokin demoni (asenna+tee asetukset+testaa) package-file-service -rakenteella. Tunnilla asennettiin Apache vaihdetulla oletussivulla, joten tee jotain muuta). Voit esimerkiksi asentaa SSH-palvelimen tai tehdä jotain muuta Apachella. Ensin käsin: muista tehdä ja raportoida asennus ensin käsin, vasta sitten automatisoiden.

Nginx käsin

Tähän asti on käytetty tehtävissä paljon Apachea, joten tälläkertaa kokeilemme Nginx nimistä webpalvelin ohjelmaa. Ensin tehdään asennus käsin.

Aloitetaan päivittämällä paketinhallinta ja asennetaan Nginx.

$ sudo apt-get install nginx -y

Varmistetaan että toimii

$ firefox 'localhost'

"If you see this page, the nginx web server is successfully intalled and working."

Muutetaan tuo sivu

$ echo testi |sudo tee /var/www/html/index.nginx-debian.html

Nyt sivulla näkyy ainoastan teksti "testi"

Poistetan nginx

$ sudo apt-get purge nginx

Test Master-Minion

Edetään askel kerrallaan, jos yrittäisimme laittaa kaiken kerrallaan toimimaan niin jossain olisi varmasti virhe ja tämän virheen etsiminen olisi hyvin vaikeeta. Koneeseen on jo asennettu Salt master ja minion aikaisemmassa tehtävässä. Niiden toiminta takastetaan ennenkuin aloitamme tehtävä teon.

$ sudo salt '*' cmd.run 'whoami'

Tehdään saltin sisälle oma kansio nimeltään nginx ja sinne init.sls tiedosto. Tiedostoon lisätään aluksi vain komento kopioida txt tiedosto, näin varmistamme minionin ja masterin toimivuuden.

$ sudo mkdir -p /srv/salt/nginx
$ cd /srv/salt/nginx
$ sudoedit init.sls

/tmp/testi.txt:
file.managed:
- source: salt://nginx/testi.txt

Luodaan edellä mainittu nginx.txt tiedosto ja kirjotetaan sinne sisään, "testi"

$ sudoedit testi.txt

Sitten onkin jo aika suorittaa ensimmäinen testi

$ sudo salt '*' state.apply nginx

Tarkastetaan onko tiedosto olemassa
$ sudoedit /tmp/testi.txt

Kuten halusimme, kopioitiin txt tiedosto sisältöineen. Nyt kun tiedämme että ohjelma toimii niin voimme siirtyä eteenpäin.

Minion install Nginx

Seuraavaksi muutetaan init.sls tiedostoa niin että se asentaa nginx ohjelmiston

nginx:
pkg.installed

Ja testiin:

$ sudo salt '*' state.apply nginx

Ilmeisesti tuo aikaisempi nginx poistamien ei ollut onnistunut, koska se on vielä asennettuna. Varoitusteksti tuli myös:

Warnings:
The following package(s) are "virtual package" names: nginx.
These will no longer be supported as of the Fluorine release.
Please update your SLS file(s) to use the actual package name.

Pieni googletus ehdottaa tilalle nginx-full pakettia, joten muutetaan init.sls tiedostoa hieman:

nginx-full:
pkg.installed

Ja testiin:

$ sudo salt '*' state.apply nginx

Ei erroria, näyttää paremmalta

Minion change front page

Seuraavaksi lisäämme init.sls tiedostoon komennon kopioda masterin index.html tiedoston sisältö minionin index.nginx-debian.html tiedostoon

Tehdään tuo edellä mainittu index.html tiedosto salt/nginx kansioon
$ sudoedit index.html

Testiin

$ sudo salt '*' state.apply nginx

Muuten toimi, mutta korjataan vielä index.html tiedostoon UTF-8 kuntoon ja ajetaan uudestaan.

Muutos onnistui ja sivu on toiminnassa.


Tehtävä B

b) Uusi ohjelma. Asenna + tee asetukset + testaa jokin sovellus, jota ei ole käsitelty tunnilla. Asenna ensin käsin, ja käytä sen jälkeen find-komentoa etsiäksesi muuttuneet tiedostot.

MariaDB käsin

Asennetaan mariadb ja käynnistetään se

sudo apt-get install mariadb-client mariadb-server -y sudo mysql_secure_installation

Kirjaudutaan sisään ja luodaan tietokanta 'testi'

sudo mariadb -u root
CREATE DATABASE testi;
GRANT ALL ON testi.* TO testi@localhost IDENTIFIED BY 'hfk4-OPSEC-78xe';
exit

Minion install MariaDB

Aloitetaan taas tekemällä mariadb kansio jonka sisälle init.sls tiedosto

Muuttuneet tiedostot

Katsotaan mihin tiedostoihin tuli muutoksia

$sudo find -printf "%T+ %p\n"|sort


Tehtävä C

c) Aja jokin tila paikallisesti ilman master-slave arkkitehtuuria. Tutki debug-tulostetta. 'sudo salt-call --local state.apply hellotero -l debug'

Master ja Minion

Testataan tuo aikaisempi nginx.sls,

$ sudo salt-call --local state.apply nginx -l debug

Ohjema ajettii paikallisesti ilman että se asennettiin minionille. -debug näyttää reaaliajassa mitä ohjelma tekee, tämä helpottaa jos tekee suuria asennuksia niin että tietää miten asennus etenee.


Harjoitus 3 - Versionhallinta - 16.04.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Github

Tämä tehtävä löytyy kokonaisuudessaan GitHubista, osoitteessa https://github.com/johanlindellgit/githubharkka

Lisätty kuvat:


Harjoitus 4 - Uusi komento - 23.04.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041.928
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree

Tehtävä A

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.

Hei maailma

Master koneelle tehdään 'heippa' tiedosto, jonka sisälle kirjotetaan komento echo "Hei Maailma". Tämän jälkeen siirretään tuo tiedosto kansioon /usr/local/bin/. Muutetaan myös tuon tiedoston käyttöoikeuksia niin, että kaikilla on oikeus ajaa se, mutta ei tietenkään saa muuttaa sen sisältöä.

$ nano heippa
$ sudo mv heippa /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/heippa

Tehtävänannon mukaan varmistetaan vielä tiedoston käyttäjä oikeudet.

ls -l /usr/local/bin/

-rwxr-xr-x
Viimeinen x tarkoittaa että kaikilla on ainoastaan execute oikeudet, se riittää.

Sitten tietenkin varmistetaan tuon toiminta,

$ heippa

Salt

Nyt kun tiedämme että scripti toimii niin voimme siirtyä saltin avulla sen siirtämiseen minioneille. Tehdään salttiin uusi kansio, heippa, jonka sisälle tehdään init.sls tiedosto

$ sudo mkdir -p /srv/salt/heippa $ sudoedit /srv/salt/heippa/init.sls

Init tiedoston sisälle kirjotetaan komento kopioda tuo 'heippa' tiedosto minionin /usr/local/bin/ kansioon. Varmistetaan myös että oikeudet menevät oikein jotta minionin käyttäjät voivat komentoa käyttää

/usr/local/bin/heippa:
files.managed:
- source: salt://heippa/heippa
- mode: "0755"

Tuo 'heippa' tiedosto pitää kopioida tuohon saltin kansioon, tehdään se

$ sudo cp /usr/local/bin/heippa /srv/salt/heippa

Varmistetaan että minion on hereillä

$ sudo salt '*' cmd.run 'whoami'

Ajetaan salt

$ sudo salt '*' state.apply heippa

Kirjaudutaan minionille ja testataan

$ heippa

Vastauksena tulostuu "Hei Maailma", eli komento toimii.


Tehtävä B

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...

Tietoja koneesta

Ensin valitaan mitä tietoja halutaan että ohjelma näyttää. Edetään samalla kaavalla kuin edellisen tehtävän kanssa, tehdään tiedosto, siirretään se /usr/local/bin/ kansioon, muutetaan oikeuden ja testataan käsin kunnes lopputulos on miellyttävä

Tehdään taas uusi kansio salttiin nimeltä whatsup ja siirretään tämä tiedosto sinne. Tehdään myös init.sls tiedosto

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

Ajetaan salt

$ sudo salt '*' state.apply whatsup

Kirjaudutaan minionille ja testataan

$ whatsup

Tiedot tulostuivat oikein


Tehtävä C

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!")

Python käsin

Täysin sama kaava alussa kuin edellisissäkin, tehdään ja testataan ensin käsin.

Aluksi pelkkä print("hello"), toimivuuden testamiseksi

Seuraavaksi jotain hieman monimutkaisempaa

#!/usr/bit/python3
import datetime
x = datetime.datetime.now()
print("Today is " + x.strftime("%A"))

Tulostaa

"Today is Friday"

Onko minionilla python3?

Emme voi tietää onko minionilla python3 asennettuna, se pitää siis asentaa, jos ei jo ole asennettuna

python3:
pkg.installed

Testaan tuon toimivuus ensin

$ sudo salt '*' state.apply hello

Toimii, siirretään hello.py saltin hello kansioon ja siirretään hello.py minionille

$ sudo cp /usr/local/bin/hello.py /srv/salt/hello/

python3:
pkg.installed

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

$ sudo salt '*' state.apply hello

Siirto onnistui, ja kuten tähänkin asti, tarkastetaan minionilla toiminta

Toimii! "Today is Friday".


Tehtävä D

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.


Tehtävä E

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.

Linux käyttövalmiiksi + Masteriksi GitHubista

Ville Wilkman teki modulin joka tekee uuden Linux asennuksen käyttövalmiiksi asentamalla ohjelmia ja muuttamalla asetuksia. Master koneelle tarkoitetussa modulissa asennetaan ohjelmina muunmuassa Apache2, Ssh ja Salt master. Minionille on oma moduli joka muokkaa asetukset ja asentaa minionin. Moduli on hyvin tehty ja kertoo hyvin mitä seuraavaksi tapahtuu.

https://wilkmanv.wordpress.com/miniprojekti/

Salt mini-project

Irene Kunnari n Salt master on yhteydessä seitsemään minioniin jossa jokaisessa on eri käyttöjärjestelmä. Hänen modulinsa asentaa jokaiselle käyttöjärjestelmälle Saltin avulla eri ohjelman. Tämä projekti on erittäin meilenkiintoinen ja näyttää miten monipuolinen Salt ohjelmisto on.

https://irenekunnari.wordpress.com/salt-mini-project/

MiniProjekti

Joakim Saras teki modulin helpottaaksenn linuxin asennusta ja projektien tekoa githubin avulla. Ensimmäinen osio asentaa Saltin, gitin, pythonin ja dropboxin, sekä muokkaa Salt-minionin asetukset yhdistämään automaattisesti Salt-masteriin.

https://sarasj.home.blog/2019/05/14/oma-projekti-github-dropbox-installaatio-tiedostot/


Tehtävä F

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.

Toisen tekemä moduli

Päätin asenta Joakim Saraksen tekemän modulin,

https://sarasj.home.blog/2019/05/14/oma-projekti-github-dropbox-installaatio-tiedostot/

Aloitin ohjeiden mukaan,

$ wget https://raw.githubusercontent.com/JoakimSaras/srv/master/salt/setuppi.sh

Tarkastetaan tietenkin mitä tuo setuppi.sh tiedosto sisältää

$ nano setuppi.sh

Ymmärrän sisällön ja mitään vaarallista ei ole, jatketan

$ bash setuppi.sh

Ensimmäisen osion asennus onnistui

Seuraava vaihde

$ wget https://raw.githubusercontent.com/JoakimSaras/srv/master/salt/run2.sh

Tarkastetaan taas tietenkin mitä tuo run2.sh tiedosto sisältää

$ nano run2.sh

$ bash run2.sh

Toisen osion osalta en pääse käsiksi 'saras' repositioon ilman käyttäjänimeä ja salasanaa. reposition on joko poistettu tai laitettu yksityiseksi. En myöskään pääse kokeilemaan itse dropbox uploaderia.


Harjoitus 5 - Aikajana - 3.5.2021

Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041.928
Oracle VM virtualBox, versio 6.1.22
Debian-live-10.8.0-amd64-xfce+nonfree


Tehtävä A

a) Captain obvious. Linuxissa on paketinhallinta, joten ohjelmien asentaminen on yksinkertaista. Tee tila, joka asentaa 10 suosikkiohjelmaasi paketinhallinnasta. Tässä a-kohdassa voit jättää ohjelmat oletusasetuksille.

Kymmenen ohjelman asennus

Aloitetaan valitsemalla kymmenen ohjelmaa ja asennetaan ne ensin käsin.

$ sudo apt-get update
$ sudo apt-get install
handbrake
libreoffice
vlc
ufw
gimp
python3
timeshift
kdenlive
obs-studio
lyx

Testataan että kaikki ohjelmat asentui ja toimii

Tehdään sama saltin avulla

$ sudo mkdir /srv/salt/top10
$ cd /srv/salt/top10 $ sudoedit init.sls

Testiin

$ sudo salt '*' state.apply top10

Kaikki asentui kuten piti


Tehtävä B

b) Sammakko ja skorppioni. Lisää Microsoftin pakettivarasto ja asenna Visual Studio Code.

VSCode käsin

Seurataan ohjetta osoitteesta https://linuxize.com/post/how-to-install-visual-studio-code-on-debian-10/ ,

$ sudo apt install software-properties-common apt-transport-https curl
$ curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
$ sudo apt update
$ sudo apt install code

Tarkastetaan toiminta

$ code

VSCode Saltin avulla


Tehtävä C

c) CSI Pasila. Tiedostoista saa aikajanan 'cd /etc/; sudo find -printf '%T+ %p\n'|sort|tail'.
Anna esimerkki aikajanasta
Selitä jokainen kohta komennosta, jolla aikajana tehdään. Vinkki: '%T+' löytyy 'man find' kohdasta printf.
Aja jokin komento, joka muuttaa järjestelmän yhteisiä asetustiedostoja
Ota uusi aikajana ja etsi muutos sieltä
Onko samalla hetkellä muutettu yhtä vai useampaa tiedostoa?

Selitykset

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

find komento etsiä tiedostoja
printf tulostaa tuloksen
%T näyttää ajan
%p näyttää tiedoston nimen
\n rivin vaihto
sort lajittelee ajat järjestykseen
tail näyttää listat viimeiset tulokset

Muutetaan hostname tiedostoa ja tarkastetaan näkyyykö muutokset haulla.

Kyllä näkyy ja ainoastaan yhtä tiedostoa on muutettu


Harjoitus 6 - Windows - 10.05.2021

Rauta ja softa

Tehtävää varten käytän erillisiä master ja minion koneita, master sijaitsee DigitalOceanin pilvessä ja Minion on kotikoneella, Oraclen VM VirtualBoxissa.

Master
DigitalOcean Droplet
Prosessori: 1vCPU
Muisti: 1GB
Käyttöjärjestelmä: Debian10

Minion:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041.928
Oracle VM VirtualBox, versio 6.1.22
VM
Muisti: 4GB
Käyttöjärjestelmä: Windows 10 Home, 64bit, versio 20H2, OsBuils 19042.
Salt minion, versio 3003

Tehtävä A

a) Kokeile Saltia Windowsissa.

Rauta ja softa

Tehtävää tehdessä seurasin ohjeita sivustoilta https://github.com/rikurikurikuriku/Palvelinten-hallinta/wiki/H5-Aikajana#b-windows-pakettivarasto-ja-vs ja http://terokarvinen.com/2018/control-windows-with-salt/

VSCODE käsin

Aloitetaan asentamalla vscoden käsin minion koneelle, suoritin asennuksen osoitteesta https://code.visualstudio.com/ download linkistä.

Asennus onnistui ja ohjelma käynnisty.

Poistetaan vscoden asennus

Salt minionille

Ladataan windowsille salt minon ohjelma sivustolta https://docs.saltproject.io/en/latest/topics/installation/windows.html valitaan 'Python3 AMD64: Salt-Minion-3003-AMD64-Setup.exe'

Ohjelman asennuksen yhteydessä annetaan masterin IP, joka saadaan masten koneen terminaalissa käskyllä $ hostname -l.Kirjoitetaan tuo IP kohtaan 'Master IP or Hostname', 'Minion Name:' kohtaan annetaan koneelle tunnistettava nimi.

Salt on nyt asennettu ja pyörii taustalla.

Master kuntoon

Siirrytään masterin pariin, asennetaan salt-master, jos se ei ole jo asennettu

$ sudo apt-get install salt-master

tarkistetaan ja hyväksytään uudet avaimet, täällä pitäisi odottaa tuo aikaisempi windows hyväksymistä

$ sudo salt-key
$ sudo salt-key -A

tarkistetaan että onko sielä kukaan

$ sudo salt '*' cmd.run 'whoami'

Vastaus tuli, jatketaa.

Tehdään salttiin kansio nimeltä vscode ja sinne init.sls tiedosto.

$ sudo mkdir -p /srv/salt/vscode
$ sudoedit /srv/salt/vscode/init.sls

init.sls tiedostoon kirjoitetaan käsky tehdä tiedosto nimellä testi.txt käyttäjän 'Johan' kotihakemistoon, näin voidaan tarkastaa toimiiko tiedostojen siirto minionin ja masterin välissä.

C:\Users\Johan\Documents\testi.txt:
file.managed

Ajetaan tuo käsky saltilla

$ sudo salt '*' state.apply vscode

Onnistui, tarkistetaan vielä minion puolelta onko paketti todellakin sielä

Kyllä on

Minon install vscode

Nyt kun tiedämme että yhteys minioniin toimii ja saamme tehtyä muutoksia, on aika siirtyä vscoden pariin. Ohjeissa kerrotaan että windows repositiot pitää ensin asentaa ja niitä varten tehdä erillinen win kansio salttiin. Myös kansion oikeudet pitää muuttaa niin että saltilla on niihin kirjoitusoikeus. Tätä varten pitää olla Git asennettu.

$ sudo apt-get -y install git
$ sudo mkdir /srv/salt/win
$ sudo chown root.salt /srv/salt/win
$ sudo chmod ug+rwx /srv/salt/win
$ sudo salt-run winrepo.update_git_repos
$ sudo salt -G 'os:windows' pkg.refresh_db

Tämän jälkeen päivitetään init.sls tiedostoa, vaihdetaan sinne käsky asentaa vscode

vscode:
pkg.installed

Ajetaan taas vanha tuttu komento:

$ sudo salt '*' state.apply vscode

Ohjelma asentui, ainakin saltin mukaan. Tarkastetaan vielä Windowsin puolelta.

Toimii kuten pitää!


Tehtävä B

b) Oman modulin aihe. Minkä oikean elämän ongelman haluat ratkaista Saltilla kurssin viimeisessä tehtävässä? Millaisia asioita pitää ottaa huomioon, mitä pitää selvittää?

Oman moduli?

Haluaisin automatisoida oman palvelimen ja kotisivun hallinnan saltin avulla.

Lisäys: Ajatus olisi tehdä täysin hands free ratkaisu, palvelinpuolen ylläpito on tietenkin liian helppoa joten sivuston ylläpitoa otan mukaan.
Sivun automaattinen päivitys toimisi esim githubista, sieltä haettaisiin automaattisesti aina uusin versio sivustosta. Ajatus olisi että käyttäjän luonnin ja minionin asennuksen jälkeen ei palvelimelle tarvitsisi enää itse kirjautua.

Harjoitus 7 - Oma moduli - 13-16.05.2021


Tehtävä A

a) Kaikki läksyt. Laita tähän linkki jokaiseen kotitehtäväraporttiisi. (Voit laittaa myös tuon 7b-kohdan linkin taakse, niin saat hienon modulisi omalle sivulleen).

https://johanlindell.fi/palvelintenhallinta

Tehtävä B

b) Oma moduli (iso tehtävä). Ratkaise jokin oikean elämän tai keksitty tarve omilla tiloilla/moduleilla. Voit käyttää Salttia tai muuta valitsemaasi modernia keskitetyn hallinnan ohjelmaa. Esitä tulos viimeisellä opetuskerralla, 5-10 min. Live demo olisi kiva.

Ongelma?

Koulutehtäviä tai muita esityksiä varten tarvitaan usein nettisivut. Mutta koska opiskelija, niin käynnistämme pilvipalvelimen vain tätä tarkoitusta varten ja suljemme sen heti tarpeen loputtua. Tämä moduli tekee tuon helpoksi, jopa hakee esityksen automaattisesti Gitin reposta ja esittää sen sivuille. Ei enään aikaavievää palvelimen ja sivujen räpeltämistä.

LAMP lisämausteilla

Tavoite oli tehdä LAMP lisämausteilla, mutta modulissa on vielä hieman ongelmia, joten se ei vielä ole jaossa ja tähän sivuun tulee muutoksia kun ongelmat on ratkaistu.

Moduli asentaa tarvittavat ohjelmat ja asetukset palvelimelle ja laittaa esille nettisivun https://kouluprojekti.com esille, jota se päivittää githubista https://github.com/johanlindellgit/kouluprojekticom . SSL sertifikaatin automaattinen haku tulee myös mukana.

Valmis sivu:

Git repo josta sivut latautuvat:


Mitä tarvitaan?

Pilvipalvelin:
- Käyttöjärjestelmä: Debian10
- Salt-minion asennettuna ja yhteys masteriin
- Käyttäjä: johan

Nettisivut:
- kouluprojekti.com
- Ohjattu palvelimen IP-osoitteeseen

Tietokone:
- Salt-master asennettuna ja yhdistettynä salt-minioniin


Työn kulku

1. Ohjelmat on ensin asennettu käsin ja muutettu tarvittavat asetukset.

2. Muuttuneet tiedostot on löydetty komennolla find -printf "%T+ %p\n"|sort ja selattu läpi sivustoja jotka liittyvät kyseisen ohjelman asetuksiin.

3. Moduli rakennettiin osio kerrallaan, ajaen paikallisesti ensin salt-call --local state.apply MODULI -l debug komennolla. Myöhemmin koko moduli ajettiin salt master ja minion arkkitehtuurilla, jossa kummatkin ovat samalla koneella.

4. Modulien toimiessa paikallisilla koneilla siirryin pilveen, ja salt '*' state.apply

sudo salt '*' state.apply


Modulit

Lyhyesti

- UFW, palomuuri asetuksineen
- Apache2, käyttäjän kotihakemisto, PHP toimimaan, www.kouluprojekti.com
- PHP
- Letsencrypt, automaattinen SSL haku. Tällähetkellä ei toimi
- Tietokanta, käyttäjä, taulukko. Sivuille taulukkoa käyttävä ohjelma
- Git, sivun sisältö päivittyy GitHubista

base.sls

Pitkästi

ufw

ufw/init.sls

Asennetaan UFW ja siiretään valmiit .rules ja .conf tiedostot, jossa määritellään mitkä portit pidetään auki ja komento pitää UFW päällä, minionille. Lopuksi käynnistetään minion uudelleen jos muutoksia tiedostoihin tulee.

ufw/user.rules

ufw.conf:

/ufw/ufw.conf

$ sudo salt 'kouluprojekticom' state.apply ufw

Toimivuuden tarkastus


Apache2

apache2/init.sls

Asennetaan apache2
Siiretään userdir.conf ja userdir.load mods-available kansiosta, mods-enabled kansioo.
Siirretään masterista uusi, tyhjä, etusivu apachen vakiosivun tilalle.
Poistetaan käytöstä apachen 000-default.conf ja tilalle otetan kouluprojekticom.conf.
Varmistetaan että apache on päällä, ja mikäli tiedostoja on muutettu käynnistetään apache uudestaan.

apache2/kouluprojekticom.conf

$ sudo salt 'kouluprojekticom' state.apply apache2

Toimivuuden tarkastus


PHP

php/init.sls

Aluksi asennetaan libapache2-mod-php7.3. Varmistan että kone asentaa aina 7.3 paketin, eikä päivitä sitä ilman lupaa, näin oma conffi tiedosto pysyy toiminnassa.
Siiretään php7.3.conf tiedosto masterilta minionille. Ja linkitetään se symlinkin kautta mods-available kansioon.

php/php7.3.conf

$ sudo salt 'kouluprojekticom' state.apply php


Git

git/init.sls

Kloonataan, tai jos on jo olemassa, niin päivitetään gitistä repo. Repo siirtyy /home/johan/public_html/kouluprojekticom/ kansioon ja täältä apache hakee sivunsa. Vaikka repoa olisi paikallisesti muutettu, niin force_reset: true pitää huolen että se päivittyy kuitenkin. Tämän voi jatkossa ajastaa esim cronilla.

Git päivittää viimesimmät muutokset

Git repoo josta sivut päivittyvät


Cert

cert/init.sls

Asennetaan certbot ja python-certbot-apache. Itse sertin haku ei tällä onnistu, tämä on viel työn alla ja ylläoleva cert.ini tiedosto ei toimi. cli.ini tiedostossa hyväksytään terms-of-service

cert/cli.ini

Virhe

Comment: An exception occurred in this state: Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/state.py", line 1919, in call **cdata['kwargs'])
File "/usr/lib/python3/dist-packages/salt/loader.py", line 1918, in wrapper return f(*args, **kwargs)
File "/usr/lib/python3/dist-packages/salt/states/acme.py", line 111, in cert mode=mode
File "/usr/lib/python3/dist-packages/salt/modules/acme.py", line 187, in cert ret = {'comment': comment, 'not_after': expires(name), 'changes': {}, 'result': True}
File "/usr/lib/python3/dist-packages/salt/modules/acme.py", line 251, in expires return _expires(name).isoformat()
File "/usr/lib/python3/dist-packages/salt/modules/acme.py", line 67, in _expires expiry = __salt__['tls.cert_info'](cert_file)['not_after']
File "/usr/lib/python3/dist-packages/salt/modules/tls.py", line 1602, in cert_info with salt.utils.files.fopen(cert) as cert_file:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 399, in fopen f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage

Poistin minionilta python3, letsencryptin ja certbotin, otin myös certbotin asennuksen pois init.sls tiedostosta. Tämän jälkeen asensin masterilta kaiken uusiksi.

Kun koodi on:

kouluprojekti.com: <-- tuolla rivillä piste
acme.cert:
- aliases:
- kouluprojekti.com
- www.kouluprojekti.com
- email: johanlindell@gmx.com

Tulee virheeksi:

Passed invalid arguments to state.apply: can't serialize dict_keys(['keyUsage',
'extendedKeyUsage', 'basicConstraints', 'subjectKeyIdentifier', 'authorityKeyIdentifier',
'authorityInfoAccess', 'subjectAltName', 'certificatePolicies', 'ct_precert_scts'])

Ja jos koodi on:

kouluprojekticom: <-- tuolla rivillä ei pistettä
acme.cert:
- aliases:
- kouluprojekti.com
- www.kouluprojekti.com
- email: johanlindell@gmx.com

Tulee virheeksi:

Comment: Certificate kouluprojekticom renewal failed with:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Renewing an existing certificate
An unexpected error occurred:
Error creating new order :: Cannot issue for "kouluprojekticom": Domain name needs at least one dot

Tähän keskeytyi tämä projektin teko, päivitystä tulee kun saan projektia vietyä eteenpäin.


Lähteitä

Omat aikaisemmat koulutyöt jotka löytyvät tältä sivulta
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.acme.html
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.apache_module.html
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.github.html
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.mssql_user.html
https://docs.saltproject.io/en/latest/ref/states/all/salt.states.mssql_database.html