2007-01-04 14:23:48 +01:00
|
|
|
|
2007-01-31 16:45:01 +01:00
|
|
|
TS_OUTDIR="output"
|
|
|
|
TS_DIFFDIR="diff"
|
|
|
|
TS_EXPECTEDDIR="expected"
|
|
|
|
TS_INPUTDIR="input"
|
2007-05-18 15:34:28 +02:00
|
|
|
TS_VERBOSE="no"
|
2007-01-04 14:23:48 +01:00
|
|
|
|
2007-01-03 01:07:55 +01:00
|
|
|
function ts_skip {
|
|
|
|
echo " IGNORE ($1)"
|
2007-05-18 13:49:15 +02:00
|
|
|
if [ -n "$2" ] && [ -b "$2" ]; then
|
|
|
|
ts_device_deinit "$2"
|
|
|
|
fi
|
2007-01-03 01:07:55 +01:00
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
2007-05-16 00:41:14 +02:00
|
|
|
function ts_skip_nonroot {
|
|
|
|
if [ $UID != 0 ]; then
|
|
|
|
ts_skip "not root permissions"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2007-03-19 23:27:40 +01:00
|
|
|
function ts_failed {
|
|
|
|
if [ x"$1" == x"" ]; then
|
|
|
|
echo " FAILED ($TS_NAME)"
|
|
|
|
else
|
|
|
|
echo " FAILED ($1)"
|
|
|
|
fi
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_ok {
|
|
|
|
if [ x"$1" == x"" ]; then
|
|
|
|
echo " OK"
|
|
|
|
else
|
|
|
|
echo " OK ($1)"
|
|
|
|
fi
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
2007-05-18 15:34:28 +02:00
|
|
|
function ts_log {
|
|
|
|
echo "$1" >> $TS_OUTPUT
|
|
|
|
[ "$TS_VERBOSE" == "yes" ] && echo "$1"
|
|
|
|
}
|
|
|
|
|
2007-01-04 14:23:48 +01:00
|
|
|
function ts_init {
|
2007-01-30 13:18:51 +01:00
|
|
|
export LANG="en_US.UTF-8":
|
2007-01-04 14:23:48 +01:00
|
|
|
TS_NAME=$(basename $0)
|
|
|
|
if [ ! -d $TS_OUTDIR ]; then
|
|
|
|
mkdir -p $TS_OUTDIR
|
|
|
|
fi
|
|
|
|
if [ ! -d $TS_DIFFDIR ]; then
|
|
|
|
mkdir -p $TS_DIFFDIR
|
|
|
|
fi
|
2007-05-18 15:34:28 +02:00
|
|
|
[ "$1" == "--verbose" ] && TS_VERBOSE="yes"
|
2007-01-04 14:23:48 +01:00
|
|
|
TS_OUTPUT="$TS_OUTDIR/$TS_NAME"
|
|
|
|
TS_DIFF="$TS_DIFFDIR/$TS_NAME"
|
|
|
|
TS_EXPECTED="$TS_EXPECTEDDIR/$TS_NAME"
|
2007-01-30 13:18:51 +01:00
|
|
|
TS_INPUT="$TS_INPUTDIR/$TS_NAME"
|
2007-01-04 14:23:48 +01:00
|
|
|
|
2007-01-03 00:42:23 +01:00
|
|
|
rm -f $TS_OUTPUT
|
2007-05-18 13:49:15 +02:00
|
|
|
touch $TS_OUTPUT
|
2007-01-03 00:42:23 +01:00
|
|
|
|
2007-01-04 14:23:48 +01:00
|
|
|
printf "%15s: %-25s ..." "$TS_COMPONENT" "$TS_DESC"
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_finalize {
|
|
|
|
local res=0
|
|
|
|
|
|
|
|
if [ -s $TS_EXPECTED ]; then
|
|
|
|
if [ -s $TS_OUTPUT ]; then
|
|
|
|
diff -u $TS_EXPECTED $TS_OUTPUT > $TS_DIFF
|
|
|
|
if [ -s $TS_DIFF ]; then
|
|
|
|
res=1
|
|
|
|
fi
|
|
|
|
else
|
2007-01-30 13:18:51 +01:00
|
|
|
res=1
|
2007-01-04 14:23:48 +01:00
|
|
|
fi
|
2007-01-03 00:42:23 +01:00
|
|
|
else
|
|
|
|
echo " IGNORE (expected output undefined)"
|
|
|
|
exit 0
|
2007-01-04 14:23:48 +01:00
|
|
|
fi
|
|
|
|
if [ $res -eq 0 ]; then
|
2007-03-19 23:27:40 +01:00
|
|
|
ts_ok $1
|
2007-01-04 14:23:48 +01:00
|
|
|
else
|
2007-03-19 23:27:40 +01:00
|
|
|
ts_failed $1
|
2007-01-04 14:23:48 +01:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2007-05-18 13:49:15 +02:00
|
|
|
function ts_die {
|
2007-05-18 15:34:28 +02:00
|
|
|
ts_log "$1"
|
2007-05-18 13:49:15 +02:00
|
|
|
if [ -n "$2" ] && [ -b "$2" ]; then
|
|
|
|
ts_device_deinit "$2"
|
|
|
|
fi
|
|
|
|
ts_finalize
|
|
|
|
}
|
|
|
|
|
2007-05-16 01:38:13 +02:00
|
|
|
function ts_device_init {
|
2007-05-18 13:49:15 +02:00
|
|
|
local IMAGE="$TS_OUTDIR/$TS_NAME.img"
|
|
|
|
local IMAGE_RE=$( echo "$IMAGE" | sed 's:/:\\/:g' )
|
|
|
|
local DEV=""
|
2007-03-19 23:27:40 +01:00
|
|
|
|
2007-05-16 01:38:13 +02:00
|
|
|
dd if=/dev/zero of="$IMAGE" bs=1M count=5 &> /dev/null
|
2007-03-19 23:27:40 +01:00
|
|
|
|
2007-05-16 01:38:13 +02:00
|
|
|
$TS_CMD_LOSETUP -f "$IMAGE" 2>&1 >> $TS_OUTPUT
|
2007-05-18 13:49:15 +02:00
|
|
|
DEV=$( $TS_CMD_LOSETUP -a | gawk 'BEGIN {FS=":"} /'$IMAGE_RE'/ { print $1 }' )
|
2007-05-16 01:38:13 +02:00
|
|
|
|
2007-05-18 13:49:15 +02:00
|
|
|
if [ -z "$DEV" ]; then
|
|
|
|
ts_device_deinit $DEV
|
2007-05-16 01:38:13 +02:00
|
|
|
return 1 # error
|
|
|
|
fi
|
|
|
|
|
2007-05-18 13:49:15 +02:00
|
|
|
echo $DEV
|
2007-05-16 01:38:13 +02:00
|
|
|
return 0 # succes
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_device_deinit {
|
2007-05-18 13:49:15 +02:00
|
|
|
local DEV="$1"
|
|
|
|
|
|
|
|
if [ -b "$DEV" ]; then
|
|
|
|
$TS_CMD_UMOUNT "$DEV" &> /dev/null
|
|
|
|
$TS_CMD_LOSETUP -d "$DEV" &> /dev/null
|
2007-05-16 01:38:13 +02:00
|
|
|
fi
|
|
|
|
}
|
2007-05-16 02:07:07 +02:00
|
|
|
|
2007-05-18 13:49:15 +02:00
|
|
|
function ts_udev_dev_support {
|
2007-05-16 02:07:07 +02:00
|
|
|
ldd $TS_CMD_MOUNT | grep -q 'libvolume_id' 2>&1 >> $TS_OUTPUT
|
|
|
|
if [ "$?" == "0" ]; then
|
2007-05-18 13:49:15 +02:00
|
|
|
local HAS_VOLUMEID="yes"
|
2007-05-16 02:07:07 +02:00
|
|
|
fi
|
2007-05-18 13:49:15 +02:00
|
|
|
if [ -n "$HAS_VOLUMEID" ] && [ ! -L "/dev/disk/$1/$2" ]; then
|
2007-05-16 02:07:07 +02:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2007-05-17 20:16:25 +02:00
|
|
|
function ts_uuid_by_devname {
|
|
|
|
local DEV="$1"
|
|
|
|
local UUID=""
|
|
|
|
if [ -x "$TS_ECMD_BLKID" ]; then
|
|
|
|
UUID=$($TS_ECMD_BLKID -c /dev/null -w /dev/null -s "UUID" $DEV | sed 's/.*UUID="//g; s/"//g')
|
|
|
|
elif [ -x "$TS_ECMD_VOLID" ]; then
|
|
|
|
UUID=$($TS_ECMD_VOLID -u $DEV)
|
|
|
|
fi
|
|
|
|
echo $UUID
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_label_by_devname {
|
|
|
|
local DEV="$1"
|
|
|
|
local TYPE=""
|
|
|
|
if [ -x "$TS_ECMD_BLKID" ]; then
|
|
|
|
LABEL=$($TS_ECMD_BLKID -c /dev/null -w /dev/null -s "LABEL" $DEV | sed 's/.*LABEL="//g; s/"//g')
|
|
|
|
elif [ -x "$TS_ECMD_VOLID" ]; then
|
|
|
|
LABEL=$($TS_ECMD_VOLID -l $DEV)
|
|
|
|
fi
|
|
|
|
echo $LABEL
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_fstype_by_devname {
|
|
|
|
local DEV="$1"
|
|
|
|
local TYPE=""
|
|
|
|
if [ -x "$TS_ECMD_BLKID" ]; then
|
|
|
|
TYPE=$($TS_ECMD_BLKID -c /dev/null -w /dev/null -s "TYPE" $DEV | sed 's/.*TYPE="//g; s/"//g')
|
|
|
|
elif [ -x "$TS_ECMD_VOLID" ]; then
|
|
|
|
TYPE=$($TS_ECMD_VOLID -t $DEV)
|
|
|
|
fi
|
|
|
|
echo $TYPE
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_device_has {
|
|
|
|
local TAG="$1"
|
|
|
|
local VAL="$2"
|
|
|
|
local DEV="$3"
|
2007-05-18 13:49:15 +02:00
|
|
|
local vl=""
|
2007-05-17 20:16:25 +02:00
|
|
|
|
|
|
|
case $TAG in
|
|
|
|
"TYPE") vl=$(ts_fstype_by_devname $DEV);;
|
|
|
|
"LABEL") vl=$(ts_label_by_devname $DEV);;
|
|
|
|
"UUID") vl=$(ts_uuid_by_devname $DEV);;
|
|
|
|
*) return 1;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if [ "$vl" == "$VAL" ]; then
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
return 1
|
|
|
|
}
|
2007-05-18 13:49:15 +02:00
|
|
|
|
|
|
|
function ts_device_has_uuid {
|
|
|
|
ts_uuid_by_devname "$1" | egrep -q '^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$'
|
|
|
|
return $?
|
|
|
|
}
|
|
|
|
|
|
|
|
function ts_swapoff {
|
|
|
|
local DEV="$1"
|
|
|
|
|
|
|
|
# swapoff doesn't exist in build tree
|
|
|
|
if [ ! -x "$TS_CMD_SWAPOFF" ]; then
|
|
|
|
ln -sf $TS_CMD_SWAPON $TS_CMD_SWAPOFF
|
|
|
|
REMSWAPOFF="true"
|
|
|
|
fi
|
|
|
|
$TS_CMD_SWAPOFF $DEV 2>&1 >> $TS_OUTPUT
|
|
|
|
if [ -n "$REMSWAPOFF" ]; then
|
|
|
|
rm -f $TS_CMD_SWAPOFF
|
|
|
|
fi
|
|
|
|
}
|