--- /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: