[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.21 and 1.40

version 1.21, 2009/05/13 05:26:32 version 1.40, 2012/12/08 19:54:08
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.20 2009/04/25 00:14:12 andrew Exp $  # $AFresh1: update_openbsd,v 1.39 2012/12/08 19:52:08 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 184 
Line 216 
   
     local _type      local _type
     for _type in $CHECKSUM_TYPES; do      for _type in $CHECKSUM_TYPES; do
         if [ ! -e $_type ]; then          [ -e $_type ] && break
             echo $FTP_CMD ${FTP}/$_type          echo $FTP_CMD ${FTP}/$_type
             $FTP_CMD ${FTP}/$_type          $FTP_CMD ${FTP}/$_type
         fi  
     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 260 
     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 302 
 }  }
   
   
 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 312 
     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
         exit 1  
     fi  
   
     if [ -e /bsd.mp -a ! -e bsd.mp ]; then  
         echo ERROR: new bsd.mp kernel does not exist! >&2  
         exit 1  
     fi  
   
     if [ ! -e bsd.rd ]; then  
         echo ERROR: new bsd.rd kernel does not exist! >&2  
         exit 1  
     fi  
   
     local _v=$FILE_VER  
   
     $SUDO rm -f /obsd  
     $SUDO ln /bsd /obsd  
     if [ $? -ne 0 ]; then      if [ $? -ne 0 ]; then
         echo "Error copying old kernel!" >&2          echo "Error copying old kernel!" >&2
         exit 1          exit 1
     fi      fi
   
     for _b in bsd*; do      cd $RELEASEDIR
   
       for _b in $INSTALL_KERNELS; do
         $SUDO rm -f /nbsd          $SUDO rm -f /nbsd
           local _bd=$_b
           [ X"${_b}" == X"bsd" ] && _bd="bsd.sp"
   
         if [ X"${_b}" == X"bsd" ]; then          local _is_boot=""
             echo Copying bsd to /bsd.sp          [ X"$BOOT_KERNEL" == X"/${_bd}" ] && _is_boot="# boot kernel"
             $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp  
             if [ $? -ne 0 ]; then          echo "Copying $_b to /$_bd $_is_boot"
                 echo ERROR: Could not copy new SP kernel! >&2          $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_bd}
                 exit 1          if [ $? -ne 0 ]; then
             fi              echo ERROR: Could not copy new $_bd kernel! >&2
         else              exit 1
             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  
             fi  
         fi          fi
     done      done
   
       cd $OLDPWD
   
     if [ ! -h /bsd ]; then      if [ ! -h /bsd ]; then
         if [ -e /bsd.mp ]; then              cd /
             echo linking /bsd.mp to /bsd          for _b in $BOOT_KERNELS; do
             $SUDO ln -sf /bsd.mp /bsd              [ X"$_b" == X"bsd" ] && _b="bsd.sp"
         else              if [ -e $_b ]; then
             echo linking /bsd.sp to /bsd                  echo symlinking $_b to /bsd
             $SUDO ln -sf /bsd.sp /bsd                  $SUDO ln -sf $_b bsd
         fi                  if [ $? -ne 0 ]; then
         if [ $? -ne 0 ]; then                      echo ERROR: Could not symlink new kernel! >&2
             echo ERROR: Could not symlink new kernel! >&2                      exit 1
             exit 1                  fi
         fi                  break
               fi
           done
               cd $OLDPWD
     fi      fi
 }  }
   
Line 425 
Line 456 
         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 435 
Line 467 
             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 469 
Line 503 
 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 491 
Line 527 
   
 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  install_sets
   
 if [ $CUR_VER == $NEW_VER ]; then  if [ $CUR_VER == $NEW_VER ]; then
Line 512 
Line 562 
   
 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.21  
changed lines
  Added in v.1.40

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