Tällä viikolla tehdään taas palvelintenhallintakurssin läksyjä. Läksyt on otettu täältä: http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/. Ovat myös lähteenä lopussa.
a) Hello templates! Tee muotilla esimerkkitiedosto, jossa on muuttujien (esim grains) arvoja.
Yritän tässä kohtaa tehdä tiedoston joka saa grains tiedoista käyttöjärjestelmän koko nimen. Tarkistetaan ensin grains.items mikä sen nimi on:

osfullname, eli käytämme tuota tiedostossamme. Ymmärtääkseni sitä joutuu käyttämään grains[‘osfullname’] tyyppisesti, mutta en ole vielä täysin varma. Kohta tulemme tietämään kun kokeilemme toimiiko se 🙂
Ensinnäkin loin uuden kansion /srv/salt/templates_test/ . Tähän uuteen kansioon loin tiedoston init.sls. Ja sinne sisään pistin seuraavan:
/tmp/templates.txt: file.managed: - source: salt://templates_test.txt
Sen jälkeen muokkasin vielä top.sls tiedostoa ja pistin sinne orjille moduuliksi tämän uuden templates_test:in. Sitten vain “sudo salt ‘*’ state.apply“. Mutta sain outputiksi pelkästään

Tuossahan piti siis lukea “This OS is Ubuntu” mutta tuohon on pistetty vaan se meidän variable eikä sitä outputtia. Mietin tätä jonkin aikaa, ja tajusin että tämä tiedosto on pelkkä tekstitiedosto eikä jinjaa, eihän tämä muuten toimi. Joten menin pistämään /srv/salt/templates_test/init.sls tämmöisen muutoksen:
/tmp/templates.txt:
file.managed:
- source: salt://templates_test.txt
- template: jinja
Tuossa siis alleviivattuna uusin muutos. Pistin uudelleen state.apply ja katsoin mitä tapahtuu kun teen “cat /tmp/templates.txt“.

Nyt toimii niinkuin pitääkin, eli saimme toimimaan tuon variablen jolla saamme grains.items tietoa vaikka käyttöjärjestelmästä ja voimme käyttää näitä eri tietoja hyväksemme.
b) Message of the Day. Sisäänkirjautuessa näytetään päivän viesti. Lisää päivän viestiin tietoa ympäristöstä käyttäen muotteja. Sopiva tiedosto on /etc/motd.
Meidän pitää ensinnäkin luoda tämä tiedosto, ja sitten lisätä sinne tietoja. Lähdetään liikkeelle siitä että teemme uuden directoryn /srv/salt. Tämän directoryn nimeksi annan motd_tehtävä. Tälläiseltä näyttää meidän init.sls tiedosto:
/etc/motd: file.managed: - source: salt://motd_muotti - template: jinja - makedirs: True
Tuo makedirs kaitaa olla aika turha sillä kaikilla koneilla pitäisi olla /etc/, mutta lisäsin sen nyt silti ihan varmuudeksi, vaikka mielestäni file.managed jo varmistaa että kyseinen tiedosto luodaan. No, seuraavaksi meidän pitää vain tehdä tuo muottitiedosto ja sitten katsoa toimiiko.
Menin ensin katsomaan grains.items mitä tietoa haluamme tuohon motd tiedostoon pistää. Ensinnäkin halusin edelleen osfullname edellisestä kohdasta, mutta sen lisäksi löysin esimerkiksi osrelease joka kertoo meille sen hetkisen version, ja myös muistin määrän ja kuinka monta CPU:ta koneessa on.
Aloin työstämään muottitiedostoamme. Tässä lopputulos:
Welcome. The current OS is {{ grains['osfullname'] }} and it's version number is {{ grains['osfinger'] }}. <br> The current salt version is {{ grains['saltversion'] }}. <br> Memory: {{ grains['mem_total'] }}. <br> Number of CPU's: {{ grains['num_cpus'] }}.
Tässä siis näkyy sen hetkinen käyttöjärjestelmä, sen versio, saltin versio, muistin määrä ja kuinka monta CPU:ta koneessa on. Tässä kohtaa kaikki mikä on jäljellä on kokeilla toimiiko tämä. Tallensin tiedoston ja menin lisäämään tämän etäorjalleni top.sls tiedoston kautta:
base: 'etäorja': - motd_tehtävä
Tuossa ei tietenkään koko top.sls tiedosto, vaan ne tärkeimmät osat. Tehdään state.apply ja kokeillaan ssh yhteyttä tähän orjaan. Tosin, yksi ongelma. Meidän orjalla ei ole ssh serveriä. Lisätään se nyt vaikka tähän motd_tehtävä. Lisäsin init.sls tiedostoon
openssh-server: pkg.installed
Nyt vaan uudestaan state.apply että minionille asentuu tuo openssh serveri ja voimme oikeasti ottaa siihen yhteyden. Kokeillaan uudestaan “ssh papu@10.0.2.15“.

