summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-06-16 23:39:49 +0000
committerRoot McRooty <root@localhost>2016-06-16 23:39:49 +0000
commit3507e9309a3107a10aeeb205be922c3289ea38ed (patch)
treea1a8177d04c9a6d112468e69d8a73fe28a078ff4
parent950769253a6eb6c17c34202b3a63e0287d1b36be (diff)
saving uncommitted changes in /etc prior to pacman run
-rwxr-xr-xetckeeper/clean-etc36
-rwxr-xr-xetckeeper/post-install.d/50clean-etc5
-rw-r--r--systemd/system/clean-etc.service6
3 files changed, 47 insertions, 0 deletions
diff --git a/etckeeper/clean-etc b/etckeeper/clean-etc
new file mode 100755
index 0000000..6d29052
--- /dev/null
+++ b/etckeeper/clean-etc
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# Copyright 2016 Luke Shumaker
+#
+# This script gets called by the etckeeper post-install hook.
+
+
+# TODO: this script does not handle creating /var/lib/clean-etc; it
+# assumes that it already exists. Especially note setting up .git/hooks/pre-commit
+
+cd /var/lib/clean-etc
+
+umask 0022
+
+mv -T etc/.git etc.git
+rm -rf etc/
+
+pacman -Q | while read -r pkgname pkgver; do
+ file=("/var/cache/pacman/pkg/$pkgname-$pkgver"-*.pkg.tar.*)
+ pacman -Qlq "$pkgname"|grep ^/etc/|sed "s|^/|$file |"
+done | while read -r tarfile etcfile; do
+ if [[ "$etcfile" = */ ]]; then
+ mkdir -p "$etcfile"
+ else
+ bsdtar xpfv "$tarfile" "$etcfile"
+ fi
+done
+touch etc/.gitignore
+
+mv -T etc.git etc/.git
+cd etc/
+if etckeeper unclean -d "$PWD"; then
+ etckeeper commit -d "$PWD" 'clean commit'
+fi
+
+cd /etc
+git fetch --all
diff --git a/etckeeper/post-install.d/50clean-etc b/etckeeper/post-install.d/50clean-etc
new file mode 100755
index 0000000..a8f3b3d
--- /dev/null
+++ b/etckeeper/post-install.d/50clean-etc
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+# Copyright 2016 Luke Shumaker
+
+systemctl reset-failed clean-etc.service &>/dev/null || true
+systemctl start clean-etc.service
diff --git a/systemd/system/clean-etc.service b/systemd/system/clean-etc.service
new file mode 100644
index 0000000..3ab42cc
--- /dev/null
+++ b/systemd/system/clean-etc.service
@@ -0,0 +1,6 @@
+# Copyright 2016 Luke Shumaker
+[Unit]
+Description=etckeeper clean-etc helper
+
+[Service]
+ExecStart=/etc/etckeeper/clean-etc