# automatic qa system. 31/08/00 dxm@sgi.com
+# configuration (you could tune this)
+
+EXTRA="-xfs-qa"
+BOOT="/boot"
+SOAK_PASSES="-1"
+SOAK_STRESS="10000"
+SOAK_PROC="3"
+export MKFS_OPTIONS=${MKFS_OPTIONS:=-bsize=4096}
+export MOUNT_OPTIONS=${MOUNT_OPTIONS:=-ologbufs=2}
+
_log()
{
echo "$*" >&2
case $state
in
cron*)
- mail -s "xfs qa status report" $ADMINEMAIL \
+ mail -s "XFS QA status report" $ADMINEMAIL \
< $LOG 2>&1
;;
esac
exit 1
}
-# configuration (you could tune this)
-
-EXTRA="-xfs-qa"
-VERSION="2.4.6-pre3"
-BOOT="/boot"
-SOAK_PASSES="-1"
-SOAK_STRESS="10000"
-SOAK_PROC="3"
+_get_kernel_version()
+{
+ [ -x "$WORKAREA" ] \
+ || _fail "can't access workarea $WORKAREA"
+ [ -r "$WORKAREA/linux/Makefile" ] \
+ || _fail "can't read makefile $WORKAREA/linux/Makefile"
+
+ eval `awk '
+ BEGIN { FS = "[ \t=]+" }
+ /^VERSION =/ { a=$2 }
+ /^PATCHLEVEL =/ { b=$2 }
+ /^SUBLEVEL =/ { c=$2 }
+ /^EXTRAVERSION =/ { d=$2 }
+ END {
+ print "VERSION=" a "." b "." c d " ; SVERSION=" a "." b "." c
+ }
+ ' < $WORKAREA/linux/Makefile`
+}
# this should be constant
fi
export WORKAREA
+
export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/ptools:/usr/local/bin"
STATE=$ROOT/qa.state
QADIR="$WORKAREA/cmd/xfstests"
SUDO="su -c"
-IMAGE="$BOOT/vmlinuz-$VERSION$EXTRA"
-SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
CONFIG="$ROOT/$HOST.config"
-MODULES="/lib/modules/$VERSION$EXTRA"
COMMON_CONFIG="$WORKAREA/cmd/xfstests/common.config"
SH="/bin/sh"
LOG="$ROOT/qa.log"
case $HOST
in
- fuzzy)
- EMAIL="dxm@larry"
- ADMINEMAIL="dxm@larry"
- MODULAR=1
- ;;
bruce)
- EMAIL="dxm@larry"
- ADMINEMAIL="dxm@larry"
- MODULAR=1
+ EMAIL="nathans@larry"
+ ADMINEMAIL="nathans@larry"
+ MODULAR=0
;;
sagan)
- EMAIL="dxm@larry"
- ADMINEMAIL="dxm@larry"
- MODULAR=0
+ EMAIL="tes@larry"
+ ADMINEMAIL="tes@larry"
+ MODULAR=1
;;
troppo)
- EMAIL="nathans@larry"
- ADMINEMAIL="nathans@larry"
+ EMAIL="kaos@larry"
+ ADMINEMAIL="kaos@larry"
MODULAR=0
;;
- goldfish)
+ frodo)
EMAIL="nathans@larry"
ADMINEMAIL="nathans@larry"
- MODULAR=1
+ MODULAR=0
;;
*)
_fail "auto-qa: no configuration information for host '$HOST'"
_restart()
{
- # erk - why won't this thing reboot reliably??
- exec $ROOT/su -c "(shutdown -r 2 \"auto-qa rebooting\" ; sleep 10 ; reboot ; sleep 10 ; reboot )&" < /dev/null
+ exec $ROOT/su -c "(shutdown -r now \"auto-qa rebooting\" )&" < /dev/null
}
_update_autoqa_file()
cron-restarted)
# we don't auto restart after reboot, but cron the restart
# to happen a bit later - it's much easier and safer that way
- if [ $state != "cron-restarted" ]
+ if [ "$state" != "cron-restarted" ]
then
_fail " !!! cron-restarted while not in \"cron-restarted\" state"
fi
_set_state $1
fi
-[ $UID -eq 0 ] && _fail " !!! QA most be run as a normal user"
-[ -d $ROOT ] || _fail " !!! QA root \"$ROOT\" not found"
-[ -d $WORKAREA ] || _fail " !!! QA workarea \"$WORKAREA\" not found"
-[ -r $CONFIG ] || _fail " !!! Can't read config file $CONFIG"
-. $COMMON_CONFIG || _fail " !!! Couldn't source $COMMON_CONFIG"
+[ "$UID" -eq 0 ] && _fail " !!! QA most be run as a normal user"
+[ -d "$ROOT" ] || _fail " !!! QA root \"$ROOT\" not found"
+[ -d "$WORKAREA" ] || _fail " !!! QA workarea \"$WORKAREA\" not found"
+[ -r "$CONFIG" ] || _fail " !!! Can't read config file $CONFIG"
+. "$COMMON_CONFIG" || _fail " !!! Couldn't source $COMMON_CONFIG"
+
+_get_kernel_version
+IMAGE="$BOOT/vmlinuz$EXTRA"
+SYSTEMMAP="$BOOT/System.map-$VERSION$EXTRA"
+MODULES="/lib/modules/$SVERSION"
cd $ROOT
*init)
echo "" > $ROOT/qa.log
echo "" > $ROOT/qa.full
- _log "******************************************"
- _log "QA init (`date`)"
- _log "******************************************"
+ _log "******************************************************"
+ _log "QA init $VERSION (`date`)"
+ _log "******************************************************"
+ _log "--- kernel ($IMAGE)"
+ _log "--- modules ($MODULES)"
_change_state "inited"
_update_autoqa_file
*clean)
# we need to configure or else we might fail to clean
- for pkg in attr acl xfsprogs xfsdump xfstests
+ for pkg in attr acl xfsprogs dmapi xfsdump xfstests
do
cd $WORKAREA/cmd/$pkg
_log " *** clean $pkg tools"
make EXTRAVERSION=$EXTRA dep 2>&1 \
|| _fail " !!! reconfig dep failed"
- new_state="build"
+ new_state="buildtools"
;;
- *build)
- _log " *** build kernel"
-
- _change_state "clean" ; # we better start from scratch if this fails
-
- cd $WORKAREA/linux
- make -j2 EXTRAVERSION=$EXTRA bzImage 2>&1 \
- || _fail " !!! build bzImage failed"
- make -j2 EXTRAVERSION=$EXTRA modules 2>&1 \
- || _fail " !!! build modules failed"
-
+ *buildtools)
_log " *** build and install tools"
- for pkg in attr acl xfsprogs xfsdump xfstests
+ for pkg in attr acl xfsprogs dmapi xfsdump xfstests
do
cd $WORKAREA/cmd/$pkg
_sudo make install install-dev 2>&1 \
|| _fail " !!! install $pkg failed"
+
+ # attr and acl now have install-lib targets as well
+ [ "$pkg" == "attr" -o "$pkg" == "acl" ] || continue
+ _sudo make install-lib 2>&1 \
+ || _fail " !!! install $pkg failed"
done
- new_state="install"
+ new_state="buildkernel"
;;
+
+ *buildkernel)
+ _log " *** build kernel"
+ _change_state "clean" ; # we better start from scratch if this fails
+
+ cd $WORKAREA/linux
+ make -j4 EXTRAVERSION=$EXTRA bzImage modules 2>&1 \
+ || _fail " !!! build bzImage/modules failed"
+ new_state="install"
+ ;;
+
*install)
_log " *** blat old modules"
_log " *** kernel"
ls -l /boot/*$EXTRA* 2>&1
_log " *** kernel modules"
- ls -l /lib/modules/$VERSION$EXTRA/kernel/fs/pagebuf/* \
- /lib/modules/$VERSION$EXTRA/kernel/fs/xfs/* \
- /lib/modules/$VERSION$EXTRA/kernel/fs/xfs_support/*
+ ls -l /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs/* \
+ /lib/modules/$SVERSION$EXTRA/kernel/fs/xfs_support/*
- if [ $MODULAR -eq 0 ]
+ if [ "$MODULAR" -eq 0 ]
then
new_state="reset"
else
_log " *** removing modules"
- for m in xfsidbg xfs pagebuf kdbm_pg kdbm_vm
+ for m in xfsidbg xfs kdbm_pg kdbm_vm
do
_sudo rmmod $m 2> /dev/null
done
_log " *** clean TEST_DEV"
- _sudo mkfs -t xfs -f $TEST_DEV 2>&1 \
+ _sudo mkfs -t xfs -f $MKFS_OPTIONS $TEST_DEV 2>&1 \
|| _fail " !!! failed to mkfs TEST_DEV"
_log " *** mounting TEST_DEV"
_log ""
_log " *** send status mail"
- mail -s "xfs qa status report" $EMAIL < $ROOT/qa.out 2>&1
+ mail -s "XFS QA status report" $EMAIL < $ROOT/qa.out 2>&1
new_state="done"
;;