ETCkeeper » Historie » Revision 21
Revision 20 (Josef Braun, 02.01.2010 15:51) → Revision 21/28 (Josef Braun, 02.01.2010 16:12)
h1. Versionierung von Dateien im /etc VerzeichnisOrdner
mit etckeeper
{{>toc}}
h2. 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)
h2. 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:
<pre>
md ~/src
cd ~/src
git clone git://git.kitenet.net/etckeeper
</pre>
* in das etckeeper Verzeichnis wechseln
die *etckeeper.conf* bearbeiten und
# das verwendete SCM von git auf merical umstellen
# high-level package manager und
# low-level package manager umstellen
<pre>
# /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
</pre>
* nun die Dateien nach /etc/etckeeper installieren dazu nun wie folgt 'make install' ausführen:
<pre>
make install
</pre>
das liefert in etwa folgenden Output bei Erfolg.
<pre>
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
</pre>
* das Init Repository noch erzeugen und dann Fertig!
<pre>
etckeeper init</pre>
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
<pre>
cd /etc
hg status
</pre>
* das Ignorefile von Mercurial nun noch anpassen und alle VerzeichnsZweige etc. aufnehmen, die nicht ins Repository sollen - vor allem alles an binären bzw. großen Files etc. (hilfreich auch hier der Link auf die File Name Patterns http://www.selenic.com/mercurial/hg.1.html#file-name-patterns)
<pre>
vi /etc/.hgignore
</pre>
da z.B.
<pre>
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.
</pre>
* abschließend den Commit der Files durchführen (je nach Menge kann dies auch einige Zeit in Anspruch nehmen!). durchführen.
<pre>
hg commit -m "Initial "initial etckeeper Checkin" checkin"
</pre>
* Fertig
h2. Befehle im Betrieb
nach jeder Änderung die gespeichert werden soll ein *commit* machen:
z.b.
<pre>
passwd someuser
hg status
hg commit -m "changed a password"
</pre>
oder auch
<pre>
etckeeper commit "Hier die meine gewünschte Notiz dazu eintragen"
</pre>
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.
h2. weitere Links sowie Dokumentationen
weiter Details zu finden im *README* der Source Installation (ein Ausschnitt daraus das [[etckeeper_tutorial|etckeeper Tutorial]])
Entwicklerseite auf http://kitenet.net/~joey/code/etckeeper
Debian Paket zum Vergleich http://packages.debian.org/de/sid/etckeeper
mit etckeeper
{{>toc}}
h2. 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)
h2. 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:
<pre>
md ~/src
cd ~/src
git clone git://git.kitenet.net/etckeeper
</pre>
* in das etckeeper Verzeichnis wechseln
die *etckeeper.conf* bearbeiten und
# das verwendete SCM von git auf merical umstellen
# high-level package manager und
# low-level package manager umstellen
<pre>
# /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
</pre>
* nun die Dateien nach /etc/etckeeper installieren dazu nun wie folgt 'make install' ausführen:
<pre>
make install
</pre>
das liefert in etwa folgenden Output bei Erfolg.
<pre>
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
</pre>
* das Init Repository noch erzeugen und dann Fertig!
<pre>
etckeeper init</pre>
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
<pre>
cd /etc
hg status
</pre>
* das Ignorefile von Mercurial nun noch anpassen und alle VerzeichnsZweige etc. aufnehmen, die nicht ins Repository sollen - vor allem alles an binären bzw. großen Files etc. (hilfreich auch hier der Link auf die File Name Patterns http://www.selenic.com/mercurial/hg.1.html#file-name-patterns)
<pre>
vi /etc/.hgignore
</pre>
da z.B.
<pre>
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.
</pre>
* abschließend den Commit der Files durchführen (je nach Menge kann dies auch einige Zeit in Anspruch nehmen!). durchführen.
<pre>
hg commit -m "Initial "initial etckeeper Checkin" checkin"
</pre>
* Fertig
h2. Befehle im Betrieb
nach jeder Änderung die gespeichert werden soll ein *commit* machen:
z.b.
<pre>
passwd someuser
hg status
hg commit -m "changed a password"
</pre>
oder auch
<pre>
etckeeper commit "Hier die meine gewünschte Notiz dazu eintragen"
</pre>
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.
h2. weitere Links sowie Dokumentationen
weiter Details zu finden im *README* der Source Installation (ein Ausschnitt daraus das [[etckeeper_tutorial|etckeeper Tutorial]])
Entwicklerseite auf http://kitenet.net/~joey/code/etckeeper
Debian Paket zum Vergleich http://packages.debian.org/de/sid/etckeeper