Projekt

Allgemein

Profil

Aktionen

ETCkeeper » Historie » Revision 25

« Zurück | Revision 25/28 (diff) | Weiter »
Josef Braun, 02.01.2010 17:28


Versionierung von Dateien im /etc Verzeichnisordner
mit etckeeper

etckeeper speichert /etc in Git, Mercurial, Bzr oder Darcs SCMs

etckeeper ist ein Werkzeug, um /etc in einem Git- , Mercurial- , Bzr- oder Darcs-Depot speichern zu können. Es hängt sich in APT ein und überträgt die Änderungen in /etc, die während der Paketaktualisierung gemacht wurden. Es macht die Metadaten der Dateien ausfindig, was Versionskontrollsysteme normalerweise nicht unterstützen, dies ist allerdings wichtig für /etc, wie z. B. die Rechte von /etc/shadow. Es ist recht modular und konfigurierbar, gleichzeitig auch einfach zu benutzen, wenn Sie die Grundlagen des Arbeitens mit Versionskontrolle verstehen.

(am Beispiel einer OpenSuse Installation mit Mercurial)

Schritte zur fertigen Installation

  • die Pakete git und mercurial mit yast installieren
  • die aktuelle Version vom git repository abholen.

    Dazu in ein leeres bzw. neues Verzeichnis wechseln und aufrufen:

    md ~/src
    cd ~/src
    git clone git://git.kitenet.net/etckeeper
    
    

  • in das etckeeper Verzeichnis wechseln

    die etckeeper.conf bearbeiten und

    1. das verwendete SCM von git auf merical umstellen # high-level package manager und # low-level package manager umstellen
    # /etc/etckeeper.conf
    #
    # version 0.41
    #
    # The VCS to use.
    VCS="hg" 
    #VCS="git" 
    # VCS="bzr" 
    # VCS="darcs" 
    
    # Options passed to git commit when run by etckeeper.
    #GIT_COMMIT_OPTIONS="" 
    
    # Options passed to hg commit when run by etckeeper.
    #HG_COMMIT_OPTIONS="" 
    
    # Options passed to bzr commit when run by etckeeper.
    #BZR_COMMIT_OPTIONS="" 
    
    # Options passed to darcs commit when run by etckeeper.
    #DARCS_COMMIT_OPTIONS="" 
    
    # Uncomment to avoid etckeeper committing existing changes
    # to /etc automatically once per day.
    #AVOID_DAILY_AUTOCOMMITS=1
    
    # Uncomment to avoid etckeeper committing existing changes to.
    # /etc before installation. It will cancel the installation,
    # so you can commit the changes by hand.
    #AVOID_COMMIT_BEFORE_INSTALL=1
    
    # The high-level package manager that's being used.
    # (apt, pacman-g2, yum etc)
    #HIGHLEVEL_PACKAGE_MANAGER=apt
    HIGHLEVEL_PACKAGE_MANAGER=yum
    
    # The low-level package manager that's being used.
    # (dpkg, rpm, pacman-g2, etc)
    #LOWLEVEL_PACKAGE_MANAGER=dpkg
    LOWLEVEL_PACKAGE_MANAGER=rpm
    
  • nun die Dateien nach /etc/etckeeper installieren dazu nun wie folgt 'make install' ausführen:

    make install
    

    das liefert in etwa folgenden Output bei Erfolg.
    mkdir -p /etc/etckeeper/ /var/cache/etckeeper/
    cp -a *.d /etc/etckeeper/
    install  -m 0644 -D etckeeper.conf /etc/etckeeper/etckeeper.conf
    install  -D etckeeper /usr/sbin/etckeeper
    install  -m 0644 -D etckeeper.8 /usr/share/man/man8/etckeeper.8
    install  -m 0644 -D bash_completion /etc/bash_completion.d/etckeeper
    install  -m 0644 -D yum-etckeeper.py /usr/lib/yum-plugins/etckeeper.py
    install  -m 0644 -D yum-etckeeper.conf /etc/yum/pluginconf.d/etckeeper.conf
    ./etckeeper-bzr/__init__.py install --root= || echo "** bzr support not installed" 
    Traceback (most recent call last):
      File "./etckeeper-bzr/__init__.py", line 6, in <module>
        import bzrlib
    ImportError: No module named bzrlib
    ** bzr support not installed
    echo "** installation successful" 
    ** installation successful
    
  • das Init Repository noch erzeugen und dann Fertig!
    etckeeper init

    nun existiert der komplette /etc/etckeeper sowie /etc/.hg (bei letzterem noch schauen, ob die Rechte passen, damit nicht jeder Einsicht bekommt!)

  • nun das Repository mit den Files befüllen. Über Status wird zuvor nachgesehen, ob auch alle Files hinzugefügt wurden mit dem init
        cd /etc
        hg status
        vi /etc/.hgignore
da z.B.
Glob examples:

glob:*.c       any name ending in ".c" in the current directory
*.c            any name ending in ".c" in the current directory
**.c           any name ending in ".c" in any subdirectory of the
               current directory including itself.
foo/*.c        any name ending in ".c" in the directory foo
foo/**.c       any name ending in ".c" in any subdirectory of foo
               including itself.
  • abschließend den Commit der Files durchführen (je nach Menge kann dies auch einige Zeit in Anspruch nehmen!).
        hg commit -m "Initial etckeeper Checkin" 
  • Fertig

Befehle im Betrieb

nach jeder Änderung die gespeichert werden soll ein commit machen:
z.b.

        passwd someuser
        hg status
        hg commit -m "changed a password" 

oder auch

etckeeper commit "Hier die gewünschte Notiz dazu eintragen" 

oder

hg status

um die geänderten Dateien zu sehen.

oder

hg diff

um die diversen Änderungen in den Dateien im Überblick zu sehen.

Alles was auch sonst unter Mercurial zur Verfügung steht!

etckeeper commit kann auch täglich über einen cron job welcher aber nicht durch die installation wie im Readme beschrieben, sondern selbst anzulegen wäre.

weitere Links sowie Dokumentationen

weiter Details zu finden im README der Source Installation (ein Ausschnitt daraus das etckeeper Tutorial)

Entwicklerseite auf http://kitenet.net/~joey/code/etckeeper

Debian Paket zum Vergleich http://packages.debian.org/de/sid/etckeeper

Von Josef Braun vor fast 16 Jahren aktualisiert · 25 revisions

Redmine Appliance - Powered by TurnKey Linux