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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.17

1.1       andrew      1: #!/bin/sh
1.17    ! andrew      2: # $RedRiver: update_openbsd,v 1.16 2009/01/13 21:47:49 andrew Exp $
1.7       andrew      3:
1.2       andrew      4: installed_sets() {
1.5       andrew      5:     local misc=/usr/share/doc/README
                      6:     local man=/usr/share/man/cat1/intro.0
                      7:     local comp=/usr/bin/cc
                      8:     local game=/usr/games/
                      9:     local xbase=/usr/X11R6/
                     10:     local xetc=/etc/X11/xinit/xinitrc
                     11:     local xfont=/usr/X11R6/lib/X11/fonts
                     12:     local xserv=/usr/X11R6/bin/X
                     13:     local xshare=/usr/X11R6/bin/startx
                     14:
                     15:     local _c _d _e
                     16:     echo -n base
                     17:     echo -n ' etc'
1.3       andrew     18:     for _d in misc man comp game xbase xetc xfont xserv xshare; do
                     19:         eval _e=\$${_d}
                     20:         _c=`ls $_e 2> /dev/null | wc -l`
                     21:         #echo $_c $_d $_e
                     22:         if [ $_c -ne 0 ]; then
1.5       andrew     23:             echo -n " $_d"
1.2       andrew     24:         fi
                     25:     done
                     26: }
