6. moottorix

a) Asenna Nginx Saltilla. Tee tarvittavat asetukset, jotta Nginx näyttää weppisivua.

Käytän ohjeita sivuilla https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview ja https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

Vaihe 1. Asennan nginxän ensin käsin

$ sudo apt update
$ sudo apt install nginx

Testi kuitenkin näyttää aikaisemmassa tehtävässä asennettua apachen muokattua etusivua…

Johtuu ilmeisesti ainakin siitä, että nginx ei ole käynnissä

Käynnistäminen ei kuitenkaan myöskään toimi. Mahdollisesti johtuu siitä, että apache on jo käynnissä ja sotkee asiat.

Stoppaan apachen ja starttaan nginx:än.

En pääse kuitenkaan vieläkään nginx:än default sivulle. Nginx käyttää näköjään samaa index.html tiedostoa kuin apache, joten tämä on syy.

Tässä voisi esimerkiksi poistaa Apachen kokonaan (senhän saa helposti salt-tilan avulla uudelleen asennettuna jos haluaa). Poistan siis Apachen.

$ sudo apt purge apache2

Tämä ei kuitenkaan poista tuota index.html sivua. Poistamalla index.html tiedoston, saan esille nginx vakiosivun.

Seuraavaksi haluan lisätä oman sivun, joka toimii localhostin aloitussivuna. En halua kuitenkaan, että se on index.html sivu, sillä haluan, että jokainen käyttäjä voisi itse muokata haluamansa sivua. Tarkastelen nginxän tiedostoja.

Luon tiedoston example.html sijaintiin /etc/skel/, josta se latautuu kaikkien käyttäjien kotihakemistoon.

Lisään /etc/nginx/sites-available/ kansioon uuden tiedoston example.

Lisään /etc/nginx/sites-enabled/ kansioon symlinkin example-tiedostoon.

Poistan symlinkin default-configuratioon ja lisään uuden test-käyttäjän, jotta saan /etc/skel -tiedostot ladattua.

Nyt nginx ei kuitenkaan löydä mitään aloitussivua… Tutkin hieman dokumentaatiota ja nginxän man sivuja, ja teen korjauksen /etc/nginx/sites-available/example-tiedostoon.

Nyt sivu näkyy halutulla tavalla.

Tällä konfiguraatiolla nginx etsii eloitussivun /etc/skel kansiosta, enkä keksi mitään tapaa millä saisi muutettua sitä hakemaan tiedostoa käyttäjän kotihakemistosta. Saan sen onnistumaan ainoastaan sillä, että vaihdan /etc/skel käyttäjän kotihakemiston polkuun, mikä ei onnistu eri käyttäjille.

Päätän kuitenkin edetä tällä konfiguraatiolla, sillä tärkeintä tässä on kuitenkin harjoitella saltia.

Vaihe 2. Salt

Luon uuden salt-tilan, johon kopion edellisessä vaiheessa luodut ja muokatut tiedostot.

/srv/salt/nginx/init.sls

nginx:
  pkg.installed

/etc/skel/example.html:
   file.managed:
     - source: salt://nginx/example.html

/etc/nginx/sites-available/example:
  file.managed:
    - source: salt://nginx/example

/etc/nginx/sites-enabled/example:
  file.symlink:
    - target: /etc/nginx/sites-available/example

Huomasin tässä kuitenkin, että kaksi tiedostoista ovat nimettu exampleiksi… joten nimeän toisen uudelleen ja korjaan nimen myös init.sls tiedostoon.

Kun yritin muokata init.sls tiedostoa tajusin, että eihän tuota symlinkkiä tarvitse kopioida salt-tilaan, eli tein ihan turhan vaiheen.

Nyt kun tunnen olevani salt-tilaan tyytyväinen, poistan nginxän ja käynnistän salt-tilan.

Aluksi tila tyssäsi typoon, joten korjasin pilkun pisteeksi. Sen jälkeen tyssäsi puuttuneisiin parent-directoreihin. Ongelma korjaantunee kun tilan ajan uudestaan, sillä käsittääkseni hakemistot luodaan nginx än asennuksen yhteydessä…

Olin kuitenkin väärässä…joten tutkin hakemistot tarkemmin.

Näköjään puuttuva hakemisto onkin /etc/nginx…

Täysi mysteeri miksi tuota hakemisto ei luoda paketin asennuksen yhteydessä, testaan myös minion2, ja sillä toimii ongelmitta.

Minion2:lla on kuitenkin vielä apache, joten localhost etsii sen sivun…

