=================================================================== RCS file: /cvs/openbsd/update_openbsd/update_openbsd,v retrieving revision 1.17 retrieving revision 1.27 diff -u -r1.17 -r1.27 --- openbsd/update_openbsd/update_openbsd 2009/01/14 17:58:40 1.17 +++ openbsd/update_openbsd/update_openbsd 2009/12/04 04:26:36 1.27 @@ -1,5 +1,5 @@ #!/bin/sh -# $RedRiver: update_openbsd,v 1.16 2009/01/13 21:47:49 andrew Exp $ +# $RedRiver: update_openbsd,v 1.26 2009/10/26 19:52:23 andrew Exp $ installed_sets() { local misc=/usr/share/doc/README @@ -23,6 +23,11 @@ echo -n " $_d" fi done + + sendmail -d0.1 -bt < /dev/null | grep -q SASL + if [ $? == 0 ]; then + echo -n ' sendmail-smtp_auth' + fi } version_in() { @@ -166,32 +171,53 @@ done for _s in $INSTALLED_SETS; do - if [ ! -e ./${_s}${_v}.tgz ]; then - echo $FTP_CMD ${FTP}/${_s}${_v}.tgz - $FTP_CMD ${FTP}/${_s}${_v}.tgz + local _file=${_s}${_v}.tgz + if [ ${_s} == sendmail-smtp_auth ]; then + _file=${_s}.gz fi + + if [ ! -e ./${_file} ]; then + echo $FTP_CMD ${FTP}/${_file} + $FTP_CMD ${FTP}/${_file} + fi done - if [ ! -e MD5 ]; then - echo $FTP_CMD ${FTP}/MD5 - $FTP_CMD ${FTP}/MD5 + local _type + for _type in $CHECKSUM_TYPES; do + if [ ! -e $_type ]; then + echo $FTP_CMD ${FTP}/$_type + $FTP_CMD ${FTP}/$_type + fi + done +} + +follow_symlink () { + local _file=$1 + local _next=$( file $_file | + grep 'symbolic link' | + sed -e s/^.*\\\`// -e s/\\\'\$// ) + if [ -h $_next ]; then + follow_symlink $_next + else + echo $_next fi } -check_md5() { - echo '### CHECKING MD5 ###' +check_sum () { + local _type=$1 + echo "### CHECKING $_type SUMS ###" cd $RELEASEDIR - if [ ! -e MD5 ]; then - echo MD5 File does not exist! + if [ ! -e $_type ]; then + echo $_type File does not exist! return 1 fi - ls bsd* *.tgz | sed -e 's/\(.*\)/(\1)/' > index - grep -f index MD5 | md5 -c + ls bsd* *gz | sed -e 's/\(.*\)/(\1)/' > index + grep -f index $_type | sum -c if [ $? -ne 0 ]; then - echo ERROR: MD5 does not match! >&2 + echo ERROR: $_type does not match! >&2 return 1 fi } @@ -200,6 +226,7 @@ echo '### CHECKING SETS ###' cd $RELEASEDIR + local _missing_sets local _v=$FILE_VER for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; do @@ -210,16 +237,31 @@ fi if [ -e /${_b} -a ! -e ./${_n} ]; then echo ${_n} does not exist + _missing_sets=1 fi done for _s in $INSTALLED_SETS; do - if [ ! -e ./${_s}${_v}.tgz ]; then - echo ${_s}${_v}.tgz does not exist + local _file=${_s}${_v}.tgz + if [ ${_s} == sendmail-smtp_auth ]; then + _file=${_s}.gz fi + if [ ! -e ./${_file} ]; then + echo ${_file} does not exist + _missing_sets=1 + fi done - check_md5 + if [ X"" == X"${_missing_sets}" ]; then + echo All OK + fi + + local _type + for _type in $CHECKSUM_TYPES; do + if [ -e $_type ]; then + check_sum $_type + fi + done } @@ -253,22 +295,19 @@ fi local _v=$FILE_VER - if [ -e base${_v}.tgz ]; then - 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 $SUDO ln /bsd /obsd if [ $? -ne 0 ]; then - echo "Error copying old kernel!" + echo "Error copying old kernel!" >&2 exit 1 fi + local _true_bsd=`follow_symlink /bsd` + local _installed_new_bsd + for _b in bsd*; do $SUDO rm -f /nbsd - if [ X"${_b}" == X"bsd" ]; then echo Copying bsd to /bsd.sp $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp @@ -276,6 +315,9 @@ echo ERROR: Could not copy new SP kernel! >&2 exit 1 fi + if [ X"${_true_bsd}" == X"/bsd.sp" ]; then + _installed_new_bsd=1 + fi else if [ -e /$_b ]; then echo Copying $_b to / @@ -284,6 +326,9 @@ echo ERROR: Could not copy new $_b kernel! >&2 exit 1 fi + if [ X"${_true_bsd}" == X"/${_b}" ]; then + _installed_new_bsd=1 + fi fi fi done @@ -301,6 +346,10 @@ exit 1 fi fi + + if [ -z $_installed_new_bsd ]; then + echo WARNING: Did not replace $_true_bsd kernel >&2 + fi } install_sets() { @@ -319,13 +368,21 @@ local _v=$FILE_VER - for _f in *${_v}.tgz; do + if [ $CUR_VER != $NEW_VER -a ! -e /sbin/oreboot ]; then + $SUDO cp /sbin/reboot /sbin/oreboot + if [ $? -ne 0 ]; then + echo "Error copying old reboot command!" >&2 + exit 1 + fi + echo "/sbin/reboot copied to /sbin/oreboot" + fi + + local _sets=`ls *${_v}.tgz | grep -v ^base ` + for _f in ${_sets} base${_v}.tgz; do _path=$DESTDIR if [ X"etc${_v}.tgz" == X"$_f" \ -o X"xetc${_v}.tgz" == X"$_f" ]; then - if [ X"" != X"$SYSMERGE" ]; then - continue - fi + [ X"" != X"$SYSMERGE" ] && continue _path=/var/tmp/temproot fi @@ -339,6 +396,22 @@ done echo Extracted all sets. + + if [ -e ${RELEASEDIR}/sendmail-smtp_auth.gz ]; then + gzcat ${RELEASEDIR}/sendmail-smtp_auth.gz > \ + ${RELEASEDIR}/sendmail-smtp_auth + fi + if [ -e ${RELEASEDIR}/sendmail-smtp_auth ]; then + if ! pkg_info -qe 'cyrus-sasl-*'; then + $SUDO pkg_add -i cyrus-sasl + fi + + $SUDO install -o root -g smmsp -m 2555 \ + ${RELEASEDIR}/sendmail-smtp_auth \ + /usr/libexec/sendmail/sendmail + + echo Installed sendmail with smtp_auth + fi } update_etc() { @@ -386,12 +459,15 @@ echo ERROR: No upgrade sets found! >&2 else echo '### RUNNING SYSMERGE ###' - _args="-a $_args" + if sysmerge 2>&1 | grep -- -a >/dev/null; then + _args="-a $_args" + fi $SUDO $SYSMERGE $_args fi fi } + if [ -e /etc/update_openbsd.conf ]; then . /etc/update_openbsd.conf fi @@ -410,6 +486,8 @@ INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} +CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5} + set_version local _error=$? @@ -434,7 +512,7 @@ fi if [ X"" != X"${FTP}" ]; then - get_sets || exit + get_sets fi check_sets || exit @@ -446,9 +524,13 @@ fi install_kernel +install_sets if [ $CUR_VER == $NEW_VER ]; then - install_sets + if [ -e /sbin/oreboot ]; then + echo Removing /sbin/oreboot + $SUDO rm -f /sbin/oreboot + fi update_etc echo '### UPDATING PACKAGES ###' @@ -460,3 +542,6 @@ fi echo New kernel installed. Please reboot! +if [ -e /sbin/oreboot ]; then + echo Possibly using /sbin/oreboot +fi