Tehtäväksi anto:

Säädä orjia verkon yli puppetmasterin avulla (master-slave pull arkkitehtuuri. Jos et pääse käyttämään kahta konetta, voit asentaa herran ja orjan samalle koneelle)

Vapaaehtoinen bonus: tee moduuli, jossa käytät muuttujia muotissa (facter variables, template).

Vapaaehtoinen kilpailu: kuka ohjaa suurinta määrää orjia puppetilla?

Olen päättynyt tehdä tämän tehtävän VitualBox VM:llä. Viime tunnilla opettajamme suositteli käyttämään Xubuntu 16.04 (Xenial) distroa. Latasin sen .ISO:na ja asensin VirtualBox koneseen.

VirtualBox:illa oli pieni ongelma. Se ei antanut asentaa muuta, kun 32-bittisia systeemiä. Piti mennä BIOS:seen ja ottaa käyttöön ”Virtualsization Support”. Sen jälkeen VirtualBox antoi asentaa 64-bit Xubuntu 16.04.1 LTS. Asennettua otin Snapshot puhtaalta koneelta, niin seuraavan tehtävän voi tehdä asentamatta koko järjestelmää uudestaan.

Päivitin paketteja:

$sudo apt-get update

$sudo apt-get install puppet -y

Tuli virheilmoitus. Suosituksessa oli taas päivittää paketteja.

$sudo apt-get update

Nyt ei tullut mitään virhettä, niin käynnistin Puppet asennuksen komennolla:

$sudo apt-get install puppet -y

Puppet vaatii kaikkien juurikansioiden käyttöoikeuksia ja auki olevaa porttia 8140. Pitää muuttaa DNS asetukset tai voi muokata /etc/hosts tiedoston sisältöä.

Käytin opettajamme ohjeita koneen nimen vaihtoon Ubuntu 16.04 LTS:

http://terokarvinen.com/2016/aikataulu-linuxin-keskitetty-hallinta-ict4tn011-10-loppusyksy-2016#comment-21952

$ sudo hostnamectl set-hostname master
$ sudoedit /etc/hosts
$ sudo service avahi-daemon restart

/etc/hosts tiedostossa korjasin nimet toisella rivillä

hosts

Kokeilin ottaa yhteyttä pingillä:

$ping master.local

Ping toimii. Käyn katsomassa nykyiset sertifikaatit

$cd /var/lib/puppet/ssl/  && ls

Permission denied. Otan sudo käyttäjäoikeudet että ei tarvitse joka kerta kirjoittaa sudo ennen komentoa.

$sudo -s

Siitä edellinen komento näyttää puppetin ssl tietoja. Löysin public_keys kansiossa xubuntu.hom.pem nimistä avainta. Ilmeisesti tiedosto oli generoitu puppetin asennusvaiheessa, kun siinä on koneen vanha nimi xubuntu. Avaimia pitää generoida uudestaan.

$service puppetmaster stop

$rm -r /var/lib/puppet/ssl

$sudoedit /etc/puppet/puppet.conf

Muokkasin sen tämän näköiseksi. Koska käytän samaa konetta sekä masterina että slave:ina lisään vielä [agent] kenttän

puppet-conf

Lisäksi slave koneeseen olisi tarkoitus, mutta minä luon tiedoston tähän:

$sudoedit /etc/default/puppet

START=yes

$service puppet restart

Kirjoitan manifest ja module ensin.

$cd /etc/puppet

$mkdir  -p /manifests  modules/aleksandrit/manifests/

$sudoedit manifests/site.pp

include aleksandrit

$sudoedit /etc/puppet/modules/aleksandrit/manifests/init.pp

init.pp.PNG

komennolla tree pääsen katsomaan tuloksen.

tree.PNG

Seuraavaksi pitää hoittaa sertifikaatin ja tässä tuli ylitsepääsemätön tila.

$puppet cert list -all

cert

Yritin allekirjoittaa sertifikaatin monella eri tavalla.

$ puppet cert –sign master.local

ja jopa näin:

$ puppet cert –sign -all

cert-all

Sitten kävin katsomassa lokeja.

$cat /var/log/puppet/masterhttp.log

Kun käynistän manifestin näin:

$puppet apply -e ‘class {“aleksandrit”:}’

niin se suorittaa sen, eli virhe ei ole tässä. (poistin tiedoston /tmp/Mastertest)

master.home onnistuin hyväksymään, mutta se ei auta kunn asetuksissa on master.local, sitten vielä master.home ei näy jopa pingillä niin siitä ei ole apua.

