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