[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.10 and 1.21

version 1.10, 2008/11/05 17:07:58 version 1.21, 2009/05/13 05:26:32
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.9 2008/10/31 01:36:33 andrew Exp $  # $RedRiver: update_openbsd,v 1.20 2009/04/25 00:14:12 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}  
 FORCE_DIR=${FORCE_DIR:=No}  
   
 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 39 
Line 23 
             echo -n " $_d"              echo -n " $_d"
         fi          fi
     done      done
   
       sendmail -d0.1 root < /dev/null | grep -q SASL
       if [ $? == 0 ]; then
           echo -n ' sendmail-smtp_auth'
       fi
 }  }
 INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}  
   
 sets_exist () {  version_in() {
         local _proto=${FTP%%://*}          local _proto=${FTP%%://*}
           local _file
   
         if [ X"ftp" == X"${_proto}" ]; then          if [ X"ftp" == X"${_proto}" ]; then
             echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/ | awk '{ print $9 }'              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          elif [ X"http" == X"${_proto}" ]; then
             ${FTP_CMD} -V -o - ${FTP}/ | grep '"base[0-9][0-9].tgz' | sed -e 's/.*\(base..\.tgz\).*/\1/'              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          else
             echo Unsupported FTP ${FTP} >&2              echo Unsupported FTP ${FTP} >&2
             exit 2              return 2
   
         fi          fi
   
           local _v=${_file##*base}
           _v=${_v%.tgz*}
           echo $_v
 }  }
   
 set_version() {  set_version() {
Line 89 
Line 95 
   
     fi      fi
   
     if [ X"" == X"${_v}" ]; then      if [ X"" != X"${MIRROR}" -a X"" == X"${_v}" ]; then
         if [ X"No" == X"${FORCE_DIR}" ]; then          if [ X"No" == X"${FORCE_DIR}" ]; then
             _dir=${NEW_VER}              _dir=${NEW_VER}
         else          else
Line 97 
Line 103 
         fi          fi
         FTP=${MIRROR}/${_dir}/`machine`          FTP=${MIRROR}/${_dir}/`machine`
   
         _file=`sets_exist`          _v=`version_in`
   
         if [ X"" == X"${_file}" ]; then          if [ X"" == X"${_v}" ]; then
             if [ X"No" != X"$FORCE_DIR" ]; then              if [ X"No" != X"$FORCE_DIR" ]; then
                 echo No sets in forced [${FTP}] >&2                  echo No sets in forced [${FTP}] >&2
                 exit 2                  return 2
             fi              fi
   
             NEW_VER=$CUR_VER              NEW_VER=$CUR_VER
             _dir=${NEW_VER}              _dir=${NEW_VER}
             FTP=${MIRROR}/${_dir}/`machine`              FTP=${MIRROR}/${_dir}/`machine`
   
             _file=`sets_exist`              _v=`version_in`
             if [ X"" == X"${_file}" ]; then  
                 echo No sets in [${FTP}] >&2  
                 exit 2  
             fi  
         fi          fi
   
         _v=${_file##*base}  
         _v=${_v%.tgz*}  
   
         if [ X"" == X"${_v}" ]; then          if [ X"" == X"${_v}" ]; then
             echo No version in file [$_file] >&2              echo No sets in [${FTP}] >&2
             exit 2              return 2
         elif [ X"${_cv}" == X"${_v}" ]; then          elif [ X"${_cv}" == X"${_v}" ]; then
             NEW_VER=$CUR_VER              NEW_VER=$CUR_VER
         elif [ X"${_nv}" == X"${_v}" ]; then          elif [ X"${_nv}" == X"${_v}" ]; then
             NEW_VER=$NEW_VER              NEW_VER=$NEW_VER
         else          else
             echo Invalid version [$_v] >&2              echo Invalid version [$_v] >&2
             exit 2              return 2
         fi          fi
   
         if [ X"No" == X"$FORCE_DIR" ]; then          if [ X"No" == X"$FORCE_DIR" ]; then
Line 139 
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
Line 147 
Line 146 
     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 170 
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
   }
   
   check_sum () {
       local _type=$1
       echo "### CHECKING $_type SUMS ###"
       cd $RELEASEDIR
   
       if [ ! -e $_type ]; then
           echo $_type File does not exist!
           return 1
     fi      fi
   
     ls bsd* *.tgz > 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
         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 220 
Line 283 
     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
   
Line 285 
Line 344 
   
     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 305 
Line 372 
     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 358 
Line 441 
     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 376 
Line 481 
 #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 385 
Line 498 
 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 ###'

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.21

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