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