korjaus.PNG

Kokeilin taas poista koko /var/lib/puppet/ssl ja hakea sertifikaatia master.local…. Ei auta. 🙁

Kokeilen tulla huomenna kouluun aikaisin aamulla ja tehdä kahdella koneella.  Oppitunnilla meillä oli ongelmia just tässä kohdassa, siellä allekirjoitimme sertifikaatin käyttämällä eri FQDN:ää kun master.local. Kotikoneella en saa tehtyä näin.

Heräsin aamulla klo 5.30 täynnä toivoa että saan sen tehtävän valmiksi ennen tunnin alkua klo 8.15

Käynistin kaksi läppäriä tikuilta Xubuntu 16.04.01 LTS. Laitoin molemmat samaan WiFi verkkoon. Tein samat asennukset kun ylhällä mainitsin, paitsi se mitä oli slave koneeseen asennettava asensin slave:ille, mitä master tuli master:ille.

Edistyin yksi vaihe lisä mutta ei kuitenkaan loppuun asti. Sian sertifikaatin allekirjoitettua hyväksymällä sen:

$sudo puppet cert –sign slave.pp.htv.fi

cert2

screenshot_2016-11-09_05-09-20

Tunnilla sain selville missä oli virhe. Seuraavana päivänä käynnistin h5005 Labran vierekkäiset tietokoneet USB-Live Xubuntu 16.04 LTS:llä ja aloitin alusta asti uudestaan. Jossan sertifikaatin hyväksyntä vaiheessa taas jäin jumiin.

Puppetmaster tehtävän manifesti:

master$sudoedit /etc/puppet/modules/aleksandrit/manifests/init.pp

class aleksandrit {
file {‘/tmp/mastertest’:
content => “PLEASE VISIT: http://gomummi.com \n”
}
}

Päätin käyttää tree daemonia selvitäkseen mitä on /var/lib/puppet/ssl kansiossa:ssa

tree

Unohdin käynnistää puppetmaster master koneella, siinä oli se virhe…

Käynistin slave koneella puppet agent ja sertifikaatin pyyntö saapunut masterille

slave$sudo puppet agent –enable

tree2

käynistin uudelleen puppet slave koneella ennen sertifikaatin hyväksymistä ja sen jälkeen.

result-new.png

Kansioon /tmp ilmestyi mastertest tiedosto.

MISSION SUCCESSFULLY COMPLETED!!!

Tehtäväksi anto: Tee moduuli, joka käyttää vähintään kahta erityyppistä resurssia (esim package ja file).

Bonus: tee moduuli jollekin käyttämällesi ohjelmalle.

Linkki palautetaan Moodleen, lisäksi kannattaa laittaa linkki kommentiksi tälle sivulle.

Aloitan tekemään tehtävää luomalla Digital Ocean Dropletin Ubuntu 14.04.5  millä tulen tarkistamaan Puppet moduuleita. Oikean syntaksin tiedostoja löytyy kuitenkin tästä:  https://github.com/xelsinki/puppet Otan yhteyttä koneeseen Putty:lla.

Kirjauduin koneeseen. Jatkan vielä root tunnuksilla asennukset ja Puppet moduuleiden tarkistuksen. (Jos käyttää muu, kun root tunnuksen jotkut komennot pitää aloittaa sudo:lla) Alkuun päivitän paketteja komennolla:

apt-get update

Asennan puppet komennolla:

apt-get install puppet

Asennuksen lopussa tuli ilmoitus:

* Starting puppet agent [ OK ]

Asennus on valmis, puppet on käynnistetty. Teen tiedoston tekstillä Hello Tero! komennolla:

puppet apply -e ‘file { “/tmp/helloPuppet”: content => “Hello Tero!\n” }’

Tuli virheilmoitus joka koskee FQDN ja ilmoitus että tiedosto on luotu.

 

wirhe

Googlamalla sain selville, että puppet vaati kokonaista domain nimeä. Tämä ei mitenkään vaikuta tehtävän etenemiseen, niin päätin jatkaa. Tarkistan kuitenkin samaa VirtualBox VM:llä.

Toisella koneella se toimii. Sama komento VirtualBox:iin asennetulla Xubuntulla antaa seuraavan vastauksen:

FQDN.PNG

Kävin tarkistamassa sitä komennolla:

cat /tmp/helloPuppet

Ruudulle ilmestyi teksti Hello Tero! ja rivi vaihtunut uuteen.

Muokataan vähän. Poistan /n rivinvaihto:

puppet apply -e ‘file { “/tmp/helloPuppet”: content => “Hello Tero!” }’