Teen vielä salt-tilaan hieman muutoksia, eli poistan apachen, jos se on asennettu sekä poistan /var/www/html/index.html-tiedoston, jos sellaista on. Lisäksi käynnistän nginx daemonin lopuksi uudelleen. Apachen poistamisen tilalle voisi käyttää service.dead funktiota, joka pysäyttää daemonin.

/srv/salt/nginx/init.sls

nginx:
  pkg.installed

apache2:
  pkg.removed

/var/www/html/index.html:
  file.absent

/etc/skel/example.html:
  file.managed:
    - source: salt://nginx/example.html

/etc/nginx/sites-available/example:
  file.managed:
    - source: salt://nginx/example

/etc/nginx/sites-enabled/example:
  file.symlink:
    - target: /etc/nginx/sites-available/example

nginx.service:
  service.running:
    - reload: True
    - enable: True

Ajan tilan näillä muutoksilla uudelleen.

Hieman edistystä, mutta vielä pitäisi saada oma tiedosto nginx default tiedoston tilalle. Teen lisäyksen init.sls tiedostoon, jossa poistan default symlinkin.

Tämä toimii, mutta vaatii vielä, daemon käynnistetään uudelleen. Ilmeisesti reload: True komento ei tee tätä, vaan ainoastaan huolehtii siitä, että daemoni on jo käynnissä ja restartaa jos ei ole. Saltin dokumentaatiosta en löytänyt mitään muita vaihtoehtoja.

$ sudo systemctl restart nginx.service 

b) Tee Nginx:n Saltilla jokin muukin asetus tai uusi ominaisuus.

Ensin tutkin hieman mitä asetuksia tai ominaisuuksia Nginxään voisi konfiguroida, tähän käytän apuna sivun http://nginx.org/en/docs/beginners_guide.html

Päätän konfiguroida Nginxän proxyserveriksi.

One of the frequent uses of nginx is setting it up as a proxy server, which means a server that receives requests, passes them to the proxied servers, retrieves responses from them, and sends them to the clients.

http://nginx.org/en/docs/beginners_guide.html

Aivan ensimmäiseksi totean, että nginx ei jostain syystä toimi minion1:llä (joka on master-koneella). Arvelen, että tämä johtuu siitä, että poistin manuaalisesti nginx:än tiedostot ($ sudo rm -r /etc/nginx/) ennen salt-tilan ajoa… Tämä ei olisi näköjään kannattanut tehdä, sillä paketin asennus ei ilmeisesti tuo näitä tiedostoja takaisin. Minion2:lla, joka on eri koneella, nginx taas toimii täydellisesti.

Koska olin noin viikko sitten tehnyt tallentanut koneesta snapshotin virtualboxiin, päätän tässä vaiheessa palauttaa kone siihen.

Palautuksen jälkeen luon salt tilan uudelleen, ja ajan sen osissa.

Asennus onnistui ja tiedostot latautuivat onnistuneesti.

Seuraavaksi luon uudelleen tiedostot /etc/skel/example.html ja /etc/nginx/sites-available/example ja kopioin ne salt-tilan hakemistoon. Käyn vielä muokkaamaassa init.sls tiedostoa, niin, että saan ajettua kaikki komennot. Ja ajan tilan kokonaisuudessaan.

Hyvältä näyttää

Ongelmaksi jää edelleen tuo service.running, jolla en saa reloadattua nginxää.

Noniin, eli nyt voin sitten keskittyä tehtävään.

Muutoksena lisään server-blokin, joka lisää proxypalvelimen. Tässä tapauksessa sama palvelin toimii proxyna. Lisään siis edellisessä tehtävässä tehtyyn example tiedostoon (/etc/nginx/sites-available/example) uuden server-blokin.

server {
       listen 80;
       listen [::]:80;

       root /etc/skel/;
       index index.html index.htm index.nginx-debian-html example.html; 
    
       server_name example.com www.example.com;

       location / {            
               try_files $uri $uri/ =404;    }
}

server {
       listen 8080;
       root /etc/skel;

       location / {    }
}

Luon lisäksi hakemistoon /etc/skel uuden tiedoston nimeltä index.html, jonka proxy palvelin hakee.

Testaan näkymää

Kopion sekä uuden index.html tiedoston että muokatun example tiedoston salt-tilaani.

Teen tarvittavat muutokset init.sls tiedostoon, jotta orjaankin lisätään uudet tiedostot. Samalla lisään watch-komennon, jotta nginxää käynnistetään uudestaan jos example tiedosto muuttuu.

