[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.2 and 1.17

version 1.2, 2008/08/12 23:07:05 version 1.17, 2009/01/14 17:58:40
Line 1 
Line 1 
 #!/bin/sh  #!/bin/sh
 # $RedRiver: update_openbsd,v 1.1 2008/08/12 18:45:47 andrew Exp $  # $RedRiver: update_openbsd,v 1.16 2009/01/13 21:47:49 andrew Exp $
   
 SYSMERGE=/usr/sbin/sysmerge  installed_sets() {
 MIRROR=ftp://ftp.openbsd.org/pub/OpenBSD      local misc=/usr/share/doc/README
 FTP_CMD='ftp -V'      local man=/usr/share/man/cat1/intro.0
 DESTDIR=/      local comp=/usr/bin/cc
       local game=/usr/games/
       local xbase=/usr/X11R6/
       local xetc=/etc/X11/xinit/xinitrc
       local xfont=/usr/X11R6/lib/X11/fonts
       local xserv=/usr/X11R6/bin/X
       local xshare=/usr/X11R6/bin/startx
   
 if [ -e /etc/update_openbsd.conf ]; then      local _c _d _e
     . /etc/update_openbsd.conf      echo -n base
 fi      echo -n ' etc'
       for _d in misc man comp game xbase xetc xfont xserv xshare; do
           eval _e=\$${_d}
           _c=`ls $_e 2> /dev/null | wc -l`
           #echo $_c $_d $_e
           if [ $_c -ne 0 ]; then
               echo -n " $_d"
           fi
       done
   }
   
 if [ -e ${HOME}/.update_openbsdrc ]; then  version_in() {
     . ${HOME}/.update_openbsdrc          local _proto=${FTP%%://*}
 fi          local _file
   
 installed_sets() {          if [ X"ftp" == X"${_proto}" ]; then
     misc=/usr/share/doc/README              local _list=`echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/`
     man=/usr/share/man/cat1/intro.0              _file=`echo ${_list} | awk '/base[0-9][0-9].tgz/ { print $9 }'`
     comp=/usr/bin/cc  
     game=/usr/games/  
     xbase=/usr/X11R6/  
     xetc=/etc/X11/xinit/xinitrc  
     xfont=/usr/X11R6/lib/X11/fonts  
     xserv=/usr/X11R6/bin/X  
     xshare=/usr/X11R6/bin/startx  
   
     echo base          elif [ X"http" == X"${_proto}" ]; then
     echo etc              local _list=`${FTP_CMD} -V -o - ${FTP}/`
     for d in misc man comp game xbase xetc xfont xserv xshare; do              _file=`echo ${_list} | awk '/[^x]base[0-9][0-9]*\.tgz/ {
         eval e=\$$d                      sub("^.*base","base");
         c=`ls ${e} 2> /dev/null | wc -l`                      sub("\.tgz.*",".tgz");
         #echo $c $d $e                      print $0;
         if [ ${c} -ne 0 ]; then                  }'`
             echo $d  
           elif [ X"scp" == X"${_proto}" ]; then
               echo SCP is not yet supported >&2
               return 2
   
           else
               echo Unsupported FTP ${FTP} >&2
               return 2
   
         fi          fi
     done  
           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"`
       FILE_VER=""
       FTP=""
   
     if [ -d $NEW_VER ]; then      local _cv=`echo $CUR_VER | sed -e 's/\.//'`
         DIR=$NEW_VER      local _nv=`echo $NEW_VER | sed -e 's/\.//'`
     fi      local _v
   
     if [ -d $CUR_VER ]; then      if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then
           _dir=$FORCE_DIR
           if [ -e ${_dir}/base${_nv}.tgz ]; then
               _v=$_nv
           elif [ -e ${_dir}/base${_cv}.tgz ]; then
               NEW_VER=$CUR_VER
               _v=$_cv
           fi
   
       elif [ -d $CUR_VER ]; then
           _dir=$CUR_VER
         NEW_VER=$CUR_VER          NEW_VER=$CUR_VER
         DIR=$NEW_VER          if [ -e ${_dir}/base${_cv}.tgz ]; then
     fi              _v=$_cv
           fi
   
     if [ X"" != X"$FORCE_DIR" ]; then      elif [ -d $NEW_VER ]; then
         if [ -d $FORCE_DIR ]; then          _dir=$NEW_VER
             DIR=${FORCE_DIR}          if [ -e ${_dir}/base${_nv}.tgz ]; then
               _v=$_nv
             _cv=`echo $CUR_VER | sed -e 's/\.//'`  
             if [ -e $DIR/base${_cv}.tgz ]; then  
                 NEW_VER=$CUR_VER  
             fi  
         fi          fi
   
     fi      fi
   
     if [ X"" == X"$DIR" ]; then      if [ X"" != X"${MIRROR}" -a X"" == X"${_v}" ]; then
         FTP=${MIRROR}/${NEW_VER}/`machine`          if [ X"No" == X"${FORCE_DIR}" ]; then
               _dir=${NEW_VER}
           else
               _dir=${FORCE_DIR}
           fi
           FTP=${MIRROR}/${_dir}/`machine`
   
         #echo "ls\nquit\n" | ftp ${MIRROR} | grep "${NEW_VER}"          _v=`version_in`
         ${FTP_CMD} ${FTP}/MD5 > /dev/null  
   
         if [ -e MD5 ]; then          if [ X"" == X"${_v}" ]; then
             rm -f MD5              if [ X"No" != X"$FORCE_DIR" ]; then
         else                  echo No sets in forced [${FTP}] >&2
                   return 2
               fi
   
             NEW_VER=$CUR_VER              NEW_VER=$CUR_VER
               _dir=${NEW_VER}
               FTP=${MIRROR}/${_dir}/`machine`
   
               _v=`version_in`
         fi          fi
   
         if [ X"$FORCE_DIR" == X"" ]; then          if [ X"" == X"${_v}" ]; then
             DIR=$NEW_VER              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
             DIR=$FORCE_DIR              echo Invalid version [$_v] >&2
               return 2
         fi          fi
   
         FTP=${MIRROR}/${DIR}/`machine`          if [ X"No" == X"$FORCE_DIR" ]; then
               _dir=$NEW_VER
           fi
   
     fi      fi
   
     if [ X"" != X"${RELEASEDIR}" ]; then      if [ X"" == X"${_v}" ]; then
         DIR=${RELEASEDIR}          echo ERROR: Unable to determine file version! >&2
           return 1
     fi      fi
   
     if [ -d $DIR ]; then      if [ X"" == X"$RELEASEDIR" ]; then
        cd $DIR          RELEASEDIR=`pwd`/$_dir
        RELEASEDIR=`pwd`  
     fi      fi
   
     _v=`echo $NEW_VER | sed -e 's/\.//'`      FILE_VER=$_v
       if [ X"" != X"${MIRROR}" ]; then
           FTP=${MIRROR}/${_dir}/`machine`
       fi
 }  }
   
 get_sets() {  get_sets() {
       echo '### GETTING SETS ###'
     if [ X"" == X"$FTP" ]; then      if [ X"" == X"$FTP" ]; then
         echo Error, no FTP site is set! >&2          echo ERROR: No FTP site set! >&2
         exit 1          return 1
     fi      fi
   
     if [ X"" == X"$RELEASEDIR" ]; then      mkdir -p ${RELEASEDIR}
         RELEASEDIR=$DIR      cd $RELEASEDIR
     fi  
   
     mkdir -p $RELEASEDIR      local _v=$FILE_VER
     cd ${RELEASEDIR}  
     RELEASEDIR=`pwd`  
   
     for _b in /bsd* bsd bsd.mp bsd.rd; do      for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; 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}
         fi          fi
     done      done
   
     for _s in `installed_sets`; do      for _s in $INSTALLED_SETS; do
         echo ${FTP_CMD} ${FTP}/${_s}${_v}.tgz          if [ ! -e ./${_s}${_v}.tgz ]; then
         ${FTP_CMD} ${FTP}/${_s}${_v}.tgz              echo $FTP_CMD ${FTP}/${_s}${_v}.tgz
               $FTP_CMD ${FTP}/${_s}${_v}.tgz
           fi
     done      done
   
     echo ${FTP_CMD} ${FTP}/MD5      if [ ! -e MD5 ]; then
     ${FTP_CMD} ${FTP}/MD5          echo $FTP_CMD ${FTP}/MD5
     ls bsd* *.tgz > index          $FTP_CMD ${FTP}/MD5
       fi
   }
   
   check_md5() {
       echo '### CHECKING MD5 ###'
       cd $RELEASEDIR
   
       if [ ! -e MD5 ]; then
           echo MD5 File does not exist!
           return 1
       fi
   
       ls bsd* *.tgz | sed -e 's/\(.*\)/(\1)/' > index
     grep -f index MD5 | md5 -c      grep -f index MD5 | md5 -c
   
     if [ $? -ne 0 ]; then      if [ $? -ne 0 ]; then
         echo !!! WARNING: MD5 does not match !!! >&2          echo ERROR: MD5 does not match! >&2
         exit 1          return 1
     fi      fi
 }  }
   
   check_sets() {
       echo '### CHECKING SETS ###'
       cd $RELEASEDIR
   
       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
           fi
       done
   
       for _s in $INSTALLED_SETS; do
           if [ ! -e ./${_s}${_v}.tgz ]; then
               echo ${_s}${_v}.tgz does not exist
           fi
       done
   
       check_md5
   }
   
   
 install_kernel() {  install_kernel() {
     if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then      echo '### INSTALLING KERNEL ###'
       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
         exit 1          exit 1
     fi      fi
   
     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      else
         cd $RELEASEDIR          cd $RELEASEDIR
     fi      fi
   
     if [ ! -e bsd ]; then      if [ ! -e bsd ]; then
         echo "new bsd kernel does not exist!" >&2          echo ERROR: new bsd kernel does not exist! >&2
         exit 1          exit 1
     fi      fi
   
     if [ -e /bsd.mp -a ! -e bsd.mp ]; then      if [ -e /bsd.mp -a ! -e bsd.mp ]; then
         echo "new bsd.mp kernel does not exist!" >&2          echo ERROR: new bsd.mp kernel does not exist! >&2
         exit 1          exit 1
     fi      fi
   
     if [ ! -e bsd.rd ]; then      if [ ! -e bsd.rd ]; then
         echo "new bsd.rd kernel does not exist!" >&2          echo ERROR: new bsd.rd kernel does not exist! >&2
         exit 1          exit 1
     fi      fi
   
       local _v=$FILE_VER
     if [ -e base${_v}.tgz ]; then      if [ -e base${_v}.tgz ]; then
         echo Extracting new firmware from base${_v}.tgz          echo Extracting new firmware and ifconfig from base${_v}.tgz
         ${SUDO} tar -C ${DESTDIR} -xzphf base${_v}.tgz "*etc/firmware/*"          $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz \
                   ./etc/firmware ./sbin/ifconfig
     fi      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!"
         exit 1          exit 1
     fi      fi
   
     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
             if [ $? -ne 0 ]; then              if [ $? -ne 0 ]; then
                 echo "ERROR: Couldn't copy new SP kernel!" >&2                  echo ERROR: Could not copy new SP kernel! >&2
                 exit 1                  exit 1
             fi              fi
         else          else
             if [ -e /${b} ]; then              if [ -e /$_b ]; then
                 echo Copying ${b} to /                  echo Copying $_b to /
                 ${SUDO} cp ${b} /nbsd && ${SUDO} mv /nbsd /${b}                  $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_b}
                 if [ $? -ne 0 ]; then                  if [ $? -ne 0 ]; then
                     echo "ERROR: Couldn't copy new ${b} kernel!" >&2                      echo ERROR: Could not copy new $_b kernel! >&2
                     exit 1                      exit 1
                 fi                  fi
             fi              fi
Line 197 
Line 291 
     if [ ! -h /bsd ]; then      if [ ! -h /bsd ]; then
         if [ -e /bsd.mp ]; then          if [ -e /bsd.mp ]; then
             echo linking /bsd.mp to /bsd              echo linking /bsd.mp to /bsd
             ${SUDO} ln -sf /bsd.mp /bsd              $SUDO ln -sf /bsd.mp /bsd
         else          else
             echo linking /bsd.sp to /bsd              echo linking /bsd.sp to /bsd
             ${SUDO} ln -sf /bsd.sp /bsd              $SUDO ln -sf /bsd.sp /bsd
         fi          fi
         if [ $? -ne 0 ]; then          if [ $? -ne 0 ]; then
             echo "ERROR: Couldn't symlink new kernel!" >&2              echo ERROR: Could not symlink new kernel! >&2
             exit 1              exit 1
         fi          fi
     fi      fi
 }  }
   
 install_sets() {  install_sets() {
     if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then      echo '### INSTALLING SETS ###'
       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
         exit 1          exit 1
     fi      fi
   
     if [ X"" == X"$RELEASEDIR" ]; then      if [ X"" == X"$RELEASEDIR" ]; then
         echo "ERROR: no source for sets!" >&2          echo ERROR: no source for sets! >&2
         exit 1          exit 1
     else      else
         cd $RELEASEDIR          cd $RELEASEDIR
     fi      fi
   
       local _v=$FILE_VER
   
     for _f in *${_v}.tgz; do      for _f in *${_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              if [ X"" != X"$SYSMERGE" ]; then
                 continue                  continue
             fi              fi
             _path=/var/tmp/temproot              _path=/var/tmp/temproot
         fi          fi
   
         echo Extracting ${_f} to $_path          echo Extracting $_f to $_path
         ${SUDO} mkdir -p $_path          $SUDO mkdir -p $_path
         ${SUDO} tar -C $_path -xzphf ${RELEASEDIR}/${_f}          $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f}
         if [ $? -ne 0 ]; then          if [ $? -ne 0 ]; then
             echo "Error extracting ${_f}!" >&2              echo ERROR: Could not extract ${_f}! >&2
             exit 1              exit 1
         fi          fi
     done      done
Line 245 
Line 342 
 }  }
   
 update_etc() {  update_etc() {
     if [ X"" == X"${SYSMERGE}" ]; then      echo '### UPDATING ETC ###'
       if [ ! -e $SYSMERGE ]; then
           SYSMERGE=
       fi
   
       if [ X"" == X"$SYSMERGE" ]; then
         if [ -e /var/tmp/temproot ]; then          if [ -e /var/tmp/temproot ]; then
             MERGEMASTER=`which mergemaster`              MERGEMASTER=`which mergemaster`
   
             if [ $? != 0 ]; then              if [ $? != 0 ]; then
                 ${SUDO} pkg_add -i mergemaster                  $SUDO pkg_add -i mergemaster
   
                 MERGEMASTER=`which mergemaster`                  MERGEMASTER=`which mergemaster`
                 if [ $? != 0 ]; then                  if [ $? != 0 ]; then
                     echo ERROR: mergemaster not installed! >&2                      echo ERROR: mergemaster not installed! >&2
Line 259 
Line 362 
             fi              fi
   
             echo '### RUNNING MERGEMASTER ###'              echo '### RUNNING MERGEMASTER ###'
             ${SUDO} ${MERGEMASTER} -irv              $SUDO $MERGEMASTER -irv
         else          else
             echo "ERROR: no source for etc!" >&2              echo "ERROR: no source for etc!" >&2
             exit 1              exit 1
Line 272 
Line 375 
             cd $RELEASEDIR              cd $RELEASEDIR
         fi          fi
   
         _cv=`echo $CUR_VER | sed -e 's/\.//'`          local _v=$FILE_VER
         if [ -e etc${_cv}.tgz ]; then          if [ -e etc${_v}.tgz ]; then
             _args="${_args} -s etc${_cv}.tgz"              _args="$_args -s etc${_v}.tgz"
         fi          fi
         if [ -e xetc${_cv}.tgz ]; then          if [ -e xetc${_v}.tgz ]; then
             _args="${_args} -x xetc${_cv}.tgz"              _args="$_args -x xetc${_v}.tgz"
         fi          fi
         if [ X"" == X"$_args" ]; then          if [ X"" == X"$_args" ]; then
             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"              _args="-a $_args"
             ${SUDO} ${SYSMERGE} $_args              $SUDO $SYSMERGE $_args
         fi          fi
     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`/}  PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
   
 if [ ! -e ${SYSMERGE} ]; then  DESTDIR=${DESTDIR:=/}
     SYSMERGE=  SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge}
 fi  FORCE_DIR=${FORCE_DIR:=No}
   
   INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
   
 set_version  set_version
   local _error=$?
   
 echo  echo
 echo "-= update_openbsd - helper script to update OpenBSD =-"  echo "-= update_openbsd - helper script to update OpenBSD =-"
 echo "------------------------------------------------------"  echo "------------------------------------------------------"
 echo  echo
 echo "       DIR: $DIR"  echo "          SUDO: $SUDO"
 echo "RELEASEDIR: $RELEASEDIR"  echo "      SYSMERGE: $SYSMERGE"
 echo "   DESTDIR: $DESTDIR"  echo "        MIRROR: $MIRROR"
 echo "   CUR_VER: $CUR_VER"  echo "    RELEASEDIR: $RELEASEDIR"
 echo "   NEW_VER: $NEW_VER"  echo "       DESTDIR: $DESTDIR"
 echo "      SUDO: $SUDO"  echo "INSTALLED_SETS: $INSTALLED_SETS"
 echo "  SYSMERGE: $SYSMERGE"  
 echo "    MIRROR: $MIRROR"  
 echo  echo
   echo "       CUR_VER: $CUR_VER"
   echo "       NEW_VER: $NEW_VER"
   #echo "      FILE_VER: $FILE_VER"
   echo
   
 if [ X"" == X"$RELEASEDIR" ]; then  if [ ${_error} -ne 0 ]; then
     echo '### GETTING SETS ###'          exit ${_error}
     get_sets  
 fi  fi
   
   if [ X"" != X"${FTP}" ]; then
       get_sets || exit
   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.
     $SUDO -v      $SUDO -v
 fi  fi
   
 echo '### INSTALLING KERNEL ###'  
 install_kernel  install_kernel
   
 if [ $CUR_VER == $NEW_VER -o X"" != X"$FORCE_DIR" ]; then  if [ $CUR_VER == $NEW_VER ]; then
     echo '### INSTALLING SETS ###'  
     install_sets      install_sets
   
     echo '### UPDATING ETC ###'  
     update_etc      update_etc
   
     echo '### UPDATING PACKAGES ###'      echo '### UPDATING PACKAGES ###'

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.17

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