Annotation of openbsd/update_openbsd/update_openbsd, Revision 1.4
1.1 andrew 1: #!/bin/sh
1.4 ! andrew 2: # $RedRiver: update_openbsd,v 1.3 2008/08/12 22:42:09 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() {
17: misc=/usr/share/doc/README
18: man=/usr/share/man/cat1/intro.0
19: comp=/usr/bin/cc
20: game=/usr/games/
21: xbase=/usr/X11R6/
22: xetc=/etc/X11/xinit/xinitrc
23: xfont=/usr/X11R6/lib/X11/fonts
24: xserv=/usr/X11R6/bin/X
25: xshare=/usr/X11R6/bin/startx
26:
27: echo base
28: echo etc
1.3 andrew 29: for _d in misc man comp game xbase xetc xfont xserv xshare; do
30: eval _e=\$${_d}
31: _c=`ls $_e 2> /dev/null | wc -l`
32: #echo $_c $_d $_e
33: if [ $_c -ne 0 ]; then
34: echo $_d
1.2 andrew 35: fi
36: done
37: }
38:
39: set_version() {
40: CUR_VER=`uname -r`
1.3 andrew 41: NEW_VER=`dc -e "$CUR_VER 0.1 + p"`
1.2 andrew 42:
43: if [ -d $NEW_VER ]; then
44: DIR=$NEW_VER
45: fi
46:
47: if [ -d $CUR_VER ]; then
48: NEW_VER=$CUR_VER
49: DIR=$NEW_VER
50: fi
51:
52: if [ X"" != X"$FORCE_DIR" ]; then
53: if [ -d $FORCE_DIR ]; then
1.3 andrew 54: DIR=$FORCE_DIR
1.2 andrew 55:
56: _cv=`echo $CUR_VER | sed -e 's/\.//'`
57: if [ -e $DIR/base${_cv}.tgz ]; then
58: NEW_VER=$CUR_VER
59: fi
60: fi
61: fi
62:
63: if [ X"" == X"$DIR" ]; then
64: FTP=${MIRROR}/${NEW_VER}/`machine`
65:
1.3 andrew 66: #echo "ls\nquit\n" | ftp $MIRROR | grep "$NEW_VER"
67: $FTP_CMD ${FTP}/MD5 > /dev/null
1.2 andrew 68:
69: if [ -e MD5 ]; then
70: rm -f MD5
71: else
72: NEW_VER=$CUR_VER
73: fi
74:
75: if [ X"$FORCE_DIR" == X"" ]; then
76: DIR=$NEW_VER
77: else
78: DIR=$FORCE_DIR
79: fi
80:
81: FTP=${MIRROR}/${DIR}/`machine`
82: fi
83:
1.3 andrew 84: if [ X"" != X"$RELEASEDIR" ]; then
85: DIR=$RELEASEDIR
1.2 andrew 86: fi
87:
88: if [ -d $DIR ]; then
89: cd $DIR
90: RELEASEDIR=`pwd`
91: fi
92:
93: _v=`echo $NEW_VER | sed -e 's/\.//'`
94: }
95:
96: get_sets() {
97: if [ X"" == X"$FTP" ]; then
98: echo Error, no FTP site is set! >&2
99: exit 1
100: fi
101:
102: if [ X"" == X"$RELEASEDIR" ]; then
103: RELEASEDIR=$DIR
104: fi
105:
106: mkdir -p $RELEASEDIR
1.3 andrew 107: cd $RELEASEDIR
1.2 andrew 108: RELEASEDIR=`pwd`
109:
110: for _b in /bsd* bsd bsd.mp bsd.rd; do
111: if [ -e /${_b} -a ! -e ./${_b} ]; then
1.3 andrew 112: echo $FTP_CMD ${FTP}/${_b}
113: $FTP_CMD ${FTP}/${_b}
1.2 andrew 114: fi
115: done
116:
117: for _s in `installed_sets`; do
1.3 andrew 118: echo $FTP_CMD ${FTP}/${_s}${_v}.tgz
119: $FTP_CMD ${FTP}/${_s}${_v}.tgz
1.2 andrew 120: done
121:
1.3 andrew 122: echo $FTP_CMD ${FTP}/MD5
123: $FTP_CMD ${FTP}/MD5
1.2 andrew 124: ls bsd* *.tgz > index
125: grep -f index MD5 | md5 -c
126:
127: if [ $? -ne 0 ]; then
128: echo !!! WARNING: MD5 does not match !!! >&2
129: exit 1
130: fi
131: }
132:
133: install_kernel() {
1.3 andrew 134: if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2 andrew 135: echo ${0##*/} must be run as root or SUDO must be set! >&2
136: exit 1
137: fi
138:
139: if [ X"" == X"$RELEASEDIR" ]; then
140: echo "ERROR: no source for new kernels!" >&2
141: exit 1
142: else
143: cd $RELEASEDIR
144: fi
145:
146: if [ ! -e bsd ]; then
147: echo "new bsd kernel does not exist!" >&2
148: exit 1
149: fi
150:
151: if [ -e /bsd.mp -a ! -e bsd.mp ]; then
152: echo "new bsd.mp kernel does not exist!" >&2
153: exit 1
154: fi
155:
156: if [ ! -e bsd.rd ]; then
157: echo "new bsd.rd kernel does not exist!" >&2
158: exit 1
159: fi
160:
161:
162: if [ -e base${_v}.tgz ]; then
163: echo Extracting new firmware from base${_v}.tgz
1.3 andrew 164: $SUDO tar -C $DESTDIR -xzphf base${_v}.tgz "*etc/firmware/*"
1.2 andrew 165: fi
166:
1.3 andrew 167: $SUDO rm -f /obsd
168: $SUDO ln /bsd /obsd
1.2 andrew 169: if [ $? -ne 0 ]; then
170: echo "Error copying old kernel!"
171: exit 1
172: fi
173:
1.3 andrew 174: for _b in bsd*; do
175: $SUDO rm -f /nbsd
1.2 andrew 176:
1.3 andrew 177: if [ X"$_b" == X"bsd" ]; then
1.2 andrew 178: echo Copying bsd to /bsd.sp
1.3 andrew 179: $SUDO cp bsd /nbsd && $SUDO mv /nbsd /bsd.sp
1.2 andrew 180: if [ $? -ne 0 ]; then
181: echo "ERROR: Couldn't copy new SP kernel!" >&2
182: exit 1
183: fi
184: else
1.3 andrew 185: if [ -e /$_b ]; then
186: echo Copying $_b to /
187: $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_b}
1.2 andrew 188: if [ $? -ne 0 ]; then
1.3 andrew 189: echo "ERROR: Couldn't copy new $_b kernel!" >&2
1.2 andrew 190: exit 1
191: fi
192: fi
193: fi
194: done
195:
196: if [ ! -h /bsd ]; then
197: if [ -e /bsd.mp ]; then
198: echo linking /bsd.mp to /bsd
1.3 andrew 199: $SUDO ln -sf /bsd.mp /bsd
1.2 andrew 200: else
201: echo linking /bsd.sp to /bsd
1.3 andrew 202: $SUDO ln -sf /bsd.sp /bsd
1.2 andrew 203: fi
204: if [ $? -ne 0 ]; then
205: echo "ERROR: Couldn't symlink new kernel!" >&2
206: exit 1
207: fi
208: fi
209: }
210:
211: install_sets() {
1.3 andrew 212: if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then
1.2 andrew 213: echo ${0##*/} must be run as root or SUDO must be set! >&2
214: exit 1
215: fi
216:
217: if [ X"" == X"$RELEASEDIR" ]; then
218: echo "ERROR: no source for sets!" >&2
219: exit 1
220: else
221: cd $RELEASEDIR
222: fi
223:
224: for _f in *${_v}.tgz; do
1.3 andrew 225: _path=$DESTDIR
226: if [ X"etc${_v}.tgz" == X"$_f" \
227: -o X"xetc${_v}.tgz" == X"$_f" ]; then
228: if [ X"" != X"$SYSMERGE" ]; then
1.2 andrew 229: continue
230: fi
231: _path=/var/tmp/temproot
232: fi
233:
1.3 andrew 234: echo Extracting $_f to $_path
235: $SUDO mkdir -p $_path
236: $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f}
1.2 andrew 237: if [ $? -ne 0 ]; then
238: echo "Error extracting ${_f}!" >&2
239: exit 1
240: fi
241: done
242:
243: echo Extracted all sets.
244: }
245:
246: update_etc() {
1.3 andrew 247: if [ X"" == X"$SYSMERGE" ]; then
1.2 andrew 248: if [ -e /var/tmp/temproot ]; then
249: MERGEMASTER=`which mergemaster`
250:
251: if [ $? != 0 ]; then
1.3 andrew 252: $SUDO pkg_add -i mergemaster
1.2 andrew 253: MERGEMASTER=`which mergemaster`
254: if [ $? != 0 ]; then
255: echo ERROR: mergemaster not installed! >&2
256: exit 1
257: fi
258: fi
259:
260: echo '### RUNNING MERGEMASTER ###'
1.3 andrew 261: $SUDO $MERGEMASTER -irv
1.2 andrew 262: else
263: echo "ERROR: no source for etc!" >&2
264: exit 1
265: fi
266: else
267: if [ X"" == X"$RELEASEDIR" ]; then
268: echo "ERROR: no source for etc!" >&2
269: exit 1
270: else
271: cd $RELEASEDIR
272: fi
273:
274: _cv=`echo $CUR_VER | sed -e 's/\.//'`
275: if [ -e etc${_cv}.tgz ]; then
1.3 andrew 276: _args="$_args -s etc${_cv}.tgz"
1.2 andrew 277: fi
278: if [ -e xetc${_cv}.tgz ]; then
1.3 andrew 279: _args="$_args -x xetc${_cv}.tgz"
1.2 andrew 280: fi
281: if [ X"" == X"$_args" ]; then
282: echo ERROR: No upgrade sets found! >&2
283: else
284: echo '### RUNNING SYSMERGE ###'
285: _args="-a $_args"
1.3 andrew 286: $SUDO $SYSMERGE $_args
1.2 andrew 287: fi
288: fi
289: }
290:
1.4 ! andrew 291: DESTDIR=${DESTDIR:=/}
1.2 andrew 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>