=================================================================== RCS file: /cvs/openbsd/update_openbsd/update_openbsd,v retrieving revision 1.6 retrieving revision 1.14 diff -u -r1.6 -r1.14 --- openbsd/update_openbsd/update_openbsd 2008/10/11 23:14:25 1.6 +++ openbsd/update_openbsd/update_openbsd 2008/11/19 22:38:00 1.14 @@ -1,18 +1,6 @@ #!/bin/sh -# $RedRiver: update_openbsd,v 1.5 2008/10/11 22:12:33 andrew Exp $ +# $RedRiver: update_openbsd,v 1.13 2008/11/19 22:35:56 andrew Exp $ -SYSMERGE=/usr/sbin/sysmerge -MIRROR=ftp://ftp.openbsd.org/pub/OpenBSD -FTP_CMD='ftp -V' - -if [ -e /etc/update_openbsd.conf ]; then - . /etc/update_openbsd.conf -fi - -if [ -e ${HOME}/.update_openbsdrc ]; then - . ${HOME}/.update_openbsdrc -fi - installed_sets() { local misc=/usr/share/doc/README local man=/usr/share/man/cat1/intro.0 @@ -37,6 +25,19 @@ done } +sets_exist () { + local _proto=${FTP%%://*} + + if [ X"ftp" == X"${_proto}" ]; then + echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/ | awk '{ print $9 }' + elif [ X"http" == X"${_proto}" ]; then + ${FTP_CMD} -V -o - ${FTP}/ | grep '"base[0-9][0-9].tgz' | sed -e 's/.*\(base..\.tgz\).*/\1/' + else + echo Unsupported FTP ${FTP} >&2 + return 2 + fi +} + set_version() { CUR_VER=`uname -r` NEW_VER=`dc -e "$CUR_VER 0.1 + p"` @@ -45,9 +46,9 @@ local _cv=`echo $CUR_VER | sed -e 's/\.//'` local _nv=`echo $NEW_VER | sed -e 's/\.//'` - local _v="" + local _v - if [ X"" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then + if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then _dir=$FORCE_DIR if [ -e ${_dir}/base${_nv}.tgz ]; then _v=$_nv @@ -72,23 +73,48 @@ fi if [ X"" == X"${_v}" ]; then - if [ X"" == X"${FORCE_DIR}" ]; then + if [ X"No" == X"${FORCE_DIR}" ]; then _dir=${NEW_VER} else _dir=${FORCE_DIR} fi FTP=${MIRROR}/${_dir}/`machine` - local _file=`echo "ls base${_cv}.tgz" | ${FTP_CMD} ${FTP}/ | awk '{ print $9 }'` + _file=`sets_exist` - if [ X"base${_cv}.tgz" == X"${_file}" ]; then + if [ X"" == X"${_file}" ]; then + if [ X"No" != X"$FORCE_DIR" ]; then + echo No sets in forced [${FTP}] >&2 + return 2 + fi + NEW_VER=$CUR_VER - _v=$_cv + _dir=${NEW_VER} + FTP=${MIRROR}/${_dir}/`machine` + + _file=`sets_exist` + if [ X"" == X"${_file}" ]; then + echo No sets in [${FTP}] >&2 + return 2 + fi + fi + + _v=${_file##*base} + _v=${_v%.tgz*} + + if [ X"" == X"${_v}" ]; then + echo No version in file [$_file] >&2 + return 2 + elif [ X"${_cv}" == X"${_v}" ]; then + NEW_VER=$CUR_VER + elif [ X"${_nv}" == X"${_v}" ]; then + NEW_VER=$NEW_VER else - _v=$_nv + echo Invalid version [$_v] >&2 + return 2 fi - if [ X"" == X"$FORCE_DIR" ]; then + if [ X"No" == X"$FORCE_DIR" ]; then _dir=$NEW_VER fi @@ -96,12 +122,13 @@ if [ X"" == X"${_v}" ]; then echo ERROR: Unable to determine file version! >&2 - exit 1 + return 1 fi if [ X"" == X"$RELEASEDIR" ]; then RELEASEDIR=`pwd`/$_dir fi + FILE_VER=$_v FTP=${MIRROR}/${_dir}/`machine` } @@ -110,7 +137,7 @@ echo '### GETTING SETS ###' if [ X"" == X"$FTP" ]; then echo ERROR: No FTP site set! >&2 - exit 1 + return 1 fi mkdir -p ${RELEASEDIR} @@ -137,12 +164,12 @@ $FTP_CMD ${FTP}/MD5 fi - ls bsd* *.tgz > index + ls bsd* *.tgz | sed -e 's/\(.*\)/(\1)/' > index grep -f index MD5 | md5 -c if [ $? -ne 0 ]; then echo ERROR: MD5 does not match! >&2 - exit 1 + return 1 fi } @@ -177,8 +204,9 @@ local _v=$FILE_VER if [ -e base${_v}.tgz ]; then - echo Extracting new firmware from base${_v}.tgz - $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz "*etc/firmware/*" + echo Extracting new firmware and ifconfig from base${_v}.tgz + $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz \ + ./etc/firmware ./sbin/ifconfig fi $SUDO rm -f /obsd @@ -265,6 +293,10 @@ update_etc() { echo '### UPDATING ETC ###' + if [ ! -e $SYSMERGE ]; then + SYSMERGE= + fi + if [ X"" == X"$SYSMERGE" ]; then if [ -e /var/tmp/temproot ]; then MERGEMASTER=`which mergemaster` @@ -310,32 +342,46 @@ fi } -DESTDIR=${DESTDIR:=/} -PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/} -INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} +if [ -e /etc/update_openbsd.conf ]; then + . /etc/update_openbsd.conf +fi -if [ X"" != X"$SYSMERGE" ]; then - if [ ! -e $SYSMERGE ]; then - SYSMERGE= - fi +if [ -e ${HOME}/.update_openbsdrc ]; then + . ${HOME}/.update_openbsdrc fi +MIRROR=${MIRROR:=ftp://ftp.openbsd.org/pub/OpenBSD} +FTP_CMD=${FTP_CMD:=ftp -V} +PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/} + +DESTDIR=${DESTDIR:=/} +SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge} +FORCE_DIR=${FORCE_DIR:=No} + +INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} + set_version +local _error=$? echo echo "-= update_openbsd - helper script to update OpenBSD =-" echo "------------------------------------------------------" echo -echo "RELEASEDIR: $RELEASEDIR" -echo " DESTDIR: $DESTDIR" -echo " CUR_VER: $CUR_VER" -echo " NEW_VER: $NEW_VER" -#echo " FILE_VER: $FILE_VER" -echo " SUDO: $SUDO" -echo " SYSMERGE: $SYSMERGE" -echo " MIRROR: $MIRROR" -echo " SETS: $INSTALLED_SETS" +echo " SUDO: $SUDO" +echo " SYSMERGE: $SYSMERGE" +echo " MIRROR: $MIRROR" +echo " RELEASEDIR: $RELEASEDIR" +echo " DESTDIR: $DESTDIR" +echo "INSTALLED_SETS: $INSTALLED_SETS" echo +echo " CUR_VER: $CUR_VER" +echo " NEW_VER: $NEW_VER" +#echo " FILE_VER: $FILE_VER" +echo + +if [ ${_error} -ne 0 ]; then + exit ${_error} +fi get_sets