Jes, eli saamme yhteyden. Entäs motd-viesti?

Toimii, vaikka noi <br> olivat turhia. Hups. Poistetaan vaan ne ja hyvää jälkeä kuitenkin tulee. Lopputulos:

Hyvältä näyttää ja kaikki toimii toivotusti. Ehkä nuo pisteet voisi vielä poistaa ja MB lisätä tuohon muistin perään, mutta en dokumentoi sitä tähän kuitenkaan kun viesti varmaan meni jo perille 😉
c) Bash. Tee bashiin asetuksia Saltilla. Ensin käsin, vasta toimivaa automatisoidaan. Muista testata lopputulos käyttäjän näkökulmasta.
En tietänyt miten bashin asetuksia voidaan muokata, joten googlasin ja löysin neuvon siihen liittyen (Lähde 1). Siellä lukee että meidän pitää muokata tiedostoa ~/.bashrc, joka siis sijaitsee käyttäjän home directoryssä.
Tein uuden kansion /srv/salt:iin ja sinne sisälle init.sls tiedoston. Init.sls näyttää tältä:
/home/caius/.bashrc: file.managed: - source: salt://bash_muotti
Emme tee tuota muottitiedostoa alusta lähtien, vaan kopioin sen ensin omasta home directorystäni ja sitten teen muutokset sen tiedoston loppuun. Mennään siis /home/caius ja kopioidaan .bashrc tiedosto /srv/salt:
sudo cp .bashrc /srv/salt
Näin saadaan kopioitua tiedosto tuonne oikeaan kansioon missä voimme muokata sitä niin että saamme siitä muottitiedoston. Tämä tiedosto on myös hidden by default, eli muokataan vielä sen nimeä
sudo mv .bashrc bash_muotti
Nyt muottitiedoston nimi on bash_muotti, ja poistimme myös pisteen . tiedoston edestä (piste tiedoston edessä piilottaa tiedoston). Sitten vielä viimeinen asia ennenkuin tämä on valmis, haluamme lisätä tämän bash muottitiedoston perään linen
PS1="caiustesti> "
Käsittääkseni tämän on tarkoitus muokata bashissa nimi tuohon caiustestiin. Kokeilen tätä nyt vielä paikallisesti ensin niin että lisään tämän muutoksen top.sls tiedostossa vain paikalliselle koneelleni. Nyt voidaan pistää state apply ja katsotaan toimiiko. Avataan uusi cmd terminaali ja tadaa:

Sanoisin että lopputulos on huomattavasti rumempi, mutta saimme sen silti toimimaan. Tässä kohtaa kaikki mitä meidän täytyy tehdä on vain lisätä tämä muille orjille. Voimme tehdä tämän helposti samalla tavalla kuin teimme tämän, meidän pitää vain muokata /home/caius/.bashrc polku orjille sopivaksi, kuten /home/papu/.bashrc. Voimme itseasiassa lisätä sen vain samaan bash init.sls tiedostoon, sillä pelkkä file.managed ei tee kansioita vaan tarkistaa vaan että onko kyseistä tiedostoa olemassa ja luo sen mikäli ei (mutta tässä tilanteessa polku erilainen, joten se ei luo sitä meille kahteen kertaan, huom makedirs ei ole päällä).
/home/caius/.bashrc: file.managed: - source: salt://bash_muotti /home/papu/.bashrc: file.managed: - source: salt://bash_muotti
Koska orjakoneella ei ole /home/caius ei tuo ylempi tee mitään orjalla ja vice versa. Edellään olisi kiva jos olisi joku tapa viitata aina kyseisen käyttäjän kotihakemistoon automaattisesti, mutta en ole vielä keksinyt siihen mitään 🙂
d) Nginx. Tee nginx-weppipalvelimeen asetuksia Saltilla. Voit esimerkiksi tehdä uuden site:n, niin että etusivu vaihtuu. Kun nginx on todennäköisesti sinulle uusi palvelin, tässä tehtävässä on siis ensin laaja osuus valita sopiva asetus nginx:lle ja saada se toimimaan käsin. Vasta toimivaa, käsin kokeiltua kannattaa automatisoida. Muista lopputuloksen testaus käyttäjän näkökulmasta.
Asennetaan ensin käsin.
sudo apt-get update sudo apt-get install nginx -y service nginx start
Näillä päästään alkuun. Voimme tarkistaa onko nginx päällä komennolla service nginx status, ja voimme myös käydä tietysti localhostissa sillä siellähän sen pitäisi pyöriä.

