Palvelinten hallinta läksyt viikko 7 – Caius Juvonen

Tällä viikolla teemme kyseisen kurssin viimeiset läksyt, ja samalla rakennamme oman moduulimme. Kurssisivu ja läksyt löytyvät täältä: http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/

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 (keskiviikon ryhmä). Live demo olisi kiva. Raportoi modulisi tarkoitus, koodi ja testit.

Ympäristö

Meidän ympäristössä on yksi mestari ja 2 orjaa, jotka molemmat toimivat etäisesti. Kaikki koneet ovat samassa verkossa, ja niillä on yhteys internettiin. Yksi orjakoneista on RedHat ja toinen on Ubuntu. Mestarikone toimii Ubuntulla. Kyseessä on siis 2 xubuntu konetta ja 1 CentOS.

Tavoite

Ennen kuin aloin tekemään tätä projektia yksi kysymys oli mielessäni: mitä oikeen teen? En halunnut tehdä jotain sellaista mitä olen jo aiemmin tehnyt, ja fiksuja tapoja käyttää näinkin hienoa systeemiä on vaikea keksiä mikäli niitä tarpeita ei ole tullut vastaan etukäteen.

Pitkän mietinnän jälkeen ajattelin että liian pitkä mietintä johtaa ainoastaan ajan hukkaamiseen, ja päätin tehdä jotain simppeliä alkuun: asentaa shakkiohjelman orjille ja muokata joitakin asetuksia ohjelman kanssa. Ei kauhean kunnianhimoinen tavoite, mutta aika alkoi loppumaan kesken ja oli pakko valita vain joku projekti. Jos keksin matkan aikana jotain lisättävää, teen senkin. Mutta jos en, yritän vain raportoida sen hyvin jotta saan sentään jotain hyödyllistä tehtyä.

Etenemisprosessi

Jos haluamme asentaa jonkin ohjelman orjille saltilla, on meidän ensin asennettava se yksittäiselle laitteelle. Salt ei ole mikään ohjelmien asennusohjelma, vaan se monistaa sen mitä voimme tehdä yksittäiselle koneelle. Mutta mikäli se mitä teemme yksittäiselle koneelle ei toimi, ei se tule toimimaan vaikka tekisimme saman sadalle muullekin. Tämän takia on tärkeää ensin asentaa ohjelma yhdelle koneelle ja vasta tämän jälkeen monistaa.

Tulemme siis ensin asentamaan tämän shakkiohjelman mestarikoneelle, ja teemme samalla tarvittavat asetukset. Kun teemme tätä joudumme myös varmistamaan mitä asetuksia muokkaamme, ja miten, koska emme voi tehdä asetuksia saltilla pelkän ohjelman GUI:n avulla. Tämän takia meidän tarvitsee tietää mitä muutoksia ohjelman tiedostoissa tapahtuu.

Kun olemme saaneet ohjelman toimimaan yhdellä koneella, on aika monistaa asennus ja asetukset minioneille, ja sen jälkeen varmistaa että kaikki toimii tahdotusti. Tälläisissä tapauksissa kannattaa edetä mahdollisimman hitaasti yksi askel kerrallaan.

Ohjelmisto

Halusin asentaa shakkiohjelmiston nimeltä PyChess. PyChessin dokumentaatio löytyy täältä: https://pychess.readthedocs.io/en/latest/ (Lähde 1).Pychessissä on mukava GUI ja sen voi asentaa apt-get, eli ei tarvitse githubista esimerkiksi vetää. Tämä tekee asennuksesta helppoa, ja voimmekin keskittyä silloin mielenkiintoisempiin asioihin, kuten vaikka asetusten säätämiseen.

Moduulin tekeminen

Tässä kohtaa alamme työstämään itse moduulia. Kuten aiemmin mainitsin, aloitamme siitä että asennamme pychessin mestarikoneelle, ja katsomme miten ohjelma toimii/mitä voimme sille tehdä. Voimme asentaa pychessin komennoilla:

sudo apt-get update
sudo apt-get install pychess -y

Asennuksen jälkeen kun kirjoitamme terminaaliin “pychess” avautuu ohjelman GUI:

En tiennytkään että voimme myös pelata muita pelaajia vastaan emmekä pelkkää tietokonetta. Tuo on mahdollinen asia mitä tulemme vielä säätämään myöhemmin tätä tehtävää, mutta aloitetaan nyt tuolla “Start game” tietokonetta vastaan ensin.

Ensimmäinen mielenkiintoinen asia joka tarttui silmään softasta: tietokone suosittelee mitä siirtoja teemme, tai jotenkin ainakin analysoi siirtoja. En kuitenkaan haluaisi että se tekisi näin, vaan haluaisin pelata vain tietokonetta vastaan ilman että se näyttää meille mitä kannattaisi tehdä.

Kuten kuvasta näkyy, tietokone näyttää siirtoja. Tämä on häiritsevää mikäli haluaa vain pelata pelin shakkia eikä välttämättä lähteä mihinkään hirveään analyysiin parhaasta mahdollisesta siirrosta. Yritetään saada tätä asetusta pois päältä.

Kohdassa “View” on kaksi asetusta:

Hint mode ja spy mode. Nuo kaksi asetusta näyttävät sekä mitä meidän itse kannattaisi tehdä, sekä mitä tietokone on tekemässä. Nuohan pilaavat pelin heti alkuunsa kun tietokone lähtee kertomaan meille mitkä on parhaat mahdolliset siirrot. Samalla saamme tietää mitä tietokone ajattelee, joka myös antaa tietysti epäreilun edun vastustajaa vastaan (vaikka tietysti tietokonetta on vaikea voittaa vaikka tietäisi mitä se on tekemässä).

Tuo view ei kuitenkaan disabloi noita asetuksia lopullisesti, vaan pelkästään yhden pelin ajaksi. Menen “Preferences” ja löydän sieltä tälläisen sivun:

Tuossa siis nuo “Use analyzer” ja “User inverted analyzer” näyttävät tekevän saman kuin Hint ja spy mode. Otetaan pois päältä ja laitetaan uusi peli käyntiin ja katsotaan muuttuko mikään:

Emme enään nää nuolia siitä mitä meidän kannattaisi tehdä/mitä vastustaja on tekemässä, eli saimme nuolet pois pysyvästi. Seuraavaksi on tärkeä katsoa miten voimme tehdä tämän saman muutoksen tiedostoissa, sillä salt ei pysty tekemään näitä asetuksia GUI:ssa meidän puolesta.

Käytetään komentoa “find -printf “%T+ %p\n” | sort” jotta voimme nähdä viimeisimmät muutokset järjestelmässä (tämän avulla meidän pitäisi löytää pychessin config file).

Tuo ./.config/pychess/config vaikuttaa lupaavalta alulta. Eli asetukset ovat käyttäjän kotihakemistossa. Katsotaan minkälaisia asetuksia siellä on:

Aika paljon erilaisia, ja varsinkin nuo “Hint_mode” ja “spy_mode” = False vaikuttavat olevan ne oleelliset tiedot. Seuraavaksi meidän tarvitsee vain varmistaa että kaikilla orjilla jotka lataavat pychessin tulee olemaan nuo samat asetukset. Mutta hetkinen! Emme välttämättä halua että kopioimme nämä kaikki asetukset muille käyttäjille, sillä esimerkiksi pelaajan nimi on “caius”. Jos annamme näitä asetuksia muille käyttäjille, olisi järkevämpää että he saisivat omat nimensä myös alkuun. Eli haluamme vain nämä kaksi asetusta.

Voimme tehdä tämän käyttämällä saltin ominaisuutta file.replace. Löysin dokumentaation siihen täältä: https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html (Lähde 2).

Eli tarvitsemme patternin ja sitten millä korvaamme sen. Käytämme tuossa patternin etsimisen kanssa Regexiä. Käytin RegExr patternin löytämisen kokeiluun: https://regexr.com/ (Lähde 3). Tässä regex jota käytin:

