scripting the buildworld/installworld process

Charles Howse chowse at charter.net
Mon Sep 1 11:15:07 PDT 2003


Well, here are my current versions of the update scripts.
I hope they are complicated enough for everyone. <grin>

Contrary to Kent's suggestion, I'm only logging the last 10 lines of the
important commands.  I defer to his experience and knowledge, but I
can't see the value in logging 7500 lines of code that executed
correctly.  Let's just get the last 10 lines, since that's where any
errors will be.

Comments, suggestions, flames?

------------------------------

#!/usr/local/bin/bash
#
# Update the system, run in multi-user mode.
#
# Checks the exit status of all important commands,
# Exits on exit status of anything other than 0, 
# Prints the name of the command that failed.
# Logs the last 10 lines of screen output for important commands.

bailout() {
if [ $? -ne 0 ] ; then
    echo "Update1 has bailed out on error $?"
    echo "The command that failed was..."
    echo $cmd
    exit
fi
}

echo -n "Have you read /usr/src/UPDATING? [y/n]: "
read a
if [ $a = n ] ; then
    less /usr/src/UPDATING
    exit
fi

echo -n "Have you merged /etc/group and /usr/src/etc/group? [y/n]: "
read b
if [ $b = n ] ; then
    diff -c /etc/group /usr/src/etc/group | less
    exit
fi

echo -n "Have you merged /etc/master.passwd and
/usr/src/etc/master.passwd? [y/n]: "
read c
if [ $c = n ] ; then
    diff -c /etc/master.passwd /usr/src/etc/master.passwd
    exit
fi

cmd="cp /disk2/larry/etc/make.conf /etc"
cp /disk2/larry/etc/make.conf /etc
bailout

cmd="cp /disk2/larry/usr/src/sys/i386/conf/CUSTOM
/usr/src/sys/i386/conf"
cp /disk2/larry/usr/src/sys/i386/conf/CUSTOM /usr/src/sys/i386/conf
bailout

cmd="Clean out /usr/obj"
echo -n "Clean out /usr/obj? [y/n]: "
read d
if [ $d = y ] ; then
    cd /usr/obj
    chflags -R noschg *
    rm -rf *
fi
bailout

echo -n "Continue with build? [y/n]: "
read e
if [ $e = n ] ; then
    exit
fi

cmd="make buildworld"
cd /usr/src
echo "Time for buildworld:" > /var/log/build/build.log
\time -aho /var/log/build/build.log make buildworld 2>&1 |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/buildworld-`date
"+%Y%m%d-%H%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

cmd="make buildkernel KERNCONF=GENERIC"
echo "Time for buildkernel GENERIC:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make buildkernel KERNCONF=GENERIC
2>&1 |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/buildkernG-`date
"+%Y%m%d-%H%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

cmd="make installkernel KERNCONF=GENERIC"
echo "Time for installkernel GENERIC:" >> /var/log/build/build.log
\time -aho  /var/log/build/build.log make installkernel KERNCONF=GENERIC
2>&1 |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/installkernG-`date
"+%Y%m%d-%H%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

cmd="make buildkernel KERNCONF=CUSTOM"
cp /boot/kernel /boot/kernel.GENERIC
echo "Time for buildkernel CUSTOM:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make buildkernel KERNCONF=CUSTOM
2>&1 |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/buildkernC-`date
"+%Y%m%d-%H%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

cmd="make installkernel KERNCONF=CUSTOM"
echo "Time for installkernel CUSTOM:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make installkernel KERNCONF=CUSTOM
2>&1 |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/installkernC-`date
"+%Y%m%d-%H%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

echo "Reboot to single user mode and run /disk2/larry/bin/update2"

------------------------------

#!/usr/local/bin/bash
#
# Update the system. Run in single user mode.

bailout () {
if [ $? -ne 0 ] ; then
    echo "Update2 has bailed out on exit status $?"
    echo "The command that failed was..."
    echo $cmd
    exit
fi
}

echo -n "Continue with installworld? [y/n]: "
read a 
if [ $a = n ] ; then
    exit
fi

cmd="make installworld"
echo -n "Time for installworld:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make installworld |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/instworld-`date
"+%Y%m%d-%H:%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

Cmd="cp -Rp /etc /etc.old"
if [ -d /etc.old ] ; then
    rm -r /etc.old
fi    
cp -Rp /etc /etc.old
Bailout

Cmd="rm -r /var/tmp/temproot"
if [ -d /var/tmp/temproot ] ; then
    cd /var/tmp/temproot
    chflags -R noschg *
    cd
    rm -r /var/tmp/temproot
Fi
bailout

Cmd="mergemaster -a"
/usr/sbin/mergemaster -a
bailout

Cmd="./MAKEDEV all"
cd /dev
./MAKEDEV all
bailout

cmd="make clean"
cd /usr/src/release/sysinstall
echo -n "Time for make clean:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make clean |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/make_clean-`date
"+%Y%m%d-%H:%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

cmd="make all install"
echo "Time for make all install:" >> /var/log/build/build.log
\time -aho /var/log/build/build.log make all install |
tee /var/log/build/tmp.log |
tail /var/log/build/tmp.log > /var/log/build/make_all_install-`date
"+%Y%m%d-%H:%M"`.log
bailout
echo >> /var/log/build/build.log
rm /var/log/build/tmp.log

echo "Finished!  Do ps and top work?"




More information about the freebsd-questions mailing list