Hyvin näyttäisi toimivan. Tässä kohtaa loppui mielikuvitus kesken ja päätin vaan vaihtaa tämän default pagen. Ensinnäkin meidän pitää tietää mikä tämä tiedosto on ja sitten yrittää muuttaa sitä. Tutkitaan dokumentaatiosta. Käytin tähän kohtaan Lähdettä 2.
Lähteen mukaan default page sijaitsee /var/www/html. Käydään katsomassa:

Siellähän se näyttäisi olevan. Kun vielä tarkastelemme tätä html tiedostoa varmistuaksemme, huomaamme koodista että ihan sama html sivu on kyseessä:

Selvä, nyttenhän meidän ei tarvitse tehdä mitään paitsi muuttaa tuota default web pagea ja homma on siinä. Ensinnäkin muutin hankalan tiedostonimen pelkäksi index.html ja sitten menin tekstieditoriin ja poistin kaiken ja kirjoitin html sivun uusiksi.
<!DOCTYPE html> <html> <head> </head> <body> <h1> Tämä sivu on iso ja mahtava </h1> <br> <br> <p> Tässä pientä tuherrusta </p> </body> </html>
Aika simppeli. Sivu itsessään näyttää siis tältä:

Ääkköset bugailee, mutta se nyt ei ole pointti. Olemme siis saaneet default pagen muutettua, nyt sama orjille. Meen nyt vielä tekemään /srv/salt nginx init.sls tiedoston ja kansion. Tältä näyttää init.sls tiedosto:
nginx: pkg.installed /var/www/html/index.html: file.managed: - source: salt://nginx-index.html - makedirs: True
Sinänsä tämä nytten varmaan toimisikin, mutta tajusin toisen ongelman: tuon default web pagen nimi ei ole index.html. Helppo ratkaisu olisi uudelleenimetä tämä meidän index.html tuossa init.sls tiedostossa, mutta menemme vaikeamman kautta eli muokkaamme vielä yhtä tiedostoa. Tätä voi vaihtaa /etc/nginx/sites-available/default tiedostossa. Siellä on seuraava line:

Poistetaan vaan tuo viimeinen ja ei pitäisi olla ongelmia. Muistetaan lisätä tämä ohje init.sls salttiin:
/etc/nginx/sites-available/default: file.managed: - source: salt://nginx-config - makedirs: True
Muistetaan tosiaan kopioida tuo nykyinen sites-available/default tiedosto tuonne meidän /srv/salt kansioon. “sudo cp default /srv/salt/“. Lisätään vielä koko homma top.sls ja pistetään state.apply.

Muuten ihan hyvin paitsi olisi varmaan kannattanut myös tuo meidän muottitiedosto laittaa sinne mihin se kuului. Kopioin sen vielä nopeaan tuonne /srv/salt minne se kuuluukin aikaisempaa menetelmää noudattaen. Kokeillaan sen jälkeen nyt uudestaan.

Vaikutti toimivan. Senhän saa vielä selville kun mennään etäorjakoneelle ja katsotaan minkälainen webbisivu sieltä localhostista esiin tulee:

Tämä sivu on siis saatu minionille. Vaikuttaa siltä että kaikki meni suunnitellusti, ja voimme taputtaa itseämme olkapäälle. En tiedä missasinko tässä koko prosesissa jotain (en ymmärtääkseni) ja ainakin se toimii joten oletan että jotain meni oikein kuitenkin 🙂 .
Lähteet:
Läksyt täältä: http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/
Lähde 1: https://www.ostechnix.com/hide-modify-usernamelocalhost-part-terminal/
Lähde 2: https://www.raspberrypi.org/documentation/remote-access/web-server/nginx.md
One thought on “Palvelintenhallinta läksyt viikko 5 – Caius Juvonen”