Muokkaus.PNG

Content changed. Ja uusi tarkistussumma. Rivi ei ole vaihdettu.

Siirrytään moduuleihin. Luon kansioon /etc/puppet/modules/ uusi kansio ja tiedosto init.pp

mkdir /etc/puppet/modules/puppetka/manifests/

cd /etc/puppet/modules/puppetka/manifests/

nano init.pp

Ja kirjoitan tiedostoon:

class puppetka {
        file { ‘/tmp/helloModule’:
            content => “This is a PUPPET!!!\n”
        }
}

Tallensin tiedoston ja käynnistän sen komennolla:

puppet apply  -e ‘class {“puppetka”:}’

Tuli ilmoitus, että tiedosto on luotu. Tarkistin sen cat:illä

valmis-1

Manifestit luodaan tiettyyn kansioon /etc/puppet/modules/class/manifests/init.pp , jossa class on manifestin nimi.

Luettua yhtä venäjänkielistä sivua sain selville, että pystyy vielä tekemään näin. Luomaan manifest suoraan tiedostoon.

nano /tmp/helloworld.pp

file { '/tmp/helloworld':
  ensure => present,
  content => 'Hello, world!',
  mode => 0644,
  owner => 'alex',
  }

Ja käynnistää sen komennolla:

puppet apply helloworld.pp

rus

Tämä oli taas tehty Virtual Box VM:llä. Ei tule ilmoitusta FQDN:stä vaan näyttää ubuntu.pp.htv.fi eli näyttää koko domainnimen: ubuntu.{minun kotiNetti – kaapeli DNA} Eli tuo virheilmoitus FQDN:stä koskee DigitalOcean VPS:än nimipalvelua.

Jatkan Digital Ocean VPS:llä.. Teen apache2 asennus-manifestin.

manifest/apache.pp sisältää:

apache-pp

Tässä näy miten olen luonnut sen ja käynnistänyt.

Module.PNG

Tuli virheilmoitus. Kokeilin mennä web-selaimella VPS:n ip-osoitteseen. Apache oli päällä. Ilmeisesti tätä parempi tehdä just EI-Venäläisen tapaan mukaan. Mutta kokeilen sen huomenna aamulla.

Sain sitten selville, että Tero opettaa meidät tekemään “crossdistributiivisesti” eli niin että asiat toimivat käyttöjärjestelmästä riippumatta. Ja niin että kaikki manifestit ovat omassa paikassa eikä tarvitse joka kertaa mainita polkua manifestiin.

Aamusta asensin VMwaren Workstation 12 (Haaga-Helia:n opiskelijana sain ilmaisen lisenssin vuodeksi), asensin sinne Xubuntu 14.04.3 ja otin heti snapshotin. Jatkossa on helpompi tarvittaessa aloittaa ihan puhtaalta pöydältä.  Sitten luin muutamaa julkaisua Puppetista ja vilkaisin dokumentaatiota.

Resurssit: https://docs.puppet.com/puppet/3/reference/lang_resources.html

Syntax: https://docs.puppet.com/puppet/3/reference/lang_resources.html#syntax

Resurssien tyypit: https://docs.puppet.com/puppet/latest/reference/type.html

Package atribuutit: https://docs.puppet.com/puppet/latest/reference/type.html#package-attributes

Riippuvuudet: https://docs.puppet.com/puppet/3/reference/lang_relationships.html

Pysyn olemaan kopioiva apina, ellei aloitan lukea kunnon dokumentaatiota. Siinä selitetään jokaisen polun ja pilkun.

Minun uusi puppet manifest sshd:

class sshd {

    package { ‘openssh-server’:
            ensure => “installed”,
       }

    file { ‘/etc/ssh/sshd_config’:
        content => template(“sshd/sshd_config”),
        require => Package[“openssh-server”],
        notify => Service[“ssh”],
    }

    service { ‘ssh’:
            ensure    => running,
            enable    => true,
            
            require => Package[“openssh-server”],
        hasstatus => ‘false’,
        status =>”/etc/init.d/ssh status|grep running”,
        
    }
}

Heti se ei toiminut, vaan vaatinut että luodaan templates/sshd_config   kun tähän koodissa väitetään. Sitten koodi alkanut toimimaan ilman virheilmoitusta. Kun laitoin koodi-tiedoston GitHub:iin https://github.com/xelsinki/puppet/blob/master/init.pp , niin väreistä huomasin puutuvat lainausmerkit yhdestä paikasta. Korjasin koodin ja ajanut sen uudelleen.