Configuration Management Systems - Palvelinten Hallinta
ict4tn022-3018 - Autumn 2022

Tux the Linux penguin

Just write what you want (idempotency). Control almost everything with one system (single source of truth). In plain text (infrastructure as code, versionable).

Control 10 computers. Or 100. Or 1000. Or control 2071 computers, like Jussi did on a previous course. Or handle 7 different operating systems and OS versions with a single master, like Matias. Course is in Finnish.

Previous instance got excellent 5.0 / 5 feedback - all respondents gave the best grade 5.

Course name and codePalvelinten Hallinta ICT4TN022-3018
Timing2022 period 2 late autumn, w43-w50
Credits5 cr
ClassesThu 08:15 - 13:45, online, mandatory participation
Max students30
LanguageFinnish (+reading material in English)
RemoteYes, fully remote
Feedback5.0 / 5 Excellent feedback Five star experience
ServicesMoodle: Palvelinten hallinta, Jitsi, Laksu
First class2022-10-27 w43 Thu 08:15, Tero has emailed video conference link

My current research area is configuration management systems: I gave an invited speech in IEEE ICIM Chengdu and a plenary speech in IEEE ICIM Oxford; I’ve also been teaching these modern methods to companies. Previous feedback for this course has been from very good 4.3 to excellent 4.9 5.0 out of 5.

As the course is in Finnish, the rest of this page will be in Finnish.

Opintojakson suoritettuaan opiskelija

  • Osaa hallita palvelimia kuvailemalla tavoitetilan (idempotenssi)
  • Osaa tehdä asetukset pelkkänä tekstinä ja versioitavasti (infrastruktuuri koodina)
  • Pystyy tekemään tavalliset ylläpitotoimet valitulla työkalulla Saltilla (yksi totuus)

Esitiedot

Esitiedot, kertaa nämä.

Opettele komennot ja hakemistot ulkoa. Harjoittele niitä kokeilemalla moneen kertaan Linuxissa.

Alustava aikataulu

Kurssi kestää 8 viikkoa. 100% etänä. Edellyttää aktiivista osallistumista etäopetukseen videokonfferensissa lukkariin merkittynä aikana.

Läksyt 24 h ennen seuraavan lähiopetuskerran alkua.

Tämä alustava aikataulu elää kurssin aikana.

  1. Hello Salt! Master-slave, pull -arkkitehtuuri. Komentojen etäsuoritus (cmd.run, pkg.install). Tietojen kerääminen orjista (grains.items). Idempotentti konfiguraatio (foo.sls, top.sls). Esimerkkejä tiloista (file.managed).
  2. Package-file-service. How to install and configure daemons, such as Apache web server or MySQL database management system. pkg.installed, file.managed, service.running, watch. ‘find /etc/ -printf ‘%T+ %p\n’|sort’ Luettavaa: Karvinen 2018: Pkg-File-Service – Control Daemons with Salt – Change SSH Server Port, Apache User Homepages Automatically – Salt Package-File-Service Example. [Official] Salt Tutorials: How Do I Use Salt States?, States tutorial, part 1 – Basic Usage, Salt Best Practices. Miten tavoittaa orja muuttuvasta, tuntemattomasta osoitteesta, NAT:n ja tulimuurin takaa?
  3. Versionhallinta. (+ torstaina Package-File-Service). Git. git init hellotero; git clone; git add .; git commit; git pull; git push; git log. GitHub. github.com/terokarvinen/sirotin. Publish Your Project with GitHub
  4. Omat komennot
  5. Vaihtoehtoiset järjestelmät
  6. Pakettivarastot ja miten tehdä monimutkaisesta yksinkertaista ja idempotenttia.
  7. Omien modulien työstämistä
  8. Omien modulien esittely.

Arviointi

Osien ohjeelliset painoarvot ovat

  • Kotitehtävät 50%
  • Oma moduli 50%

Arvosana perustuu kokonaisarvioon suorituksista. Kaikki kotitehtävät pitää tehdä. Etäopetukseen pitää osallistua aktiivisesti.

Työkaluja kurssille

Remote Learning Tools for Tero's Courses

Omia moduleja

