Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.2
1.1 andrew 1: #!/bin/sh
1.2 ! andrew 2: # $RedRiver: update_openbsd,v 1.1 2008/08/12 18:45:47 andrew Exp $
! 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
! 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
! 36: fi
! 37: done
! 38: }
! 39:
! 40: set_version() {
! 41: CUR_VER=`uname -r`
! 42: NEW_VER=`dc -e "${CUR_VER} 0.1 + p"`
! 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
! 55: DIR=${FORCE_DIR}
! 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:
! 67: #echo "ls\nquit\n" | ftp ${MIRROR} | grep "${NEW_VER}"
! 68: ${FTP_CMD} ${FTP}/MD5 > /dev/null
! 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:
! 85: if [ X"" != X"${RELEASEDIR}" ]; then
! 86: DIR=${RELEASEDIR}
! 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
! 108: cd ${RELEASEDIR}
! 109: RELEASEDIR=`pwd`
! 110:
! 111: for _b in /bsd* bsd bsd.mp bsd.rd; do
! 112: if [ -e /${_b} -a ! -e ./${_b} ]; then
! 113: echo ${FTP_CMD} ${FTP}/${_b}
! 114: ${FTP_CMD} ${FTP}/${_b}
! 115: fi
! 116: done
! 117:
! 118: for _s in `installed_sets`; do
! 119: echo ${FTP_CMD} ${FTP}/${_s}${_v}.tgz
! 120: ${FTP_CMD} ${FTP}/${_s}${_v}.tgz
! 121: done
! 122:
! 123: echo ${FTP_CMD} ${FTP}/MD5
! 124: ${FTP_CMD} ${FTP}/MD5
! 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() {
! 135: if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then
! 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
! 165: ${SUDO} tar -C ${DESTDIR} -xzphf base${_v}.tgz "*etc/firmware/*"
! 166: fi
! 167:
! 168: ${SUDO} rm -f /obsd
! 169: ${SUDO} ln /bsd /obsd
! 170: if [ $? -ne 0 ]; then
! 171: echo "Error copying old kernel!"
! 172: exit 1
! 173: fi
! 174:
! 175: for b in bsd*; do
! 176: ${SUDO} rm -f /nbsd
! 177:
! 178: if [ X"$b" == X"bsd" ]; then
! 179: echo Copying bsd to /bsd.sp
! 180: ${SUDO} cp bsd /nbsd && ${SUDO} mv /nbsd /bsd.sp
! 181: if [ $? -ne 0 ]; then
! 182: echo "ERROR: Couldn't copy new SP kernel!" >&2
! 183: exit 1
! 184: fi
! 185: else
! 186: if [ -e /${b} ]; then
! 187: echo Copying ${b} to /
! 188: ${SUDO} cp ${b} /nbsd && ${SUDO} mv /nbsd /${b}
! 189: if [ $? -ne 0 ]; then
! 190: echo "ERROR: Couldn't copy new ${b} kernel!" >&2
! 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
! 200: ${SUDO} ln -sf /bsd.mp /bsd
! 201: else
! 202: echo linking /bsd.sp to /bsd
! 203: ${SUDO} ln -sf /bsd.sp /bsd
! 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() {
! 213: if [ X"${USER}" != X"root" -a X"${SUDO}" == X"" ]; then
! 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
! 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
! 230: continue
! 231: fi
! 232: _path=/var/tmp/temproot
! 233: fi
! 234:
! 235: echo Extracting ${_f} to $_path
! 236: ${SUDO} mkdir -p $_path
! 237: ${SUDO} tar -C $_path -xzphf ${RELEASEDIR}/${_f}
! 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() {
! 248: if [ X"" == X"${SYSMERGE}" ]; then
! 249: if [ -e /var/tmp/temproot ]; then
! 250: MERGEMASTER=`which mergemaster`
! 251:
! 252: if [ $? != 0 ]; then
! 253: ${SUDO} pkg_add -i mergemaster
! 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 ###'
! 262: ${SUDO} ${MERGEMASTER} -irv
! 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
! 277: _args="${_args} -s etc${_cv}.tgz"
! 278: fi
! 279: if [ -e xetc${_cv}.tgz ]; then
! 280: _args="${_args} -x xetc${_cv}.tgz"
! 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"
! 287: ${SUDO} ${SYSMERGE} $_args
! 288: fi
! 289: fi
! 290: }
! 291:
! 292:
! 293: PKG_PATH=${PKG_PATH:=/usr/ports/packages/`machine`/all/:${MIRROR}/`uname -r`/packages/`machine`/}
! 294:
! 295: if [ ! -e ${SYSMERGE} ]; then
! 296: SYSMERGE=
! 297: fi
! 298:
! 299: set_version
! 300:
! 301: echo
! 302: echo "-= update_openbsd - helper script to update OpenBSD =-"
! 303: echo "------------------------------------------------------"
! 304: echo
! 305: echo " DIR: $DIR"
! 306: echo "RELEASEDIR: $RELEASEDIR"
! 307: echo " DESTDIR: $DESTDIR"
! 308: echo " CUR_VER: $CUR_VER"
! 309: echo " NEW_VER: $NEW_VER"
! 310: echo " SUDO: $SUDO"
! 311: echo " SYSMERGE: $SYSMERGE"
! 312: echo " MIRROR: $MIRROR"
! 313: echo
! 314:
! 315: if [ X"" == X"$RELEASEDIR" ]; then
! 316: echo '### GETTING SETS ###'
! 317: get_sets
! 318: fi
! 319:
! 320: if [ X"" != X"$SUDO" ]; then
! 321: echo Please enter your sudo password if prompted.
! 322: echo You may be asked for it again later in the process.
! 323: $SUDO -v
! 324: fi
! 325:
! 326: echo '### INSTALLING KERNEL ###'
! 327: install_kernel
! 328:
! 329: if [ $CUR_VER == $NEW_VER -o X"" != X"$FORCE_DIR" ]; then
! 330: echo '### INSTALLING SETS ###'
! 331: install_sets
! 332:
! 333: echo '### UPDATING ETC ###'
! 334: update_etc
! 335:
! 336: echo '### UPDATING PACKAGES ###'
! 337: $SUDO pkg_add -ui -F update -F updatedepends
! 338:
! 339: else
! 340: echo Instructions for updating to the new version available from
! 341: echo " http://www.openbsd.org/faq/upgrade${_v}.html"
! 342: fi
! 343:
! 344: echo New kernel installed. Please reboot!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>