Puppet: Update Debian Wheezy auf puppetlabs Pakete

Ich habe auf allen meinen Servern puppet auf die Version von puppetlabs aktualisiert. Dafür habe ich folgende Schritte durchgeführt:

  1. Herunterladen der puppetlabs-release-wheezy.deb von apt.puppetlabs.com und Installation auf dem Node:
    cd /tmp
    wget http://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
    dpkg -i puppetlabs-release-wheezy.deb
    aptitude update && aptitude safe-upgrade
  2. Auf dem puppetmaster musste ich noch ein aptitude dist-upgrade durchfühhren
  3. Ich hatte das Paket libaugeas-ruby1.8 installiert was zu Problemen führte. Deswegen:
    aptitude install libaugeas-ruby && aptitude purge libaugeas-ruby1.8
  4. Die Einstellung templatedir in der puppet.conf ist deprecated und führt zu entsprechenden Warnungen wenn der agent läuft. Mit dem folgenden Snippet in meinem basics Modul habe ich es entfernt:
      augeas { 'puppet.conf':
        context => '/files/etc/puppet/puppet.conf',
        changes => [
          'rm main/templatedir',
        ],
        notify  => Service['puppet'],
      }
  5. Das Monitoring des Puppetmasters wie in dem verlinkten Blogeintrag beschrieben schlug mit einem HTTP 403 fehl. Die Ursache lag in einer Änderung der Syntax in der auth.conf. Dort muss nun anstatt allow 1.2.3.4 ein allow_ip 1.2.3.4 stehen.

Puppet: Aufsetzen der Infrastruktur

Durch die Arbeit inspiriert, habe ich nun auch fuer mich Privat einen puppet Server zur Verwaltung meiner virtuellen Maschinen aufgesetzt.

Wikipedia schreibt zu puppet:

Puppet ist ein Tool zum Konfigurationsmanagement von Computern mit Betriebssystemen 
wie Unix, Linux und FreeBSD. Ein IT-Administrator kann damit an zentraler Stelle 
die Konfiguration von Rechnern in seinem Netzwerk verwalten. Puppet eignet sich 
sowohl für einzelne Rechner als auch für große Rechnerverbünde

Als erstes wurde die generelle Infrastruktur aufsetzen. Das bedeutet fuer mich:

  1. Einen puppet master Server zu haben
  2. Auf den Clients einen puppet agent laufen zu haben der mit dem Master verbunden ist.

Alles hier beschriebene passiert auf der Basis von Debian wheezy. Auf dem Server der als puppet master dienen soll habe ich zuerst das entsprechende Paket mit seinen Abhaengigkeiten installiert:

sudo aptitude install puppetmaster

Anschliessend habe ich in der /etc/default/puppetmaster den Parameter START=yes gesetzt. Wichtig ist nun noch sicherzustellen, dass der Port 8140 von den Clients aus erreichbar ist.

Danach habe ich auf den Clients den puppet agent installiert:

sudo aptitude install puppet

Auch hier habe ich in der /etc/default/puppet wieder den Parameter START=yes gesetzt. Weiter habe ich in den DAEMON_OPTS den Parameter zu dem Server angegeben. Beispiel:

--server puppetmaster.example.org

Dann habe ich probiert mich mit dem puppet agent an den puppet master Server zu verbinden:

puppet agent --server puppetmaster.example.org --test

Auf dem puppet master konnte ich danach das unsignierte Zertifikat des Clients mit dem folgenden Befehl sehen:

puppet cert list

Danach musste es mit dem folgenden Befehl signiert werden, wobei puppetclient.example.org der FQHN des puppet clients ist:

puppet cert sign puppetclient.example.org

Alle signierten Zertifikate kann man sich uebrigens mit dem folgenden Befehl anzeigen lassen:

puppet cert list --all

Danach konnte ich den puppet agent auf dem Client erneut laufen lassen und die Verbindung war erfolgreich. Zum Ende das neu starten des puppet agents auf den Clients nicht vergessen, damit der Prozess mit den neuen DAEMON_OPTS laeuft.

Notizen:

  • Wenn es zu einer „Connection refused“ Fehlermeldung wie unten gezeigt kommt, sicherstellen, dass der Port erreichbar ist. Eventuell auch erst einmal ausprobieren mit der IP Adresse auf dem Port zu verbinden (telnet IP PORT)
    root@host:~# puppet agent --test --server puppetmaster.example.org
    err: Could not retrieve catalog from remote server: Connection refused - connect(2)
    warning: Not using cache on failed catalog
    err: Could not retrieve catalog; skipping run
    err: Could not send report: Connection refused - connect(2)
    root@host:~#
    
  • Wenn es zu einer „Server hostname did not match server certificate“ Fehlermeldung kommt, dann kann es helfen fuer den Server einen entsprechenden Eintrag in die /etc/hosts zu packen
    root@host:~# puppet agent --test --server 192.168.1.100
    err: Could not retrieve catalog from remote server: Server hostname '192.168.1.100' did not match server certificate; expected one of puppetmaster.example.org, DNS:puppet, DNS:puppet.example.org, DNS:puppetmaster.example.org
    warning: Not using cache on failed catalog
    err: Could not retrieve catalog; skipping run
    err: Could not send report: Server hostname '192.168.1.100' did not match server certificate; expected one of puppetmaster.example.org, DNS:puppet, DNS:puppet.example.org, DNS:puppetmaster.example.org
    root@host:~#