Tuo näyttäisi toimivan ihan OK. Tässä kohtaa haluan vaan kopioida tämän config tiedoston /srv/salt jotta voimme käyttää sitä siellä. Samalla on hyvä tehdä kansio tälle moduulille.

Ja tässä kohtaa myös ymmärsin että file.replace ei tule toimimaan. Config file on nimittäin jokaisen henkilön omassa kotihakemistossa, enkä voi mennä muuttamaan asetuksia ihmisten kotihakemistoissa. Olen aika varma että pychessillä ei ole global configuraatiota missään, joten asetuksia voi muuttaa ainoastaan käyttäjäkohtaisesti. Tulemme siis vain kopioimaan tämän esimerkki config tiedoston minioneille /etc/skel kansioon jotta uudet käyttäjät saavat sen.

Tässä tilapäinen init.sls tiedostoni:

Aion kokeilla tätä ensin yhdellä orjalla ennenkuin kokeilen useammalla. Jos saan tämän moduulin toimimaan kunnolla, tulen varmaan lisäämään jotain muutakin tähän.

Lisäsin tämän tilan nyt myös top.sls, mutta vain yhdelle orjalle. Pistetään “sudo salt ‘*’ state.apply” ja katsotaan mitä tapahtuu:

Kaikki onnistui. Mennään orjakoneelle ja käynnistetään pychess ja jännitetään että miten asetukset on laitettu:

Toimii tahdotusti. Nyt pistän tämän myös CentOS orjalle (kaiken pitäisi toimia samalla tavalla).

Ikävä kyllä olin väärässä, se ei toimi samalla tavalla. En pysty lataamaan pychessiä centosissa, puuttuu varmaan joku repo. Kun aloin googlaamaan niin en löytänyt mitään selkeää ratkaisua, ja tässä kohtaa aika on niin vähissä että minulla ei ole enään aikaa yrittää myöskään korjata tätä. Tämän takia en tulekkaan enään tekemään tätä CentOSsille.

Kaksi uutta ideaa

Koska kokonaisuus tähän mennessä ei ole ollut erittäin haastava/mielenkiintoinen, minulla oli vielä kaksi ideaa mitä voisin lisätä tähän moduuliin. Voisin tehdä custom ääniä pychessiin niin että aina vaikka kun nappula syödään niin se pelaa meidän custom äänen.

Toinen idea oli laittaa koko /srv/salt githubbiin, joka oli myös aiempi tehtävä jota en koskaan tehnyt. Tämä on ehkä bonus jonka tulen tekemään, en ole varma. Mutta aion tehdä nuo custom äänet.

Custom äänet

Ensinnäkin meidän pitää saada tämä toimimaan yhdellä koneella, kun saamme sen toimimaan yhdellä niin monistaminen saltilla ei pitäisi olla vaikeaa. Mennään ensin pychessin asetuksiin ja tutkitaan mitä sieltä löytyy:

Äänet pystyy valitsemaan täältä eri asioihin. Seuraavaksi meidän pitää vain onnistua saamaan oma äänemme tuonne ja sitten tehdä sama minioneille. Kaikki äänitiedostot näyttävät olevan samassa kansiossa, /usr/share/pychess/sounds:

Ajattelin että custom sound soisi silloin kun pelaaja syö vihollisen nappulan. Löysin kivan pienen äänen sivustolta freesound.com. Ääni mitä käytän on tämä: https://freesound.org/people/BerlinGameScene/sounds/267249/ (Lähde 4).

En voi tässä näyttää kyseistä ääntä, mutta kyseessä on ääni jossa ihmiset taputtavat ja ovat “ihmeissään”. Aika ilmeinen sillä tavalla että tämä on custom ääni. Teen myöhemmin videodemon moduulista jossa äänen pitäisi kuulua normaalisti. Siirsin äänen virtuaalikoneelle jonka jälkeen myös siirsin sen oikeaan kansioon, eli tuohon aiemmin mainittuun /usr/share osoitteeseen. Uuden äänen pitäisi nyt olla pychessin asetuksissa, mennään katsomaan:

