PH – h6

Harjoitus 6 – Yksi totuus

a) Asenna jokin toinen Linux-levityspaketti orjaksi Saltille. CentOS on hyvä vaihtoehto. Voit esimerkiksi asentaa CentOS:n VirtualBoxiin ja tehdä koneiden välille virtuaaliverkon. Jos käytät Vagrantia, ’cent.vm.box = ”centos/7″’ on kätevä.

Aloitin harjoutuksen tekemisen n. 9.30. Ensiksi luon uuden palvelimen DigitalOceanissa. Valitsin käyttöjärjestelmäksi CentOS.

Otan siihen ssh yhteyten. Teen alkujutut, jotta saan sen suojattua. Luon uuden pääkäyttäjän, annan sille rootin oikeudet ja lukitsen rootin, jottei sillä voi kirjautua sisään.

Käytin neuvona näitä ohjeita: https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-a-centos-7-server

Tässä joutui käyttämään toista Linuxin käyttöjärjestelmää kuin Ubuntua, joten komentojen kanssa oli vähän ongelmia, mutta onneksi pääsi nopeasti jyvälle.

  • adduser emma
  • passwd emma
  • gpasswd – a emma wheel (tällä laitan käyttäjän sudo/root-ryhmään)

Kirjaudu ulos ja sisään. Seuraavaksi lukitsen rootin (tai ainakin luulen, että lukitsin):

  • sudoedit /etc/passwd
  • root:x:0:0:root:/root:/bin/bash
  • -> root:x:0:0:root:/root:/sbin/nologin

Teen siitä orjan ja lisään masterille sen orjaksi. Käytin ohjeina tätä: https://repo.saltstack.com/#rhel

Asenna se:

Sudoedit minion

  • master: *ip-osoite*
  • id: slave3

Sitten laitan minionin päälle. Käytin ensiksi tätä komentoa: sudo systemctl restart salt-minion.service, mutta sitten tätä: $ systemctl start salt-minion.service. Pyysi authenticationia ja id:n valitsemista.

Masterilla:

  • sudo salt-key -A:
  • The key glob ’*’ does not match any unaccepted keys.

Tässä kohtaa mietin, että pitää odottaa vähän aikaa, mutta sama viesti tuli. Tajusin, ettei salt-minion ei ollut päällä, joten laitoin sen päälle. Mutta sitten tuli taas ERROR: Error while bringing up minion for multi-master. Is master at 134.122.80.89 responding? Master ei näköjään ollut päällä.

  • Unable to bind socket 0.0.0.0:4505, error: [Errno 98] Address already in use; Is there another salt-master running?
  • The salt master is shutdown. The ports are not available to bind

Onkohan siellä joku toinen orja tuossa portissa?

Menen masterille kokeilemaan tätä (luin tämän joltakin sivulta, en nyt ottanut ylös sitä):

  • sudoedit /etc/salt/master
  • interface: 10.0.0.1

Salt-masterin restart komento: Job for salt-master.service failed because the control process exited with error code.

Menen takaisin poistamaan tuon muutoksen.

Kokeilen nyt sammuttaa masterin: sudo service salt-master stop

Laitan sen päälle: sudo systemctl start salt-master.service

Nyt kokeilen: $ sudo salt-key -A: Unaccepted Keys: Centos.

Sen hyväksyin. Nyt onnistui liittämään orjan masteriin.

Kokeilen komentoa sudo salt ’*’ cmd.run ’whoami’. Sain kaikilta orjilta vastauksen.

b) Kerää grains.items avulla tiedot orjista, joissa on eri levityspaketti.

Master-koneella komento: $ sudo salt Centos grains.items|less

Centos:
———-
SSDs:
biosreleasedate:
     12/12/2017
biosversion:
     20171212
cpu_flags:
    
[deleted]

cpu_model:
     Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz



groupname:
     root
host:
     Centos


id:
     Centos

init:
     systemd
ip4_gw:
     142.93.160.1

kernel:
     Linux

kernelrelease
     4.18.0-147.3.1.el8_1.x86_64
kernelversion:
     #1 SMP Fri Jan 3 23:55:26 UTC 2020
locale_info:
     ———-
     defaultencoding:
         UTF-8
     defaultlanguage:
         en_US

detectedencoding:
         UTF-8
     timezone:
         UTC
localhost:
     Centos
lsb_distrib_codename:
     CentOS Linux 8 (Core)
lsb_distrib_id:
     CentOS Linux

lsb_distrib_release:
     8
machine_id:
     ba7021f6fcf3409d99b4fead5440ab76
manufacturer:
     DigitalOcean
master:
     134.122.80.89

mdadm:
mem_total:

821
nodename:
     Centos
num_cpus:
     1
num_gpus:
     1
os:
     CentOS
os_family:
     RedHat

osarch:
     x86_64