Tällä kurssilla viimeisessä kotitehtävässä tehtiin omia moduleja. Tässä eri tehtäviä automatisoitiin Saltilla. Tämä ei ole projektikurssi, joten modulien tekemiseen käytettävä aika oli rajattu.

Wireguard VPN (virtual private network)

Firefoxin lisäkkeet (Addons), Addblock Plus ja Bleachbit [Teron huomio: Addblock Plus on tässä vain esimerkkinä, en suosittele sen käyttöä, suosittelen Gorhillin uBlock Origin -lisäkettä]

ElasticSearch kokotekstihakukone Debianille

Salt herran ja orjan asentaminen skriptillä

Python Flask weppikehikko, Apache, PostgreSQL tietokanta, tuotantotyyppinen asennus, Sami Kulonpää

Nginx weppipalvelin, Mariadb tietokanta, Go-ohjelmointikieli, ufw tulimuuri

LAMP + ufw, Johan Lindell

Kahden kehitysympäristön asennus eri vagrant-virtuaalikoneisiin. Python Flask (ja PostgreSQL, mod_wsgi, Apache, micro-editor); JavaScript React (ja nodejs, npm, yarn), Toni Vapalo

Firefoxin asetuksia, Simo Tossavainen

SSHd ym

NGingx ja PHP, Teemu Paukkonen

LAMP (Linux, Apache, MariaDB, PHP), ssh ja ufw, Otto Hänninen

LAMP, ufw ja Firefox, Jani Aulavuo

Luokkahuone: GCompris, Tux Math, Tux Paint, Scratch; sekä Firefox asetuksineen

LibreOffice asetuksineen, Ilmo Gröhn

Käyttäjät Saltin pilareilla

Visual Boy Advanced, emuloitu pelikonsoli

Työpöytäohjelmien asennusta eri tavoin: deb-tiedostosta, uudesta apt-varastosta, AppImage:sta; OBS studio äänitys ja streemaus, Discord chatti, Brave selain, RuneLite peli

Steam, pelikauppa, jossa paljon digitaalisia rajoitusmenetelmiä (DRM)

Työpöytäohjelmia: Discord; Firefox asetuksineen, Blender asetuksineen

Python Flask weppikehikko pip:llä, Visual Studio Code

Hallitaan yhdellä herralla eri käyttöjärjestelmiä: Windows 10, Debian and Xubuntu, Niko Hukkanen

Anna palautetta

Palaute on olennainen tapa kehittää ja parantaa kurssia. On tärkeää saada jokaiselta palaute molempiin kanaviin saman tien.

1) Vapaamuotoinen palaute kommenttina

  1. Vapaamuotoinen palaute kommenttina tämän kurssisivun perään.

Vapaamuotoiseen palautteeseen saa kirjoittaa mitä vain, eikä kysymyksiä tarvitse toistaa. Mutta tässä vinkiksi:

  • Opitko jotakin – eli osaatko nyt sellaista, mitä et osannut ennen kurssia?
  • Teitkö jotain ensimmäistä kertaa? Vuokrasit koneen julkiseen Internetiin, asensit Linuxin, löysit tunkeutumisyrityksen...
  • Oliko opittu hyödyllistä? Luuletko, että sille on käyttöä esim. tulevaisuudessa töissä tai kotona?
  • Olivatko vastaukset kysymyksiin ja yhteinen ongelmanratkaisu hyödyllistä?
  • Miten voisin parantaa kurssia?
  • Viihdyitkö kurssilla?
  • Mitä pidit esityksistä? Itse esittämisestä, esitysten seuraamisesta, kommentoinnista?
  • Suosittelisitko kurssia tai oletko jo suositellut? Kenelle kurssi sopisi? Koulutoverille tai kollegalle?

2) Numeerinen palaute MyNettiin

  1. Numeerinen palaute Haaga-Helian palautejärjestelmään MyNetissa

Numeerisen palautteen avulla mm. verrataan Haaga-Helian kursseja toisiinsa.

Numeeriset: Asteikko 1-välttävä (huonoin) ... 5-kiitettävä (paras)

  • Oma aktiivisuutesi opiskelussa 1-5
  • Osaamistavoitteiden saavuttaminen 1-5
  • Työskentelytavat tukivat oppimista 1-5
  • Opiskeluympäristö tuki oppimista 1-5
  • Hyödyllisyys työelämään 1-5

