ha-config
changeset 0 4bc43250587a
child 3 a64a60380d66
equal deleted inserted replaced
-1:000000000000 0:4bc43250587a
       
     1 #! /bin/bash -e
       
     2 # © 2006 Heiko Schlittermann <hs@schlittermann.de>
       
     3 # 
       
     4 # Es wird davon ausgegangen, daß in /ha-config alles liegt, was
       
     5 # auf beiden System *unterschiedlich* sein muß.  Oder: beide
       
     6 # Systeme sind an allen anderen Stellen *identisch*.
       
     7 ME=`basename $0`
       
     8 
       
     9 source /etc/ha-sync/ha-sync.conf
       
    10 
       
    11 test "$DIR" || {
       
    12 	echo "Need directory" >&2
       
    13 	exit 2
       
    14 }
       
    15 
       
    16 # Erst mal sicherstellen, daß das Verzeichnis auch da ist
       
    17 
       
    18 if ! test -e /etc/fstab; then
       
    19 	echo "$ME: /etc/fstab doesn't exist!" >&2
       
    20 	exit
       
    21 fi
       
    22 
       
    23 D=; for d in ${DIR//\// }; do
       
    24 	test -d $DIR && break
       
    25 
       
    26 	D=$D/$d
       
    27 	egrep -q "^[^#][[:print:]]+[[:space:]]+$D[[:space:]]" /etc/fstab \
       
    28 		&& mount $D
       
    29 
       
    30 done
       
    31 
       
    32 cd $DIR
       
    33 
       
    34 # Den aktuellen Hostnamen ermitteln wir von der Kernel-Kommando-Zeile
       
    35 # (den letzten dort auftauchenden hostname=XXX Parameter)
       
    36 # oder wenn das nicht hilft über das 'hostname'-Kommando
       
    37 
       
    38 eval `grep -o 'hostname=[-[:alnum:]]\+' /proc/cmdline | tail -1`
       
    39 hostname=${hostname-`hostname`}
       
    40 
       
    41 # Nun laufen wir über alle Verzeichnisse, die unseren Hostnamen
       
    42 # haben und gehen davon aus, daß der Rest des Verzeichnisnamens
       
    43 # das Zielverzeichnis darstellt.
       
    44 # Dann legen wir einen Link 'current.$target' auf dieses Verzeichnis.
       
    45 # Warum?  Damit z.B. in /etc/exim4 dann immer *auf jedem Host* ein Link
       
    46 # nach /ha-config/current.etc/exim4/exim4.conf liegen kann.  Sonst wären die 
       
    47 # /etc-Verzeichnisse ja wieder unterschiedlich.
       
    48 # FIXME: Was, wenn es nicht ein Verzeichnis direkt unter / ist?
       
    49 for p in $hostname.*; do
       
    50 
       
    51 	# Ziel ist das, was dem Punkt folgt
       
    52         target=${p#$hostname.}
       
    53 
       
    54 	echo "$ME: found target $target" >&2
       
    55 
       
    56         echo "$ME: `rm -vf current.$target`" >&2
       
    57         echo "$ME: `ln -vs $p current.$target`" >&2
       
    58 
       
    59 	# Wenn Konflikte auftreten, diese Konflikt-Files
       
    60 	# zur Seite legen
       
    61 	echo "$ME: resolving possible conflicts" >&2
       
    62         stow --target /$target -ncR current.$target 2>&1 \
       
    63                 | sed 's/^.*[[:space:]]vs\.[[:space:]]\+//' \
       
    64 	| tee /tmp/$ME.tmp \
       
    65         | xargs -n1 -i{} mv -v {} {}.stow.`date -I`.saved
       
    66 
       
    67 	echo "$ME: found `wc -l </tmp/$ME.tmp` conflicts" >&2
       
    68 	rm -f /tmp/$ME.tmp
       
    69 
       
    70 	echo "$ME: stowing" >&2
       
    71         stow --target /$target -R current.$target
       
    72 done
       
    73 
       
    74 # vim:ai aw sm: