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