Avoimet kysymykset (näihin voi myös kopioida samat vastaukset jotka kirjoitit aiemmin)

  • Mitkä asiat edistivät oppimistasi?
  • Miten kehittäisit toteutusta / toteutuskokonaisuutta, jotta osaamistavoitteet saavutettaisiin paremmin?

Kokonaisarviosi toteutuksesta / toteutuskokonaisuudesta 1-5

Suosittelisitko 1 - 10 (1 en varmasti, 10 aion varmasti suositella tai olen jo suositellut)

Kiitos palautteesta ja hauskasta kurssista! Seuraavilla kursseilla nähdään.

Läksyt

Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa (riippumatta siitä, onko silloin videotapaamista). Weppisivulle (HTML), ja palauta linkki Laksuun. Halutessasi voit laittaa linkin myös kommentiksi tämän sivun perään, niin sivusi saa lisää kävijöitä ja nousee PageRankissa.

Nämä läksyt ovat alustavia. Läksyt ovat virallisia vasta, kun ne on annettu tunnilla. Tämä on edistynyt kurssi, joten pystymme tekemään muutoksia kurssin kuluessa ja sovittamaan läksyt aiheen mukaan. Jos et uskalla tai muuten halua julkaista, voit laittaa weppisivun salasanan taakse (sama salasana koko kurssille ja jokaiselle tehtävälle, ei kirjautumista) ja jakaa salasanan kurssilaisten kanssa - mutta suosittelen julkaisua. Kotisivutilaa saa esim wordpress.com, github.com, gitlab.com ja monista muista paikoista.

h1 Hello Salt

x) Lue ja tiivistä (Tässä x-alakohdassa pelkkä luku / katselu / kuuntelu riittää, ei tarvitse tehdä testejä tietokoneella. Muutama ranskalainen viiva per artikkeli riittää)

a) Tee Saltilla tiedosto yksittäisellä komentorivillä (state.single)

b) Tee saltille idempotentti, infra koodina hei maailma (siis tiedostosta, /srv/salt/foo.sls)

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

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-call --local sys.state_doc pkg.installed|less"

Vinkkejä:

  • Palautus Laksuun
  • Arvioi ja kommentoi kahden kurssikaverin palautus
  • Muista viitata kurssiin, tehtävänantoihin ja kaikkiin muihinkin käyttämiisi lähteisiin.

h2 Package-File-Service

x) Lue ja tiivistä

a) Demonin asetukset. Säädä jokin demoni (asenna+tee asetukset+testaa) package-file-service -rakenteella. Ensin käsin: muista tehdä ja raportoida asennus ensin käsin, vasta sitten automatisoiden. Jos osaat hyvin, voit tehdä jonkin eri asetuksen kuin tunnilla. Harjoitusta varten tulee siis tehdä alusta ja raportoida samalla.

b) Asenna Salt herra-orja niin, että molemmat ovat samalla koneella. Voit tehdä ne esimerkiksi uudelle virtuaalikoneelle, niin pääset kokeilemaan puhtaalta pöydältä.

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

d) Vapaaehtoinen: Asenna Salt herra ja orja eri koneille.

h3 Git

a) MarkDown. Tee tämän tehtävän raportti MarkDownina. Helpointa on tehdä raportti GitHub-varastoon, jolloin md-päätteiset tiedostot muotoillaan automaattisesti. Tyhjä rivi tekee kappalejaon, risuaita ‘#’ tekee otsikon, sisennys merkitsee koodinpätkän.

b) Offline. Tee paikallinen offline-varasto git:llä. Varaston nimessä tulee olla sana "cat" (kissa). Aiemmin tehty varasto ei siis kelpaa. Aseta itsellesi sähköpostiosoite ja nimi. Näytä varastollasi muutosten teko ja niiden katsominen lokista.

c) Doh! Tee tyhmä muutos gittiin, älä tee commit:tia. Tuhoa huonot muutokset ‘git reset --hard’. Huomaa, että tässä toiminnossa ei ole peruutusnappia.

