3 # Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
5 # This program is free software; you can redistribute it and/or modify it
6 # under the terms of version 2 of the GNU General Public License as
7 # published by the Free Software Foundation.
9 # This program is distributed in the hope that it would be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 # Further, this software is distributed without any warranty that it is
14 # free of the rightful claim of any third person regarding infringement
15 # or the like. Any license provided herein, whether implied or
16 # otherwise, applies only to this software file. Patent licenses, if
17 # any, provided herein do not apply to combinations of this program with
18 # other software, or any other product whatsoever.
20 # You should have received a copy of the GNU General Public License along
21 # with this program; if not, write the Free Software Foundation, Inc., 59
22 # Temple Place - Suite 330, Boston MA 02111-1307, USA.
24 # Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
25 # Mountain View, CA 94043, or:
29 # For further information regarding this notice, see:
31 # http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
34 # automatic qa system. 31/08/00 dxm@sgi.com
36 # configuration (you could tune this)
42 export EXTRA=${EXTRA:=-xfs-qa}
43 export MKFS_OPTIONS=${MKFS_OPTIONS:=-bsize=4096}
44 export MOUNT_OPTIONS=${MOUNT_OPTIONS:=-ologbufs=2}
45 export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a}
55 if [ "$started" = "1" ]
57 echo "auto-qa stopped" | wall
63 # send special email if a cron'd qa run fails
67 mail -s "XFS QA status report" $ADMINEMAIL \
79 || _fail "can't access workarea $WORKAREA"
80 [ -r "$WORKAREA/linux/Makefile" ] \
81 || _fail "can't read makefile $WORKAREA/linux/Makefile"
84 BEGIN { FS = "[ \t=]+" }
86 /^PATCHLEVEL =/ { b=$2 }
87 /^SUBLEVEL =/ { c=$2 }
88 /^EXTRAVERSION =/ { d=$2 }
90 print "VERSION=" a "." b "." c d " ; SVERSION=" a "." b "." c
92 ' < $WORKAREA/linux/Makefile`
95 # this should be constant
99 if [ ! -z "$CVSROOT" ]; then
100 WORKAREA="$ROOT/linux-2.4-xfs"
102 [ -z "$WORKAREA" ] && WORKAREA="$ROOT/linux-xfs"
107 export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/ptools:/usr/local/bin"
109 QADIR="$WORKAREA/cmd/xfstests"
111 CONFIG="$ROOT/$HOST.config"
112 COMMON_CONFIG="$WORKAREA/cmd/xfstests/common.config"
116 # need to add auto-qa hosts here
121 EMAIL="nathans@larry"
122 ADMINEMAIL="nathans@larry"
127 ADMINEMAIL="tes@larry"
132 ADMINEMAIL="kaos@larry"
136 EMAIL="nathans@larry"
137 ADMINEMAIL="nathans@larry"
141 _fail "auto-qa: no configuration information for host '$HOST'"
145 # do some cleanup on exit
149 umount $SCRATCH_DEV &> /dev/null
150 umount $TEST_DEV &> /dev/null
151 if [ "$started" = 1 ]
153 echo "auto-qa stopped" | wall
158 trap "_cleanup; exit \$status" 0 1 2 3 15
192 _set_state `echo $state | sed "s/-.*$/-$new/"`
204 $ROOT/su -c "$*" < /dev/null ;# HACK - we need a hacked su at the mo
209 exec $ROOT/su -c "(shutdown -r now \"auto-qa rebooting\" )&" < /dev/null
212 _update_autoqa_file()
215 SELF_UPDATE="cmd/xfstests/tools/auto-qa"
216 if [ -z "$CVSROOT" ]; then
217 cmd="p_tupdate $SELF_UPDATE"
219 cmd="cvs -z3 update $SELF_UPDATE"
221 exec $SH -c "cd $WORKAREA ; $cmd; chmod +x $SELF_UPDATE ; exec $SELF"
226 if [ -z "$CVSROOT" ]; then
227 _log " *** p_tupdate"
230 || _fail " !!! p_tupdate failed"
232 _log " *** p_check/p_purge"
234 p_check -s | p_purge -yiu 2>&1 \
235 || _fail " !!! p_check/p_purge failed"
237 _log " *** non-trunk files"
240 || _fail " !!! p_list failed"
242 _log " *** cvs update"
249 _log "*** linux-xfs QA (`date`)"
253 # check preconditions for starting state
262 _fail " !!! cron-init while not in \"*done\" state"
267 # we don't auto restart after reboot, but cron the restart
268 # to happen a bit later - it's much easier and safer that way
269 if [ "$state" != "cron-restarted" ]
271 _fail " !!! cron-restarted while not in \"cron-restarted\" state"
281 [ "$UID" -eq 0 ] && _fail " !!! QA most be run as a normal user"
282 [ -d "$ROOT" ] || _fail " !!! QA root \"$ROOT\" not found"
283 [ -d "$WORKAREA" ] || _fail " !!! QA workarea \"$WORKAREA\" not found"
284 [ -r "$CONFIG" ] || _fail " !!! Can't read config file $CONFIG"
285 . "$COMMON_CONFIG" || _fail " !!! Couldn't source $COMMON_CONFIG"
288 IMAGE="$BOOT/vmlinuz$EXTRA"
289 SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
290 MODULES="/lib/modules/$SVERSION"
295 echo "auto-qa started" | wall
301 _log " *** state $state start (`date`)"
302 _log " (user=$USER, host=$HOST)"
308 echo "" > $ROOT/qa.log
309 echo "" > $ROOT/qa.full
310 _log "******************************************************"
311 _log "QA init $VERSION (`date`)"
312 _log "******************************************************"
313 _log "--- kernel ($IMAGE)"
314 _log "--- modules ($MODULES)"
316 _change_state "inited"
321 _log " *** QA initialized"
331 # we need to configure or else we might fail to clean
332 for pkg in attr acl xfsprogs dmapi xfsdump xfstests
334 cd $WORKAREA/cmd/$pkg
335 _log " *** clean $pkg tools"
336 make realclean 2>&1 \
337 || _fail " !!! clean $pkg failed"
340 _log " *** clean linux"
343 || _fail " !!! clean linux failed"
345 _log " *** install configuration file"
346 cp -f $CONFIG $WORKAREA/linux/.config 2>&1 \
347 || _fail " !!! failed to install config"
349 _log " *** remove version file"
350 rm -f include/linux/version.h 2>&1 \
351 || _fail " !!! failed to clean version"
358 _log " *** reconfig kernel"
360 _change_state "clean" ; # we better start from scratch if this fails
363 # we want to use default options for any new config options.
364 echo -e "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" | \
365 make EXTRAVERSION=$EXTRA oldconfig 2>&1 \
366 || _fail " !!! reconfig oldconfig failed"
367 make EXTRAVERSION=$EXTRA dep 2>&1 \
368 || _fail " !!! reconfig dep failed"
370 new_state="buildtools"
374 _log " *** build and install tools"
375 for pkg in attr acl xfsprogs dmapi xfsdump xfstests
377 cd $WORKAREA/cmd/$pkg
379 # use e-fence - but this will only take effect on configure
380 make configure 2>&1 \
381 || _fail " !!! configure $pkg failed"
383 || _fail " !!! build $pkg failed"
385 _sudo make install install-dev 2>&1 \
386 || _fail " !!! install $pkg failed"
388 # attr and acl now have install-lib targets as well
389 [ "$pkg" = "attr" -o "$pkg" = "acl" ] || continue
390 _sudo make install-lib 2>&1 \
391 || _fail " !!! install $pkg failed"
394 new_state="buildkernel"
398 _log " *** build kernel"
400 _change_state "clean" ; # we better start from scratch if this fails
403 make -j4 EXTRAVERSION=$EXTRA bzImage modules 2>&1 \
404 || _fail " !!! build bzImage/modules failed"
409 _log " *** blat old modules"
411 _sudo rm -rf $MODULES
413 _log " *** install kernel"
415 _sudo cp -f $WORKAREA/linux/arch/i386/boot/bzImage $IMAGE 2>&1 \
416 || _fail " !!! install kernel failed"
417 _sudo cp -f $WORKAREA/linux/System.map $SYSTEMMAP 2>&1 \
418 || _fail " !!! install kernel failed"
419 _sudo make EXTRAVERSION=$EXTRA modules_install 2>&1 \
420 || _fail " !!! install modules failed"
422 _log " *** reinit lilo"
423 _sudo /sbin/lilo 2>&1 \
424 || _fail " !!! reinit lilo failed"
429 _log " *** select qa kernel"
430 _sudo /sbin/lilo -R linux-xfs-qa 2>&1 \
431 || _fail " !!! lilo failed"
433 _log " *** prepare to restart"
434 _change_state "restarted"
436 _log " *** restarting"
438 _restart # doesn't return
442 _log " *** QA reentered after restart"
449 _log " *** uname $uname"
450 _log " *** user tools"
451 ls -l /sbin/*xfs* /usr/sbin/*xfs* 2>&1
453 ls -l /boot/*$EXTRA* 2>&1
454 _log " *** kernel modules"
455 ls -l /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs/*
457 if [ "$MODULAR" -eq 0 ]
466 _log " *** modules dependencies"
468 _sudo depmod -a 2>&1 \
469 || _fail " !!! failed to depmod -a"
471 _log " *** unmounting XFS mounts"
473 _sudo umount -a -t xfs 2>&1
475 _log " *** removing modules"
477 for m in xfsidbg xfs kdbm_pg kdbm_vm
479 _sudo rmmod $m 2> /dev/null
482 _log " *** installing modules"
484 _sudo modprobe xfs 2>&1 \
485 || _fail " !!! failed to modprobe xfs"
492 _log " *** unmounting TEST_DEV"
494 _sudo umount $TEST_DEV 2>&1
496 _log " *** unmounting SCRATCH_DEV"
498 _sudo umount $SCRATCH_DEV 2>&1
500 _log " *** clean TEST_DEV"
502 _sudo mkfs -t xfs -f $MKFS_OPTIONS $TEST_DEV 2>&1 \
503 || _fail " !!! failed to mkfs TEST_DEV"
505 _log " *** mounting TEST_DEV"
507 _sudo mount -t xfs $TEST_DEV $TEST_DIR 2>&1 \
508 || _fail " !!! failed to mount"
517 _log " *** run soak test"
518 _sudo ./soak $SOAK_PASSES $SOAK_STRESS $SOAK_PROC\
519 || _fail " !!! failed to run soak test"
527 _log " *** run tests"
528 _sudo ./check -l -g auto 2>&1 | tee $ROOT/qa.out
531 _log " *** send status mail"
532 mail -s "XFS QA status report" $EMAIL < $ROOT/qa.out 2>&1
538 _log "*** QA run complete"
545 _log " *** do nothing"
549 _fail " !!! unknown state $state"
553 _log " *** state $state done (`date`)"
554 [ "$new_state" = "" ] && _fail " !!! no new state set"
555 _change_state $new_state