1 1.1 darrenr #!/bin/sh 2 1.1 darrenr # 3 1.1 darrenr # Setup a new config directory 4 1.1 darrenr # 5 1.1 darrenr if [ $# -lt 1 ] ; then 6 1.8 jmmv echo "usage: $0 <newconfig> [<baseconfig>]" 7 1.8 jmmv echo "usage: $0 init" 8 1.8 jmmv echo "usage: $0 revert" 9 1.1 darrenr exit 1; 10 1.1 darrenr fi 11 1.1 darrenr dir=$1 12 1.1 darrenr 13 1.3 lukem FILES="defaultdomain fstab ifconfig.* inetd.conf mrouted.conf \ 14 1.4 lukem mygate myname netstart nsswitch.conf ntp.conf \ 15 1.3 lukem rc.conf rc.conf.d resolv.conf" 16 1.3 lukem 17 1.1 darrenr if [ $dir = init ] ; then 18 1.9 kre if [ -d /etc/etc.network ] || [ -e /etc/etc.current ] ; then 19 1.1 darrenr echo "Error: multi-configuration already initialized" 20 1.1 darrenr exit 1 21 1.1 darrenr fi 22 1.1 darrenr dir=etc.network 23 1.1 darrenr cd /etc 24 1.1 darrenr mkdir -m 755 $dir 25 1.1 darrenr ln -s $dir etc.current 26 1.1 darrenr ln -s $dir etc.default 27 1.3 lukem for i in ${FILES}; do 28 1.9 kre if [ -f $i ] || [ -d $i ] ; then 29 1.1 darrenr mv $i $dir 30 1.1 darrenr ln -s etc.current/$i . 31 1.1 darrenr fi 32 1.1 darrenr done 33 1.1 darrenr echo "/etc/$dir has now been created and populated." 34 1.7 seb exit 0 35 1.7 seb fi 36 1.7 seb 37 1.7 seb if [ $dir = revert ] ; then 38 1.7 seb if [ ! -d /etc/etc.current ] ; then 39 1.7 seb echo "Error: multi-configuration not initialized" 40 1.7 seb exit 1 41 1.7 seb fi 42 1.7 seb cd /etc 43 1.7 seb for i in ${FILES}; do 44 1.9 kre if [ -f $i ] || [ -d $i ] ; then 45 1.7 seb stat="`ls -ld $i`" 46 1.7 seb case x"$stat" in 47 1.7 seb xl*) :;; 48 1.7 seb x*) 49 1.7 seb echo "$i: not a symlink, skipping" 50 1.7 seb continue ;; 51 1.7 seb esac 52 1.7 seb linkto="${stat##*-> }" 53 1.7 seb case x"$linkto" in 54 1.7 seb xetc.current/*) :;; 55 1.7 seb x*) 56 1.7 seb echo "$i: does not symlink to etc.current, skipping" 57 1.7 seb continue ;; 58 1.7 seb esac 59 1.7 seb if [ -f $i ] ; then 60 1.7 seb rm $i 61 1.7 seb cp -p $linkto $i 62 1.7 seb else 63 1.7 seb rm $i 64 1.7 seb ( cd etc.current && pax -rw -pe $i /etc ) 65 1.7 seb fi 66 1.7 seb fi 67 1.7 seb done 68 1.7 seb rm etc.current 69 1.7 seb rm etc.default 70 1.1 darrenr exit 0 71 1.1 darrenr fi 72 1.1 darrenr 73 1.1 darrenr if [ "`expr $dir : 'etc\.\(.*\)'`" != $dir ] ; then 74 1.1 darrenr dir=etc.$dir 75 1.1 darrenr fi 76 1.1 darrenr if [ -e /etc/$dir ] ; then 77 1.1 darrenr echo "Error: $dir already exists" 78 1.1 darrenr exit 1; 79 1.1 darrenr fi 80 1.1 darrenr newname=`expr $dir : 'etc.\(.*\)'` 81 1.1 darrenr if [ $# -lt 2 ] ; then 82 1.1 darrenr orig=etc.current 83 1.1 darrenr echo "Using current config as base for $newname" 84 1.1 darrenr else 85 1.1 darrenr orig=$2 86 1.1 darrenr fi 87 1.1 darrenr 88 1.1 darrenr if [ -z "`expr $orig : 'etc.\(.*\)'`" ] ; then 89 1.1 darrenr orig=etc.$orig 90 1.1 darrenr fi 91 1.1 darrenr 92 1.2 darrenr if [ ! -d /etc/$orig ] ; then 93 1.2 darrenr echo "Original directory /etc/$orig does not exist." 94 1.2 darrenr exit 1; 95 1.2 darrenr fi 96 1.1 darrenr mkdir -m 755 /etc/$dir 97 1.6 seb cd /etc/$orig 98 1.6 seb pax -rw -pe . /etc/$dir 99 1.1 darrenr echo "/etc/$dir has now been created and populated." 100 1.1 darrenr exit 0 101