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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.3

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

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