Puppet kasutamine

Allikas: Kuutõrvaja

Sissejuhatus

Puppet (ingl. k. nukk) http://reductivelabs.com/products/puppet/ võimaldab korraldada arvutite tarkvara ja seadistuste automatiseeritud haldust. Puppet on programmeeritud Ruby keeles.

Puppet on põhimõtteliselt konfiguratsioonihaldusvahend, mis võimaldab masina konfiguratsiooni kirja panna deklaratiivsel moel

Tööpõhimõte

                  _____
                 |     | puppetmasterd (puppet.zoo.tartu.ee)
                 |_____| 8140/tcp
                    |
                    |
            ---|----|-------|------------|---
               |            |            |
             __|__        __|__        __|__
            |     |      |     |      |     |  puppetd
            |_____|      |_____|      |_____|  8139/tcp
             
             test1        test2        test3.zoo.tartu.ee
                       puppet kliendid
  • Puppetmaster (ingl. k. nukujuht) sisaldab klientide tarkvara ja seadistuste kirjeldust
  • Kliendid teavad oma puppetmasteri aadressi
  • Puppetmasteri ja klientide andmevahetus toimub üle 8140/tcp ja 8139/tcp pordi, kusjuures klient saab küsida serverilt muudatusi ja server saab saata kliendile muudatusi
  • Andmevahetus on turvatud x509 sertifikaatide kasutamise abil

Puppet eeldab DNS nimede lahendumist, kui DNS serverit pole võib hädapärast kasutada ka hosts faili masinate kirjeldamist.

Eesmärk

Käesolevas tekstis kirjeldatakse selliste omadustega asjakorralduse juurutamist

  • Kliendid kopeerivad Puppetmasterilt automaatselt seadistusi
  • Puppetmaster saab saata klientidele seadistusi

Lisaks esitatakse, kuidas seadistada Puppet süsteem

  • kasutama Apache veebiserverit, mis võimaldab paremat käideldavust ning paindlikumat sertifikaatide kasutamist
  • kasutama klientide andmete hoidmiseks LDAP kataloogi

Tarkvara paigaldamine

Puppetmasterile ja Puppetitele tuleb paigaldada erinev tarkvara. Omakorda, seda tarkvara saab reeglina paigaldada kahel viisil

* operatsioonisüsteemi paketihaldusest 
* Ruby paketihaldusest

Debian Lenny

Operatsioonisüsteemi paketihaldusest

Puppet serverile ehk puppetmasterile tuleb paigadada pakett puppetmaster

 # apt-get install puppetmaster

Puppet kliendile tuleb paigaldada pakett puppet ja puppet-common

 # apt-get install puppet puppet-common
Ruby paketihaldusest
 # apt-get install rubygems

Gems süsteemi kasutamise kohta näeb näiteid öeldes

 # gem help examples

Puppet paigaldamiseks sobib öelda

 # gem install puppet

OpenBSD

OpenBSD 4.6 jaoks on olemas binaarse paketina Puppet tarkvara v. 0.24.4, mille paigaldamiseks sobib öelda

 # pkg_add ruby-puppet
 ruby-1.8.6.369p0:  complete
 ruby-facter-1.5.0: complete
 ruby-puppet-0.24.4p1: complete

Tulemusena paigaldatakse

  • /etc/puppet - seadistusfailid
  • /usr/local/share/examples/ruby-puppet - näited

Ruby Gems süsteemi abil tarkvara paigaldamine

 # gem query --local
 
 *** LOCAL GEMS ***
 
 facter (1.5.7)
 puppet (0.24.7)

FreeBSD

Üks võimalus on installida ruby-gems pakett /devel/ruby-gems ja anda käsk gem install puppet Kuid kna sellega millegpärast ei tulnud default konfifaile on targem paigaldada see portsudes sysutils/puppets harust

Puppeti startimiseks peale booti tuleb rc.conf'i lisada read

puppetd_enable="YES"
puppetmasterd_enable="YES"

konfiguratsioonid nagu puppet.conf näidis asuvad kaustas /usr/local/etc/puppet/

http://reductivelabs.com/trac/puppet/wiki/PuppetFreeBSD

