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

Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.5

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

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