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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.15

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

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