Seuraavaksi testaan, eli ajan nginx tilan molemmille minioneille.

$ sudo salt '*' state.apply nginx
Hyvältä näyttää

Minion2:lla konfiguraatio ei kuitenkaan toimi, vaan proxy sivu näkyy localhostina ja 404 Not Found proxyn sivuna.

Veikkaan, että syynä on index.html, joka on siis default konfiguraation aloitussivu. Eli vaihdan sen nimeksi proxy.html.

Muokkaan myös example tiedostoa.

Se ei kuitenkaan auttanut.

Muokkaan uudestaan konfiguraatiotiedostoa.

Nginxän restartin jälkeen toimii kuten haluan.

Lisään muutetut tiedostot taas salt-tilaan ja poistan index.html tiedoston.

Muokkaan init.sls tiedostoa.

En kuitenkaan saa sivuja toimimaan oikein minion2:lla. Tässä vaiheessa luovutan, sillä pitää ehtiä tehdä vielä seuraava tehtävä.

c) Asenna jokin työpöytä- tai komentoriviohjelma asetuksineen Saltilla.

Päätän asentaa Wiresharkia, sillä se on jokseenkin tuttu työkalu. Tutkin ensin minkälaisia asetuksia siihen voisi tehdä.

Wireshark is a network packet analyzer. A network packet analyzer presents captured packet data in as much detail as possible.

https://www.wireshark.org/docs/wsug_html_chunked/ChapterIntroduction.html#ChIntroWhatIs

Vaihe 1. Asennan ohjelman ensin käsin

$ sudo apt install wireshark

Capturing requires privileges
By installing Wireshark packages non-root users won’t gain rights automatically to capture packets. To allow non-root users to capture packets follow the procedure described in /usr/share/doc/wireshark-common/README.Debian
https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallUnixInstallBins.html#_installing_from_debs_under_debian_ubuntu_and_other_debian_derivatives
Valitsen tässä vaiheessa <No> sillä haluan tutkia asiaa ensin tarkemmin

Tutkin asennetut tiedostot

Muutan alussa esitetyn kysymyksen vastauksen “Yes”:ksi, eli haluan, että myös tavalliset käyttäjät pystyvät tutkimaan paketteja Wiresharkilla. Tähän käytän sivulla https://osqa-ask.wireshark.org/questions/7976/wireshark-setup-linux-for-nonroot-user löytyneet apu-ohjeet.

$ sudo dpkg-reconfigure wireshark-common
$ sudo usermod -a -G wireshark $USER
$ newgrp wireshark

Haluan saada tämän toimimaan myös muilla koneilla, ja aloitan sen vaiheittain. Ensimmäisen vaiheen uskon löytäneeni init.lua tiedostossa hakemistossa /etc/wireshark.

Vaihe 2. Salt

Luon uutta tilaa varten oman hakemiston /srv/salt/wireshark sekä init.sls tiedoston.

Ajaessani tilan, tuo file.managed luonnollisesti epäonnistuu, sillä tuo hakemisto luodaan vasta paketin asennuksen yhteydessä. Joka tapauksessa huomaan, että ilman muokkattua init.lua tiedostoa, wireshark toimii jo tavallisena käyttäjänä. Paketin asennuksessa kone osaa ilmeisesti valita default vastaukset kun asennus tehdään tällä tavalla automatisoituna. Eli käytännössä koko ideani asetuksista oli täysin hyödytön.

Tämän jälkeen yritin vielä muutaman tunnin selailla wiresharkin dokumentaatiota, ja tiedostoja sekä testata erilaisia toimintoja, mutta en löytänyt millään mitään muokattavaa asetusta. Kokeilin esim lisätä omia profileja, mutta en löytänyt tiedostoa, johon nämä tallentuivat.

Monen tunnin tutkimusten jälkeen päätin luovuttaa tässä vaiheessa. Sain kuitenkin wiresharkin asennettuna ja toimimaan nonroot käyttäjänä, minkä alun perin halusinkin, vaikka se olikin aivan liian helppoa.

Lähteet:

Tehtävät: http://terokarvinen.com/2020/configuration-management-systems-palvelinten-hallinta-ict4tn022-autumn-2020/

Nginx asennus: https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

http://nginx.org/en/docs/beginners_guide.html

Wireshark: https://www.wireshark.org/docs/wsug_html_chunked/ChapterIntroduction.html#ChIntroWhatIs

Leave a comment

Design a site like this with WordPress.com
Get started