etckeeper und git

Da mir die Open Source Groupware Group-Office immer meine Konfigurationsdateien überschreibt, habe ich nach einer Möglichkeit gesucht, diese zu versionieren. Nach kurzer Suche bin ich auf etckeeper gestoßen. Etckeeper stellt alle Konfigurationsdateien im Verzeichnis /etc unter eine Versionsverwaltung. Zur Zeit werden Git, Mercurial (hg), Bazaar (bzr) und Darcs unterstützt. Vor und Nach dem Einspielen oder Entfernen neuer Software über die Paketverwaltung wird automatisch ein neuer commit angelegt. Zudem werden die wichtigen Dateiberechtigungen mitgespeichert und ist somit einer reinen Versionsverwaltung überlegen.

Da ich git bevorzuge, habe ich folgendermaßen etckeeper installiert:

sudo apt-get install git-core etckeeper

Git konfigurieren
git config --global user.name "Klaus Schwarzkopf"
git config --global user.email webmaster@linpert.de

Dann in der Datei /etc/etckeeper/etckeeper.conf bzr auskommentieren und git einkommentieren.
# The VCS to use.
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"

Initialen Commit anlegen:
sudo etckeeper init
sudo etckeeper commit "Initial commit."

Ubuntu 10.04
Unter Ubuntu 10.04 wird automatisch bei der Installation schon /etc mit Bazaar versioniert. Um es auf Git zu ändern, muss die Datei etckeeper.conf angepasst werden und dann etckeeper uninit, etckeeper init und etckeeper commit “Initial commit.”
ausgeführt werden.

Manuelle Änderung
Als root oder mit vorangestelltem sudo. Man kann ganz normal git im /etc Verzeichnis verwenden.
root@ubuntu:/etc# vim fstab
root@ubuntu:/etc# git commit -a
[master a885a3c] big mistake
1 files changed, 1 insertions(+), 1 deletions(-)
root@ubuntu:/etc# git log
commit a885a3c7cfad2123fc4bd946a8d01c377651af6c
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:46:13 2012 +0200

big mistake

commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.
root@ubuntu:/etc#

Änderungen rückgängig

root@ubuntu:/etc# git log
commit a885a3c7cfad2123fc4bd946a8d01c377651af6c
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:46:13 2012 +0200

big mistake

commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.

root@ubuntu:/etc# git reset --hard HEAD~1
HEAD is now at ab91b64 Initial commit.
root@ubuntu:/etc# git log
commit ab91b64eabe0e9f7371ddd8afcbd47db5e37a91f
Author: Klaus Schwarzkopf <webmaster@linpert.de>
Date: Sat Jun 2 19:43:52 2012 +0200

Initial commit.

5 Gedanken zu „etckeeper und git

  1. DSIW

    Hallo Klaus,
    du schriebst, dass man git ganz normal nach dem Installieren von etckeeper nutzen könne.
    Werden dann trotzdem auch die Metadaten der Konfigurationsdateien gesichert?

    etckeeper wirkt eigentlich ganz gut, aber mit gefällt nicht, dass es nicht so flexibel ist, wie git. Zum Beispiel möchte ich nicht alle gemachten Änderungen commiten, sondern nur bestimmte veränderte Dateien.
    Kann ich `git add` nutzen, sodass ein anschließendes `etckeeper commit` nur diese commited?

    Danke und Gruß
    DSIW

    Antworten
    1. admin Artikelautor

      Hi DSIW,

      wenn man bestimmte Dateien ausschließen will, könnte man die .gitignore Datei verwenden. Etckeeper versioniert in den Standardeinstellungen das /etc Verzeichnis nach einem Update/Installation einer Software und täglich. Somit würden deine nicht versionierten Dateien automatisch mit reinrutschen. Auch wären 2 commits denkbar.

      Berechtigungen werden in der Datei /etc/.etckeeper gespeichert.

      Gruß Klaus

      Antworten
      1. DSIW

        Hallo Klaus,

        danke für die schnelle Antwort.
        Aber das meinte ich nicht. Sorry, dass ich mich nicht deutlich genug ausgedrückt habe.
        Ich möchte schon alle Dateien von Git versionieren lassen.
        Mein Beispiel:
        1. Ich ändere die /etc/rc.conf und füge einen Deamon hinzu.
        2. Ich füge die /etc/cron.daily/update hinzu.
        Nun möchte ich zuerst nur die rc.conf mit der passenden Message commiten. Anschließend das Update-Skript.
        Ich möchte deshalb zwei Commits erstellen, da diese beiden Änderungen gar nichts miteinander zu tun haben.
        Geht das?
        Wenn ich nämlich nur `etckeeper commit msg` aufrufe, dann werden beide Änderungen in einen Commit verpackt?!

        Gruß DSIW

        Antworten
        1. admin Artikelautor

          Hi DSIW,

          warum nicht folgende Vorgehensweise:

          1. Ich ändere die /etc/rc.conf und füge einen Deamon hinzu.
          2. etckeeper commit
          3. Ich füge die /etc/cron.daily/update hinzu.
          4. etckeeper commit

          Du kannst auch nur git verwenden, es kann aber dann zu Problemen mit den Rechten der Dateien kommen.

          1. Ich ändere die /etc/rc.conf und füge einen Deamon hinzu.
          2. git commit -a
          3. Ich füge die /etc/cron.daily/update hinzu.
          4. ggf. Rechte in der /etc/.etckeeper anpassen
          5. git add cron.daily/update
          6. git commit -a

          Ich würde die erste Möglichkeit verwenden ;-)

          Gruß Klaus

          Antworten
          1. DSIW

            Hallo Klaus,

            da hast du natürlich Recht. Das versuche ich auch immer wieder. Aber ich bin leider immer noch nicht ganz in dem Workflow drin. Vergesse gerne das commiten nachdem ich eine Änderung abgeschlossen habe. ;-)
            Danke, das werde ich gleich mal ausprobieren.

            Gruß DSIW

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>