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>