Configuration Management Systems - Palvelinten Hallinta - Spring 2021

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.

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 out of 5.

As the course is in Finnish, the rest of this page will be in Finnish. Homework links are returned to Moodle: 3011-Wednesday or 3009-Thursday.
(Haaga-Helia account required).

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ä. Kysely toisella opetuskerralla.

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

Alustava aikataulu

Pidän kaikki kurssini kokonaan etäopetuksena keväällä 2021. Kurssi kestää 8 viikkoa.

Läksyt 24 h ennen seuraavan lähiopetuskerran alkua linkkinä Moodleen (vaatii Haaga-Helian tunnukset).

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, pkg.installed). Miten tavoittaa orja muuttuvasta, tuntemattomasta osoitteesta, NAT:n ja tulimuurin takaa? Luettavaa: Karvinen 2018: Salt Quickstart – Salt Stack Master and Slave on Ubuntu Linux, Salt States – I Want My Computers Like This, Run Salt SLS File Locally, Quick Fix for Useless Salt Warning. Salt official documentation: Salt Getting Started Guide-kirjasta luvut Understanding SaltStack ja SaltStack Fundamentals ja SaltStack Configuration Management: Functions.
  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.
  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. (ei online-opetuskertaa)
  6. Pakettivarastot ja miten tehdä monimutkaisesta yksinkertaista ja idempotenttia.
  7. Omien modulien työstämistä
  8. Omien modulien esittely. Vierailija: Kokemuksia tuotannosta, Jani Kavander, IT Manager, Frozen Byte.

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

Läksyt

Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa (riippumatta siitä, onko silloin videotapaamista). Weppisivulle (HTML), ja Moodleen pelkkä linkki. 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.

h1 Hei maailma, verkon yli ja idempotenssi.

Lue aikataulussa mainitut artikkelit. Joko linkistä tai googlettamalla/duckittamalla artikkelin nimeä.

x) Kertaa esitiedot Esitiedot (vain luku, tätä x-alakohtaa ei tarvitse raportoida, kysellään oppitunnilla, suoritettava hyväksytysti)

y) Lue aikataulussa mainitut artikkelit (vain luku, tätä y-alakohtaa ei tarvitse raportoida. Aikataulussa mainitut artikkelit tulee opiskella tietysti joka viikko, mutta päivitin tähän nyt vielä tämän y-kohdan muistutukseksi. )

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

b) Tee saltille idempotentti hei maailma (siis tiedostosta, 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 '*' sys.state_doc pkg.installed|less"

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.

h2 Package-File-Service

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.

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.

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

d) Vapaaehtoinen: Omaa koiranruokaa. Asenna ja säädä salt:lla jokin ohjelma, jota oikeasti käytät. Esimerkiksi omalla läppärillä tai omalla Linoden/DigitalOceanin/OVH:n tms palvelimella.

e) Vapaaehtoinen: Suolaa, suolaa, ennemmän suolaa. Säädä useita käytössäsi olevia ohjelmia salt:lla. Tällainen käyttö antaa kokemusta ja itsevarmuutta keskitettyyn hallintaan. Ja tekee helpoksi ottaa uusia koneita omaan käyttöön.

h3 Versionhallinta

z) Opiskele yllä aikataulussa olevat artikkelit. Noissa artikkeleissa opetetaan ne asiat, joilla läksyt saa tehtyä. Tätä z-kohdan lukutehtävää ei tarvitse raportoida. Luettava materiaali on kunkin tapaamiskerran kohdalla.

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. Vinkkinä artikkelini Publish Your Project with GitHub.

d) Näytä omalla git-varastollasi esimerkit komennoista ‘git log’, ‘git diff’ ja ‘git blame’. Selitä tulokset.

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

f) 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)

d) Vapaaehtoinen: Laita srv/salt/ gittiin. Tee uusi moduli. Kloonaa varastosi toiselle koneelle (tai poista srv/salt ja palauta se kloonaamalla) ja jatka sillä.

h4 Uusi komento

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.

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

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.

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.

h5 Aikajana

Vinkkejä:

  • Lähes kaiken voi konfiguroida viidellä funktiolla: pkg-file-service (watch), user, exec.
  • Asenna aina ensin käsin
  • Ohjelmat tallentavat asetukset tiedostoihin. Joten aikajana tiedostoista näyttää, mitkä tiedostot pitää tehdä.
  • Saltilla asennetaan ohjelma (pkg), laitetaan asetustiedostot paikalleen (file) ja lopuksi jokin ohjelma lukee tiedot (service-watch; työpöytäohjelma kun se avataan; pakettilista sudo apt-get update tai pkg-refresh).
  • Testaa. Tee pienin testattava kokonaisuus kerralla.

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.