Tuo cheer.ogg on se jonka juuri äsken lisäsin. Laitetaan päälle ja kokeillaan että ääni toimii. Menin yhteen shakkipeliin, ja uusi ääni toimi tahdotusti. Tässä kohtaa joudutte luottamaan siihen, sillä en pysty vielä demoamaan sitä mitenkään.

Muistan nähneeni .ogg tiedostoja aiemmin pychessin config tiedostossa, joten käydään ensin katsomassa löytyisikö tämä muutos sieltä.

Näyttää päivittyneen onnistuneesti. Tässä kohtaa meidän ei oikeastaan tarvitse tehdä mitään muuta kuin 1. päivittää esimerkki config tiedosto tällä uudella ja 2. saada minioneille tuo oikea tiedosto.

  • 1. päivittää esimerkki config tiedosto tällä uudella
  • 2. saada minioneille tuo oikea tiedosto

Tämä hoituu oikein helposti kahdella komennolla:

sudo cp /usr/share/pychess/sounds/cheer.ogg /srv/salt/chess_module/cheer.ogg
sudo cp config /srv/salt/chess_module/config

Nyt molempien tiedostojen pitäisi olla tuolla /srv/salt/chess_module/ kansiossa. Vielä yksi lisäys on kuitenkin tehtävä init.sls tiedostoon:

Tuo punaisella merkitty on siis meidän uusi lisäys jossa varmistamme että minionilla on myös oikea äänitiedosto. Kaiken pitäisi toimia nyt! Voimme laittaa state.apply ja katsoa mitä tapahtuu:

Ei virheitä. Vielä viimeiseksi meidän pitää mennä minionille ja tarkistaa että uusi äänitiedosto on tosiaan käytössä (tästä demo videokohdassa!).

Videodemo moduulista

Tietysti on vaikea todeta että “kyllä, meidän moduuli toimii” kun emme voi todistaa sitä tässä wordpress sivulla oikeastaan mitenkään. Tämän takia olen tehnyt youtube videon moduulin toiminnasta ja tulen sen avulla näyttämään että kaikki toimii tahdotusti.

Linkki youtube-videoon: https://www.youtube.com/watch?v=RTyGLIlxYkw .

Videossa ollaan nopeasti demottu miten moduuli toimii ja mitä se tekee + todistetaan että äänet ovat muuttuneet niinkuin ajattelimme.

Lopulliset ajatukset

Ikävä kyllä päällekkäin menevät deadlinet estivät suuremman moduulin työstämisen, ja kuten olen jo aiemmin maininnut olin hieman turhautunut siihen että en saanut jotain monimutkaisempaa ongelmaa ratkaistua, koodihan tässä oli kovin simppeliä lopulta. Turns out oikeita ongelmia on vaikeampi keksiä kuin ratkaista!

Tämä moduuli kuitenkin demosi saltin periaatetta mielestäni aivan oivasti, vaikka lopputulos ei nyt ollutkaan mikään erityisen monimutkainen. Pääsin silti hyödyntämään monia erilaisia taitoja mitä kurssilla opin: ehkä olisi vielä ollut kiva jos olisin jotenkin saanut ohjelman myös toimimaan RedHatilla niinkuin alunperin oli tarkoitus, mutta ikävä kyllä paketinhallinnan kanssa säheltäminen itselle tuntemattomalla käyttöjärjestelmällä osoittautui hieman liian haastavaksi, varsinkin kun en löytänyt mitään erityistä apua kyseistä pakettia varten.

Lähteet:

Lähde 1: https://pychess.readthedocs.io/en/latest/

Lähde 2: https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html

Lähde 3: https://regexr.com/

Lähde 4: https://freesound.org/people/BerlinGameScene/sounds/267249/

Leave a comment

Design a site like this with WordPress.com
Get started