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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.9

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

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