oscodename:
     CentOS Linux 8 (Core)
osfinger:
     CentOS Linux-8
osfullname:
     CentOS Linux


productname:
     Droplet

saltversion:
     3000.2
saltversioninfo:
     – 3000
     – 2

c) Tee päivän viesti (motd), jossa koneen tyyppi tulee grains osfinger -muuttujasta. Kokeile, että saat eri levityspaketeilla eri tuloksen. Voit hyödyntää aiemmin tekemääsi motd:ia.

Katson ensiksi, mitä uusi Centos-orja sanoo osfingeriksi:

  • master$ sudo salt Centos grains.item osfinger
  • Centos:
  • ———-
  • osfinger:
  • CentOS Linux-8

MOTD nyt Centos-orjalla:

  • Activate the web console with: systemctl enable –now cockpit.socket
  • Last login: Fri May  8 06:44:22 2020 from

Centos-koneella:

  • slave $ sudoedit /etc/motd:
  • Moi

Logout ja login:

Mene masterille ja hakemistoon /srv/salt/motd. Siellä on jo valmiiksi motd-tila, jota käytin aiemmassa tehtävässä. Kokeilin ensiksi ajaa tilaa CentOS:ille, mutta se ei onnistunut, koska Centosilla ei ollut motd-kansiota, kun taas toisilla orjillani oli, koska olin ne tehnyt sinne. CentOS:illa on vain motd-tekstitiedosto. Joten muutin motd:n init.sls tilaa.

Lopulta motd init.sls tiedosto:

Sitten ajoin sen Centos:ille, mikä onnistui. Logout ja login:

Nyt menen muokkaamaan sitä /srv/salt/motd/motd.txt tiedostoa, jotta tulee se osfinger-tieto:

Tadaa! Nyt siellä lukee se Osfinger.

Huoh! Nyt sain tämän toimimaan myös toisille orjilleni, jotka ovat ubuntuja. Edellisessä harjoituksessa olin ymmärtänyt yhden asian väärin, joten en ollut saanut omaa motd:ia toimimaan. Luulin, että siellä /etc pitää olla /motd-hakemisto, jonka sisällä motd.txt, mutta riittää siis vain jos /etc itsessään on vain se motd.txt, jolloin kone näyttää sen, kun siihen kirjautuu.

Ten nyt sillein, että menin ubuntu-orjalle, poistin sielä sen /motd kansion ja ajoin tuon motd tilan kaikilla orjilla. Kun menin ubuntu-orjalle ja kirjauduin sisään, nyt motd oli muuttunut:

d) Tee tila, joka tekee RedHat-perheellä (esim. CentOS) tiedoston /tmp/redhat ja Debian-perheellä (esim Ubuntu) tiedoston /tmp/debian. Voit käyttää mitä vain eri perheiden levityspaketteja.

Pidin tässä välissä tunnin tauon. Jatkoin tämän tekemistä klo 11.40.

Teen ensiksi niin, että se toimii masterilla ilman mitään muuttujia ja if-lauseita.

Tee kansio /srv/salt/tmp. Luo tila: sudoedit init.sls. Kokeilen tällaisella:

Testaa ensiksi paikallisesti: sudo salt-call –local state.apply tmp. Tämä epäonnistui, koska ”Source file salt://tmp/ not found”. Käyn poistamassa tuolta init.sls tilasta sen source kohdan. Ajan paikallisesti taas. Nyt onnistui. Sain kuitenkin varoituksen: [WARNING ] State for file: /tmp/debian – Neither ’source’ nor ’contents’ nor ’contents_pillar’ nor ’contents_grains’ was defined, yet ’replace’ was set to ’True’. As there is no source to replace the file with, ’replace’ has been set to ’False’ to avoid reading the file unnecessarily.

Käyn katsomassa /tmp hakemistoa. Se oli luonut tiedoston sinne eikä kansiota. Tehtävänannossa sanotaan, että luo pelkkä hakemisto. Yritän siis saada sen pelkän hakemiston ilman tiedostoa.

Käytän ohjeena tätä: https://docs.saltstack.com/en/master/ref/states/all/salt.states.file.html

Tuon mukaan file.managedin tilalle file.directory. Koeilen sillä ja ajan tilan paikallisesti.

