Projekt

Allgemein

Profil

ETCkeeper » Historie » Version 28

Josef Braun, 11.01.2010 21:05

1 25 Josef Braun
h1. Versionierung von Dateien im /etc Verzeichnisordner 
2 2 Josef Braun
mit etckeeper
3 3 Josef Braun
4 9 Josef Braun
{{>toc}}
5 4 Josef Braun
6 9 Josef Braun
h2. etckeeper speichert /etc in Git, Mercurial, Bzr oder Darcs SCMs
7 4 Josef Braun
8 5 Josef Braun
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. 
9 4 Josef Braun
10 5 Josef Braun
(am Beispiel einer OpenSuse Installation mit Mercurial)
11 1 Josef Braun
12
13 5 Josef Braun
h2. Schritte zur fertigen Installation
14
15
* die Pakete git und mercurial mit yast installieren
16
17
* die aktuelle Version vom git repository abholen. 
18 7 Josef Braun
19
 Dazu in ein leeres bzw. neues Verzeichnis wechseln und aufrufen:
20 5 Josef Braun
<pre>
21 6 Josef Braun
md ~/src
22
cd ~/src
23 1 Josef Braun
git clone git://git.kitenet.net/etckeeper
24 6 Josef Braun
25 1 Josef Braun
</pre>
26 6 Josef Braun
27 1 Josef Braun
* in das etckeeper Verzeichnis wechseln 
28 6 Josef Braun
29 8 Josef Braun
  die *etckeeper.conf* bearbeiten und 
30 1 Josef Braun
31 7 Josef Braun
 
32 6 Josef Braun
 # das verwendete SCM von git auf merical umstellen
33 7 Josef Braun
 # high-level package manager und
34
 # low-level package manager umstellen
35 6 Josef Braun
36
 <pre>
37
# /etc/etckeeper.conf
38
#
39
# version 0.41
40
#
41
# The VCS to use.
42
VCS="hg"
43
#VCS="git"
44
# VCS="bzr"
45
# VCS="darcs"
46
47
# Options passed to git commit when run by etckeeper.
48
#GIT_COMMIT_OPTIONS=""
49
50
# Options passed to hg commit when run by etckeeper.
51
#HG_COMMIT_OPTIONS=""
52
53
# Options passed to bzr commit when run by etckeeper.
54
#BZR_COMMIT_OPTIONS=""
55
56
# Options passed to darcs commit when run by etckeeper.
57
#DARCS_COMMIT_OPTIONS=""
58
59
# Uncomment to avoid etckeeper committing existing changes
60
# to /etc automatically once per day.
61
#AVOID_DAILY_AUTOCOMMITS=1
62
63
# Uncomment to avoid etckeeper committing existing changes to.
64
# /etc before installation. It will cancel the installation,
65
# so you can commit the changes by hand.
66
#AVOID_COMMIT_BEFORE_INSTALL=1
67
68
# The high-level package manager that's being used.
69
# (apt, pacman-g2, yum etc)
70
#HIGHLEVEL_PACKAGE_MANAGER=apt
71
HIGHLEVEL_PACKAGE_MANAGER=yum
72
73
# The low-level package manager that's being used.
74
# (dpkg, rpm, pacman-g2, etc)
75
#LOWLEVEL_PACKAGE_MANAGER=dpkg
76
LOWLEVEL_PACKAGE_MANAGER=rpm
77
</pre>
78 1 Josef Braun
79 11 Josef Braun
* nun die Dateien nach /etc/etckeeper installieren dazu nun wie folgt 'make install' ausführen:
80
81
 <pre>
82
make install
83
</pre>
84 1 Josef Braun
85 8 Josef Braun
 das liefert in etwa folgenden Output bei Erfolg.
86 1 Josef Braun
87 8 Josef Braun
 <pre>
88
mkdir -p /etc/etckeeper/ /var/cache/etckeeper/
89
cp -a *.d /etc/etckeeper/
90
install  -m 0644 -D etckeeper.conf /etc/etckeeper/etckeeper.conf
91
install  -D etckeeper /usr/sbin/etckeeper
92
install  -m 0644 -D etckeeper.8 /usr/share/man/man8/etckeeper.8
93
install  -m 0644 -D bash_completion /etc/bash_completion.d/etckeeper
94
install  -m 0644 -D yum-etckeeper.py /usr/lib/yum-plugins/etckeeper.py
95
install  -m 0644 -D yum-etckeeper.conf /etc/yum/pluginconf.d/etckeeper.conf
96
./etckeeper-bzr/__init__.py install --root= || echo "** bzr support not installed"
97
Traceback (most recent call last):
98
  File "./etckeeper-bzr/__init__.py", line 6, in <module>
99
    import bzrlib
100
ImportError: No module named bzrlib
101
** bzr support not installed
102
echo "** installation successful"
103
** installation successful
104 1 Josef Braun
</pre>
105
106 27 Josef Braun
* Einstellungen für die Eintragungen des SCMs vornehmen
107
108
für Mercurial z.B. in ~/.hgrc:
109
110
<pre>
111
[ui]
112
username = Administrator <root@meine.email>
113
#merge = "/usr/bin/vim -d"
114
merge = "diff3"
115
116
[merge-tools]
117
# hier lassen sich zustzlichen Optionen eintragen falls obige "merge" Zeile nicht aussreichen sollte
118
# naeheres auch zu finden bei http://mercurial.selenic.com/wiki/MergeProgram#Choosing_and_configuring_a_merge_
119
</pre>
120
121 28 Josef Braun
oder für GIT z.B. in ~/.gitconfig
122
123
<pre>
124
[user]
125
        name = Your Name Comes Here
