PupXEGrant: Puppet, PXE ja Vagrant konfiguraatio

Palvelinten hallinta ict4tn022-1 kurssin lopputyö

Kurssin pitäjä: Tero Karvinen
Kurssisivu: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Tehtävä:
Oma moduli, tai kokonaisen koneen tai verkon konfiguraatio. Voi olla jokin työ- tai hupiprojekti, jonka tarvitset muutenkin.

Työn kuvaus

Työ sisältää osia jotka kävimme kurssilla läpi, sekä itse opettelemiani lisäyksiä. Kävimme osat yksi kerrallaan läpi ja tässä työssä tein niistä toimivan kokonaisuuden.

Konfiguraation avulla saan asennettua automaattisesti fyysisiä koneita käynnistämällä ne taikapaketilla, jonka jälkeen palvelimeni antaa kohteille IP-osoitteet DHCP-palvelun avulla ja ohjeet verkkoboottiin. TFTP-palveluni jakaa Ubuntun asennuspaketin kohdekoneille ja preseed sisältää ohjeet käyttöjärjestelmän asennukseen. Preseed sisältää myös ohjeet kohteen provisiointiin Puppet agentiksi.

Kohdekoneen käyttöjärjestelmän asennuttua Puppet asentaa kohteeseen VirtualBoxin ja Vagrantin. Sitten Puppet konfiguroi Vagrantin ja käynnistää sen. Vagrant asentaa virtuaalikoneita, jotka se provisioi shelliscriptillä Puppet agenteiksi. Virtuaalikoneet ottavat lopuksi Puppetmasteriin yhteyden ja saavat käskyn tehdä testitiedosto /tmp hakemistoon.

GitHub

Kaikki tarvittavat asetustiedostot löytyvät GitHubista https://github.com/joonaleppalahti/many-machines

Palvelimen konfigurointi

Asensin ensin Xubuntu 16.04 64-bit työasemalle. Palvelin tarvitsee monta palvelua, joten tein scriptin joka konfiguroi palvelut automaattisesti. Asensin ensin Gitin, jonka avulla kloonasin many-machines repositoryn palvelimelle.

sudo apt-get update
sudo apt-get -y install git
git clone https://github.com/joonaleppalahti/many-machines.git
cd many-machines

Muokkasin asetustiedostot koulun verkkoon sopivaksi, sillä tein testini siellä. Muokattavia tiedostoja oli useita.

Lisätietoa preseedistä, syslinuxista, isc-dhcp-serveristä, dhcpd.conf Palvelinten Hallinta: Harjoitus 8.
Postinstall ja firstboot scripteistä tietoa Palvelinten Hallinta: Harjoitus 9.

Preseed.cfg

Preseedissä vaihdoin proxyn IP-osoitteen palvelimen osoitteeksi, kuten myös tftp palvelimen osoitteen. Käyttäjätunnuksen voi halutessaan vaihtaa.

Syslinux.cfg

Tässäkin vaihdoin IP-osoitteen palvelimen osoitteeksi.

Isc-dhcp-server

Tähän laitoin palvelimen verkkokortin nimen, tässä tapauksessa “eno1”.

Dhcpd.conf

Tässä määrittelin kohdekoneiden MAC-osoitteet, sekä niille annettavat IP-osoitteet. Next-serveriin tuli palvelimen osoite ja muut tiedot muutin vastaamaan nykyistä verkkoa.

Postinstall.sh

Tähän lisäsin taas palvelimen IP-osoitteen.  Tämä vaihe on ilmeisesti turha, sillä “firstinstall” voisi ajaa suoraan preseed vaiheessa. En alkanut muuttamaan asennusta, sillä tämä toimi.

Puppet.conf

Dns_alt_names kohtaan laitoin hostnamen lisäksi palvelimen IP-osoitteen, sillä virtuaalikoneet toimivat omassa verkossaan, eivätkä löydä palvelinta hostnamen perusteella.

provision.sh

Tänne vaihdoin [agent] kohtaan palvelimen IP-osoitteen. Avahi-daemon kohdat ovat turhia, koska käytin suoraan IP-osoitetta.

Init.pp

Jos muokkaa käyttäjätunnusta preseedissä, tulee tämän tiedoston käyttäjänimet muokata vastaamaan sitä.

Muut tiedostot

Serverinstall.sh

Kun sain asetukset kohdalleen, ajoin asennusscriptin.

sudo ./serverinstall.sh

Scriptin sisältö:

#!/bin/bash

sudo cat < /etc/hosts

127.0.0.1 localhost
127.0.1.1 xubuntu PXEMaster

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

EOF

sudo hostnamectl set-hostname PXEMaster
sudo service avahi-daemon restart

filepath=/home/joona/many-machines

sudo cp -rv $filepath/puppet /etc/

sudo apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y puppetmaster wakeonlan isc-dhcp-server tftpd-hpa squid-deb-proxy

sudo cp -v $filepath/isc-dhcp-server /etc/default/
sudo cp -v $filepath/dhcpd.conf /etc/dhcp/

sudo service isc-dhcp-server restart

sudo wget https://atlas.hashicorp.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box -O /etc/puppet/modules/physical/files/precise64.box
sudo wget http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz -O /var/lib/tftpboot/netboot.tar.gz
sudo tar -xvf /var/lib/tftpboot/netboot.tar.gz -C /var/lib/tftpboot/

