ha-config
changeset 0 4bc43250587a
child 3 a64a60380d66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ha-config	Fri Nov 17 10:15:27 2006 +0000
@@ -0,0 +1,74 @@
+#! /bin/bash -e
+# © 2006 Heiko Schlittermann <hs@schlittermann.de>
+# 
+# Es wird davon ausgegangen, daß in /ha-config alles liegt, was
+# auf beiden System *unterschiedlich* sein muß.  Oder: beide
+# Systeme sind an allen anderen Stellen *identisch*.
+ME=`basename $0`
+
+source /etc/ha-sync/ha-sync.conf
+
+test "$DIR" || {
+	echo "Need directory" >&2
+	exit 2
+}
+
+# Erst mal sicherstellen, daß das Verzeichnis auch da ist
+
+if ! test -e /etc/fstab; then
+	echo "$ME: /etc/fstab doesn't exist!" >&2
+	exit
+fi
+
+D=; for d in ${DIR//\// }; do
+	test -d $DIR && break
+
+	D=$D/$d
+	egrep -q "^[^#][[:print:]]+[[:space:]]+$D[[:space:]]" /etc/fstab \
+		&& mount $D
+
+done
+
+cd $DIR
+
+# Den aktuellen Hostnamen ermitteln wir von der Kernel-Kommando-Zeile
+# (den letzten dort auftauchenden hostname=XXX Parameter)
+# oder wenn das nicht hilft über das 'hostname'-Kommando
+
+eval `grep -o 'hostname=[-[:alnum:]]\+' /proc/cmdline | tail -1`
+hostname=${hostname-`hostname`}
+
+# Nun laufen wir über alle Verzeichnisse, die unseren Hostnamen
+# haben und gehen davon aus, daß der Rest des Verzeichnisnamens
+# das Zielverzeichnis darstellt.
+# Dann legen wir einen Link 'current.$target' auf dieses Verzeichnis.
+# Warum?  Damit z.B. in /etc/exim4 dann immer *auf jedem Host* ein Link
+# nach /ha-config/current.etc/exim4/exim4.conf liegen kann.  Sonst wären die 
+# /etc-Verzeichnisse ja wieder unterschiedlich.
+# FIXME: Was, wenn es nicht ein Verzeichnis direkt unter / ist?
+for p in $hostname.*; do
+
+	# Ziel ist das, was dem Punkt folgt
+        target=${p#$hostname.}
+
+	echo "$ME: found target $target" >&2
+
+        echo "$ME: `rm -vf current.$target`" >&2
+        echo "$ME: `ln -vs $p current.$target`" >&2
+
+	# Wenn Konflikte auftreten, diese Konflikt-Files
+	# zur Seite legen
+	echo "$ME: resolving possible conflicts" >&2
+        stow --target /$target -ncR current.$target 2>&1 \
+                | sed 's/^.*[[:space:]]vs\.[[:space:]]\+//' \
+	| tee /tmp/$ME.tmp \
+        | xargs -n1 -i{} mv -v {} {}.stow.`date -I`.saved
+
+	echo "$ME: found `wc -l </tmp/$ME.tmp` conflicts" >&2
+	rm -f /tmp/$ME.tmp
+
+	echo "$ME: stowing" >&2
+        stow --target /$target -R current.$target
+done
+
+# vim:ai aw sm: