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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.10

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

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