Puppetmasteri ettevalmistamine Debianis

Puppetmasteri protsess töötab privilegeerimata kasutajana ja tema tööd juhivad seadistusfailid

  • /etc/puppet/puppet.conf
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
pluginsync=false

[puppetmasterd]
templatedir=/var/lib/puppet/templates
  • /etc/puppet/fileserver.conf
 [files]
   path /etc/puppet/files
   allow 192.168.10.0/24

Puppetmasteri konf

Järgnevalt tekitame seadistuse, mis paigaldab kõigile kolmele kliendile Apache veebiserveri, php openssh serveri ja teeb klientides veel muud pisemaid häälestusi.

Vaikimisi töötab Puppet süsteem nii, et ca paar korda tunnis pöördub klient Puppetmasteri poole ja kui on asjakohaseid muudatusi, siis võetakse need kasutusele.

Puppeti keel on deklaratiivne, seega ei ole kirjelduste järjekorral failis erilist tähtsust. Samuti üritab puppet ise leida mõistlikuima toimingute järjekorra.

Järgnevalt teeme kõik muudatused failis:

  • /etc/puppet/manifests/site.pp
 # Apache paigaldamiseks
 class apache {
   package { ["apache2", "apache2-mpm-prefork"]:
     ensure => latest,
   }
 
   file { "apache2.conf":
     path   => "/etc/apache2/apache2.conf",
     ensure => present,
     mode   => 0644,
     source => "puppet:///files/test_apache.conf",
   }
 
   service { "apache2":
     ensure    => running,
     subscribe => File["apache2.conf"],
   }
 }
 
 # NB! Kui asendada klientmasinas apache2 seadistusfail siis muudab puppet selle tagasi.
 
 #SSH paigaldamiseks
 class ssh {
   package { ["openssh-client", "openssh-server"]:
     ensure => latest,
   }
 
   service { "ssh":
     ensure    => running,
   }
 }
 
 #Ensure running tähendab, et puppet kontrollib ssh deemoni töötamist ja vajadusel stardib selle   uuesti.
 
 # Php paigaldamiseks :
 class php {
   package { ["libapache2-mod-php5", "php5-cli"]:
     ensure => latest,
   }
 }
 
 #Ja lõpuks võib kliendi defineerida ja lisada talle kõik loodud klassid
 node 'test-zoo.tartu.ee' {
     include apache
     include ssh
     include php
 }

Kui masinatel sarnased nimet nt test1, test2, test3 jne võib nad defineerida järgnevalt:

node /^test\d+\.zoo\.tartu\.ee/ {
    include apache
    include php
    include ssh
}

Apti regulaarseks uuendamiseks vṍib veel seadistada:

    exec { "/usr/bin/apt-get update":
	subscribe => File["/etc/apt/sources.list"],
    }

Puppet kliendi ettevalmistamine

Selleks, et Puppeti kliendi protsess saaks teha vajalikke muudatusi töötab ta juurkasutajana ja tema tööd juhivad sellised failid

  • /etc/puppet/puppet.conf
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
# pluginsync=true
templatedir=$confdir/templates

server=puppet.zoo.tartu.ee
listen=true
report=true
  • /etc/puppet/auth.conf
path /
allow puppet.zoo.tartu.ee
  • /etc/puppet/namespaceauth.conf
[puppetrunner]
   allow *

Puppet peale rebooti vaikimisi startima:

cat > /etc/default/puppet <<-EOF
# Defaults for puppet - sourced by /etc/init.d/puppet

# Start puppet on boot?
START=yes

# Startup options
DAEMON_OPTS=""
EOF

Kliendi registreerimine Puppetmasteris

Klient saadab puppetmasterile oma sertifikaadi taotluse. Taotluse nägemiseks tuleb puppetmasteris öelda:

 # puppetca -l
 test1.zoo.tartu.ee

Taotluse signeerimiseks tuleb öelda

 # puppetca -s test1.zoo.tartu.ee
 Signed test1.zoo.tartu.ee

Puppetmaster ja puppet kliendid hoiavad oma andmeid kataloogis

  • /var/lib/puppet

