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