in etckeeper.conf.
* Only install apt hooks if apt is used.
* Only add backup conffile exclusion to gitignore if dpkg is used.
* Rename pre/post-apt.d to pre/post-install.d to allow the same directories
to be used for other package managers.
* Use the name of the highlevel package manager in commit messages.
--- /dev/null
+Before running 'make install', you should edit etckeeper.conf and make sure
+it configured appropriately for your distribution.
+
+Distribution packagers may find it more convenient to set CONFFILE to point
+to a different etckeeper.conf that is preconfigured for your distribution.
+# You should configure etckeeper.conf for your distribution before
+# installing etckeeper.
+CONFFILE=etckeeper.conf
+include $(CONFFILE)
+
install:
mkdir -p $(PREFIX)/etc/etckeeper/
cp -a *.d $(PREFIX)/etc/etckeeper/
- cp etckeeper.conf $(PREFIX)/etc/etckeeper/
+ cp $(CONFFILE) $(PREFIX)/etc/etckeeper/etckeeper.conf
install -D etckeeper $(PREFIX)/usr/bin/etckeeper
- install -m 0644 -D apt.conf $(PREFIX)/etc/apt/apt.conf.d/05etckeeper
install -m 0644 -D etckeeper.1 $(PREFIX)/usr/share/man/man1/etckeeper.1
- install -m 0644 -D bash_completion $(PREFIX)/etc/bash_completion.d/etckeeper
\ No newline at end of file
+ install -m 0644 -D bash_completion $(PREFIX)/etc/bash_completion.d/etckeeper
+ifeq ($(HIGHLEVEL_PACKAGE_MANAGER),apt))
+ install -m 0644 -D apt.conf $(PREFIX)/etc/apt/apt.conf.d/05etckeeper
+endif
etckeeper has special support to handle changes to /etc caused by
installing and upgrading packages. Before apt installs packages,
-`etckeeper pre-apt` will check that /etc contains no uncommitted changes.
-After apt installs packages, `etckeeper post-apt` will add any new
+`etckeeper pre-install` will check that /etc contains no uncommitted changes.
+After apt installs packages, `etckeeper post-install` will add any new
interesting files to the repository, and commit the changes.
git is designed as a way to manage source code, not as a way to manage
For example, here's how to configure it to run `git gc` after each apt run,
which will save a lot of disk space:
- cd /etc/etckeeper/post-apt.d
+ cd /etc/etckeeper/post-install.d
(echo '#!/bin/sh' ; echo 'exec git-gc') > 99git-gc
chmod +x 99git-gc
git add .
Here's how to disable the automatic commits after each apt run, while still
letting it git-add new files and git-rm removed ones:
- chmod -x /etc/etckeeper/post-apt.d/75git-commit
+ chmod -x /etc/etckeeper/post-install.d/75git-commit
Note that the etckeeper commands are careful to not hardcode anything about
git. If you want to use some other revision control system, that's
in one repo, and public in another. This would need either symlink
farming or git "fake bare" repos, both of which are not pleasant, yet.
- Another way would be to allow splitting out subdirs into their own
- repos. This is already doable, would just need modifying the pre-apt and
- post-apt stuff (ie, it needs to commit in the subdirs too). Using
- mr would be a possibility..
+ Another way would be to allow splitting out subdirs into their own repos.
+ This is already doable, would just need modifying the pre-install and
+ post-instlal stuff (ie, it needs to commit in the subdirs too). Using mr
+ would be a possibility..
+
+* Figure out what packages were acted on, and include that info in the commit
+ message
-DPkg::Pre-Install-Pkgs { "if [ -x /usr/bin/etckeeper ]; then etckeeper pre-apt; fi"; };
-DPkg::Post-Invoke { "if [ -x /usr/bin/etckeeper ]; then etckeeper post-apt; fi"; };
+DPkg::Pre-Install-Pkgs { "if [ -x /usr/bin/etckeeper ]; then etckeeper pre-install; fi"; };
+DPkg::Post-Invoke { "if [ -x /usr/bin/etckeeper ]; then etckeeper post-install; fi"; };
+etckeeper (0.7) UNRELEASED; urgency=low
+
+ * Added configuration options for highlevel and lowlevel package managers
+ in etckeeper.conf.
+ * Only install apt hooks if apt is used.
+ * Only add backup conffile exclusion to gitignore if dpkg is used.
+ * Rename pre/post-apt.d to pre/post-install.d to allow the same directories
+ to be used for other package managers.
+ * Use the name of the highlevel package manager in commit messages.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 03 Jan 2008 20:43:23 -0500
+
etckeeper (0.6) unstable; urgency=low
* Depend on a fairly recent git-core. Closes: #453063
if [ ! -z "$GIT_COMMIT_OPTIONS" ]; then
export GIT_COMMIT_OPTIONS
fi
+if [ ! -z "$HIGHLEVEL_PACKAGE_MANAGER" ]; then
+ export HIGHLEVEL_PACKAGE_MANAGER
+fi
+if [ ! -z "$LOWLEVEL_PACKAGE_MANAGER" ]; then
+ export LOWLEVEL_PACKAGE_MANAGER
+fi
if [ -z "$1" ]; then
echo "usage: etckeeper command [directory]" >&2
This is called as a git pre-commit hook. It stores metadata and does sanity
checks.
.TP
-.B pre-apt
-This is called by apt's DPkg::Pre-Install-Pkgs hook. It allows committing
-any uncommitted changes before the apt run.
+.B pre-install
+This is called by apt's DPkg::Pre-Install-Pkgs hook, or by equivilant hooks
+of other package managers. It allows committing any uncommitted changes before
+packages are installed, upgraded, etc.
.TP
-.B post-apt
-This is called by apt's DPkg::Post-Invoke hook. It commits changes made by
-packages into the repository. (You can also call this by hand after running
-dpkg by hand.)
+.B post-install
+This is called by apt's DPkg::Post-Invoke hook, or by equivilant hooks
+of other package managers. It commits changes made by packages into the
+repository. (You can also call this by hand after running dpkg by hand.)
.SH AUTHOR
Joey Hess, <joey@kitenet.net>.
# You could for exemple use "-e" if you want to edit all commit messages
# before committing.
#GIT_COMMIT_OPTIONS="-e"
+
+# The high level package manager that's being used.
+HIGHLEVEL_PACKAGE_MANAGER=apt
+
+# The low-level package manager that's being used.
+LOWLEVEL_PACKAGE_MANAGER=dpkg
#!/bin/sh
set -e
if [ ! -e .gitignore ]; then
- cat >.gitignore <<EOF
-*~
-
+ if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then
+ cat >.gitignore <<EOF
# new and old versions of conffiles, stored by dpkg
*.dpkg-*
+EOF
+ fi
+ cat >>.gitignore <<EOF
+*~
# mount(8) records system state here, no need to keep these in git
blkid.tab
+++ /dev/null
-Files in this directory are run after apt has run. They should commit
-changes and new files in /etc to repository.
set -e
if [ -d .git ]; then
-
- # TODO: figure out what packages were acted on by the apt run, and
- # include that info in the commit message
- message="committing changes after apt run"
+ message="committing changes after $HIGHLEVEL_PACKAGE_MANAGER run"
# ignore exit code since it exits nonzero if there is nothing to do
git commit $GIT_COMMIT_OPTIONS -m "$message" || true
--- /dev/null
+Files in this directory are run after packages are installed, upgraded, etc.
+They should commit changes and new files in /etc to repository.
+++ /dev/null
-Files in this directory are run before apt is run. This is mostly used for
-sanity checks, ie, does /etc have any uncommitted changes?
db_get etckeeper/unclean
if [ "$RET" = true ]; then
git add .
- if ! git commit $GIT_COMMIT_OPTIONS -m "saving uncommitted changes in /etc prior to apt run"; then
+ if ! git commit $GIT_COMMIT_OPTIONS -m "saving uncommitted changes in /etc prior to $HIGHLEVEL_PACKAGE_MANAGER run"; then
db_input critical etckeeper/commit_failed || true
db_go || true
db_reset etckeeper/commit_failed || true
--- /dev/null
+Files in this directory are run before packages are installed, upgraded,
+etc. This is mostly used for sanity checks, ie, does /etc have any
+uncommitted changes?