Kliendi sertifikaadi eemaldamiseks sobib öelda

 # puppetca --clean test1.zoo.tartu.ee
 Removing /var/lib/puppet/ssl/ca/signed/puppet-1.auul.pem

Klient pöördub vaikimisi mõned korrad tunnis automaatselt puppetmasteri poole ja kui on, saab uuendusi. Teine variant on kliendile öelda stop ja start

# /etc/init.d/puppet stop
# /etc/init.d/puppet start

Taustal tasub jälgida logi failis /var/log/daemon.log.

Puppetmasteri kasutamine koos Apache veebiserveriga

Puppetmasterit on mõttekas kasutada koos Apache veebiserveriga sellistel kaalutlustel

  • suurem jõudlus
  • paindlikum sertifikaatide haldus, nt eraldi PKI haru sub CA suhtes antud puppeti hostide sertide jaoks
  • saab moodustada parema käideldavusega süsteemi, nt kasutada mitut puppetmasteri eksemplari

Lisaks Apache veebiserverile tuleb paigaldada Mongrel tarkvara, mis esineb Ruby teekide kujul

# apt-get install apache2 mongrel

Kasulikud lisamaterjalid

Puppetmasteri seadistamine

Erinevalt nö vanilla seadistusega Puppetmasterist tuleb antud juhul teha seadistusfaili /etc/default/puppetmaster kaks täiendust

SERVERTYPE=mongrel
PORT=18140

Apache seadistamine

Sobib kasutada nt sellist veebiserver seadistusfaili

ProxyRequests Off

<Proxy balancer://puppetmaster>
   BalancerMember http://127.0.0.1:18140
</Proxy>

<VirtualHost 10.0.9.227:8140>
   SSLEngine on
   SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
   SSLCertificateFile /var/lib/puppet/ssl/certs/fai-9-227.loomaaed.pem
   SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/fai-9-227.loomaaed.pem
   SSLCertificateChainFile /var/lib/puppet/ssl/certs/ca.pem
   SSLCACertificateFile /var/lib/puppet/ssl/certs/ca.pem
   SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
   SSLVerifyClient optional
   SSLVerifyDepth  3
   SSLOptions +StdEnvVars

   RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
   RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e

<Location /balancer-manager>
  SetHandler balancer-manager
  Order Allow,Deny
  Allow from 172.19
</Location>

<Location />
  SetHandler balancer-manager
  Order allow,deny
  Allow from all
 </Location>

ProxyPass /balancer-manager !
ProxyPass / balancer://puppetmaster:8140/
ProxyPassReverse / balancer://puppetmaster:8140/
ProxyPreserveHost on

</VirtualHost>

puppet-dashboard

TODO

Puppetmasteri kasutamine koos LDAP kataloogiga

Misc

TODO

ralsh

 # ralsh user ntp
 user { 'ntp':
     password => '*',
     shell => '/bin/false',
     uid => '106',
     home => '/home/ntp',
     gid => '110',
     ensure => 'present'
 }

Facter

 # facter 
 architecture => amd64
 domain => auul
 facterversion => 1.5.1
 fqdn => puppet-1.auul
 hardwareisa => unknown
 hardwaremodel => x86_64
 hostname => puppet-1
 id => root
 interfaces => eth0
 ipaddress => 192.168.10.181
 ipaddress_eth0 => 192.168.10.181
 kernel => Linux
 kernelrelease => 2.6.26-2-amd64
 kernelversion => 2.6.26
 macaddress => 70:01:68:01:01:81
 macaddress_eth0 => 70:01:68:01:01:81
 ...

Puppeti kasutamine Windowsiga

package { 'mysql':
  ensure => installed,
  provider => 'msi',
  source => 'N:\\packages\\mysql-5.5.16-winx64.msi',
  install_options => { 'INSTALLDIR' => 'C:\\mysql-5.5' },
}
service { 'mysql':
  ensure => 'running',
  enable => true,
}

Flashi MSI http://www.adobe.com/special/products/flashplayer/fp_distribution3.html


7zip acrobat reader ac3filter ffdshow vlc msn firefox java

Kasulikud lisamaterjalid