[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.18 and 1.42

version 1.18, 2009/01/14 18:13:23 version 1.42, 2012/12/09 03:41:41
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.17 2009/01/14 17:58:40 andrew Exp $  # $AFresh1: update_openbsd,v 1.41 2012/12/08 19:55:39 andrew Exp $
   #
   # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com>
   #
   # Permission to use, copy, modify, and distribute this software for any
   # purpose with or without fee is hereby granted, provided that the above
   # copyright notice and this permission notice appear in all copies.
   #
   # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   #
   
 installed_sets() {  installed_sets() {
     local misc=/usr/share/doc/README      local misc=/usr/share/doc/README
Line 23 
Line 38 
             echo -n " $_d"              echo -n " $_d"
         fi          fi
     done      done
   
       sendmail -d0.1 --badoption </dev/null 2>/dev/null | grep -q SASL
       if [ $? == 0 ]; then
           echo -n ' sendmail-smtp_auth'
       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 144 
Line 169 
     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=`follow_symlink /$BOOT_KERNEL`
       BOOT_KERNEL="/${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 158 
Line 210 
   
     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 166 
Line 218 
     done      done
   
     for _s in $INSTALLED_SETS; do      for _s in $INSTALLED_SETS; do
         if [ ! -e ./${_s}${_v}.tgz ]; then          local _file=${_s}${_v}.tgz
             echo $FTP_CMD ${FTP}/${_s}${_v}.tgz          if [ ${_s} == sendmail-smtp_auth ]; then
             $FTP_CMD ${FTP}/${_s}${_v}.tgz              _file=${_s}.gz
         fi          fi
   
           if [ ! -e ./${_file} ]; then
               echo $FTP_CMD ${FTP}/${_file}
               $FTP_CMD ${FTP}/${_file}
           fi
     done      done
   
     if [ ! -e MD5 ]; then      local _type
         echo $FTP_CMD ${FTP}/MD5      for _type in $CHECKSUM_TYPES; do
         $FTP_CMD ${FTP}/MD5          [ -e $_type ] && break
           echo $FTP_CMD ${FTP}/$_type
           $FTP_CMD ${FTP}/$_type
       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      fi
 }  }
   
 check_md5() {  check_sum () {
     echo '### CHECKING MD5 ###'      local _type=$1
       echo "### CHECKING $_type SUMS ###"
     cd $RELEASEDIR      cd $RELEASEDIR
   
     if [ ! -e MD5 ]; then      if [ ! -e $_type ]; then
         echo MD5 File does not exist!          echo $_type File does not exist!
         return 1          return 1
     fi      fi
   
     ls bsd* *.tgz | sed -e 's/\(.*\)/(\1)/' > index      ls bsd* *gz | sed -e 's/\(.*\)/(\1)/' > index
     grep -f index MD5 | md5 -c      grep -f index $_type | sum -c
   
     if [ $? -ne 0 ]; then      if [ $? -ne 0 ]; then
         echo ERROR: MD5 does not match! >&2          echo ERROR: $_type does not match! >&2
         return 1          return 1
     fi      fi
 }  }
Line 203 
Line 275 
     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
         if [ ! -e ./${_s}${_v}.tgz ]; then          local _file=${_s}${_v}.tgz
             echo ${_s}${_v}.tgz does not exist          if [ ${_s} == sendmail-smtp_auth ]; then
               _file=${_s}.gz
           fi
           if [ ! -e ./${_file} ]; then
               echo ${_file} does not exist
             _missing_sets=1              _missing_sets=1
         fi          fi
     done      done
Line 226 
Line 308 
         echo All OK          echo All OK
     fi      fi
   
     check_md5      local _type
       for _type in $CHECKSUM_TYPES; do
           if [ -e $_type ]; then
               check_sum $_type
           fi
       done
 }  }
   
   
 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 240 
Line 327 
     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 326 
Line 390 
   
     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 346 
Line 418 
     done      done
   
     echo Extracted all sets.      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() {  update_etc() {
Line 383 
Line 471 
         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 393 
Line 482 
             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
 }  }
   
   
 if [ -e /etc/update_openbsd.conf ]; then  if [ -e /etc/update_openbsd.conf ]; then
     . /etc/update_openbsd.conf      . /etc/update_openbsd.conf
 fi  fi
Line 417 
Line 509 
   
 INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}  INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
   
   CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5}
   
 set_version  set_version
 local _error=$?  local _error=$?
   
Line 424 
Line 518 
 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 441 
Line 537 
 fi  fi
   
 if [ X"" != X"${FTP}" ]; then  if [ X"" != X"${FTP}" ]; then
     get_sets || exit      get_sets
 fi  fi
   
 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 463 
Line 577 
   
 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.18  
changed lines
  Added in v.1.42

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