Vinkkejä: Asenna tässä a-kohdassa valmiiksi luotetuista pakettivarastoista, niin ei tarvitse asentaa uusia varastoja, ja tiedät saavasi vapaita ohjelmia. Ohjelmien asennus voi viedä aikaa, jos haluat seurata etenemistä komento komennolta niin 'sudo salt-call --local -l debug state.apply terosapps'. Sisäänrakennettu ohje kertoo, kuinka "pgks" toimii: 'salt-call --local sys.state_doc pkg.installed|less'

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

Vinkki: kun pakettivarasto (repository) on asennettu, vscoden päivitykset asentuvat muiden päivitysten mukana. 'sudo apt-get update; sudo apt-get dist-upgrade' päivitää kaikki ohjelmat (Linux, Apache, Firefox, curl...). Tämän päivityksen voi halutessaan automatisoida kokonaan.

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?

c) Tiedän mitä teit viime kesän^H^H^H komennolla. Säädä jotain ohjelmaa ja etsi sen muuttamat tiedostot aikajanasta. Tee sitten tästä oma Saltin tila.

Vinkki: tässä kohdassa pitää muuttaa jonkin ohjelman asetuksia, pelkkä ohjelman asennus pkg.installed on liian helppoa.

Vinkki: koko järjestelmän asetukset ovat /etc/ alla (esim. /etc/apache2/). Käyttäjäkohtaiset asetukset ovat kotihakemistossa (esim. /home/tero). Tällaiset asetukset voi monistaa joko 1) vastaavalla tiedostolla /etc/ alla, jos on (esim. $HOME/.bashrc vs /etc/bash.bashrc) tai (jos 1 ei onnistu) 2) /etc/skel/ -mekanismilla (esim. /etc/skel/.bashrc)

d) Asenna jokin toinen ohjelma asetuksineen.

Vinkki: tässäkin kohdassa edellytetään asetusten muuttamista. Jos haluat, voit valita erilaisen ohjelman kuin c-kohdassa. Esimerkiksi jos asensit c-kohdassa demonin, voit asentaa tässä komentoriviohjelman tai graafisen käyttöliittymän ohjelman.

h6 Windows

a) Kokeile Saltia Windowsissa.

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ää?

Vinkkejä:

  • Eilen rikurikurikuriku näytti, miten oli asennellut vlc:n ja vscode:n helposti Windowsiin Saltilla https://github.com/rikurikurikuriku/Palvelinten-hallinta/wiki/H5-Aikajana#b-windows-pakettivarasto-ja-vs
  • Oletko itse rikurikurikuriku? Tee jotain uutta Windowsissa
  • Omassa vanhemmassa kokeilevassa artikkelissani on hyviä ja ei niin hyviä osia. Käteviä ovat ainakin "Run Salt Locally on Windows", eli helppo aloitus Windowsilla ilman herra-orja infraa. http://terokarvinen.com/2018/control-windows-with-salt/
  • Windowsilla kannattaa käyttää uutta versiota Saltista. Ja samassa verkossa herra ja kaikki orjat kannattaa pitää samassa versiossa
  • Ei Windowsia? Ei ongelmaa. Windowsin levykuvat saa Microsoftin kotisivulta, haku "download windows iso" auttaa, ja pienen linkkiseikkailun jälkeen myös https://modern.ie linkittänee valmiisiin virtuaalikoneisiin.
  • Onko sinulla Mac? Voit kokeilla Windowsin tilalta myös Macissa.
  • Oma moduli: saa käyttää muitakin keskitetyn hallinnan ohjelmia kuin Saltia. Valitse haastavuus omien taitojen mukaan.

h7 Oma moduli

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

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.

Raportoi modulisi tarkoitus, koodi ja testit.

Hovimestari on syyllinen! Eli heti aluksi pitäisi selvitä, mitä hyötyä jutustasi on. Ja mikä se on!

  • Esitys on hyvä aloittaa lopputuloksesta ja hyödyistä
  • Työn weppisivulle taitoksen yläpuolelle (skrollaamatta näkyvään osaan) ainakin
    • Ruutukaappaus
    • Lisenssi
    • Yhden rivin selitys - mikä tämä on
    • (teknisissä ratkaisuissa, kuten tämä) Parilla sanalla, miten tämä on tehty
    • Näillä houkuttelet kävijät lukemaan ja asentamaan koko jutun