d) Online. Tee uusi varasto GitHubiin (tai Gitlabiin tai mihin vain vastaavaan palveluun). Varaston nimessä ja lyhyessä kuvauksessa tulee olla sana "car" (auto). Aiemmin tehty varasto ei kelpaa. (Muista tehdä varastoon tiedostoja luomisvaiheessa, suosittelen tekemään README.md ja vapaista lisensseistä itse tykkään GPLv3 eli GNU General Public License, version 3)

e) Dolly. Kloonaa edellisessä kohdassa tehty varasto itsellesi, tee muutoksia, puske ne palvelimelle, ja näytä, että ne ilmestyvät weppiliittymään.

f) Vapaaehtoinen: Tee uusi salt-moduli. Voit asentaa ja konfiguroida minkä vain uuden ohjelman: demonin, työpöytäohjelman tai komentokehotteesta toimivan ohjelman. Käytä tarvittaessa ‘find -printf “%T+ %p\n”|sort’ löytääksesi uudet asetustiedostot. (Tietysti eri ohjelma kuin aiemmissa tehtävissä, tarkoitushan on harjoitella Salttia)

g) Vapaaehtoinen: Laita salt gittiin. Tee uusi moduli. Kloonaa varastosi toiselle koneelle (tai poista srv/salt ja palauta se kloonaamalla) ja jatka sillä. (Salt tiedostot mistä vain hakemistosta, huomaa suhteellinen polku: 'sudo salt-call --local --file-root srv/salt/ state.apply')

h4 Omat komennot

a) Hei komento! Tee järjestelmään uusi "hei maailma" -komento ja asenna se orjille Saltilla. Liitä raporttiisi orjan 'ls -l /usr/local/bin/' tulosteesta ainakin se rivi, jolla näkyy uuden komentotiedostosi oikeudet.

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

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

d) Laiskaa skriptailua. Tee kansio, josta jokainen skripti kopioituu orjille.

e) Intel. Etsi kolme loppuprojektia joltain vanhalta kurssitoteutukselta. Kuvaile projektit tiiviisti, viittaa ja linkitä alkuperäiseeen raporttin. Tässä alakohdassa ei tarvitse vielä kokeilla mitään koneella, vaan voit kuvailla niitä oheismateriaalin perusteella.

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.

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ä lopputesti on mahdollisimman lähellä sitä, mitä käyttäjä tekisi.
  • Koko kansiolle '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.
  • 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.

h5 Windows

a) Hello Window Salt! Tee Windowsille SLS-tiedostoon Salt-tila, joka tekee tiedoston nimeltä "suolaikkuna.txt".

b) Ei vihkoa, ei kynää. Kerää Windows-koneen tekniset tiedot tekstitiedostoon. Vapaaehtoinen bonus: Saatko tiedot tallennettua myös json-muodossa?

c) Kop kop. Onko TCP-portti auki vai kiinni? Näytä esimerkit portin kokeilusta Linuxilla ja Windowsilla. Näytä kummallakin käyttöjärjestelmällä ainakin yksi avoin ja yksi suljettu portti. (Kokeile tätä vain omaan koneeseesi. Vieraiden koneiden ja verkkojen porttiskannaaminen on kiellettyä. Yksittäisen portin testaavat komennot ovat suositeltavia, esim. nc, tnc)

d) Vapaaehtoinen: Ohjaa Windows-konetta Linuxista Saltilla.

e) Vapaaehtoinen: Asenna ohjelmia Windowsiin Saltin pkg.installed. Ensin on tämä on toki viriteltävä käyttöön, koska Windowsissa ei ole omaa kattavaa paketinhallintaa.

f) Vapaaehtoinen: Kokeile Ansiblea.

g) Vapaaehtoinen: Kokeile Terraformia.

