[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.8 and 1.25

version 1.8, 2008/10/13 19:31:49 version 1.25, 2009/06/13 17:34:46
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.7 2008/10/11 22:19:52 andrew Exp $  # $RedRiver: update_openbsd,v 1.24 2009/05/29 21:47:37 andrew Exp $
   
 if [ -e /etc/update_openbsd.conf ]; then  
     . /etc/update_openbsd.conf  
 fi  
   
 if [ -e ${HOME}/.update_openbsdrc ]; then  
     . ${HOME}/.update_openbsdrc  
 fi  
   
 MIRROR=${MIRROR:=ftp://ftp.openbsd.org/pub/OpenBSD}  
 FTP_CMD=${FTP_CMD:=ftp -V}  
 PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}  
   
 DESTDIR=${DESTDIR:=/}  
 SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge}  
 if [ ! -e $SYSMERGE ]; then  
     SYSMERGE=  
 fi  
   
 installed_sets() {  installed_sets() {
     local misc=/usr/share/doc/README      local misc=/usr/share/doc/README
     local man=/usr/share/man/cat1/intro.0      local man=/usr/share/man/cat1/intro.0
Line 41 
Line 23 
             echo -n " $_d"              echo -n " $_d"
         fi          fi
     done      done
   
       sendmail -d0.1 -bt < /dev/null | grep -q SASL
       if [ $? == 0 ]; then
           echo -n ' sendmail-smtp_auth'
       fi
 }  }
 INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}  
   
   version_in() {
           local _proto=${FTP%%://*}
           local _file
   
           if [ X"ftp" == X"${_proto}" ]; then
               local _list=`echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/`
               _file=`echo ${_list} | awk '/base[0-9][0-9].tgz/ { print $9 }'`
   
           elif [ X"http" == X"${_proto}" ]; then
               local _list=`${FTP_CMD} -V -o - ${FTP}/`
               _file=`echo ${_list} | awk '/[^x]base[0-9][0-9]*\.tgz/ {
                       sub("^.*base","base");
                       sub("\.tgz.*",".tgz");
                       print $0;
                   }'`
   
           elif [ X"scp" == X"${_proto}" ]; then
               echo SCP is not yet supported >&2
               return 2
   
           else
               echo Unsupported FTP ${FTP} >&2
               return 2
   
           fi
   
           local _v=${_file##*base}
           _v=${_v%.tgz*}
           echo $_v
   }
   
 set_version() {  set_version() {
     CUR_VER=`uname -r`      CUR_VER=`uname -r`
     NEW_VER=`dc -e "$CUR_VER 0.1 + p"`      NEW_VER=`dc -e "$CUR_VER 0.1 + p"`
Line 53 
Line 69 
   
     local _cv=`echo $CUR_VER | sed -e 's/\.//'`      local _cv=`echo $CUR_VER | sed -e 's/\.//'`
     local _nv=`echo $NEW_VER | sed -e 's/\.//'`      local _nv=`echo $NEW_VER | sed -e 's/\.//'`
     local _v=""      local _v
   
     if [ X"" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then      if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then
         _dir=$FORCE_DIR          _dir=$FORCE_DIR
         if [ -e ${_dir}/base${_nv}.tgz ]; then          if [ -e ${_dir}/base${_nv}.tgz ]; then
             _v=$_nv              _v=$_nv
Line 79 
Line 95 
   
     fi      fi
   
     if [ X"" == X"${_v}" ]; then      if [ X"" != X"${MIRROR}" -a X"" == X"${_v}" ]; then
         if [ X"" == X"${FORCE_DIR}" ]; then          if [ X"No" == X"${FORCE_DIR}" ]; then
             _dir=${NEW_VER}              _dir=${NEW_VER}
         else          else
             _dir=${FORCE_DIR}              _dir=${FORCE_DIR}
         fi          fi
         FTP=${MIRROR}/${_dir}/`machine`          FTP=${MIRROR}/${_dir}/`machine`
   
         local _file=`echo "ls base${_cv}.tgz" | ${FTP_CMD} ${FTP}/ | awk '{ print $9 }'`          _v=`version_in`
   
         if [ X"base${_cv}.tgz" == X"${_file}" ]; then          if [ X"" == X"${_v}" ]; then
               if [ X"No" != X"$FORCE_DIR" ]; then
                   echo No sets in forced [${FTP}] >&2
                   return 2
               fi
   
             NEW_VER=$CUR_VER              NEW_VER=$CUR_VER
             _v=$_cv              _dir=${NEW_VER}
               FTP=${MIRROR}/${_dir}/`machine`
   
               _v=`version_in`
           fi
   
           if [ X"" == X"${_v}" ]; then
               echo No sets in [${FTP}] >&2
               return 2
           elif [ X"${_cv}" == X"${_v}" ]; then
               NEW_VER=$CUR_VER
           elif [ X"${_nv}" == X"${_v}" ]; then
               NEW_VER=$NEW_VER
         else          else
             _v=$_nv              echo Invalid version [$_v] >&2
               return 2
         fi          fi
   
         if [ X"" == X"$FORCE_DIR" ]; then          if [ X"No" == X"$FORCE_DIR" ]; then
             _dir=$NEW_VER              _dir=$NEW_VER
         fi          fi
   
Line 104 
Line 138 
   
     if [ X"" == X"${_v}" ]; then      if [ X"" == X"${_v}" ]; then
         echo ERROR: Unable to determine file version! >&2          echo ERROR: Unable to determine file version! >&2
         exit 1          return 1
     fi      fi
   
     if [ X"" == X"$RELEASEDIR" ]; then      if [ X"" == X"$RELEASEDIR" ]; then
         RELEASEDIR=`pwd`/$_dir          RELEASEDIR=`pwd`/$_dir
     fi      fi
   
     FILE_VER=$_v      FILE_VER=$_v
     FTP=${MIRROR}/${_dir}/`machine`      if [ X"" != X"${MIRROR}" ]; then
           FTP=${MIRROR}/${_dir}/`machine`
       fi
 }  }
   
 get_sets() {  get_sets() {
     echo '### GETTING SETS ###'      echo '### GETTING SETS ###'
     if [ X"" == X"$FTP" ]; then      if [ X"" == X"$FTP" ]; then
         echo ERROR: No FTP site set! >&2          echo ERROR: No FTP site set! >&2
         exit 1          return 1
     fi      fi
   
     mkdir -p ${RELEASEDIR}      mkdir -p ${RELEASEDIR}
Line 134 
Line 171 
     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          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      fi
   }
   
     ls bsd* *.tgz > index  check_sum () {
     grep -f index MD5 | md5 -c      local _type=$1
       echo "### CHECKING $_type SUMS ###"
       cd $RELEASEDIR
   
       if [ ! -e $_type ]; then
           echo $_type File does not exist!
           return 1
       fi
   
       ls bsd* *gz | sed -e 's/\(.*\)/(\1)/' > index
       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
         exit 1          return 1
     fi      fi
 }  }
   
   check_sets() {
       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
           _b=${_b#/}
           local _n=$_b
           if [ X"bsd.sp" == X"${_n}" ]; then
               _n=bsd
           fi
           if [ -e /${_b} -a ! -e ./${_n} ]; then
               echo ${_n} does not exist
               _missing_sets=1
           fi
       done
   
       for _s in $INSTALLED_SETS; do
           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
   
       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
   }
   
   
 install_kernel() {  install_kernel() {
     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
Line 184 
Line 295 
     fi      fi
   
     local _v=$FILE_VER      local _v=$FILE_VER
     if [ -e base${_v}.tgz ]; then  
         echo Extracting new firmware from base${_v}.tgz  
         $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz "*etc/firmware/*"  
     fi  
   
     $SUDO rm -f /obsd      $SUDO rm -f /obsd
     $SUDO ln /bsd /obsd      $SUDO ln /bsd /obsd
     if [ $? -ne 0 ]; then      if [ $? -ne 0 ]; then
         echo "Error copying old kernel!"          echo "Error copying old kernel!" >&2
         exit 1          exit 1
     fi      fi
   
       local _true_bsd=`follow_symlink /bsd`
       local _installed_new_bsd
   
     for _b in bsd*; do      for _b in bsd*; do
         $SUDO rm -f /nbsd          $SUDO rm -f /nbsd
   
         if [ X"${_b}" == X"bsd" ]; then          if [ X"${_b}" == X"bsd" ]; then
             echo Copying bsd to /bsd.sp              echo Copying bsd to /bsd.sp
             $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp              $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp
Line 206 
Line 315 
                 echo ERROR: Could not copy new SP kernel! >&2                  echo ERROR: Could not copy new SP kernel! >&2
                 exit 1                  exit 1
             fi              fi
               if [ X"${_true_bsd}" == X"/bsd.sp" ]; then
                   _installed_new_bsd=1
               fi
         else          else
             if [ -e /$_b ]; then              if [ -e /$_b ]; then
                 echo Copying $_b to /                  echo Copying $_b to /
Line 214 
Line 326 
                     echo ERROR: Could not copy new $_b kernel! >&2                      echo ERROR: Could not copy new $_b kernel! >&2
                     exit 1                      exit 1
                 fi                  fi
                   if [ X"${_true_bsd}" == X"${_b}" ]; then
                       _installed_new_bsd=1
                   fi
             fi              fi
         fi          fi
     done      done
Line 231 
Line 346 
             exit 1              exit 1
         fi          fi
     fi      fi
   
       if [ -z $_installed_new_bsd ]; then
           echo WARNING: Did not replace $_true_bsd kernel >&2
       fi
 }  }
   
 install_sets() {  install_sets() {
Line 249 
Line 368 
   
     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 269 
Line 396 
     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() {
     echo '### UPDATING ETC ###'      echo '### UPDATING ETC ###'
       if [ ! -e $SYSMERGE ]; then
           SYSMERGE=
       fi
   
     if [ X"" == X"$SYSMERGE" ]; then      if [ X"" == X"$SYSMERGE" ]; then
         if [ -e /var/tmp/temproot ]; then          if [ -e /var/tmp/temproot ]; then
             MERGEMASTER=`which mergemaster`              MERGEMASTER=`which mergemaster`
Line 318 
Line 465 
     fi      fi
 }  }
   
   
   if [ -e /etc/update_openbsd.conf ]; then
       . /etc/update_openbsd.conf
   fi
   
   if [ -e ${HOME}/.update_openbsdrc ]; then
       . ${HOME}/.update_openbsdrc
   fi
   
   #MIRROR=${MIRROR:=ftp://ftp.openbsd.org/pub/OpenBSD}
   FTP_CMD=${FTP_CMD:=ftp -V}
   PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
   
   DESTDIR=${DESTDIR:=/}
   SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge}
   FORCE_DIR=${FORCE_DIR:=No}
   
   INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
   
   CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5}
   
 set_version  set_version
   local _error=$?
   
 echo  echo
 echo "-= update_openbsd - helper script to update OpenBSD =-"  echo "-= update_openbsd - helper script to update OpenBSD =-"
Line 336 
Line 505 
 #echo "      FILE_VER: $FILE_VER"  #echo "      FILE_VER: $FILE_VER"
 echo  echo
   
 get_sets  if [ ${_error} -ne 0 ]; then
           exit ${_error}
   fi
   
   if [ X"" != X"${FTP}" ]; then
       get_sets
   fi
   
   check_sets || exit
   
 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.
Line 345 
Line 522 
 fi  fi
   
 install_kernel  install_kernel
   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 359 
Line 540 
 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

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.25

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