[BACK]Return to update_openbsd CVS log [TXT][DIR] Up to [local] / openbsd / update_openbsd

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.2

1.1       andrew      1: #!/bin/sh
1.2     ! andrew      2: # $RedRiver: update_openbsd,v 1.1 2008/08/12 18:45:47 andrew Exp $
        !             3:
        !             4: SYSMERGE=/usr/sbin/sysmerge
        !             5: MIRROR=ftp://ftp.openbsd.org/pub/OpenBSD
        !             6: FTP_CMD='ftp -V'
        !             7: DESTDIR=/
        !             8:
        !             9: if [ -e /etc/update_openbsd.conf ]; then
        !            10:     . /etc/update_openbsd.conf
        !            11: fi
        !            12:
        !            13: if [ -e ${HOME}/.update_openbsdrc ]; then
        !            14:     . ${HOME}/.update_openbsdrc
        !            15: fi
        !            16:
        !            17: installed_sets() {
        !            18:     misc=/usr/share/doc/README
        !            19:     man=/usr/share/man/cat1/intro.0
        !            20:     comp=/usr/bin/cc
        !            21:     game=/usr/games/
        !            22:     xbase=/usr/X11R6/
        !            23:     xetc=/etc/X11/xinit/xinitrc
        !            24:     xfont=/usr/X11R6/lib/X11/fonts
        !            25:     xserv=/usr/X11R6/bin/X
        !            26:     xshare=/usr/X11R6/bin/startx
        !            27:
        !            28:     echo base
        !            29:     echo etc
        !            30:     for d in misc man comp game xbase xetc xfont xserv xshare; do
        !            31:         eval e=\$$d
        !            32:         c=`ls ${e} 2> /dev/null | wc -l`
        !            33:         #echo $c $d $e
        !            34:         if [ ${c} -ne 0 ]; then
        !            35:             echo $d
        !            36:         fi
        !            37:     done
        !            38: }
        !            39:
        !            40: set_version() {
        !            41:     CUR_VER=`uname -r`
        !            42:     NEW_VER=`dc -e "${CUR_VER} 0.1 + p"`
        !            43:
        !            44:     if [ -d $NEW_VER ]; then
        !            45:         DIR=$NEW_VER
        !            46:     fi
        !            47:
        !            48:     if [ -d $CUR_VER ]; then
        !            49:         NEW_VER=$CUR_VER
        !            50:         DIR=$NEW_VER
        !            51:     fi
        !            52:
        !            53:     if [ X"" != X"$FORCE_DIR" ]; then
        !            54:         if [ -d $FORCE_DIR ]; then
        !            55:             DIR=${FORCE_DIR}
        !            56:
        !            57:             _cv=`echo $CUR_VER | sed -e 's/\.//'`
        !            58:             if [ -e $DIR/base${_cv}.tgz ]; then
        !            59:                 NEW_VER=$CUR_VER
        !            60:             fi
        !            61:         fi
        !            62:     fi
        !            63:
        !            64:     if [ X"" == X"$DIR" ]; then
        !            65:         FTP=${MIRROR}/${NEW_VER}/`machine`
        !            66:
        !            67:         #echo "ls\nquit\n" | ftp ${MIRROR} | grep "${NEW_VER}"
        !            68:         ${FTP_CMD} ${FTP}/MD5 > /dev/null
        !            69:
        !            70:         if [ -e MD5 ]; then
        !            71:             rm -f MD5
        !            72:         else
        !            73:             NEW_VER=$CUR_VER
        !            74:         fi
        !            75:
        !            76:         if [ X"$FORCE_DIR" == X"" ]; then
        !            77:             DIR=$NEW_VER
        !            78:         else
        !            79:             DIR=$FORCE_DIR
        !            80:         fi
        !            81:
        !            82:         FTP=${MIRROR}/${DIR}/`machine`
        !            83:     fi
        !            84:
        !            85:     if [ X"" != X"${RELEASEDIR}" ]; then
        !            86:         DIR=${RELEASEDIR}
        !            87:     fi
        !            88:
        !            89:     if [ -d $DIR ]; then
        !            90:        cd $DIR
        !            91:        RELEASEDIR=`pwd`
        !            92:     fi
        !            93:
        !            94:     _v=`echo $NEW_VER | sed -e 's/\.//'`
        !            95: }
        !            96:
        !            97: get_sets() {
        !            98:     if [ X"" == X"$FTP" ]; then
        !            99:         echo Error, no FTP site is set! >&2
        !           100:         exit 1
        !           101:     fi
        !           102:
        !           103:     if [ X"" == X"$RELEASEDIR" ]; then
        !           104:         RELEASEDIR=$DIR
        !           105:     fi
        !           106:
        !           107:     mkdir -p $RELEASEDIR
        !           108:     cd ${RELEASEDIR}
        !           109:     RELEASEDIR=`pwd`
        !           110:
        !           111:     for _b in /bsd* bsd bsd.mp bsd.rd; do
        !           112:         if [ -e /${_b} -a ! -e ./${_b} ]; then
        !           113:             echo ${FTP_CMD} ${FTP}/${_b}
        !           114:             ${FTP_CMD} ${FTP}/${_b}
        !           115:         fi
        !           116:     done
        !           117:
        !           118:     for _s in `installed_sets`; do
        !           119:         echo ${FTP_CMD} ${FTP}/${_s}${_v}.tgz
        !           120:         ${FTP_CMD} ${FTP}/${_s}${_v}.tgz
        !           121:     done
        !           122:
        !           123:     echo ${FTP_CMD} ${FTP}/MD5
        !           124:     ${FTP_CMD} ${FTP}/MD5
        !           125:     ls bsd* *.tgz > index
        !           126:     grep -f index MD5 | md5 -c
        !           127:
        !           128:     if [ $? -ne 0 ]; then
        !           129:         echo !!! WARNING: MD5 does not match !!! >&2
        !           130:         exit 1
        !           131:     fi
        !           132: }
        !           133:
        !           134: install_kernel() {
        !           135:     if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then
        !           136:         echo ${0##*/} must be run as root or SUDO must be set! >&2
        !           137:         exit 1
        !           138:     fi
        !           139:
        !           140:     if [ X"" == X"$RELEASEDIR" ]; then
        !           141:         echo "ERROR: no source for new kernels!" >&2
        !           142:         exit 1
        !           143:     else
        !           144:         cd $RELEASEDIR
        !           145:     fi
        !           146:
        !           147:     if [ ! -e bsd ]; then
        !           148:         echo "new bsd kernel does not exist!" >&2
        !           149:         exit 1
        !           150:     fi
        !           151:
        !           152:     if [ -e /bsd.mp -a ! -e bsd.mp ]; then
        !           153:         echo "new bsd.mp kernel does not exist!" >&2
        !           154:         exit 1
        !           155:     fi
        !           156:
        !           157:     if [ ! -e bsd.rd ]; then
        !           158:         echo "new bsd.rd kernel does not exist!" >&2
        !           159:         exit 1
        !           160:     fi
        !           161:
        !           162:
        !           163:     if [ -e base${_v}.tgz ]; then
        !           164:         echo Extracting new firmware from base${_v}.tgz
        !           165:         ${SUDO} tar -C ${DESTDIR} -xzphf base${_v}.tgz "*etc/firmware/*"
        !           166:     fi
        !           167:
        !           168:     ${SUDO} rm -f /obsd
        !           169:     ${SUDO} ln /bsd /obsd
        !           170:     if [ $? -ne 0 ]; then
        !           171:         echo "Error copying old kernel!"
        !           172:         exit 1
        !           173:     fi
        !           174:
        !           175:     for b in bsd*; do
        !           176:         ${SUDO} rm -f /nbsd
        !           177:
        !           178:         if [ X"$b" == X"bsd" ]; then
        !           179:             echo Copying bsd to /bsd.sp
        !           180:             ${SUDO} cp bsd /nbsd && ${SUDO} mv /nbsd /bsd.sp
        !           181:             if [ $? -ne 0 ]; then
        !           182:                 echo "ERROR: Couldn't copy new SP kernel!" >&2
        !           183:                 exit 1
        !           184:             fi
        !           185:         else
        !           186:             if [ -e /${b} ]; then
        !           187:                 echo Copying ${b} to /
        !           188:                 ${SUDO} cp ${b} /nbsd && ${SUDO} mv /nbsd /${b}
        !           189:                 if [ $? -ne 0 ]; then
        !           190:                     echo "ERROR: Couldn't copy new ${b} kernel!" >&2
        !           191:                     exit 1
        !           192:                 fi
        !           193:             fi
        !           194:         fi
        !           195:     done
        !           196:
        !           197:     if [ ! -h /bsd ]; then
        !           198:         if [ -e /bsd.mp ]; then
        !           199:             echo linking /bsd.mp to /bsd
        !           200:             ${SUDO} ln -sf /bsd.mp /bsd
        !           201:         else
        !           202:             echo linking /bsd.sp to /bsd
        !           203:             ${SUDO} ln -sf /bsd.sp /bsd
        !           204:         fi
        !           205:         if [ $? -ne 0 ]; then
        !           206:             echo "ERROR: Couldn't symlink new kernel!" >&2
        !           207:             exit 1
        !           208:         fi
        !           209:     fi
        !           210: }
        !           211:
        !           212: install_sets() {
        !           213:     if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then
        !           214:         echo ${0##*/} must be run as root or SUDO must be set! >&2
        !           215:         exit 1
        !           216:     fi
        !           217:
        !           218:     if [ X"" == X"$RELEASEDIR" ]; then
        !           219:         echo "ERROR: no source for sets!" >&2
        !           220:         exit 1
        !           221:     else
        !           222:         cd $RELEASEDIR
        !           223:     fi
        !           224:
        !           225:     for _f in *${_v}.tgz; do
        !           226:         _path=${DESTDIR}
        !           227:         if [ X"etc${_v}.tgz"  == X"${_f}" \
        !           228:             -o X"xetc${_v}.tgz" == X"${_f}" ]; then
        !           229:             if [ X"" != X"${SYSMERGE}" ]; then
        !           230:                 continue
        !           231:             fi
        !           232:             _path=/var/tmp/temproot
        !           233:         fi
        !           234:
        !           235:         echo Extracting ${_f} to $_path
        !           236:         ${SUDO} mkdir -p $_path
        !           237:         ${SUDO} tar -C $_path -xzphf ${RELEASEDIR}/${_f}
        !           238:         if [ $? -ne 0 ]; then
        !           239:             echo "Error extracting ${_f}!" >&2
        !           240:             exit 1
        !           241:         fi
        !           242:     done
        !           243:
        !           244:     echo Extracted all sets.
        !           245: }
        !           246:
        !           247: update_etc() {
        !           248:     if [ X"" == X"${SYSMERGE}" ]; then
        !           249:         if [ -e /var/tmp/temproot ]; then
        !           250:             MERGEMASTER=`which mergemaster`
        !           251:
        !           252:             if [ $? != 0 ]; then
        !           253:                 ${SUDO} pkg_add -i mergemaster
        !           254:                 MERGEMASTER=`which mergemaster`
        !           255:                 if [ $? != 0 ]; then
        !           256:                     echo ERROR: mergemaster not installed! >&2
        !           257:                     exit 1
        !           258:                 fi
        !           259:             fi
        !           260:
        !           261:             echo '### RUNNING MERGEMASTER ###'
        !           262:             ${SUDO} ${MERGEMASTER} -irv
        !           263:         else
        !           264:             echo "ERROR: no source for etc!" >&2
        !           265:             exit 1
        !           266:         fi
        !           267:     else
        !           268:         if [ X"" == X"$RELEASEDIR" ]; then
        !           269:             echo "ERROR: no source for etc!" >&2
        !           270:             exit 1
        !           271:         else
        !           272:             cd $RELEASEDIR
        !           273:         fi
        !           274:
        !           275:         _cv=`echo $CUR_VER | sed -e 's/\.//'`
        !           276:         if [ -e etc${_cv}.tgz ]; then
        !           277:             _args="${_args} -s etc${_cv}.tgz"
        !           278:         fi
        !           279:         if [ -e xetc${_cv}.tgz ]; then
        !           280:             _args="${_args} -x xetc${_cv}.tgz"
        !           281:         fi
        !           282:         if [ X"" == X"$_args" ]; then
        !           283:             echo ERROR: No upgrade sets found! >&2
        !           284:         else
        !           285:             echo '### RUNNING SYSMERGE ###'
        !           286:             _args="-a $_args"
        !           287:             ${SUDO} ${SYSMERGE} $_args
        !           288:         fi
        !           289:     fi
        !           290: }
        !           291:
        !           292:
        !           293: PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
        !           294:
        !           295: if [ ! -e ${SYSMERGE} ]; then
        !           296:     SYSMERGE=
        !           297: fi
        !           298:
        !           299: set_version
        !           300:
        !           301: echo
        !           302: echo "-= update_openbsd - helper script to update OpenBSD =-"
        !           303: echo "------------------------------------------------------"
        !           304: echo
        !           305: echo "       DIR: $DIR"
        !           306: echo "RELEASEDIR: $RELEASEDIR"
        !           307: echo "   DESTDIR: $DESTDIR"
        !           308: echo "   CUR_VER: $CUR_VER"
        !           309: echo "   NEW_VER: $NEW_VER"
        !           310: echo "      SUDO: $SUDO"
        !           311: echo "  SYSMERGE: $SYSMERGE"
        !           312: echo "    MIRROR: $MIRROR"
        !           313: echo
        !           314:
        !           315: if [ X"" == X"$RELEASEDIR" ]; then
        !           316:     echo '### GETTING SETS ###'
        !           317:     get_sets
        !           318: fi
        !           319:
        !           320: if [ X"" != X"$SUDO" ]; then
        !           321:     echo Please enter your sudo password if prompted.
        !           322:     echo You may be asked for it again later in the process.
        !           323:     $SUDO -v
        !           324: fi
        !           325:
        !           326: echo '### INSTALLING KERNEL ###'
        !           327: install_kernel
        !           328:
        !           329: if [ $CUR_VER == $NEW_VER -o X"" != X"$FORCE_DIR" ]; then
        !           330:     echo '### INSTALLING SETS ###'
        !           331:     install_sets
        !           332:
        !           333:     echo '### UPDATING ETC ###'
        !           334:     update_etc
        !           335:
        !           336:     echo '### UPDATING PACKAGES ###'
        !           337:     $SUDO pkg_add -ui -F update -F updatedepends
        !           338:
        !           339: else
        !           340:     echo Instructions for updating to the new version available from
        !           341:     echo "  http://www.openbsd.org/faq/upgrade${_v}.html"
        !           342: fi
        !           343:
        !           344: echo New kernel installed.  Please reboot!

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