On Tue, Dec 04, 2012 at 09:44:59PM +0000, Heptas Torres wrote:
> Thanks. What I meant was more things like the script
> http://gouloum.fr/code/script/install_snapshot.sh - this seems a bit
> outdated and was wondering whether people use something similar for
> system upgrades plus some package upgrades automatically. I was just
> curious about what the best practices for automatic upgrades and syncs
> are.
This is something that I use. Though that script only fetches the
neccessary files and copies bsd.rd to /

The script saves everything in your CWD. After running the script I just
boot bsd.rd, run the upgrade and do sysmerge and pkg_add -u afterwards,
so the main benefit is keeping the downtime small and the script can
detect if the mirror you're fetching your sets from is out of sync.

Frank.

#!/bin/ksh
# $Id: snapshotset.sh,v 1.4 2012/12/04 21:49:22 fab Exp $

ARCH=$(uname -m)
MIRROR=http://openbsd.cs.fau.de/
LOCATION=pub/OpenBSD/snapshots/${ARCH}/
export showchanges=0
force=0

[[ "X$1" = 'X-f' ]] && force=1

echo "fetching SHA256 from ${MIRROR}"
ftp ${MIRROR}${LOCATION}SHA256
echo "\nfetching SHA256 from ftp.openbsd.org"
ftp -o SHA256.master http://ftp.openbsd.org/${LOCATION}SHA256

printf 'comaparing SHA256 files '
if [[ $(diff -u SHA256 SHA256.master) >/dev/null ]];
then
        print 'failed. mirror out of sync or compromised\n'
        diff -u SHA256.master SHA256
        [[ $force -eq 1 ]] || exit 2
else
        print 'ok.\n'
fi

echo "\nfetching index.txt: "
ftp ${MIRROR}${LOCATION}/index.txt
echo "\nfetching INSTALL.${ARCH}"
ftp ${MIRROR}${LOCATION}/INSTALL.${ARCH}

for i in bsd bsd.rd bsd.mp;
do
        printf "checking %s:" "$i"
        [[ -f $i && $(grep "^$(sha256 $i)$" SHA256) >/dev/null ]] && \
            echo " uptodate." || \
        {
                echo " missing or cksum mismatch, fetching."
                ftp ${MIRROR}${LOCATION}$i
                showchanges=1
        }
done

{ grep "tgz$" index.txt | awk '{ print $10 }'; }|&
while read -p basepkg
do
        printf "checking %s:" "$basepkg"
        [[ -f $basepkg && $(grep "^$(sha256 $basepkg)" SHA256) >/dev/null ]] && 
\
            echo " uptodate." || \
        {
                echo " missing or cksum mismatch, fetching."
                ftp ${MIRROR}${LOCATION}${basepkg}      
                showchanges=1
        }
done 3>&-

printf "checking /bsd.rd:"
if [[ "$(sha256 -q bsd.rd)" = "$(sha256 -q /bsd.rd)" ]];
then
        printf " uptodate.\n" 
else
        printf "Copying bsd.rd to /\n"
        su root -c "cp bsd.rd /bsd.rd"
fi

if [[ $showchanges -eq 1 ]];
then
        echo "Fetching changes from current.html"
        ftp -o - -V http://www.openbsd.org/faq/current.html | \
            egrep '<li><a href="#.*">[0-9]{4}/[0-9]{2}/[0-9]{2} - .*</a>' | \
            egrep -o '[0-9]{4}/[0-9]{2}/[0-9]{2} - [^<]+'
fi

unset showchanges

-- 
Frank Brodbeck <f...@guug.de>

Reply via email to