sudo cp -v $filepath/syslinux.cfg /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/
sudo cp -v $filepath/preseed.cfg /var/lib/tftpboot/ubuntu-installer/amd64/
sudo cp -v $filepath/postinstall.sh /var/lib/tftpboot/
sudo cp -v $filepath/firstboot /var/lib/tftpboot/

echo "done"

Ensin scripti lisää tulevan hostnamen /etc/hosts tiedostoon, jonka jälkeen se vaihtaa hostnamen ja käynnistää avahi-daemonin uudelleen.

Laitoin many-machines hakemiston muuttujaksi, jotta voin yhdellä muutoksella vaihtaa käyttäjänimeä.

Scripti kopioi puppet hakemiston oikealle paikalleen ja sen jälkeen asentaa tarvittavat paketit: puppetmaster, wakeonlan, isc-dhcp-server, tftpd-hpa ja squid-deb-proxy. Dpkg options kohdat varmistavat, että asennus säilyttää olemassaolevat Puppetin asetustiedostot, eikä keskeytä asennusta kysyäkseen siitä.
Proxy Teron vinkistä, myös preseediin lisätty proxy.

Seuraavaksi se kopioi DHCP-palvelun asetustiedostot paikalleen ja käynnistää isc-dhcp-server palvelun uudelleen.

Scripti lataa wgetillä hashicorpin precise64 vagrantboxin ja laittaa sen Puppetin files hakemistoon odottamaan agenteille jakamista. Se hakee myös Ubuntun netboot paketin, jonka jälkeen se purkaa sen tftpboot hakemistoon.

Lopuksi scripti kopioi viimeiset asetustiedostot paikalleen verkkobootille ja sanoo “done”

Päivitys 14.12.2016: experimental.serverinstall.sh

Scripti GitHubissa https://github.com/joonaleppalahti/many-machines/blob/master/experimental.serverinstall.sh

Tein uuden scriptin palvelimen asennukseen, joka automatisoi asetusten määritystä niin paljon kuin osasin. Scriptiä käytettäessä tarvitsee muuttaa many-machines hakemistossa provision.sh tiedostosta IP-osoite ja itse scriptin alusta oletusyhdyskäytävä, sekä kaksi mainintaa verkkokortista. Asennusscriptiin tulee myös lisätä kohdekoneiden MAC-osoitteet dhcpd.conf kohtaan.  Scripti vaatii facterin, joten se tulee asentaa ennen ajamista. Scriptin toiminta ei ole taattua, joten käyttö omalla vastuulla. Alla esimerkki palvelimen konfigurointiin vaadittavista komennoista ja kohdekoneen asennuksesta.

sudo apt-get update && sudo apt-get -y install git facter
git clone https://github.com/joonaleppalahti/many-machines.git
cd many-machines
nano provision.sh
nano experimental.serverinstall.sh
sudo ./experimental.serverinstall.sh
wakeonlan 12:34:56:78:90:ab

Näiden komentojen jälkeen kohdekone lähtee asentumaan.

Testaus

Muokkasin asetukset koulun verkkoon sopiviksi ja kokeilin asennusta yhdelle koneelle. Samalla kun kone asentui, keräsin muiden koneiden MAC-osoitteet. Asennus näytti onnistuneen, joten dhcp.conf tiedoston muokkauksen jälkeen käynnistin loput koneet kerralla wakeonlan komennolla. MAC-osoitteet laitoin peräkkäin, esim:

wakeonlan 78:ac:c0:c0:8e:27 78:ac:c0:ba:7b:63 78:ac:c0:c1:1b:61

Video koneiden käynnistyksestä ja asennuksen alusta. Yksi kone ei aloittanut asennusta, sillä kirjoitin sen MAC-osoitteen väärin dhcp.conf tiedostoon, pikaisen muokkauksen jälkeen sekin aloitti asennuksen. Oikealla alhaalla olevan koneen asensin testiksi, joten se oli jo päällä.

UbuntuInstall.jpg
Tässä vielä kuva kun kaikki koneet asentuvat.

Kävin käynnistämässä tämän luokan lisäksi viereisestä luokasta kaksi konetta.

Tulos

finalcertlist2Crop.pngMietin järkevintä tapaa laskea Puppetmasterin hyväksymät sertifikaatit ja löysin hakemiston, jossa kyseiset sertifikaatit sijaitsevat.

Fyysisiä koneita oli 24 kpl, joilla jokaisella oli 21 virtuaalikonetta. Virtuaalikoneita oli yhteensä 504 kpl. Yhteenlaskettuna Puppetmaster hallitsi 528 agenttia.

sudo ls /var/lib/puppet/ssl/ca/signed | wc -l

Yllä oleva komento laski hakemistossa sijaitsevien tiedostojen määrän. Hakemistossa oli 529 tiedostoa, eli 528 agenttia ja master.

finalphysandvirtualCrop.png
1. Otin satunnaisesti valittuun koneeseen SSH-yhteyden, käyttäen preseedissä asetettua käyttäjätunnusta ja salasanaa.
2. Vagrant global-status näyttää koneelta löytyvät virtuaalikoneet.
3. Koneen muistinkäyttö.
4. Siirryin vagrantinstall hakemistoon ja otin SSH-yhteyden t15 virtuaalikoneeseen.
5. Tarkastin että agentti on saanut masterilta käskyn tehdä testitiedosto.

edit 14.12.2016: lisätty experimental.serverinstall.sh

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: