Palvelin hallinta läksy viikko 2 – Caius Juvonen

a) Demonin asetukset. Säädä jokin demoni (asenna+tee asetukset+testaa) package-file-service -rakenteella. Tunnilla muutettiin ssh:n porttinumeroa, joten tee jotain muuta.

Pitkän mietinnän jälkeen päätin asentaa orjille mysql-serverin ja muokata sen porttia. Asennus onnistui pkg.installed toiminnolla, mutta sitä ennen tein uuden kansion /srv/salt nimeltä mysql. Sen sisälle loin init.sls tiedoston, johon kirjoitin seuraavan:

mysql-server:
  pkg.installed

Tämä siis tarkistaa onko mysql-server asennettuna, ja jos ei niin se asentaa sen. Seuraavaksi kirjoitin top fileen seuraavan:

base:
  'papunorja':
    - mysql

Asensin vain yhdelle orjalle koska halusin ensin kokeilla toimiiko tämä komento kunnolla (tosin minulla on tässä kohtaa vain 2 orjaa, joten ei sillä ole niin paljoa väliä). Tämän jälkeen ei tarvinut muuta kuin kirjoittaa

sudo salt '*' state.apply

Nyt se siis asensi mysql-serveri toiselle orjalle, ihan vain että voisin kokeilla missä config file on mysql-serveriin ja mitä siellä voi tehdä ennenkuin teen mitään muuta.

Löysin muokattavan mysql conf filen /etc/mysql/my.cnf . Siellä ei lue mitään paitsi oikeastaan parit kommentit siitä että mikä se tiedosto on, yms. mysql –help saa kuitenkin listan variableista mitä voi muokata, ja yksi niistä on default portti. Tällä hetkellä meidän default port on 0 koska en ole laittanut remote accessia päälle, mutta teen sen ensi kohdassa. Nyt alkuun haluan kuitenkin vain muokata mikä default port on, joten teen kopioin nyt alkuun tämän configuraatio tiedoston ja laitan sen /srv/salt/mysql kansioon:

sudo cp my.cnf /srv/salt/mysql

Komento siis juostu /etc/mysql/ kansiosta. Nyt meillä on kopio configuraatio tiedostosta mysql kansiossa, ja voimme muokata tämän asetuksia. Voimme tarkastella muutettavia parametrejä

mysql --help

avulla. Näämme esim. tälläisiä asetuksia:

Siellä oli paljon muitakin, mutta päätin laittaa jotain tuohon “user” kohtaan joka siis käsittääkseni määrittelee default userin. No, en tiedä oikeasti, mutta kokeillaan. Kirjoitin kopioituun my.cnf tiedostoon

user caius

Ei mitään hajua toimiiko tämä vai ei, jonka takia otin kopion alkuperäisestä sql my.cnf vielä uudestaan jotta voimme korjata virheemme mikäli sellaisen olemme nyt tekemässä. Seuraavaksi vain menin muokkaamaan init.sls tiedostoa /srv/salt/mysql kansiossa, johon tein seuraavan lisäyksen

/etc/mysql/my.cnf:
  file_managed:
    - source: salt://mysql/my.cnf

Sormet ristiin ja toivotaan parasta. Pistän nyt state.apply.

Tämmöinen virhe tuli. Lähin selvittämään ongelmaa googlaamalla tuon virheen, mutta sitä tehdessäni tajusin että olin kirjoittanut init.sls tiedostoon “file_managed:” enkä “file.managed:” niinkuin piti. Korjasin tämän ja kokeilin uudestaan state.apply. Tällä kertaa salt ei valittanut ja kertoi tehneensä muutokset, tai spesifisti ottaen, lisäsi tiedostoon /etc/mysql/my.cnf uuden linen “user caius” jonka olin muuttanut siellä kopioidussa my.cnf tiedostossa.

Katsoin vielä manuaalisesti että tämä muutos oli tapahtunut.

Periaatteessa olin tässä kohtaa jo valmis, sillä onnistuin tavoitteessa: muuttaa jonkun daemonin asetuksia. Ja tämähän oli siis asetus. Nyt ainut kysymys oli siinä, teinkö mitään oikein, joten kokeilin vielä sitäkin:

Näköjään kaikki ei mennyt ihan putkeen… Hyvä että kokeilin vain testikoneeseen tätä muutosta, enkä laittanut tätä kaikkiin koneisiin. Googlella löysin tälläisen stackoverflowsta vastauksen, jossa näin että olin konfannut aika väärin näköisesti my.cnf tiedoston, joten kokeilin uutta formaattia ensin (lähde 1). Tämä siis tarkoittaa että tiedostossa lukee “user = caius” eikä vain “user caius”. Uudestaan vain state.apply ja katsotaan mitä tapahtuu. No, ei vieläkään toimi, vaan antaa saman virheen kuin yläpuolella.