126
        email = you@yourdomain.example.com
127
128
</pre>
129 27 Josef Braun
130 16 Josef Braun
* das Init Repository noch erzeugen und dann Fertig!
131 9 Josef Braun
 <pre>
132
etckeeper init</pre>
133 1 Josef Braun
134 13 Josef Braun
 nun existiert der komplette /etc/etckeeper sowie /etc/.hg (bei letzterem noch *schauen, ob die Rechte passen*, damit nicht jeder Einsicht bekommt!)
135 1 Josef Braun
136 16 Josef Braun
* nun das Repository mit den Files befüllen. Über Status wird zuvor nachgesehen, ob auch alle Files hinzugefügt wurden mit dem init
137 1 Josef Braun
138 16 Josef Braun
<pre>
139
        cd /etc
140
        hg status
141 18 Josef Braun
</pre>
142
143 20 Josef Braun
* 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)
144 18 Josef Braun
145
<pre>
146 1 Josef Braun
        vi /etc/.hgignore
147 20 Josef Braun
</pre>
148
149
    da z.B. 
150
151
  <pre>
152
Glob examples:
153
154
glob:*.c       any name ending in ".c" in the current directory
155
*.c            any name ending in ".c" in the current directory
156
**.c           any name ending in ".c" in any subdirectory of the
157
               current directory including itself.
158
foo/*.c        any name ending in ".c" in the directory foo
159
foo/**.c       any name ending in ".c" in any subdirectory of foo
160
               including itself.
161 18 Josef Braun
</pre>
162
163 21 Josef Braun
* abschließend den Commit der Files durchführen (je nach Menge kann dies auch einige Zeit in Anspruch nehmen!).
164 18 Josef Braun
165
<pre>
166 21 Josef Braun
        hg commit -m "Initial etckeeper Checkin"
167 1 Josef Braun
</pre>
168 19 Josef Braun
169
* Fertig
170
171 16 Josef Braun
172 24 Josef Braun
h1. Befehle im Betrieb
173 9 Josef Braun
174 23 Josef Braun
{{>toc}}
175
176 10 Josef Braun
nach jeder Änderung die gespeichert werden soll ein *commit* machen:
177 9 Josef Braun
z.b.
178
<pre>
179
        passwd someuser
180
        hg status
181
        hg commit -m "changed a password"
182
183
</pre>
184 1 Josef Braun
185 16 Josef Braun
oder auch 
186 1 Josef Braun
187 16 Josef Braun
<pre>
188 21 Josef Braun
etckeeper commit "Hier die gewünschte Notiz dazu eintragen"
189 16 Josef Braun
</pre>
190 22 Josef Braun
191
oder 
192
<pre>
193
hg status
194
</pre>
195
um die geänderten Dateien zu sehen. 
196
197
oder 
198
<pre>
199
hg diff
200
</pre>
201
um die diversen Änderungen in den Dateien im Überblick zu sehen. 
202
203
204
Alles was auch sonst unter Mercurial zur Verfügung steht!
205
206 16 Josef Braun
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.
207 10 Josef Braun
 
208 26 Josef Braun
209
h2. Neubeginn mit leerem Repository
210
211
Es ist auch möglich oder wenn gewünscht mit einem neuen leeren Repository zu beginnen.
212
213
Dabei wird das bestehende gelöscht und neu initialisiert. 
214
*Wichtig:* es geht dabei auch die *ignore* Datei verloren in der vielleicht schon Einträge für div. Ausnahmen oder Includes vorgenommen wurden. 
215
Also in diesem Beispiel unter Verwendung von Mercurial die */etc/.hgignore* zuvor wegkopieren falls man sie später wieder zusammenführen möchte.
216
217
Danach sind folgende Schritte notwendig um ein neues zu beginnen.
218
219
<pre>
220
        etckeeper uninit # deletes /etc/.git!
221
        # oder auch wenn ein Wechsel zu einem anderen SCM erfolgen soll die Config Datei bearbeiten
222
        #vim /etc/etckeeper/etckeeper.conf
223
        etckeeper init
224
225
</pre>
226
227
anschließend wieder den Status begutachen und den Initialize Commit durchführen.
228
229
<pre>
230
        cd /etc
231
        hg status
232
</pre>
233
234
<pre>
235
        hg commit -m "Initial etckeeper Checkin"
236
</pre>
237
238
239 10 Josef Braun
 
240 15 Josef Braun
h2. weitere Links sowie Dokumentationen
241 1 Josef Braun
242 14 Josef Braun
weiter Details zu finden im *README* der Source Installation (ein Ausschnitt daraus das [[etckeeper_tutorial|etckeeper Tutorial]])
243 12 Josef Braun
244 1 Josef Braun
Entwicklerseite auf  http://kitenet.net/~joey/code/etckeeper
245 12 Josef Braun
246 8 Josef Braun
Debian Paket zum Vergleich http://packages.debian.org/de/sid/etckeeper
Redmine Appliance - Powered by TurnKey Linux