[BACK]Return to update_openbsd CVS log [TXT][DIR] Up to [local] / openbsd / update_openbsd

Diff for /openbsd/update_openbsd/update_openbsd between version 1.20 and 1.39

version 1.20, 2009/04/25 01:14:12 version 1.39, 2012/12/08 19:52:08
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.19 2009/03/14 01:09:23 andrew Exp $  # $AFresh1: update_openbsd,v 1.38 2012/04/19 04:03:47 andrew Exp $
   
 installed_sets() {  installed_sets() {
     local misc=/usr/share/doc/README      local misc=/usr/share/doc/README
Line 24 
Line 24 
         fi          fi
     done      done
   
     sendmail -d0.1 root < /dev/null | grep -q SASL      sendmail -d0.1 --badoption </dev/null 2>/dev/null | grep -q SASL
     if [ $? == 0 ]; then      if [ $? == 0 ]; then
         echo -n ' sendmail-smtp_auth'          echo -n ' sendmail-smtp_auth'
     fi      fi
 }  }
   
   kernel_file_version() {
       echo exit | config -e $1 | grep -A1 ^OpenBSD
       #what $1 | sed -ne 's/[[:blank:]]\{1,\}//p'
   }
   
 version_in() {  version_in() {
         local _proto=${FTP%%://*}          local _proto=${FTP%%://*}
         local _file          local _file
Line 149 
Line 154 
     if [ X"" != X"${MIRROR}" ]; then      if [ X"" != X"${MIRROR}" ]; then
         FTP=${MIRROR}/${_dir}/`machine`          FTP=${MIRROR}/${_dir}/`machine`
     fi      fi
   
       BOOT_KERNEL=`( \
           echo bsd; \
           [ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \
               s///; s/^.*://; s/ .*$//' /boot.conf \
       ) | tail -1`
       BOOT_KERNEL="/${BOOT_KERNEL#/}"
       BOOT_KERNEL=`follow_symlink $BOOT_KERNEL`
   
       BOOT_KERNEL_VERSION=`kernel_file_version $BOOT_KERNEL`
   
       BOOTED_KERNEL_VERSION=`sysctl -n kern.version`
       NEW_KERNEL_VERSION=""
   
       # We want to default to what we had
       INSTALL_KERNELS="${BOOT_KERNEL#/}"
       # with a second option of an mp kernel if is is a likely candidate
       if [ X"$INSTALL_KERNELS" != X"bsd.mp" ]; then
           local _ncpu=$(sysctl -n hw.ncpufound)
           [ $_ncpu -gt 1 ] && INSTALL_KERNELS="$INSTALL_KERNELS bsd.mp"
       fi
       # or just bsd otherwise
       if [ X"${INSTALL_KERNELS% *}" != X"bsd" ]; then
           INSTALL_KERNELS="$INSTALL_KERNELS bsd"
       fi
       BOOT_KERNELS=$INSTALL_KERNELS
       INSTALL_KERNELS="$INSTALL_KERNELS bsd.rd"
 }  }
   
 get_sets() {  get_sets() {
Line 163 
Line 195 
   
     local _v=$FILE_VER      local _v=$FILE_VER
   
     for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; do      for _b in $INSTALL_KERNELS; do
         if [ -e /${_b} -a ! -e ./${_b} ]; then          if [ -e /${_b} -a ! -e ./${_b} ]; then
             echo $FTP_CMD ${FTP}/${_b}              echo $FTP_CMD ${FTP}/${_b}
             $FTP_CMD ${FTP}/${_b}              $FTP_CMD ${FTP}/${_b}
Line 191 
Line 223 
     done      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 () {  check_sum () {
     local _type=$1      local _type=$1
     echo "### CHECKING $_type SUMS ###"      echo "### CHECKING $_type SUMS ###"
Line 217 
Line 261 
     local _missing_sets      local _missing_sets
     local _v=$FILE_VER      local _v=$FILE_VER
   
     for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; do      for _n in $INSTALL_KERNELS; do
         _b=${_b#/}          local _o=$_n
         local _n=$_b          [ X"bsd" == X"${_o}" -a -e /bsd.sp ] && _o=bsd.sp
         if [ X"bsd.sp" == X"${_n}" ]; then          if [ -e /${_o} -a ! -e ./${_n} ]; then
             _n=bsd              echo ${_o} does not exist
         fi  
         if [ -e /${_b} -a ! -e ./${_n} ]; then  
             echo ${_n} does not exist  
             _missing_sets=1              _missing_sets=1
         fi          fi
   
           if [ X"${BOOT_KERNEL}" == X"/${_o}" -a -e ./${_n} ]; then
               NEW_KERNEL_VERSION=`kernel_file_version ./${_n}`
           fi
     done      done
   
       if [ X"$NEW_KERNEL_VERSION" == X"" ]; then
           echo Missing replacement for boot kernel $BOOT_KERNEL >&2
           _missing_sets=1
       fi
   
     for _s in $INSTALLED_SETS; do      for _s in $INSTALLED_SETS; do
         local _file=${_s}${_v}.tgz          local _file=${_s}${_v}.tgz
         if [ ${_s} == sendmail-smtp_auth ]; then          if [ ${_s} == sendmail-smtp_auth ]; then
Line 253 
Line 303 
 }  }
   
   
 install_kernel() {  install_kernels() {
     echo '### INSTALLING KERNEL ###'      echo '### INSTALLING KERNEL ###'
     if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then      if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
         echo ${0##*/} must be run as root or SUDO must be set! >&2          echo ${0##*/} must be run as root or SUDO must be set! >&2
Line 263 
Line 313 
     if [ X"" == X"$RELEASEDIR" ]; then      if [ X"" == X"$RELEASEDIR" ]; then
         echo ERROR: no source for new kernels! >&2          echo ERROR: no source for new kernels! >&2
         exit 1          exit 1
     else  
         cd $RELEASEDIR  
     fi      fi
   
     if [ ! -e bsd ]; then      echo "Backing up $BOOT_KERNEL to /obsd"
         echo ERROR: new bsd kernel does not exist! >&2      $SUDO ln -f $BOOT_KERNEL /obsd
       if [ $? -ne 0 ]; then
           echo "Error copying old kernel!" >&2
         exit 1          exit 1
     fi      fi
   
     if [ -e /bsd.mp -a ! -e bsd.mp ]; then      cd $RELEASEDIR
         echo ERROR: new bsd.mp kernel does not exist! >&2  
         exit 1  
     fi  
   
     if [ ! -e bsd.rd ]; then      for _b in $INSTALL_KERNELS; do
         echo ERROR: new bsd.rd kernel does not exist! >&2          $SUDO rm -f /nbsd
         exit 1          local _bd=$_b
     fi          [ X"${_b}" == X"bsd" ] && _bd="bsd.sp"
   
     local _v=$FILE_VER          local _is_boot=""
     if [ -e base${_v}.tgz ]; then          [ X"$BOOT_KERNEL" == X"/${_bd}" ] && _is_boot="# boot kernel"
         echo Extracting new firmware and ifconfig from base${_v}.tgz  
         $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz \          echo "Copying $_b to /$_bd $_is_boot"
                 ./etc/firmware ./sbin/ifconfig          $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_bd}
     fi          if [ $? -ne 0 ]; then
               echo ERROR: Could not copy new $_bd kernel! >&2
               exit 1
           fi
       done
   
     $SUDO rm -f /obsd      cd $OLDPWD
     $SUDO ln /bsd /obsd  
     if [ $? -ne 0 ]; then  
         echo "Error copying old kernel!"  
         exit 1  
     fi  
   
     for _b in bsd*; do      if [ ! -h /bsd ]; then
         $SUDO rm -f /nbsd              cd /
           for _b in $BOOT_KERNELS; do
         if [ X"${_b}" == X"bsd" ]; then              [ X"$_b" == X"bsd" ] && _b="bsd.sp"
             echo Copying bsd to /bsd.sp              if [ -e $_b ]; then
             $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp                  echo symlinking $_b to /bsd
             if [ $? -ne 0 ]; then                  $SUDO ln -sf $_b bsd
                 echo ERROR: Could not copy new SP kernel! >&2  
                 exit 1  
             fi  
         else  
             if [ -e /$_b ]; then  
                 echo Copying $_b to /  
                 $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_b}  
                 if [ $? -ne 0 ]; then                  if [ $? -ne 0 ]; then
                     echo ERROR: Could not copy new $_b kernel! >&2                      echo ERROR: Could not symlink new kernel! >&2
                     exit 1                      exit 1
                 fi                  fi
                   break
             fi              fi
         fi          done
     done              cd $OLDPWD
   
     if [ ! -h /bsd ]; then  
         if [ -e /bsd.mp ]; then  
             echo linking /bsd.mp to /bsd  
             $SUDO ln -sf /bsd.mp /bsd  
         else  
             echo linking /bsd.sp to /bsd  
             $SUDO ln -sf /bsd.sp /bsd  
         fi  
         if [ $? -ne 0 ]; then  
             echo ERROR: Could not symlink new kernel! >&2  
             exit 1  
         fi  
     fi      fi
 }  }
   
Line 349 
Line 376 
   
     local _v=$FILE_VER      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          _path=$DESTDIR
         if [ X"etc${_v}.tgz"  == X"$_f" \          if [ X"etc${_v}.tgz"  == X"$_f" \
             -o X"xetc${_v}.tgz" == X"$_f" ]; then              -o X"xetc${_v}.tgz" == X"$_f" ]; then
             if [ X"" != X"$SYSMERGE" ]; then              [ X"" != X"$SYSMERGE" ] && continue
                 continue  
             fi  
             _path=/var/tmp/temproot              _path=/var/tmp/temproot
         fi          fi
   
Line 375 
Line 410 
             ${RELEASEDIR}/sendmail-smtp_auth              ${RELEASEDIR}/sendmail-smtp_auth
     fi      fi
     if [ -e ${RELEASEDIR}/sendmail-smtp_auth ]; then      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 \              ${RELEASEDIR}/sendmail-smtp_auth \
             /usr/local/libexec/sendmail/sendmail              /usr/libexec/sendmail/sendmail
   
         echo Installed sendmail with smtp_auth          echo Installed sendmail with smtp_auth
     fi      fi
Line 418 
Line 457 
         fi          fi
   
         local _v=$FILE_VER          local _v=$FILE_VER
           local _args=""
         if [ -e etc${_v}.tgz ]; then          if [ -e etc${_v}.tgz ]; then
             _args="$_args -s etc${_v}.tgz"              _args="$_args -s etc${_v}.tgz"
         fi          fi
Line 428 
Line 468 
             echo ERROR: No upgrade sets found! >&2              echo ERROR: No upgrade sets found! >&2
         else          else
             echo '### RUNNING SYSMERGE ###'              echo '### RUNNING SYSMERGE ###'
             _args="-a $_args"              if sysmerge 2>&1 | grep -- -a >/dev/null; then
                   _args="-a $_args"
               fi
             $SUDO $SYSMERGE $_args              $SUDO $SYSMERGE $_args
         fi          fi
     fi      fi
Line 453 
Line 495 
   
 INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}  INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
   
 CHECKSUM_TYPES=${CHECKSUM_TYPE:=SHA256 MD5}  CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5}
   
 set_version  set_version
 local _error=$?  local _error=$?
Line 462 
Line 504 
 echo "-= update_openbsd - helper script to update OpenBSD =-"  echo "-= update_openbsd - helper script to update OpenBSD =-"
 echo "------------------------------------------------------"  echo "------------------------------------------------------"
 echo  echo
 echo "          SUDO: $SUDO"  echo "           SUDO: $SUDO"
 echo "      SYSMERGE: $SYSMERGE"  echo "       SYSMERGE: $SYSMERGE"
 echo "        MIRROR: $MIRROR"  echo "         MIRROR: $MIRROR"
 echo "    RELEASEDIR: $RELEASEDIR"  echo "     RELEASEDIR: $RELEASEDIR"
 echo "       DESTDIR: $DESTDIR"  echo "        DESTDIR: $DESTDIR"
 echo "INSTALLED_SETS: $INSTALLED_SETS"  echo "    BOOT_KERNEL: $BOOT_KERNEL"
   echo "INSTALL_KERNELS: $INSTALL_KERNELS"
   echo " INSTALLED_SETS: $INSTALLED_SETS"
 echo  echo
 echo "       CUR_VER: $CUR_VER"  echo "        CUR_VER: $CUR_VER"
 echo "       NEW_VER: $NEW_VER"  echo "        NEW_VER: $NEW_VER"
 #echo "      FILE_VER: $FILE_VER"  #echo "       FILE_VER: $FILE_VER"
 echo  echo
   
 if [ ${_error} -ne 0 ]; then  if [ ${_error} -ne 0 ]; then
Line 484 
Line 528 
   
 check_sets || exit  check_sets || exit
   
   echo "Last booted:\n$BOOTED_KERNEL_VERSION"
   if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \
     -a X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then
       echo "Next boot (unless replaced):\n$BOOT_KERNEL_VERSION"
   fi
   if [ -n "$NEW_KERNEL_VERSION" ]; then
       echo "New $BOOT_KERNEL:\n$NEW_KERNEL_VERSION";
   else
       echo "\n!!! WARNING: Will not replace boot kernel $BOOT_KERNEL! !!!\n" >&2
       echo "ctrl+C to cancel, enter to continue anyway" >&2
       local _temp
       read _temp
   fi
   
 if [ X"" != X"$SUDO" ]; then  if [ X"" != X"$SUDO" ]; then
     echo Please enter your sudo password if prompted.      echo Please enter your sudo password if prompted.
     echo You may be asked for it again later in the process.      echo You may be asked for it again later in the process.
     $SUDO -v      $SUDO -v
 fi  fi
   
 install_kernel  install_kernels
   install_sets
   
 if [ $CUR_VER == $NEW_VER ]; then  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      update_etc
   
     echo '### UPDATING PACKAGES ###'      echo '### UPDATING PACKAGES ###'
Line 501 
Line 563 
   
 else  else
     echo Instructions for updating to the new version available from      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  fi
   
 echo New kernel installed.  Please reboot!  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

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.39

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>