=================================================================== RCS file: /cvs/openbsd/update_openbsd/update_openbsd,v retrieving revision 1.20 retrieving revision 1.38 diff -u -r1.20 -r1.38 --- openbsd/update_openbsd/update_openbsd 2009/04/25 01:14:12 1.20 +++ openbsd/update_openbsd/update_openbsd 2012/04/19 05:03:47 1.38 @@ -1,5 +1,5 @@ #!/bin/sh -# $RedRiver: update_openbsd,v 1.19 2009/03/14 01:09:23 andrew Exp $ +# $AFresh1: update_openbsd,v 1.37 2010/06/17 22:39:09 andrew Exp $ installed_sets() { local misc=/usr/share/doc/README @@ -24,7 +24,7 @@ fi done - sendmail -d0.1 root < /dev/null | grep -q SASL + sendmail -d0.1 --badoption /dev/null | grep -q SASL if [ $? == 0 ]; then echo -n ' sendmail-smtp_auth' fi @@ -191,6 +191,18 @@ done } +follow_symlink () { + local _file=$1 + # This could go circular, but I dunno how to fix that. + if [ -h $_file ]; then + follow_symlink $( file $_file | + grep 'symbolic link' | + sed -e s/^.*\\\`// -e s/\\\'\$// ) + else + echo $_file + fi +} + check_sum () { local _type=$1 echo "### CHECKING $_type SUMS ###" @@ -253,7 +265,7 @@ } -install_kernel() { +install_kernels() { echo '### INSTALLING KERNEL ###' if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then echo ${0##*/} must be run as root or SUDO must be set! >&2 @@ -283,22 +295,20 @@ 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` + _true_bsd=${_true_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 @@ -306,31 +316,43 @@ 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 + if [ -e "/${_b}" ]; then echo Copying $_b to / $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_b} if [ $? -ne 0 ]; then 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 if [ ! -h /bsd ]; then + cd / if [ -e /bsd.mp ]; then echo linking /bsd.mp to /bsd - $SUDO ln -sf /bsd.mp /bsd + $SUDO ln -sf /bsd.mp bsd else echo linking /bsd.sp to /bsd - $SUDO ln -sf /bsd.sp /bsd + $SUDO ln -sf /bsd.sp bsd fi if [ $? -ne 0 ]; then echo ERROR: Could not symlink new kernel! >&2 exit 1 fi + cd $OLDPWD fi + + if [ -z $_installed_new_bsd ]; then + echo WARNING: Did not replace $_true_bsd kernel >&2 + fi } install_sets() { @@ -349,13 +371,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 @@ -375,9 +405,13 @@ ${RELEASEDIR}/sendmail-smtp_auth fi if [ -e ${RELEASEDIR}/sendmail-smtp_auth ]; then - install -o root -g smmsp -m 2555 \ + 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/local/libexec/sendmail/sendmail + /usr/libexec/sendmail/sendmail echo Installed sendmail with smtp_auth fi @@ -418,6 +452,7 @@ fi local _v=$FILE_VER + local _args="" if [ -e etc${_v}.tgz ]; then _args="$_args -s etc${_v}.tgz" fi @@ -428,7 +463,9 @@ 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 @@ -453,7 +490,7 @@ INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} -CHECKSUM_TYPES=${CHECKSUM_TYPE:=SHA256 MD5} +CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5} set_version local _error=$? @@ -490,10 +527,14 @@ $SUDO -v fi -install_kernel +install_kernels +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 ###' @@ -501,7 +542,24 @@ else echo Instructions for updating to the new version available from - echo " http://www.openbsd.org/faq/upgrade${_v}.html" + if [ X"snapshots" == X"$FORCE_DIR" ]; then + echo " http://www.openbsd.org/faq/current.html" + else + echo " http://www.openbsd.org/faq/upgrade${FILE_VER}.html" + fi fi echo New kernel installed. Please reboot! +if [ -e /sbin/oreboot ]; then + echo Possibly using /sbin/oreboot +fi + +local _send_dmesg=`dirname $0`/send_dmesg +if [ -e "$_send_dmesg" ]; then + if [ -e $RELEASEDIR/.send_dmesg ]; then + $_send_dmesg + rm -f $RELEASEDIR/.send_dmesg + elif [ X"$CUR_VER" != X"$NEW_VER" ]; then + touch $RELEASEDIR/.send_dmesg + fi +fi