[!!!! ETA: Olin tässä ymmärtänt tehtävänannon väärin. Olisi siis pitänyt tehdä se tiedosto eikä hakemistoa. Tämän saisi kuitenkin helposti korjatta laittamalla siihen sen file.managed ja source: salt: //tmp/{{ tmpfile }} ja tehnyt sen tmp-tekstitiedoston tuonne /srv/salt/tmp kansioon ]

(sain ensin vastaukseksi ”Specified location /tmp/debian exists and is a file”. Se kummittelee siellä, joten kän poistamassa sen)

Tulos:

Comment: Directory /tmp/debian updated
  Started: 08:55:55.572746
Duration: 13.735 ms
  Changes:   
           ———-
           /tmp/debian:
               New Dir

Sitten se hankala osuus. Käytän apuna tätä: http://terokarvinen.com/2018/configure-windows-and-linux-with-salt-jinja-if-else-and-grains

Käytän tällaista init.sls tilaa:

Huomasin heti, että siellä oli kirjoitusvirhe (& -> %). Korjasin sen ja ajoin orjilla: sudo salt ’*’ state.apply tmp

Sain vastaukskesi: ”Salt request timed out”

Tässä vaiheessa kokeilin kaikkia eri tapoja korjata tilannetta muokkaamalla init.sls tilaa. En nyt viitsi kirjoittaa kaikkea tässä, koska tajusin sitten, että master ei ollut päällä.

Laitan masterin ensiksi pois päältä ja siten uudestaan päälle:

  • $ sudo service salt-master stop
  • $ sudo systemctl start salt-master.service

Init.sls tässä vaiheessa (olin ottanut if lauseet pois)

Ajoin tämän, mikä onnistui. Ne loivat sen /tmp/*** hakemistot.

Laitoin if lauseet tilaan:

Ajo kaikille epäonnistui:

  • ID: tmp/RedHattu
  • Function: file.directory
  •    Result: False
  •   Comment: Specified file tmp/RedHattu is not an absolute path

Se kuitenkin osasi sijoittaa ne os_fingerit sinne, mutta tuo luomisjuttu on vain väärin.

Kokeilin seuraavaksi tällä:

Tällä onnistui. Jee!! Ajoin kaikille kolmelle orjalle ja ne tekivät ne /tmp/*osfinger* hakemistot.

d) Tee tila, joka asentaa ja konfiguroi Apachen kahteen erilaiseen järjestelmään, esim. CentOS ja Ubuntu. Paketin nimi on CentOS:ssa ”httpd”. Käytä Salt-koodin generointia muoteilla.

Teen ensiksi kansion tehtävälle: sudomkdir /srv/saltApache. Luon tilan: sudoedit init.sls

Käytän apuna tätä sivua: https://docs.saltstack.com/en/master/topics/tutorials/states_pt3.html

apache:
  pkg.installed:
{% if grains[’os’] == ’RedHat’ %}
– name: httpd
{% elif grains[’os’] == ’Ubuntu’ %}
– name: apache2
{% endif %}

Testaan ensiksi ajaa tätä pelkästään ennen kuin teen säädöksiä. Ajaminen kestää hetken aikaan, kun se varmaan asentaa niitä- Se oli asennettu jo yhdelle orjalle ja onnistui toiselle ubuntu orjalle. CentOS kuitenkin epäonnistui:

Centos:
Data failed to compile:
———-
ID ’apache’ in SLS ’apache’ contains a short declaration (pkg.installed) with a trailing colon. When not passing any arguments to a state, the colon must be omitted.

Poistan sen : aksoispisteen pkg-installed jäökeen, mutta se epäonnistui.

Muutin sen [’os’] -> [’os_family’]. Nyt sen ajo onnistui CentOS:ille, mutta ubuntut alkoivat valittaa.

Nyt tajusin, että ubuntun tilalla pitäisi olla debian, koska debian on se perhe. Nyt sen ajo onnistui. Kaikki ovat happy. Yksi iso happy linux perhe.

Lopullinen init.sls:

Tämän varmaan voi tehdä niin, että ne if ja muuttujat on alussa eikä tuolla välissä. Mutta en nyt osannut. Lopetan tässä välissä klo 13.20. Jatkan harjoitusta palautuspäivänä klo 15.25 ja lopetin n. klo 16.

Testaan nyt niin, että laitan ne if-lauseet ovat siinä alussa. Käytin apuna toisen opiskelijan tekemää harjoitusta, koska en ehtinyt nyt alkaa itse säätämään. (https://jannelinux.design.blog/)

Aluksi testasin, että master on päällä (ei ollut, joten laitoin sen päälle).

Menen muokkaamaan sitä /srv/salt/apache/init.sls tiedostoa. Kommentois pois ne aiemman, jotta ne kuitenkin pysyvät siellä.

Kokeilen tällaista:

Tein ne tekstitiedostot: sudoedit centos ja sudoedit ubuntu. Sitten kokeillaan ajoa orjille: sudo salt ‘*’ state.apply apache

Kaikki onnistui muuten, mutta yksi ubuntu orjista valitti service.running-kohdasta. Annoin sen olla, koska sillä oli siis jo Apache asennettu ja säädetty webbisivu. Toinen ubuntu siis onnistui

Slave1:

CentOS:

Jätä kommentti

Design a site like this with WordPress.com
Aloitus