NetBSD/sbin/newbtconf/newbtconf.sh
seb d7b1a9a6a6 Introduce a new feature for reverting multiple boot configurations i.e.
effectively making the currently selected configuration the only one
active and removing boot configuration selection menu.
This is accomplished by running 'newbtconf revert'.

From PR bin/17808 by myself. Thanks to gendalia and lukem for the help finding
the right keyword.

Approved by lukem.
2003-01-06 00:31:49 +00:00

101 lines
1.9 KiB
Bash

#!/bin/sh
#
# Setup a new config directory
#
if [ $# -lt 1 ] ; then
echo "Usage: $0 <newconfig> [<baseconfig>]"
echo "Usage: $0 init"
echo "Usage: $0 revert"
exit 1;
fi
dir=$1
FILES="defaultdomain fstab ifconfig.* inetd.conf mrouted.conf \
mygate myname netstart nsswitch.conf ntp.conf \
rc.conf rc.conf.d resolv.conf"
if [ $dir = init ] ; then
if [ -d /etc/etc.network -o -e /etc/etc.current ] ; then
echo "Error: multi-configuration already initialized"
exit 1
fi
dir=etc.network
cd /etc
mkdir -m 755 $dir
ln -s $dir etc.current
ln -s $dir etc.default
for i in ${FILES}; do
if [ -f $i -o -d $i ] ; then
mv $i $dir
ln -s etc.current/$i .
fi
done
echo "/etc/$dir has now been created and populated."
exit 0
fi
if [ $dir = revert ] ; then
if [ ! -d /etc/etc.current ] ; then
echo "Error: multi-configuration not initialized"
exit 1
fi
cd /etc
for i in ${FILES}; do
if [ -f $i -o -d $i ] ; then
stat="`ls -ld $i`"
case x"$stat" in
xl*) :;;
x*)
echo "$i: not a symlink, skipping"
continue ;;
esac
linkto="${stat##*-> }"
case x"$linkto" in
xetc.current/*) :;;
x*)
echo "$i: does not symlink to etc.current, skipping"
continue ;;
esac
if [ -f $i ] ; then
rm $i
cp -p $linkto $i
else
rm $i
( cd etc.current && pax -rw -pe $i /etc )
fi
fi
done
rm etc.current
rm etc.default
exit 0
fi
if [ "`expr $dir : 'etc\.\(.*\)'`" != $dir ] ; then
dir=etc.$dir
fi
if [ -e /etc/$dir ] ; then
echo "Error: $dir already exists"
exit 1;
fi
newname=`expr $dir : 'etc.\(.*\)'`
if [ $# -lt 2 ] ; then
orig=etc.current
echo "Using current config as base for $newname"
else
orig=$2
fi
if [ -z "`expr $orig : 'etc.\(.*\)'`" ] ; then
orig=etc.$orig
fi
if [ ! -d /etc/$orig ] ; then
echo "Original directory /etc/$orig does not exist."
exit 1;
fi
mkdir -m 755 /etc/$dir
cd /etc/$orig
pax -rw -pe . /etc/$dir
echo "/etc/$dir has now been created and populated."
exit 0