Puppet
Programm zum Hostmanagement von Linuxclients, egal ob Debian,Ubuntu oder SUSE.
Es besteht aus einer Serverkomponente und einem Client.
Auf dem Server werden die Konfigurationen vorgegeben, die der Client in bestimmten Zeitabständen abruft und ausführt.
Ein bisschen wie die GPOs auf Windowsseite.
Server-Installation
der dedizierte Server muss wegen verschiedener Zertifikate im DNS-System auflösbar sein.
als root:
apt-get install puppetmaster
in der Datei /etc/default/puppetmaster
muss START=yes
gesetzt sein.
um verschiedene getrennte Umgebungen für z.B. mehrere Abteilungen verwalten zu können muss mit Environments
gearbeitet werden.
Beispielkonfigurationsverzeichnis /etc/puppet/
für eine IT-Abteilung und eine Entwicklungsabteilung: IT, Entw :
puppet.tar.gz
durch sie werden alle Clients die in der Datei /etc/puppet/environments/it/manifests/site.pp
verzeichnet sind, mit dem ntp-Dienst installiert und
als ntp-server werden die Server mytimesrv1
und mytimesrv2
in die Datei /etc/ntp.conf
geschrieben.
Bei Änderungen werden diese nach ca 30 Minuten auf die Clients verteilt.
weitere [main]-Einstellungen:
alle alternativen DNS-Namen unter dem der Server im Zertifikat erreichbar ist:
dns_alt_names = puppet, mypuppetsrv, mypuppetsrv.my.dom.ain
eigenes IT-Serverenvironment:
environment = it
weitere [master]-Einstellungen:
alle Clients die kommen, sollen automatisch signiert werden.
autosign = true
Client-Installation
z.B. auf einem Debian als root:
apt-get install puppet
in der Datei /etc/default/puppet
muss START=yes
gesetzt sein und der Dienst gestartet sein.
in der Datei /etc/puppet/puppet.conf
müssen die zwei Einträge gemacht werden:
[main]
...
environment = it
server = mypuppetsrv.my.dom.ain
...
Installation auf einem Windowsclient:
msiexec /qn /norestart /i puppet-x64-latest.msi PUPPET_MASTER_SERVER=mypuppetsrv.my.dom.ain PUPPET_AGENT_ENVIRONMENT=it
manuell kann man die Synchronisation erzwingen durch:
puppet agent config -t
Datei pushen
Beispiel für zwei Dateien (testdatei2.txt+testdatei3.txt)
Um eine Datei auf die Clients zu verteilen muss folgendes durchgeführt werden:
Ein Verzeichnis muss einmalig erstellt und berechtigt werden:
mkdir -p /etc/puppet/environments/it/files
chown -R puppet:puppet /etc/puppet/environments/it/files
chmod g+w puppet:puppet /etc/puppet/environments/it/files
die auf die Clients zu replizierende Datei muss dann in diesem Verzeichnis erstellt (oder kopiert) werden:
echo "dies ist ein Test" >> /etc/puppet/environments/it/files/testdatei.txt
diese Datei muss einmalig editiert werden: /etc/puppet/fileserver.conf
:
...
[files_it]
path /etc/puppet/environments/it/files
allow *
...
diese Datei muss editiert werden: /etc/puppet/environment/it/manifests/site.pp
:
…
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],}
file {'/tmp/testdatei2.txt': source => 'puppet:///files_it/testdatei.txt', }
file {'/tmp/testdatei3.txt': content => 'blabla', }
}
jetzt kann man den Client clientsuse67
manuell veranlassen, sich zu synchronisieren:
puppet agent config -t
Auf Diesem sollten jetzt im Verzeichnis /tmp zwei Dateien auftauchen: testdatei2.txt
und testdatei3.txt
.
SSH-Dienst starten
auf allen Clients soll der SSH-Dienst gestartet werden:
Datei mit erforderlichen Verzeichnissen /etc/puppet/environment/it/modules/ssh/init.pp
erstellen.
- init.pp
class sshd {
package {"openssh-server":
ensure => latest,
}
service { "ssh":
ensure => running,
enable => true,
require => Package['openssh-server'],
}
}
diese Datei muss editiert werden: /etc/puppet/environment/it/manifests/site.pp:
…
- site.pp
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],}
class {sshd:}
...
}
Cron-Dienst starten
auf allen Clients soll der cron-Dienst gestartet werden:
Der Dienst ssh soll auf allen Clients jeden abend 20 Uhr gestoppt und morgens 6 Uhr wieder hochgefahren werden.
Datei mit erforderlichen Verzeichnissen /etc/puppet/environment/it/modules/cron/init.pp
erstellen.
- init.pp
class cron {
package { "cron": ensure => installed, }
file { "/etc/cron.d/cron-ssh":
source => "puppet:///files_it/cron/cron-ssh",
owner => "root",
group => "root",
mode => 644,
}
}
Datei /etc/puppet/environment/it/files/cron/cron-ssh
:
- cron-ssh
# cron jobs zum stoppen von ssh in der Nacht / rb / 2014 #
0 20 * * * root /etc/init.d/ssh stop
0 6 * * * root /etc/init.d/ssh start
diese Datei muss editiert werden: /etc/puppet/environment/it/manifests/site.pp:
…
- site.pp
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],}
class {cron:}
...
}
einen Benutzer verteilen
auf allen Clients soll der Benutzer root_xy erstellt werden:
Datei mit Verzeichnissen /etc/puppet/environment/it/modules/user/init.pp
erstellen.
- init.pp
class user {
user { "root_xy":
ensure => present,
password => '$6$WKS6A1MBUq9$RgSPsC2GyEKnEPrvllVAQaBhTwIpVburs8Q64rR4.xMiWmYn.ZE8OjnLPihOb7O.vHIozHFFxBiAHBYA2z.lP1',
home => '/home/root_xy' ,
gid => '0',
#uid => '0',
# wenn der Benutzer die selbe UID erhalten soll dann dass hier noch:
exec { "usermod -u 0 -o root_xy":
path => "/usr/local/bin/:/bin:/usr/sbin",
logoutput => "on_failure",
}
}
}
diese Datei muss editiert werden: /etc/puppet/environment/it/manifests/site.pp:
…
- site.pp
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],}
class {user:}
...
}
sonstiges
auf dem Server:
alles als root:
puppet cert list --all
puppet cert sign --all
puppet cert clean --all
puppet config print
puppet config print manifest --section server --environment myenv
puppet parser validate
puppet module list
puppet module generate meinTest/meinBenutzername
puppet master --configprint basemodulepath
puppet master --configprint environmentpath
auf dem Client:
puppet config print
puppet agent config -t
#puppet alle Stunde laufen lassen:
puppet agent --configprint all
puppet agent --configprint runinterval
#/etc/puppetlabs/puppet/puppet.conf:
[agent]
runinterval = 3600
#runinterval = 7h
Fehler
Module