1.7       andrew     27:
1.16      andrew     28: version_in() {
1.10      andrew     29:         local _proto=${FTP%%://*}
1.16      andrew     30:         local _file
1.10      andrew     31:
                     32:         if [ X"ftp" == X"${_proto}" ]; then
1.16      andrew     33:             local _list=`echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/`
                     34:             _file=`echo ${_list} | awk '/base[0-9][0-9].tgz/ { print $9 }'`
1.15      andrew     35:
1.10      andrew     36:         elif [ X"http" == X"${_proto}" ]; then
1.16      andrew     37:             local _list=`${FTP_CMD} -V -o - ${FTP}/`
                     38:             _file=`echo ${_list} | awk '/[^x]base[0-9][0-9]*\.tgz/ {
1.15      andrew     39:                     sub("^.*base","base");
                     40:                     sub("\.tgz.*",".tgz");
                     41:                     print $0;
1.16      andrew     42:                 }'`
1.15      andrew     43:
                     44:         elif [ X"scp" == X"${_proto}" ]; then
                     45:             echo SCP is not yet supported >&2
                     46:             return 2
                     47:
1.10      andrew     48:         else
                     49:             echo Unsupported FTP ${FTP} >&2
1.12      andrew     50:             return 2
1.15      andrew     51:
1.10      andrew     52:         fi
1.16      andrew     53:
                     54:         local _v=${_file##*base}
                     55:         _v=${_v%.tgz*}
                     56:         echo $_v
1.10      andrew     57: }
1.2       andrew     58:
                     59: set_version() {
                     60:     CUR_VER=`uname -r`
1.3       andrew     61:     NEW_VER=`dc -e "$CUR_VER 0.1 + p"`
1.5       andrew     62:     FILE_VER=""
                     63:     FTP=""
1.2       andrew     64:
1.5       andrew     65:     local _cv=`echo $CUR_VER | sed -e 's/\.//'`
                     66:     local _nv=`echo $NEW_VER | sed -e 's/\.//'`
1.9       andrew     67:     local _v
1.5       andrew     68:
1.10      andrew     69:     if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then
1.5       andrew     70:         _dir=$FORCE_DIR
                     71:         if [ -e ${_dir}/base${_nv}.tgz ]; then
                     72:             _v=$_nv
                     73:         elif [ -e ${_dir}/base${_cv}.tgz ]; then
                     74:             NEW_VER=$CUR_VER
                     75:             _v=$_cv
                     76:         fi
1.2       andrew     77:
1.5       andrew     78:     elif [ -d $CUR_VER ]; then
                     79:         _dir=$CUR_VER
1.2       andrew     80:         NEW_VER=$CUR_VER
1.5       andrew     81:         if [ -e ${_dir}/base${_cv}.tgz ]; then
                     82:             _v=$_cv
                     83:         fi
1.2       andrew     84:
1.5       andrew     85:     elif [ -d $NEW_VER ]; then
                     86:         _dir=$NEW_VER
                     87:         if [ -e ${_dir}/base${_nv}.tgz ]; then
                     88:             _v=$_nv
                     89:         fi
1.2       andrew     90:
                     91:     fi
                     92:
1.17    ! andrew     93:     if [ X"" != X"${MIRROR}" -a X"" == X"${_v}" ]; then
1.10      andrew     94:         if [ X"No" == X"${FORCE_DIR}" ]; then
1.5       andrew     95:             _dir=${NEW_VER}
                     96:         else
                     97:             _dir=${FORCE_DIR}
                     98:         fi
                     99:         FTP=${MIRROR}/${_dir}/`machine`
1.2       andrew    100:
1.16      andrew    101:         _v=`version_in`
1.10      andrew    102:
1.16      andrew    103:         if [ X"" == X"${_v}" ]; then
1.10      andrew    104:             if [ X"No" != X"$FORCE_DIR" ]; then
                    105:                 echo No sets in forced [${FTP}] >&2
1.12      andrew    106:                 return 2
1.10      andrew    107:             fi
                    108:
                    109:             NEW_VER=$CUR_VER
                    110:             _dir=${NEW_VER}
                    111:             FTP=${MIRROR}/${_dir}/`machine`
                    112:
1.16      andrew    113:             _v=`version_in`
1.9       andrew    114:         fi
                    115:
1.10      andrew    116:         if [ X"" == X"${_v}" ]; then
1.16      andrew    117:             echo No sets in [${FTP}] >&2
1.12      andrew    118:             return 2
1.10      andrew    119:         elif [ X"${_cv}" == X"${_v}" ]; then
1.5       andrew    120:             NEW_VER=$CUR_VER
1.9       andrew    121:         elif [ X"${_nv}" == X"${_v}" ]; then
                    122:             NEW_VER=$NEW_VER
1.2       andrew    123:         else
1.10      andrew    124:             echo Invalid version [$_v] >&2
1.12      andrew    125:             return 2
1.2       andrew    126:         fi
                    127:
1.10      andrew    128:         if [ X"No" == X"$FORCE_DIR" ]; then
1.5       andrew    129:             _dir=$NEW_VER
1.2       andrew    130:         fi
                    131:
                    132:     fi
                    133:
1.5       andrew    134:     if [ X"" == X"${_v}" ]; then
                    135:         echo ERROR: Unable to determine file version! >&2
1.12      andrew    136:         return 1
1.2       andrew    137:     fi
                    138:
1.5       andrew    139:     if [ X"" == X"$RELEASEDIR" ]; then
                    140:         RELEASEDIR=`pwd`/$_dir
1.2       andrew    141:     fi
1.9       andrew    142:
1.5       andrew    143:     FILE_VER=$_v
1.17    ! andrew    144:     if [ X"" != X"${MIRROR}" ]; then
        !           145:         FTP=${MIRROR}/${_dir}/`machine`
        !           146:     fi
1.2       andrew    147: }
                    148:
                    149: get_sets() {
1.5       andrew    150:     echo '### GETTING SETS ###'
1.2       andrew    151:     if [ X"" == X"$FTP" ]; then
1.5       andrew    152:         echo ERROR: No FTP site set! >&2
1.12      andrew    153:         return 1
1.2       andrew    154:     fi
                    155:
1.5       andrew    156:     mkdir -p ${RELEASEDIR}
                    157:     cd $RELEASEDIR
1.2       andrew    158:
1.5       andrew    159:     local _v=$FILE_VER
1.2       andrew    160:
1.5       andrew    161:     for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; do
1.2       andrew    162:         if [ -e /${_b} -a ! -e ./${_b} ]; then
1.3       andrew    163:             echo $FTP_CMD ${FTP}/${_b}
                    164:             $FTP_CMD ${FTP}/${_b}
1.2       andrew    165:         fi
                    166:     done
                    167:
1.5       andrew    168:     for _s in $INSTALLED_SETS; do
                    169:         if [ ! -e ./${_s}${_v}.tgz ]; then
                    170:             echo $FTP_CMD ${FTP}/${_s}${_v}.tgz
                    171:             $FTP_CMD ${FTP}/${_s}${_v}.tgz
                    172:         fi
1.2       andrew    173:     done
                    174:
1.6       andrew    175:     if [ ! -e MD5 ]; then
                    176:         echo $FTP_CMD ${FTP}/MD5
                    177:         $FTP_CMD ${FTP}/MD5
                    178:     fi
1.17    ! andrew    179: }
        !           180:
        !           181: check_md5() {
        !           182:     echo '### CHECKING MD5 ###'
        !           183:     cd $RELEASEDIR
        !           184:
        !           185:     if [ ! -e MD5 ]; then
        !           186:         echo MD5 File does not exist!
        !           187:         return 1
        !           188:     fi
1.6       andrew    189:
1.11      andrew    190:     ls bsd* *.tgz | sed -e 's/\(.*\)/(\1)/' > index
1.2       andrew    191:     grep -f index MD5 | md5 -c
                    192:
                    193:     if [ $? -ne 0 ]; then
1.5       andrew    194:         echo ERROR: MD5 does not match! >&2
1.12      andrew    195:         return 1
1.2       andrew    196:     fi
                    197: }
                    198:
1.17    ! andrew    199: check_sets() {
        !           200:     echo '### CHECKING SETS ###'
        !           201:     cd $RELEASEDIR
        !           202:
        !           203:     local _v=$FILE_VER
        !           204:
        !           205:     for _b in `echo /bsd* bsd bsd.mp bsd.rd | sort -u`; do
        !           206:        _b=${_b#/}
        !           207:         local _n=$_b
        !           208:         if [ X"bsd.sp" == X"${_n}" ]; then
        !           209:             _n=bsd
        !           210:         fi
        !           211:         if [ -e /${_b} -a ! -e ./${_n} ]; then
        !           212:             echo ${_n} does not exist
        !           213:         fi
        !           214:     done
        !           215:
        !           216:     for _s in $INSTALLED_SETS; do
        !           217:         if [ ! -e ./${_s}${_v}.tgz ]; then
        !           218:             echo ${_s}${_v}.tgz does not exist
        !           219:         fi
        !           220:     done
        !           221:
        !           222:     check_md5
        !           223: }
        !           224:
        !           225:
1.2       andrew    226: install_kernel() {
1.5       andrew    227:     echo '### INSTALLING KERNEL ###'
1.3       andrew    228:     if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2       andrew    229:         echo ${0##*/} must be run as root or SUDO must be set! >&2
                    230:         exit 1
                    231:     fi
                    232:
                    233:     if [ X"" == X"$RELEASEDIR" ]; then
1.5       andrew    234:         echo ERROR: no source for new kernels! >&2
1.2       andrew    235:         exit 1
                    236:     else
                    237:         cd $RELEASEDIR
                    238:     fi
                    239:
                    240:     if [ ! -e bsd ]; then
1.5       andrew    241:         echo ERROR: new bsd kernel does not exist! >&2
1.2       andrew    242:         exit 1
                    243:     fi
                    244:
                    245:     if [ -e /bsd.mp -a ! -e bsd.mp ]; then
1.5       andrew    246:         echo ERROR: new bsd.mp kernel does not exist! >&2
1.2       andrew    247:         exit 1
                    248:     fi
                    249:
                    250:     if [ ! -e bsd.rd ]; then
1.5       andrew    251:         echo ERROR: new bsd.rd kernel does not exist! >&2
1.2       andrew    252:         exit 1
                    253:     fi
                    254:
1.5       andrew    255:     local _v=$FILE_VER
1.2       andrew    256:     if [ -e base${_v}.tgz ]; then
1.13      andrew    257:         echo Extracting new firmware and ifconfig from base${_v}.tgz
                    258:         $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz \
                    259:                ./etc/firmware ./sbin/ifconfig
1.2       andrew    260:     fi
                    261:
1.3       andrew    262:     $SUDO rm -f /obsd
                    263:     $SUDO ln /bsd /obsd
1.2       andrew    264:     if [ $? -ne 0 ]; then
                    265:         echo "Error copying old kernel!"
                    266:         exit 1
                    267:     fi
                    268:
1.3       andrew    269:     for _b in bsd*; do
                    270:         $SUDO rm -f /nbsd
1.2       andrew    271:
1.5       andrew    272:         if [ X"${_b}" == X"bsd" ]; then
1.2       andrew    273:             echo Copying bsd to /bsd.sp
1.3       andrew    274:             $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp
1.2       andrew    275:             if [ $? -ne 0 ]; then
1.5       andrew    276:                 echo ERROR: Could not copy new SP kernel! >&2
1.2       andrew    277:                 exit 1
                    278:             fi
                    279:         else
1.3       andrew    280:             if [ -e /$_b ]; then
                    281:                 echo Copying $_b to /
                    282:                 $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_b}
1.2       andrew    283:                 if [ $? -ne 0 ]; then
1.5       andrew    284:                     echo ERROR: Could not copy new $_b kernel! >&2
1.2       andrew    285:                     exit 1
                    286:                 fi
                    287:             fi
                    288:         fi
                    289:     done
                    290:
                    291:     if [ ! -h /bsd ]; then
                    292:         if [ -e /bsd.mp ]; then
                    293:             echo linking /bsd.mp to /bsd
1.3       andrew    294:             $SUDO ln -sf /bsd.mp /bsd
1.2       andrew    295:         else
                    296:             echo linking /bsd.sp to /bsd
1.3       andrew    297:             $SUDO ln -sf /bsd.sp /bsd
1.2       andrew    298:         fi
                    299:         if [ $? -ne 0 ]; then
1.5       andrew    300:             echo ERROR: Could not symlink new kernel! >&2
1.2       andrew    301:             exit 1
                    302:         fi
                    303:     fi
                    304: }
                    305:
                    306: install_sets() {
1.5       andrew    307:     echo '### INSTALLING SETS ###'
1.3       andrew    308:     if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2       andrew    309:         echo ${0##*/} must be run as root or SUDO must be set! >&2
                    310:         exit 1
                    311:     fi
                    312:
                    313:     if [ X"" == X"$RELEASEDIR" ]; then
1.5       andrew    314:         echo ERROR: no source for sets! >&2
1.2       andrew    315:         exit 1
                    316:     else
                    317:         cd $RELEASEDIR
                    318:     fi
                    319:
1.5       andrew    320:     local _v=$FILE_VER
                    321:
1.2       andrew    322:     for _f in *${_v}.tgz; do
1.3       andrew    323:         _path=$DESTDIR
                    324:         if [ X"etc${_v}.tgz"  == X"$_f" \
                    325:             -o X"xetc${_v}.tgz" == X"$_f" ]; then
                    326:             if [ X"" != X"$SYSMERGE" ]; then
1.2       andrew    327:                 continue
                    328:             fi
                    329:             _path=/var/tmp/temproot
                    330:         fi
                    331:
1.3       andrew    332:         echo Extracting $_f to $_path
                    333:         $SUDO mkdir -p $_path
                    334:         $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f}
1.2       andrew    335:         if [ $? -ne 0 ]; then
1.5       andrew    336:             echo ERROR: Could not extract ${_f}! >&2
1.2       andrew    337:             exit 1
                    338:         fi
                    339:     done
                    340:
                    341:     echo Extracted all sets.
                    342: }
                    343:
                    344: update_etc() {
1.5       andrew    345:     echo '### UPDATING ETC ###'
1.10      andrew    346:     if [ ! -e $SYSMERGE ]; then
                    347:         SYSMERGE=
                    348:     fi
                    349:
1.3       andrew    350:     if [ X"" == X"$SYSMERGE" ]; then
1.2       andrew    351:         if [ -e /var/tmp/temproot ]; then
                    352:             MERGEMASTER=`which mergemaster`
                    353:
                    354:             if [ $? != 0 ]; then
1.3       andrew    355:                 $SUDO pkg_add -i mergemaster
1.5       andrew    356:
1.2       andrew    357:                 MERGEMASTER=`which mergemaster`
                    358:                 if [ $? != 0 ]; then
                    359:                     echo ERROR: mergemaster not installed! >&2
                    360:                     exit 1
                    361:                 fi
                    362:             fi
                    363:
                    364:             echo '### RUNNING MERGEMASTER ###'
1.3       andrew    365:             $SUDO $MERGEMASTER -irv
1.2       andrew    366:         else
                    367:             echo "ERROR: no source for etc!" >&2
                    368:             exit 1
                    369:         fi
                    370:     else
                    371:         if [ X"" == X"$RELEASEDIR" ]; then
                    372:             echo "ERROR: no source for etc!" >&2
                    373:             exit 1
                    374:         else
                    375:             cd $RELEASEDIR
                    376:         fi
                    377:
1.5       andrew    378:         local _v=$FILE_VER
                    379:         if [ -e etc${_v}.tgz ]; then
                    380:             _args="$_args -s etc${_v}.tgz"
1.2       andrew    381:         fi
1.5       andrew    382:         if [ -e xetc${_v}.tgz ]; then
                    383:             _args="$_args -x xetc${_v}.tgz"
1.2       andrew    384:         fi
                    385:         if [ X"" == X"$_args" ]; then
                    386:             echo ERROR: No upgrade sets found! >&2
                    387:         else
                    388:             echo '### RUNNING SYSMERGE ###'
                    389:             _args="-a $_args"
1.3       andrew    390:             $SUDO $SYSMERGE $_args
1.2       andrew    391:         fi
                    392:     fi
                    393: }
1.14      andrew    394:
                    395: if [ -e /etc/update_openbsd.conf ]; then
                    396:     . /etc/update_openbsd.conf
                    397: fi
                    398:
                    399: if [ -e ${HOME}/.update_openbsdrc ]; then
                    400:     . ${HOME}/.update_openbsdrc
                    401: fi
                    402:
1.17    ! andrew    403: #MIRROR=${MIRROR:=ftp://ftp.openbsd.org/pub/OpenBSD}
1.14      andrew    404: FTP_CMD=${FTP_CMD:=ftp -V}
                    405: PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
                    406:
                    407: DESTDIR=${DESTDIR:=/}
                    408: SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge}
                    409: FORCE_DIR=${FORCE_DIR:=No}
                    410:
                    411: INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
1.2       andrew    412:
                    413: set_version
1.12      andrew    414: local _error=$?
1.2       andrew    415:
                    416: echo
                    417: echo "-= update_openbsd - helper script to update OpenBSD =-"
                    418: echo "------------------------------------------------------"
                    419: echo
1.8       andrew    420: echo "          SUDO: $SUDO"
                    421: echo "      SYSMERGE: $SYSMERGE"
                    422: echo "        MIRROR: $MIRROR"
                    423: echo "    RELEASEDIR: $RELEASEDIR"
                    424: echo "       DESTDIR: $DESTDIR"
                    425: echo "INSTALLED_SETS: $INSTALLED_SETS"
                    426: echo
                    427: echo "       CUR_VER: $CUR_VER"
                    428: echo "       NEW_VER: $NEW_VER"
                    429: #echo "      FILE_VER: $FILE_VER"
1.2       andrew    430: echo
1.12      andrew    431:
                    432: if [ ${_error} -ne 0 ]; then
                    433:        exit ${_error}
                    434: fi
1.2       andrew    435:
1.17    ! andrew    436: if [ X"" != X"${FTP}" ]; then
        !           437:     get_sets || exit
        !           438: fi
        !           439:
        !           440: check_sets || exit
1.2       andrew    441:
                    442: if [ X"" != X"$SUDO" ]; then
                    443:     echo Please enter your sudo password if prompted.
                    444:     echo You may be asked for it again later in the process.
                    445:     $SUDO -v
                    446: fi
                    447:
                    448: install_kernel
                    449:
1.5       andrew    450: if [ $CUR_VER == $NEW_VER ]; then
1.2       andrew    451:     install_sets
                    452:     update_etc
                    453:
                    454:     echo '### UPDATING PACKAGES ###'
                    455:     $SUDO pkg_add -ui -F update -F updatedepends
                    456:
                    457: else
                    458:     echo Instructions for updating to the new version available from
                    459:     echo "  http://www.openbsd.org/faq/upgrade${_v}.html"
                    460: fi
                    461:
                    462: echo New kernel installed.  Please reboot!

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