##/bin/sh # # Copyright (c) 2000-2003,2006 Silicon Graphics, Inc. All Rights Reserved. # # setup and check for config parameters, and in particular # # EMAIL - email of the script runner. # TEST_DIR - scratch test directory that is in an already # mounted XFS file system, needs to be be world # writeable # TEST_DEV - device for file system containing TEST_DIR # SCRATCH_DEV - device you can make a scratch file system on # SCRATCH_MNT - mount point for scratch file system # # and optionally: # SCRATCH_LOGDEV - scratch log device for external log testing # SCRATCH_RTDEV - scratch rt dev # TEST_LOGDEV - test log device for external log testing # TEST_RTDEV - test rt dev # TAPE_DEV - the tape device for the xfsdump tests # RMT_TAPE_DEV - the remote tape device for the xfsdump tests # RMT_IRIXTAPE_DEV- the IRIX remote tape device for the xfsdump tests # RMT_TAPE_USER - remote user for tape device # # - These can be added to $HOST_CONFIG_DIR (witch default to ./config) # below or a separate local configuration file can be used (using # the HOST_OPTIONS variable). # - This script is shared by the stress test system and the auto-qa # system (includes both regression test and benchmark components). # - TEST_DEV & TEST_DIR must be assigned. # - this script shouldn't make any assertions about filesystem # validity or mountedness. # # all tests should use a common language setting to prevent golden # output mismatches. export LANG=C # Warning: don't put freeware before /usr/bsd on IRIX coz you'll # get the wrong hostname and set your system name to -s :) [ -d /usr/bsd ] && PATH=$PATH:/usr/bsd [ -d /usr/freeware/bin ] && PATH=$PATH:/usr/freeware/bin PATH=".:$PATH" HOST=`hostname -s` HOSTOS=`uname -s` [ "$HOSTOS" = "IRIX64" ] && HOSTOS="IRIX" MODULAR=0 # using XFS as a module or not BOOT="/boot" # install target for kernels export EXTRA=${EXTRA:=xfs-qa} # general parameters (mainly for auto-qa) SOAK_PROC=3 # -p option to fsstress SOAK_STRESS=10000 # -n option to fsstress SOAK_PASSES=-1 # count of repetitions of fsstress (while soaking) EMAIL=root@localhost # where auto-qa will send its status messages export HOST_OPTIONS=${HOST_OPTIONS:=local.config} export CHECK_OPTIONS=${CHECK_OPTIONS:="-g auto"} export BENCH_PASSES=${BENCH_PASSES:=5} export XFS_MKFS_OPTIONS=${XFS_MKFS_OPTIONS:=-bsize=4096} export PWD=`pwd` #export DEBUG=${DEBUG:=...} # arbitrary CFLAGS really. export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a} export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes} # $1 = prog to look for, $2* = default pathnames if not found in $PATH set_prog_path() { p=`which $1 2> /dev/null` if [ -n "$p" -a -x "$p" ]; then echo $p return 0 fi p=$1 shift for f; do if [ -x $f ]; then echo $f return 0 fi done echo "" return 1 } _fatal() { echo "$*" status=1 exit 1 } export MKFS_PROG="`set_prog_path mkfs`" [ "$MKFS_PROG" = "" ] && _fatal "mkfs not found" export MOUNT_PROG="`set_prog_path mount`" [ "$MOUNT_PROG" = "" ] && _fatal "mount not found" export UMOUNT_PROG="`set_prog_path umount`" [ "$UMOUNT_PROG" = "" ] && _fatal "umount not found" export FSSTRESS_PROG="`set_prog_path fsstress $PWD/ltp/fsstress`" [ "$FSSTRESS_PROG" = "" ] && _fatal "fsstress not found" export NSLOOKUP_PROG="`set_prog_path nslookup`" [ "$NSLOOKUP_PROG" = "" ] && _fatal "nslookup not found" export PERL_PROG="`set_prog_path perl`" [ "$PERL_PROG" = "" ] && _fatal "perl not found" export AWK_PROG="`set_prog_path awk`" [ "$AWK_PROG" = "" ] && _fatal "awk not found" export SED_PROG="`set_prog_path sed`" [ "$SED_PROG" = "" ] && _fatal "sed not found" export BC_PROG="`set_prog_path bc`" [ "$BC_PROG" = "" ] && _fatal "bc not found" export PS_ALL_FLAGS="-ef" export DF_PROG="`set_prog_path df`" [ "$DF_PROG" = "" ] && _fatal "df not found" [ "$HOSTOS" = "Linux" ] && export DF_PROG="$DF_PROG -T" export XFS_LOGPRINT_PROG="`set_prog_path xfs_logprint`" export XFS_REPAIR_PROG="`set_prog_path xfs_repair`" export XFS_CHECK_PROG="`set_prog_path xfs_check`" export XFS_DB_PROG="`set_prog_path xfs_db`" export XFS_GROWFS_PROG=`set_prog_path xfs_growfs` export XFS_IO_PROG="`set_prog_path xfs_io`" export XFS_PARALLEL_REPAIR_PROG="`set_prog_path xfs_prepair`" export XFS_PARALLEL_REPAIR64_PROG="`set_prog_path xfs_prepair64`" export XFSDUMP_PROG="`set_prog_path xfsdump`" export XFSRESTORE_PROG="`set_prog_path xfsrestore`" export XFSINVUTIL_PROG="`set_prog_path xfsinvutil`" # Generate a comparable xfsprogs version number in the form of # major * 10000 + minor * 100 + release # # $ xfs_db -V # xfs_db version 2.9.7 # # so, 2.9.7 = 20907 _version=`$XFS_DB_PROG -V | $AWK_PROG ' /version/ { if (split($3,ver,".") == 3) print (ver[1] * 10000) + (ver[2] * 100) + ver[3]; }'` [ -z "$_version" ] && _fatal "xfsprogs version cannot be found" export XFSPROGS_VERSION="$_version" case "$HOSTOS" in IRIX*) export MKFS_XFS_PROG="`set_prog_path mkfs_xfs`" export MKFS_UDF_PROG="`set_prog_path mkfs_udf`" export XFS_FSR_PROG="`set_prog_path /usr/etc/fsr_xfs`" export MKFS_NFS_PROG="false" ;; Linux) export MKFS_XFS_PROG="`set_prog_path mkfs.xfs`" export MKFS_UDF_PROG="`set_prog_path mkudffs`" export XFS_FSR_PROG="`set_prog_path xfs_fsr`" export MKFS_NFS_PROG="false" ;; esac known_hosts() { [ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs [ -f /etc/xfsqa.config ] && . /etc/xfsqa.config [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config MC="" # Non-Mandatory Config values. # [ -z "$MODULAR" ] && MC="$MC MODULAR" # [ -z "$TEST_LOGDEV" ] && MC="$MC TEST_LOGDEV" # [ -z "$SCRATCH_LOGDEV" ] && MC="$MC SCRATCH_LOGDEV" # [ -z "$SCRATCH_RTDEV" ] && MC="$MC SCRATCH_RTDEV" [ -z "$EMAIL" ] && MC="$MC EMAIL" [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" [ -z "$SCRATCH_MNT" ] && MC="$MC SCRATCH_MNT" [ -z "$SCRATCH_DEV" ] && MC="$MC SCRATCH_DEV" [ "$MC" ] && (echo "Warning: need to define parameters for host $HOST";\ echo " or set variables:"; \ echo " $MC") # if [ -e configs/$HOST.config ] # then echo "Not carring, we have a configfile ($HOST_CONFIG_DIR/$HOST)" # else [ "$MC" ] && exit 1 # fi } if [ -f "$HOST_OPTIONS" ]; then . "$HOST_OPTIONS" else known_hosts fi echo $TEST_DEV | grep -q ":" > /dev/null 2>&1 if [ ! -b "$TEST_DEV" -a "$?" != "0" ]; then echo "common.config: Error: \$TEST_DEV ($TEST_DEV) is not a block device or a NFS filesystem" exit 1 fi if [ ! -d "$TEST_DIR" ]; then echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" exit 1 fi echo $SCRATCH_DEV | grep -q ":" > /dev/null 2>&1 if [ ! -z "$SCRATCH_DEV" -a ! -b "$SCRATCH_DEV" -a "$?" != "0" ]; then echo "common.config: Error: \$SCRATCH_DEV ($SCRATCH_DEV) is not a block device or a NFS filesystem" exit 1 fi if [ ! -z "$SCRATCH_MNT" -a ! -d "$SCRATCH_MNT" ]; then echo "common.config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not a directory" exit 1 fi _readlink() { if [ $# -ne 1 ]; then echo "Usage: _readlink filename" 1>&2 exit 1 fi perl -e "\$in=\"$1\";" -e ' $lnk = readlink($in); if ($lnk =~ m!^/.*!) { print "$lnk\n"; } else { chomp($dir = `dirname $in`); print "$dir/$lnk\n"; }' } # if devfs is running expand the full /dev/.. pathname - this is what will be # returned by utilities such as mount [ -L "$TEST_DEV" ] && TEST_DEV=`_readlink $TEST_DEV` [ -L "$SCRATCH_DEV" ] && SCRATCH_DEV=`_readlink $SCRATCH_DEV` [ -L "$SCRATCH_LOGDEV" ] && SCRATCH_LOGDEV=`_readlink $SCRATCH_LOGDEV` [ -L "$SCRATCH_RTDEV" ] && SCRATCH_RTDEV=`_readlink $SCRATCH_LOGDEV` # make sure this script returns success /bin/true