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.
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
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
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
.
auf allen Clients soll der SSH-Dienst gestartet werden:
Datei mit erforderlichen Verzeichnissen /etc/puppet/environment/it/modules/ssh/init.pp
erstellen.
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:
…
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],} class {sshd:} ... }
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.
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 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:
…
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],} class {cron:} ... }
auf allen Clients soll der Benutzer root_xy erstellt werden:
Datei mit Verzeichnissen /etc/puppet/environment/it/modules/user/init.pp
erstellen.
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:
…
node 'clientsuse67' { class { '::ntp': servers => ['myntpsrv'],} class {user:} ... }
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:
Warning: Deprecation notice: Node inheritance is not supported in Puppet >= 4.0.0. See http://links.puppetlabs.com/puppet-node-inheritance-deprecation
Behebung: