diff -r 000000000000 -r 4bc43250587a ha-config --- /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 +# +# 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 &2 + rm -f /tmp/$ME.tmp + + echo "$ME: stowing" >&2 + stow --target /$target -R current.$target +done + +# vim:ai aw sm: