Puppet: Konfiguration in GIT Repository verwalten / push-to-deploy

Es ergibt Sinn die puppet Konfiguration in einem GIT Repository zu verwalten. So kann man immer auf alte Versionen zurueckgehen sowie automatische Pruefungen zwischenschalten bevor man Aenderungen Live schaltet. Sexy wird das ganze mit push-to-deploy. So wird es gemacht:

Vorbereitungen auf dem puppet server

mkdir -p /srv/git/puppet
cd /srv/git/puppet
git init --bare
addgroup puppet-push
chgrp -R puppet-push /srv/git/puppet
find /srv/git/puppet -type d -exec chmod 0775 {} ;
find /srv/git/puppet -type d -exec chmod +s {} ;
chgrp -R puppet-push /etc/puppet
chmod 775 /etc/puppet

Damit mein Benutzername auch in das GIT Repository schreiben darf muss dieser Mitglied in der Gruppe puppet-push sein:

adduser USERNAME puppet-push

Nun benoetigen wir zwei Hooks in dem Repository. Einen update Hook der die Syntax ueberprueft, und ein post-receive Hook, der bei Bedarf die gepushten Dateien gleich an die richtige Stelle kopiert:

cd /srv/git/puppet/hooks/
wget http://git.pregos.info/scripts.git/blob_plain/HEAD:/push-to-deploy/update
chmod +x update
http://git.pregos.info/scripts.git/blob_plain/HEAD:/push-to-deploy/post-receive
chmod +x post-receive

Anschliessend sind auf Server Seite keine weiteren Aenderungen mehr notwendig.

Vorbereitungen auf dem lokalen Rechner

Bei sich lokal auf dem Rechner muss man nun ein Verzeichnis erzeugen, die aktuellen Dateien vom puppetmaster.example.org:/etc/puppet dorthin kopieren, GIT Repository initialisieren und committen:

mkdir ~/puppet
cd ~/puppet
scp user@puppetmaster.example.org:/etc/puppet .
git init
git add .
git commit -m "initial commit"

Nun noch das remote Repository hinzufuegen und pushen:

git remote add live user@puppetmaster.example.org:/srv/git/puppet
git push live master

Wenn alles richtig ist, dann ist die Ausgabe in etwa wie folgt:

user@client:~/git/puppet$ git push live master
Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (16/16), done.
Writing objects: 100% (22/22), 4.91 KiB | 0 bytes/s, done.
Total 22 (delta 2), reused 0 (delta 0)
remote: fatal: bad object 0000000000000000000000000000000000000000
remote: 
remote: diff-tree:
remote: Already on 'master'
remote: DEPLOY: master(bd01768f198a2513ba82f5f8765b4b222908ce4b) copied to '/etc/puppet'
To user@puppetmaster.example.org:/srv/git/puppet
 * [new branch]      master -> master

Syntaxfehler fuehren dazu, dass die Aenderungen nicht uebernommen werden:

user@client:~/git/puppet$ git push live master
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 328 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: 
remote: diff-tree:
remote: :100644 100644 c31414e094fbbf3af3792965f2f706ede6a70d24 f47cd2be9c7b3a9d4e23b885b2252ac0579319d2 M	manifests/site.pp
remote: 
remote: err: Could not parse for environment production: Syntax error at end of file; expected '}' at manifests/site.pp:6
remote: err: Try 'puppet help parser validate' for usage
remote: For more details run this:  git diff c31414e094fbbf3af3792965f2f706ede6a70d24 f47cd2be9c7b3a9d4e23b885b2252ac0579319d2 
remote: 
remote: error: hook declined to update refs/heads/master
To user@puppetmaster.example.org:/srv/git/puppet
 ! [remote rejected] master -> master (hook declined)
error: Fehler beim Versenden einiger Referenzen nach 'user@puppetmaster.example.org:/srv/git/puppet'

Die Informationen sind zusammengetragen von:

pregos versions – Zentrale Uebersicht von Softwareversionen

Problem: Ein oder mehrere Stueck Software auf verschiedenen Systemen und es fehlt der schnelle Ueberblick darueber auf welchem System welche Version installiert ist. Ausserdem interessiert noch die Updatehistorie.

Loesung: pregos versions. Ein Haufen von PHP-Skripten basierend auf drei Komponenten:

  1. Einem PHP-Skript das auf einer Uebersichtsseite alle Systeme anzeigt mit dem jeweils installierten Versionsstand der Software sowie das Datum wann das System aktualisiert wurde.
  2. Ein PHP-Skript das per GET die Informationen entgegen nimmt und in eine SQlite3 Datenbank schreibt
  3. Skripte, die die Versionsnummer auf unterschiedlichem Weg aus Software auslesen und per GET uebermitteln.

Mit dabei im Repository liegt ein PHP-Skript, das die Versionsnummer aus dem Meta-Tag einer HTML Seite ausliesst und dann an den Server uebertraegt. In der Zukunft wird es dort sicherlich noch einige andere – vorzugsweise Shellskripte – geben, die aehnliches auf andere Art- und Weise tun. pregos versions gibt es unter der GPLv2 unter http://git.pregos.info/pregosversions.git.

pregos versions Uebersichtpregos version Customer Details

Snippets: Android flashen etc.

Folgendes habe ich gestern Morgen gelernt:

  1. Android adb und fastboot sind in den Ubuntu Repositories vorhanden
    sudo apt-get install android-tools-adb android-tools-fastboot
  2. In den Fastboot Modus wechselt man wenn das Geraet mit der folgenden Tastenkombination anstellt:
    Power + VolumeUP/VolumeDown
  3. Mit dem folgenden Befehl kann man herausfinden, welche Android Geraete vom PC erkannt werden:
    adb devices
  4. TWRP2 ist ein gutes Recovery Build fuer Android. Es kann auf der offiziellen Projektseite bezogen werden.
  5. Mit dem folgenden Befehl wird das TWRP2 Recovery Image installiert wenn sich das Geraet im Fastboot Modus befindet:
     fastboot flash recovery openrecovery-twrp-2.6.3.4-hammerhead.img
  6. Mit dem folgenden Befehl werden Dateien wie zum Beispiel ein alternatives ROM auf das Geraet kopiert, wenn sich dieses im Recovery Modus befindet:
    adb push cm-11-20131214-NIGHTLY-hammerhead.zip /sdcard/