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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.64

1.1       andrew      1: #!/bin/sh
1.64    ! andrew      2: # $AFresh1: update_openbsd,v 1.63 2014/01/23 03:17:06 andrew Exp $
1.41      andrew      3: #
                      4: # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com>
                      5: #
                      6: # Permission to use, copy, modify, and distribute this software for any
                      7: # purpose with or without fee is hereby granted, provided that the above
                      8: # copyright notice and this permission notice appear in all copies.
                      9: #
                     10: # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     11: # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     12: # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     13: # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14: # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15: # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16: # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     17: #
1.7       andrew     18:
1.2       andrew     19: installed_sets() {
1.5       andrew     20:     local misc=/usr/share/doc/README
1.63      andrew     21:     local man=/usr/share/man/man1/intro.1
1.5       andrew     22:     local comp=/usr/bin/cc
                     23:     local game=/usr/games/
                     24:     local xbase=/usr/X11R6/
                     25:     local xetc=/etc/X11/xinit/xinitrc
                     26:     local xfont=/usr/X11R6/lib/X11/fonts
                     27:     local xserv=/usr/X11R6/bin/X
                     28:     local xshare=/usr/X11R6/bin/startx
                     29:
                     30:     local _c _d _e
                     31:     echo -n base
                     32:     echo -n ' etc'
1.3       andrew     33:     for _d in misc man comp game xbase xetc xfont xserv xshare; do
                     34:         eval _e=\$${_d}
                     35:         _c=`ls $_e 2> /dev/null | wc -l`
                     36:         #echo $_c $_d $_e
                     37:         if [ $_c -ne 0 ]; then
1.5       andrew     38:             echo -n " $_d"
1.2       andrew     39:         fi
                     40:     done
1.19      andrew     41:
1.34      andrew     42:     sendmail -d0.1 --badoption </dev/null 2>/dev/null | grep -q SASL
1.19      andrew     43:     if [ $? == 0 ]; then
                     44:         echo -n ' sendmail-smtp_auth'
                     45:     fi
1.2       andrew     46: }
1.7       andrew     47:
1.39      andrew     48: kernel_file_version() {
                     49:     echo exit | config -e $1 | grep -A1 ^OpenBSD
                     50:     #what $1 | sed -ne 's/[[:blank:]]\{1,\}//p'
                     51: }
                     52:
