blob: 001c39f96bb6904bf5fa967c6b998efc8c7a9675 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
TS_OUTDIR="output"
TS_DIFFDIR="diff"
TS_EXPECTEDDIR="expected"
TS_INPUTDIR="input"
function ts_skip {
echo " IGNORE ($1)"
if [ -n "$2" ] && [ -b "$2" ]; then
ts_device_deinit "$2"
fi
exit 0
}
function ts_skip_nonroot {
if [ $UID != 0 ]; then
ts_skip "not root permissions"
fi
}
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
}
function ts_init {
export LANG="en_US.UTF-8":
TS_NAME=$(basename $0)
if [ ! -d $TS_OUTDIR ]; then
mkdir -p $TS_OUTDIR
fi
if [ ! -d $TS_DIFFDIR ]; then
mkdir -p $TS_DIFFDIR
fi
TS_OUTPUT="$TS_OUTDIR/$TS_NAME"
TS_DIFF="$TS_DIFFDIR/$TS_NAME"
TS_EXPECTED="$TS_EXPECTEDDIR/$TS_NAME"
TS_INPUT="$TS_INPUTDIR/$TS_NAME"
rm -f $TS_OUTPUT
touch $TS_OUTPUT
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
res=1
fi
else
echo " IGNORE (expected output undefined)"
exit 0
fi
if [ $res -eq 0 ]; then
ts_ok $1
else
ts_failed $1
fi
}
function ts_die {
echo "$1" >> $TS_OUTPUT
if [ -n "$2" ] && [ -b "$2" ]; then
ts_device_deinit "$2"
fi
ts_finalize
}
function ts_device_init {
local IMAGE="$TS_OUTDIR/$TS_NAME.img"
local IMAGE_RE=$( echo "$IMAGE" | sed 's:/:\\/:g' )
local DEV=""
dd if=/dev/zero of="$IMAGE" bs=1M count=5 &> /dev/null
$TS_CMD_LOSETUP -f "$IMAGE" 2>&1 >> $TS_OUTPUT
DEV=$( $TS_CMD_LOSETUP -a | gawk 'BEGIN {FS=":"} /'$IMAGE_RE'/ { print $1 }' )
if [ -z "$DEV" ]; then
ts_device_deinit $DEV
return 1 # error
fi
echo $DEV
return 0 # succes
}
function ts_device_deinit {
local DEV="$1"
if [ -b "$DEV" ]; then
$TS_CMD_UMOUNT "$DEV" &> /dev/null
$TS_CMD_LOSETUP -d "$DEV" &> /dev/null
fi
}
function ts_udev_dev_support {
ldd $TS_CMD_MOUNT | grep -q 'libvolume_id' 2>&1 >> $TS_OUTPUT
if [ "$?" == "0" ]; then
local HAS_VOLUMEID="yes"
fi
if [ -n "$HAS_VOLUMEID" ] && [ ! -L "/dev/disk/$1/$2" ]; then
return 1
fi
return 0
}
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"
local vl=""
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
}
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
}
|