My.cnf tiedostoon on kuitenkin kommentoitu jonkun verran apua, ja löysin sieltä linkin jossa selitetään enemmän (lähde 2) conf filen säädöstä. Päätin palauttaa original my.cnf filen että voin käyttää system komentoja (ne eivät toimi jos my.cnf file on väärin). No, tajusin myös tosta error messagesta että joku group siellä pitäisi varmaan olla. Aiemmista lähteistä huomasin (lähde 1) että siellä oli groupit laitettu my.cnf tiedostoon joten kokeilin sitä seuraavaksi. Lisäsin siis my.cnf fileen [mysqld] ennen “user = caius”. Tällä kertaa mysql käynnistyi, mutta en kyllä rehellisesti ottaen tiedä mitä tuo “user = caius” teki. Olisihan tuolta voinut porttiakin muuttaa, mutta vaikutti vähän turhan isolta säädöltä tämä loppu, joten jätin tekemättä mitään muuta. Mielestäni pääasia että sain nämä uudet asetukset toimimaan ongelmitta. Tämänhän olisi voinut soveltaa muihinkin asetuksiin, mutta en keksinyt mitään järkevää.

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.

Päätin asentaa sellaisen ohjelman kuin weechat, jota käytetään chat roomeissa puhumiseen. Katoin dokumentaatiota sen verran että siinä ei pitäisi olla man-paget päällä by default, joten olisi hyvä alku asentaa weechat orjille ja tehdä niin että man-paget menevät päälle, joten päätin tehdä sen. Näin weechatin asetukset sen omasta dokumentaatiosta (Lähde 3)

Asennetaan ensin paikallisesti, ja tehdään asetukset sitä kautta:

sudo apt-get update
sudo apt-get install weechat

Sitten kokeillaan toimiiko weechatissa man paget. Ikävä kyllä toimi, mutta voidaan vain tehdä niin että man-paget ovat pois päältä (vaikka näin ei haluttaisi normaalisti toimia) ihan vain testin vuoksi.

Päätinkin jättää man-pagejen säädön sikseen, koska näyttää siltä että luin dokumentaatio väärin. Sen sijaan päätin tehdä niin, että laitan weechattiin serverin, sillä ne pitää manuaalisesti laittaa. Päätin käyttää chat.freenode.net tässä esimerkkinä.

Weechatin dokumentaation mukaan serverin lisääminen onnistuu komennolla

/server add freenode chat.freenode.net 

Tässä siis chat.freenode.net on serverin osoite, ja freenode sen serverin nimi miksi sitä kutsumme kun käytämme /connect. Hyvä huomioida myös että nämä komennot toimivat vain jos ollaan kirjoitettu weechat ennen sitä jotta päästään heidän omaan “terminaaliinsa”. En tiedä miksi kutsua sitä.

Saimme kuitenkin weechatin toimimaan niin että pääsimme chat.freenode.net connectaamaan. Nyt haluamme tämän saman myös orjille.

Halusin tutkia mitkä tiedostot muuttuvat kun lisään uuden serverin weechattiin, mutta huomattavan monta tiedostoa itseasiassa muuttui. Selvitin tämän komennolla

find -printf ‘%T+ %p\n’| sort

Juostuna rootista. Tämä sai minut vähän huolestuneeksi, sillä jos /server add muokkaa jokaista tiedostoa, tulee olemaan aika mahdotonta tehdä taikatemppuja jokaiselle niistä saltissa. Kokeilin lisätä uutta serveriä jota ei ollut olemassa /server add testi irc.testi.com komennolla, mutta se taas ei tehnyt muutoksia mihinkään paitsi log fileen. Sen takia kokeilin seuraavaksi lisätä oikeaa irc serveriä: /server add jokuirc irc.de.ircnet.net

Ikävä kyllä tämäkään ei tuottanut mitään tuloksia. Selasin kuitenkin weechatin conf tiedostoja, ja näin jotain mielenkiintoista: irc.conf sisälsi kaikki lisäämäni serverit, ja ison osan asetuksia mitä siellä on. Tästä innostuneena tietysti kopion koko tiedoston /srv/salt/weechat johon olin siis luonut tiedostoja juuri tätä varten.

Sitten vain /srv/salt/weechat/init.sls johon kirjoitin seuraavan:

weechat:
  pkg.installed

./.weechat/irc.conf:
  file.managed:
    - source: salt://weechat/weechat.conf

Tämän jälkeen piti vielä toki käydä top.sls tiedostoa muokkaamassa niin, että siellä luki:

'etäorja':
  - weechat