1.16      andrew     53: version_in() {
1.10      andrew     54:         local _proto=${FTP%%://*}
1.16      andrew     55:         local _file
1.10      andrew     56:
                     57:         if [ X"ftp" == X"${_proto}" ]; then
1.16      andrew     58:             local _list=`echo "ls base*.tgz" | ${FTP_CMD} ${FTP}/`
                     59:             _file=`echo ${_list} | awk '/base[0-9][0-9].tgz/ { print $9 }'`
1.15      andrew     60:
1.10      andrew     61:         elif [ X"http" == X"${_proto}" ]; then
1.16      andrew     62:             local _list=`${FTP_CMD} -V -o - ${FTP}/`
                     63:             _file=`echo ${_list} | awk '/[^x]base[0-9][0-9]*\.tgz/ {
1.15      andrew     64:                     sub("^.*base","base");
                     65:                     sub("\.tgz.*",".tgz");
                     66:                     print $0;
1.16      andrew     67:                 }'`
1.15      andrew     68:
                     69:         elif [ X"scp" == X"${_proto}" ]; then
                     70:             echo SCP is not yet supported >&2
                     71:             return 2
                     72:
1.10      andrew     73:         else
                     74:             echo Unsupported FTP ${FTP} >&2
1.12      andrew     75:             return 2
1.15      andrew     76:
1.10      andrew     77:         fi
1.16      andrew     78:
                     79:         local _v=${_file##*base}
                     80:         _v=${_v%.tgz*}
                     81:         echo $_v
1.10      andrew     82: }
1.2       andrew     83:
                     84: set_version() {
                     85:     CUR_VER=`uname -r`
1.3       andrew     86:     NEW_VER=`dc -e "$CUR_VER 0.1 + p"`
1.5       andrew     87:     FILE_VER=""
                     88:     FTP=""
1.2       andrew     89:
1.5       andrew     90:     local _cv=`echo $CUR_VER | sed -e 's/\.//'`
                     91:     local _nv=`echo $NEW_VER | sed -e 's/\.//'`
1.9       andrew     92:     local _v
1.5       andrew     93:
1.10      andrew     94:     if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then
1.5       andrew     95:         _dir=$FORCE_DIR
                     96:         if [ -e ${_dir}/base${_nv}.tgz ]; then
                     97:             _v=$_nv
                     98:         elif [ -e ${_dir}/base${_cv}.tgz ]; then
                     99:             NEW_VER=$CUR_VER
                    100:             _v=$_cv
                    101:         fi
1.2       andrew    102:
1.5       andrew    103:     elif [ -d $CUR_VER ]; then
                    104:         _dir=$CUR_VER
1.2       andrew    105:         NEW_VER=$CUR_VER
1.5       andrew    106:         if [ -e ${_dir}/base${_cv}.tgz ]; then
                    107:             _v=$_cv
                    108:         fi
1.2       andrew    109:
1.5       andrew    110:     elif [ -d $NEW_VER ]; then
                    111:         _dir=$NEW_VER
                    112:         if [ -e ${_dir}/base${_nv}.tgz ]; then
                    113:             _v=$_nv
                    114:         fi
1.2       andrew    115:
                    116:     fi
                    117:
1.17      andrew    118:     if [ X"" != X"${MIRROR}" -a X"" == X"${_v}" ]; then
1.10      andrew    119:         if [ X"No" == X"${FORCE_DIR}" ]; then
1.5       andrew    120:             _dir=${NEW_VER}
                    121:         else
                    122:             _dir=${FORCE_DIR}
                    123:         fi
                    124:         FTP=${MIRROR}/${_dir}/`machine`
1.2       andrew    125:
1.16      andrew    126:         _v=`version_in`
1.10      andrew    127:
1.16      andrew    128:         if [ X"" == X"${_v}" ]; then
1.10      andrew    129:             if [ X"No" != X"$FORCE_DIR" ]; then
                    130:                 echo No sets in forced [${FTP}] >&2
1.12      andrew    131:                 return 2
1.10      andrew    132:             fi
                    133:
                    134:             NEW_VER=$CUR_VER
                    135:             _dir=${NEW_VER}
                    136:             FTP=${MIRROR}/${_dir}/`machine`
                    137:
1.16      andrew    138:             _v=`version_in`
1.9       andrew    139:         fi
                    140:
1.10      andrew    141:         if [ X"" == X"${_v}" ]; then
1.16      andrew    142:             echo No sets in [${FTP}] >&2
1.12      andrew    143:             return 2
1.10      andrew    144:         elif [ X"${_cv}" == X"${_v}" ]; then
1.5       andrew    145:             NEW_VER=$CUR_VER
1.9       andrew    146:         elif [ X"${_nv}" == X"${_v}" ]; then
                    147:             NEW_VER=$NEW_VER
1.2       andrew    148:         else
1.10      andrew    149:             echo Invalid version [$_v] >&2
1.12      andrew    150:             return 2
1.2       andrew    151:         fi
                    152:
1.10      andrew    153:         if [ X"No" == X"$FORCE_DIR" ]; then
1.5       andrew    154:             _dir=$NEW_VER
1.2       andrew    155:         fi
                    156:
                    157:     fi
                    158:
1.5       andrew    159:     if [ X"" == X"${_v}" ]; then
1.64    ! andrew    160:         if [ X"" == X"${MIRROR}" ]; then
        !           161:             echo ERROR: No sets, and no MIRROR, unable to continue. >&2
        !           162:         else
        !           163:             echo ERROR: Unable to determine FILE_VER, check your MIRROR. >&2
        !           164:         fi
1.12      andrew    165:         return 1
1.2       andrew    166:     fi
                    167:
1.5       andrew    168:     if [ X"" == X"$RELEASEDIR" ]; then
                    169:         RELEASEDIR=`pwd`/$_dir
1.2       andrew    170:     fi
1.9       andrew    171:
1.5       andrew    172:     FILE_VER=$_v
1.17      andrew    173:     if [ X"" != X"${MIRROR}" ]; then
                    174:         FTP=${MIRROR}/${_dir}/`machine`
                    175:     fi
1.39      andrew    176:
                    177:     BOOT_KERNEL=`( \
                    178:         echo bsd; \
                    179:         [ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \
                    180:             s///; s/^.*://; s/ .*$//' /boot.conf \
                    181:     ) | tail -1`
1.42      andrew    182:     BOOT_KERNEL=`follow_symlink /$BOOT_KERNEL`
1.39      andrew    183:     BOOT_KERNEL="/${BOOT_KERNEL#/}"
                    184:
                    185:     BOOT_KERNEL_VERSION=`kernel_file_version $BOOT_KERNEL`
                    186:
                    187:     BOOTED_KERNEL_VERSION=`sysctl -n kern.version`
                    188:     NEW_KERNEL_VERSION=""
                    189:
                    190:     # We want to default to what we had
                    191:     INSTALL_KERNELS="${BOOT_KERNEL#/}"
1.48      andrew    192:     # if the boot kernel was our specially named bsd.sp, we install from bsd
                    193:     if [ X"$INSTALL_KERNELS" == X"bsd.sp" ]; then
                    194:         INSTALL_KERNELS="bsd"
                    195:     fi
1.39      andrew    196:     # with a second option of an mp kernel if is is a likely candidate
                    197:     if [ X"$INSTALL_KERNELS" != X"bsd.mp" ]; then
                    198:         local _ncpu=$(sysctl -n hw.ncpufound)
                    199:         [ $_ncpu -gt 1 ] && INSTALL_KERNELS="$INSTALL_KERNELS bsd.mp"
                    200:     fi
                    201:     # or just bsd otherwise
                    202:     if [ X"${INSTALL_KERNELS% *}" != X"bsd" ]; then
                    203:         INSTALL_KERNELS="$INSTALL_KERNELS bsd"
                    204:     fi
                    205:     BOOT_KERNELS=$INSTALL_KERNELS
                    206:     INSTALL_KERNELS="$INSTALL_KERNELS bsd.rd"
1.2       andrew    207: }
                    208:
                    209: get_sets() {
1.54      andrew    210:     echo '==> GETTING SETS'
1.2       andrew    211:     if [ X"" == X"$FTP" ]; then
1.5       andrew    212:         echo ERROR: No FTP site set! >&2
1.12      andrew    213:         return 1
1.2       andrew    214:     fi
                    215:
1.5       andrew    216:     mkdir -p ${RELEASEDIR}
                    217:     cd $RELEASEDIR
1.2       andrew    218:
1.5       andrew    219:     local _v=$FILE_VER
1.2       andrew    220:
1.39      andrew    221:     for _b in $INSTALL_KERNELS; do
1.45      andrew    222:         if [ ! -e ./${_b} ]; then
1.54      andrew    223:             echo "===> $FTP_CMD ${FTP}/${_b}"
1.3       andrew    224:             $FTP_CMD ${FTP}/${_b}
1.2       andrew    225:         fi
                    226:     done
                    227:
1.5       andrew    228:     for _s in $INSTALLED_SETS; do
1.19      andrew    229:         local _file=${_s}${_v}.tgz
                    230:         if [ ${_s} == sendmail-smtp_auth ]; then
                    231:             _file=${_s}.gz
                    232:         fi
                    233:
                    234:         if [ ! -e ./${_file} ]; then
1.54      andrew    235:             echo "===> $FTP_CMD ${FTP}/${_file}"
1.19      andrew    236:             $FTP_CMD ${FTP}/${_file}
1.5       andrew    237:         fi
1.2       andrew    238:     done
                    239:
1.20      andrew    240:     local _type
1.56      andrew    241:     local _ftp
1.20      andrew    242:     for _type in $CHECKSUM_TYPES; do
1.40      andrew    243:         [ -e $_type ] && break
1.56      andrew    244:         _ftp=`echo "$FTP" | sed -e 's,://[^/]*/,://ftp.openbsd.org/,'`
                    245:         echo "===> $FTP_CMD ${_ftp}/$_type"
                    246:         $FTP_CMD ${_ftp}/$_type
1.20      andrew    247:     done
1.17      andrew    248: }
                    249:
1.23      andrew    250: follow_symlink () {
                    251:     local _file=$1
1.33      andrew    252:     # This could go circular, but I dunno how to fix that.
                    253:     if [ -h $_file ]; then
                    254:         follow_symlink $( file $_file |
                    255:             grep 'symbolic link' |
                    256:             sed -e s/^.*\\\`// -e s/\\\'\$// )
1.23      andrew    257:     else
1.33      andrew    258:         echo $_file
1.23      andrew    259:     fi
                    260: }
                    261:
1.20      andrew    262: check_sum () {
                    263:     local _type=$1
1.54      andrew    264:     echo "==> CHECKING $_type SUMS"
1.17      andrew    265:     cd $RELEASEDIR
                    266:
1.20      andrew    267:     if [ ! -e $_type ]; then
                    268:         echo $_type File does not exist!
1.17      andrew    269:         return 1
                    270:     fi
1.6       andrew    271:
1.57      andrew    272:     local _nv=`echo $NEW_VER | sed -e 's/\.//'`
1.61      andrew    273:     local _signify=`which signify 2>/dev/null`
1.59      andrew    274:     local _keyfile=/etc/signify/${_nv}base.pub
                    275:     local _b _s
1.57      andrew    276:
                    277:     (
1.58      andrew    278:         for _b in $INSTALL_KERNELS; do echo "($_b)"        ; done
                    279:         for _s in $INSTALLED_SETS;  do echo "($_s$_nv.tgz)"; done
1.57      andrew    280:     ) > index
1.59      andrew    281:
                    282:
                    283:     if [ -n "$_signify" -a "$_type" != "${_type%.sig}" ]; then
                    284:         echo "===> Checking signature";
                    285:         if [ ! -e $_keyfile ]; then
                    286:             echo "key [$_keyfile] does not exist, cannot check $_type" >&2
                    287:             return 2
                    288:         fi
                    289:         signify -V -e -p $_keyfile -x $_type -m - | grep -f index | sum -c -
                    290:     else
                    291:        grep -f index $_type | sum -c
                    292:     fi
1.2       andrew    293:
                    294:     if [ $? -ne 0 ]; then
1.20      andrew    295:         echo ERROR: $_type does not match! >&2
1.12      andrew    296:         return 1
1.2       andrew    297:     fi
                    298: }
                    299:
1.17      andrew    300: check_sets() {
1.54      andrew    301:     echo '==> CHECKING SETS'
1.17      andrew    302:     cd $RELEASEDIR
                    303:
1.18      andrew    304:     local _missing_sets
1.17      andrew    305:     local _v=$FILE_VER
                    306:
1.39      andrew    307:     for _n in $INSTALL_KERNELS; do
                    308:         local _o=$_n
                    309:         [ X"bsd" == X"${_o}" -a -e /bsd.sp ] && _o=bsd.sp
                    310:         if [ -e /${_o} -a ! -e ./${_n} ]; then
                    311:             echo ${_o} does not exist
                    312:             _missing_sets=1
1.17      andrew    313:         fi
1.39      andrew    314:
                    315:         if [ X"${BOOT_KERNEL}" == X"/${_o}" -a -e ./${_n} ]; then
                    316:             NEW_KERNEL_VERSION=`kernel_file_version ./${_n}`
1.17      andrew    317:         fi
                    318:     done
                    319:
1.39      andrew    320:     if [ X"$NEW_KERNEL_VERSION" == X"" ]; then
                    321:         echo Missing replacement for boot kernel $BOOT_KERNEL >&2
                    322:         _missing_sets=1
                    323:     fi
                    324:
1.17      andrew    325:     for _s in $INSTALLED_SETS; do
1.19      andrew    326:         local _file=${_s}${_v}.tgz
                    327:         if [ ${_s} == sendmail-smtp_auth ]; then
                    328:             _file=${_s}.gz
                    329:         fi
                    330:         if [ ! -e ./${_file} ]; then
                    331:             echo ${_file} does not exist
1.18      andrew    332:             _missing_sets=1
1.17      andrew    333:         fi
                    334:     done
1.18      andrew    335:
                    336:     if [ X"" == X"${_missing_sets}" ]; then
1.54      andrew    337:         echo '===> All OK'
1.18      andrew    338:     fi
1.17      andrew    339:
1.20      andrew    340:     local _type
                    341:     for _type in $CHECKSUM_TYPES; do
                    342:         if [ -e $_type ]; then
1.59      andrew    343:             check_sum $_type && break
1.62      andrew    344:             [ -z "$IGNORE_CHECKSUM_ERROR" ] && exit 1
1.20      andrew    345:         fi
                    346:     done
1.59      andrew    347:
                    348:     return 0
1.17      andrew    349: }
                    350:
                    351:
1.30      andrew    352: install_kernels() {
1.54      andrew    353:     echo '==> INSTALLING KERNEL'
1.3       andrew    354:     if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2       andrew    355:         echo ${0##*/} must be run as root or SUDO must be set! >&2
                    356:         exit 1
                    357:     fi
                    358:
                    359:     if [ X"" == X"$RELEASEDIR" ]; then
1.5       andrew    360:         echo ERROR: no source for new kernels! >&2
1.2       andrew    361:         exit 1
                    362:     fi
                    363:
1.46      andrew    364:     if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then
1.54      andrew    365:         echo "===> Backing up $BOOT_KERNEL to /obsd"
1.46      andrew    366:         $SUDO ln -f $BOOT_KERNEL /obsd
                    367:         if [ $? -ne 0 ]; then
                    368:             echo "Error copying old kernel!" >&2
                    369:             exit 1
                    370:         fi
1.2       andrew    371:     fi
                    372:
1.39      andrew    373:     cd $RELEASEDIR
1.23      andrew    374:
1.39      andrew    375:     for _b in $INSTALL_KERNELS; do
1.3       andrew    376:         $SUDO rm -f /nbsd
1.39      andrew    377:         local _bd=$_b
                    378:         [ X"${_b}" == X"bsd" ] && _bd="bsd.sp"
1.2       andrew    379:
1.39      andrew    380:         local _is_boot=""
                    381:         [ X"$BOOT_KERNEL" == X"/${_bd}" ] && _is_boot="# boot kernel"
                    382:
1.54      andrew    383:         echo "===> Copying $_b to /$_bd $_is_boot"
1.39      andrew    384:         $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_bd}
1.2       andrew    385:         if [ $? -ne 0 ]; then
1.39      andrew    386:             echo ERROR: Could not copy new $_bd kernel! >&2
1.2       andrew    387:             exit 1
                    388:         fi
1.39      andrew    389:     done
                    390:
                    391:     cd $OLDPWD
1.23      andrew    392:
1.39      andrew    393:     if [ ! -h /bsd ]; then
                    394:            cd /
                    395:         for _b in $BOOT_KERNELS; do
                    396:             [ X"$_b" == X"bsd" ] && _b="bsd.sp"
                    397:             if [ -e $_b ]; then
1.54      andrew    398:                 echo "===> symlinking $_b to /bsd"
1.39      andrew    399:                 $SUDO ln -sf $_b bsd
                    400:                 if [ $? -ne 0 ]; then
                    401:                     echo ERROR: Could not symlink new kernel! >&2
                    402:                     exit 1
                    403:                 fi
                    404:                 break
                    405:             fi
                    406:         done
                    407:            cd $OLDPWD
1.2       andrew    408:     fi
                    409: }
                    410:
                    411: install_sets() {
1.54      andrew    412:     echo '==> INSTALLING SETS'
1.3       andrew    413:     if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2       andrew    414:         echo ${0##*/} must be run as root or SUDO must be set! >&2
                    415:         exit 1
                    416:     fi
                    417:
                    418:     if [ X"" == X"$RELEASEDIR" ]; then
1.5       andrew    419:         echo ERROR: no source for sets! >&2
1.2       andrew    420:         exit 1
                    421:     else
                    422:         cd $RELEASEDIR
                    423:     fi
                    424:
1.5       andrew    425:     local _v=$FILE_VER
                    426:
1.21      andrew    427:     local _sets=`ls *${_v}.tgz | grep -v ^base `
                    428:     for _f in ${_sets} base${_v}.tgz; do
1.3       andrew    429:         _path=$DESTDIR
                    430:         if [ X"etc${_v}.tgz"  == X"$_f" \
                    431:             -o X"xetc${_v}.tgz" == X"$_f" ]; then
1.21      andrew    432:             [ X"" != X"$SYSMERGE" ] && continue
1.2       andrew    433:             _path=/var/tmp/temproot
                    434:         fi
                    435:
1.54      andrew    436:         echo "===> Extracting $_f to $_path"
1.3       andrew    437:         $SUDO mkdir -p $_path
                    438:         $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f}
1.2       andrew    439:         if [ $? -ne 0 ]; then
1.5       andrew    440:             echo ERROR: Could not extract ${_f}! >&2
1.2       andrew    441:             exit 1
                    442:         fi
                    443:     done
                    444:
1.54      andrew    445:     echo '===> Extracted all sets.'
1.51      andrew    446: }
1.19      andrew    447:
1.51      andrew    448: install_sendmail_smtp_auth() {
1.19      andrew    449:     if [ -e ${RELEASEDIR}/sendmail-smtp_auth.gz ]; then
                    450:         gzcat ${RELEASEDIR}/sendmail-smtp_auth.gz > \
                    451:             ${RELEASEDIR}/sendmail-smtp_auth
                    452:     fi
                    453:     if [ -e ${RELEASEDIR}/sendmail-smtp_auth ]; then
1.21      andrew    454:         if ! pkg_info -qe 'cyrus-sasl-*'; then
                    455:             $SUDO pkg_add -i cyrus-sasl
                    456:         fi
                    457:
                    458:         $SUDO install -o root -g smmsp -m 2555 \
1.19      andrew    459:             ${RELEASEDIR}/sendmail-smtp_auth \
1.21      andrew    460:             /usr/libexec/sendmail/sendmail
1.19      andrew    461:
1.54      andrew    462:         echo '===> Installed sendmail with smtp_auth'
1.19      andrew    463:     fi
1.2       andrew    464: }
                    465:
                    466: update_etc() {
1.54      andrew    467:     echo '==> UPDATING ETC'
1.10      andrew    468:     if [ ! -e $SYSMERGE ]; then
1.47      andrew    469:         echo "ERROR: Can't find sysmerge!" >&2
                    470:         exit 1;
1.10      andrew    471:     fi
                    472:
1.47      andrew    473:     if [ X"" == X"$RELEASEDIR" ]; then
                    474:         echo "ERROR: no source for etc!" >&2
                    475:         exit 1
                    476:     fi
1.2       andrew    477:
1.47      andrew    478:     cd $RELEASEDIR
1.5       andrew    479:
1.47      andrew    480:     local _v=$FILE_VER
                    481:     local _args=""
                    482:     if [ -e etc${_v}.tgz ]; then
1.60      andrew    483:         _args="$_args -s ${RELEASEDIR}/etc${_v}.tgz"
1.47      andrew    484:     fi
                    485:     if [ -e xetc${_v}.tgz ]; then
1.60      andrew    486:         _args="$_args -x ${RELEASEDIR}/xetc${_v}.tgz"
1.47      andrew    487:     fi
                    488:     if [ X"" == X"$_args" ]; then
                    489:         echo ERROR: No upgrade sets found! >&2
1.2       andrew    490:     else
1.54      andrew    491:         echo '==> RUNNING SYSMERGE'
1.47      andrew    492:         $SUDO $SYSMERGE $_args
                    493:     fi
1.2       andrew    494:
1.47      andrew    495:     cd $OLDPWD
1.2       andrew    496: }
1.14      andrew    497:
1.20      andrew    498:
1.14      andrew    499: if [ -e /etc/update_openbsd.conf ]; then
                    500:     . /etc/update_openbsd.conf
                    501: fi
                    502:
                    503: if [ -e ${HOME}/.update_openbsdrc ]; then
                    504:     . ${HOME}/.update_openbsdrc
                    505: fi
                    506:
1.17      andrew    507: #MIRROR=${MIRROR:=ftp://ftp.openbsd.org/pub/OpenBSD}
1.14      andrew    508: FTP_CMD=${FTP_CMD:=ftp -V}
                    509: PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
                    510:
                    511: DESTDIR=${DESTDIR:=/}
                    512: SYSMERGE=${SYSMERGE:=/usr/sbin/sysmerge}
                    513: FORCE_DIR=${FORCE_DIR:=No}
                    514:
                    515: INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`}
1.2       andrew    516:
1.59      andrew    517: CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256.sig SHA256}
1.20      andrew    518:
1.2       andrew    519: set_version
1.12      andrew    520: local _error=$?
1.2       andrew    521:
                    522: echo
                    523: echo "-= update_openbsd - helper script to update OpenBSD =-"
                    524: echo "------------------------------------------------------"
                    525: echo
1.39      andrew    526: echo "           SUDO: $SUDO"
                    527: echo "       SYSMERGE: $SYSMERGE"
                    528: echo "         MIRROR: $MIRROR"
                    529: echo "     RELEASEDIR: $RELEASEDIR"
                    530: echo "        DESTDIR: $DESTDIR"
                    531: echo "    BOOT_KERNEL: $BOOT_KERNEL"
                    532: echo "INSTALL_KERNELS: $INSTALL_KERNELS"
                    533: echo " INSTALLED_SETS: $INSTALLED_SETS"
1.8       andrew    534: echo
1.39      andrew    535: echo "        CUR_VER: $CUR_VER"
                    536: echo "        NEW_VER: $NEW_VER"
                    537: #echo "       FILE_VER: $FILE_VER"
1.2       andrew    538: echo
1.12      andrew    539:
                    540: if [ ${_error} -ne 0 ]; then
                    541:        exit ${_error}
                    542: fi
1.2       andrew    543:
1.17      andrew    544: if [ X"" != X"${FTP}" ]; then
1.20      andrew    545:     get_sets
1.17      andrew    546: fi
                    547:
                    548: check_sets || exit
1.39      andrew    549:
1.54      andrew    550: echo "===> Last booted:\n$BOOTED_KERNEL_VERSION"
1.39      andrew    551: if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \
                    552:   -a X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then
                    553:     echo "Next boot (unless replaced):\n$BOOT_KERNEL_VERSION"
                    554: fi
                    555: if [ -n "$NEW_KERNEL_VERSION" ]; then
1.54      andrew    556:     echo "===> New $BOOT_KERNEL:\n$NEW_KERNEL_VERSION";
1.39      andrew    557: else
                    558:     echo "\n!!! WARNING: Will not replace boot kernel $BOOT_KERNEL! !!!\n" >&2
                    559:     echo "ctrl+C to cancel, enter to continue anyway" >&2
1.44      andrew    560:     local _temp
                    561:     read _temp
1.53      andrew    562:     NEW_KERNEL_VERSION=$BOOT_KERNEL_VERSION
1.44      andrew    563: fi
                    564:
                    565: if [ -n "$SUDO" -a $CUR_VER != $NEW_VER ]; then
                    566:     echo >&2
                    567:     echo "!!! You are upgrading between OpenBSD versions.     !!!" >&2
                    568:     echo "!!! You should make sure you have a root shell open !!!" >&2
                    569:     echo "!!! It is needed in order to run /sbin/oreboot.     !!!" >&2
                    570:     echo "!!! sudo MAY NOT WORK after sets are extracted.     !!!" >&2
                    571:     echo >&2
                    572:     echo "ctrl+C to cancel, enter to continue" >&2
1.39      andrew    573:     local _temp
                    574:     read _temp
                    575: fi
1.2       andrew    576:
1.43      andrew    577: if [ -n "$SUDO" ]; then
                    578:     echo
                    579:     echo You may be asked for your sudo password multiple times.
                    580:     $SUDO -v -p "sudo Password: "
1.50      andrew    581: fi
                    582:
1.53      andrew    583: if [ X"$NEW_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \
1.50      andrew    584:      -a ! -e /sbin/oreboot ]; then
                    585:     $SUDO cp /sbin/reboot /sbin/oreboot
                    586:     if [ $? -ne 0 ]; then
                    587:         echo "Error copying old reboot command!" >&2
                    588:         exit 1
                    589:     fi
                    590:     echo "/sbin/reboot copied to /sbin/oreboot"
1.2       andrew    591: fi
                    592:
1.30      andrew    593: install_kernels
1.21      andrew    594: install_sets
1.2       andrew    595:
1.53      andrew    596: if [ X"$NEW_KERNEL_VERSION" == X"$BOOTED_KERNEL_VERSION" ]; then
1.51      andrew    597:     install_sendmail_smtp_auth
                    598:
1.21      andrew    599:     if [ -e /sbin/oreboot ]; then
                    600:         echo Removing /sbin/oreboot
                    601:         $SUDO rm -f /sbin/oreboot
                    602:     fi
1.2       andrew    603:     update_etc
                    604:
1.54      andrew    605:     echo '==> UPDATING PACKAGES'
1.2       andrew    606:     $SUDO pkg_add -ui -F update -F updatedepends
                    607:
                    608: else
                    609:     echo Instructions for updating to the new version available from
1.36      andrew    610:     if [ X"snapshots" == X"$FORCE_DIR" ]; then
1.30      andrew    611:         echo "  http://www.openbsd.org/faq/current.html"
                    612:     else
                    613:         echo "  http://www.openbsd.org/faq/upgrade${FILE_VER}.html"
                    614:     fi
1.2       andrew    615: fi
                    616:
                    617: echo New kernel installed.  Please reboot!
1.22      andrew    618: if [ -e /sbin/oreboot ]; then
                    619:     echo Possibly using /sbin/oreboot
                    620: fi

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