Vinkit:

  • Windowsillakin Hei Maailma -tiedostot kannattaa tehdä väliaikaisten tiedostonjen hakemistoon, C:/Temp
  • Paikallisesti salt-komentoja ajaessa /srv/salt/ kansion voi vaihtaa toiseen "--file-root"
  • Oikein päin olevat kauttaviivat toimivat Saltilla, ja Windowisillakin monessa kohtaan
  • PowerShell ei ole Bashin tasolla, mutta merkittävä parannus vanhaan. Kannattaa käyttää sitä Windowsin ylläpitoon.
    • Ruma-X avaa oikean starttivalikon (ilman mainoksia), "Powershell as Administrator"
    • cd pwd ls ./foobar
    • Tab täyttää, tosin hassusti
    • Päälle kirjoittava tiedostoputki on saman tapainen kuin Linuxissa 'foo > bar.txt'
  • Windowsissa ei ole selkeää juurihakemistoa, vaan vaihtelevia levykirjaimia. Käyttöjärjestelmän osio on "C:/". Absoluuttiset polut alkavat levykirjaimella.
  • grains.items toimii yhtenäisesti eri käyttöjärjestelmissä
  • Porttien kokeilu
    • Linuxilla 'busybox nc', 'sudo apt-get -y install netcat', 'nc -vz'
    • Windowsilla 'tnc', 'Test-NetConnection'; vanhoissa telnet
    • Katso ohjeet kommennoista: man, --help, -h, MicroSoftin ohjeistus

h6 Kulkurin projekti

x) Lue ja tiivistä (muutamalla ranskalaisella viivalla per artikkeli, poimi esim itsellesi keskeisimmät komennot)

a) Hello Vagrant. Asenna virtuaalikone Vagrantilla.

b) Yksityisverkko. Asenna kaksi virtuaalikonetta samaan verkkoon Vagrantilla. Laita toisen koneen nimeksi "isanta" ja toisen "renki1". Kokeile, että "renki1" saa yhteyden koneeseen "isanta" (esim. ping tai nc). Tehtävä tulee siis tehdä alusta, vaikka olisit ehtinyt kokeilla tätä tunnilla.

c) Salt master-slave. Toteuta Salt master-slave -arkkitehtuuri verkon yli. Aseta edellisen kohdan kone renki1 orjaksi koneelle isanta.

d) Oma suola. Tee ensimmäinen työversio projektistasi. Miniprojektilla tulee olla jokin tarkoitus, vaikka se olisi keksitty. Projektilla tulee olla sivu (esim. Github, Gitlab...), josta selviää projektin perustiedot. Toiminnallisuutta tulee olla kokeiltu, mutta sen ei tarvitse olla valmis. Valmiit projektit esitellään viimeisellä tapaamiskerralla. Tässä tehtävässä palautettava työversio ei siis ole vielä lopullinen.

Vinkkejä

  • Vagrant ohjaa VirtualBoxia, eli se kannattaa asentaa hostOS:n eli suoraan raudalla pyörivään käyttöjärjestelmään. Linuxille 'sudo apt-get update; sudo apt-get -y install virtualbox vagrant', Windowsille asennuspaketit Vagrantin kotisivulta.
  • Jos Vagrantin kahden koneen verkossa IP-osoitteet eivät kelpaa, voit kokeilla valita osoitteiksi 192.168.60.101 ja 192.168.60.102.
  • Hyvä perusboxi vagrantiin on 'vagrant init debian/bullseye64'.
  • Windowsiin löytyy 'vagrant init Microsoft/EdgeOnWindows10', mutta se vaatii lisävirityksiä. Therealhalonen vinkkaa: laita Vagrantfile:n "config.ssh.username="user", "config.ssh.password="Passw0rd!", "config.ssh.insert_key = false".

Oman miniprojektin weppisivu (voi olla myös Github, Gitlab tms)

  • Työn weppisivulle taitoksen yläpuolelle (skrollaamatta näkyvään osaan) ainakin
    • Yhden rivin selitys - mikä tämä on
    • Ruutukaappaus
    • Lisenssi (suosittelen "GNU General Public License" versio 3, lisenssin saa valita itse)
  • Sivulta on hyvä löytyä hieman alempaa
    • Miten tämä otetaan käyttöön
    • Miten (millä yksinkertaisella testillä) näen, että tämä toimii
    • (teknisissä ratkaisuissa, kuten tämä) Parilla sanalla, miten tämä on tehty
    • Mille kurssille työ on tehty
  • Itse laitan projekteihin nimen ja linkitän kaikki sivuni ja projektieni sivut toisiinsa
  • Suosittelen kirjoittamaan englanniksi, saa kirjoittaa myös suomeksi