Sitten vain sormet ristiin ja state.apply ja katotaan toimiiko ylipäätään. Tämä on onnistunut jos orjalta pääsee suoraan connectaamaan freenodeen, eli sinne chat.freenode.net, ilman että asentaa mitään erikoisempia.

No eipä tietenkään toiminut suoraan.

eli ./. ei toiminut file pathina, en tiedä miksi ajattelin niin. Weechattihan on käyttäjän home directoryssä, joten tehdään sinne absolute path tuon ./.weechat sijaan:

~/weechat/irc.conf

Tuo uusi file pathi toimi kohteeseen, mutta nyt salt valittaa että se ei löydä tiedostoa /srv/salt/weechat/weechat.conf , vaikka olen moneen kertaan tarkistanut että kirjoitin file pathin oikein ja että tiedosto on siellä ihan sen nimisenä. Muutin jopa tiedoston sijaintia /srv/salt ja muutin sen nimen irc.conf , mutta mikään ei toimi.

Lopulta luovutin ja käytin /home/papu/.weechat/irc.conf tiedoston kohteena, vaikka tämä ei tietenkään toimisi jos meillä olisi useampi laite, minkä takia halusin helpon tavan päästä käyttäjän home directoryyn. Hyvä uutinen on siinä, että ideani toimi ja sain orjalla /connect freenode toimimaan irc.conf tiedoston avulla. Tässä kuva orjalta:

Ei oltu missään säädetty freenoden osoitetta tai mitään muulla kuin masteri koneella, ja irc.conf filen annettua orjalle saimme saman toimimaan sillä, vaikka emme itse orjalla tehneet koko /server add prosessia. Tämä siis hyvä demo siitä miten saatiin joku asia joka tehtiin ensin paikallisesti toimimaan myös orjalla tiedostoja käyttämällä.

c) Aja jokin tila paikallisesti ilman master-slave arkkitehtuuria. Tutki debug-tulostetta. ‘sudo salt-call –local state.apply hellotero –state-output terse’

Tehtävänannossa annettiinkin meille komento mitä käytämme, eli tuo sudo salt-call –local state.apply (state tähän) –state-output terse. Päätin kokeilla tätä kahdella eri moduulilla lokaalisti, toisen jonka pitäisi toimia ja toisen jonka ei pitäisi toimia.

Aloitan mysql moduulilla, eli laitan tuohon aiempaan komentoon mysql (state tähän) tilalle. Saan tälläisen outputin:

Kaikki näyttää toimivan ihan erinomaisesti. Kuten näemme, salt kertoo meille että tulos oli clean ja mitään ongelmia ei tapahtunut. Tämän staten juoksemiseen meni 840 millisekunttia, joka on siis 0.8 sekunttia, tosin tämä ei kaida olla oikea aika. Laitoin time komennon tämän komennon eteen oikean ajan saamiseksi, ja se oli noin 6 ja puoli sekunttia.

Seuraavaksi haluaisin kokeilla toista statea jonka ei pitäisi toimia lokaalisti. Tämän staten nimi on weechat, ja tämän pitäisi toimia vain eräällä toisella orjalla. Kokeillaan mitä tapahtuu:

Okei, mitä tässä tapahtui? Jos katsomme error viestiä, huomaamme että se valittaa jotain “parent directory not present”. Tämä tarkoittaa sitä että salt ei löytänyt tätä tiedostopolussa mainittua kansiota, joka on siis /home/papu/.weechat/irc.conf. Syy on simppeli: tällä koneella käyttäjän home directory ei sijaitse /home/papu, vaan /home/caius. Se on yksi suurimmista ongelmista viime kohdassa, johon minulla ei vieläkään ole ratkaisua. Sen takia sanoin että tiesin että tämä ei tule toimimaan, sillä tämä salt state toimii vain ja ainoastaan toisella orjalla. Toinen funktio kyllä toimi ihan moitteettomasti, mutta se oli vain pkg.installed weechattiin joten tässä se tarkistaa onko koneella weechat ja jos ei niin se asentaa sen, eli kaikki OK koska tällä koneella on jo weechat. Tämän komennon juoksemiseen meni melkein 7 sekunttia, hieman pidempään kuin aiempi, luultavasti virheen takia vaikka muuten ne ovatkin erittäin samanlaisia stateja.

Caius Juvonen 2020

Lähde 1: https://stackoverflow.com/questions/8020297/mysql-my-cnf-file-found-option-without-preceding-group

Lähde 2: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html

Lähde 3: https://weechat.org/files/doc/stable/weechat_user.en.html

Läksyt on otettu täältä: http://terokarvinen.com/2020/configuration-managment-systems-palvelinten-hallinta-ict4tn022-spring-2020/

Leave a comment

Design a site like this with WordPress.com
Get started