xref: /aosp_15_r20/external/kmod/testsuite/setup-rootfs.sh (revision cc4ad7da8cefe208cb129ac2aa9a357c7c72deb2)
1#!/bin/bash
2
3set -e
4
5ROOTFS_PRISTINE=$1
6ROOTFS=$2
7MODULE_PLAYGROUND=$3
8CONFIG_H=$4
9SYSCONFDIR=$5
10
11# create rootfs from rootfs-pristine
12
13create_rootfs() {
14	rm -rf "$ROOTFS"
15	mkdir -p $(dirname "$ROOTFS")
16	cp -r "$ROOTFS_PRISTINE" "$ROOTFS"
17	find "$ROOTFS" -type d -exec chmod +w {} \;
18	find "$ROOTFS" -type f -name .gitignore -exec rm -f {} \;
19	if [ "$MODULE_DIRECTORY" != "/lib/modules" ] ; then
20		sed -i -e "s|/lib/modules|$MODULE_DIRECTORY|g" $(find "$ROOTFS" -name \*.txt -o -name \*.conf -o -name \*.dep)
21		sed -i -e "s|$MODULE_DIRECTORY/external|/lib/modules/external|g" $(find "$ROOTFS" -name \*.txt -o -name \*.conf -o -name \*.dep)
22		for i in "$ROOTFS"/*/lib/modules/* "$ROOTFS"/*/*/lib/modules/* ; do
23			version="$(basename $i)"
24			[ $version != 'external' ] || continue
25			mod="$(dirname $i)"
26			lib="$(dirname $mod)"
27			up="$(dirname $lib)$MODULE_DIRECTORY"
28			mkdir -p "$up"
29			mv "$i" "$up"
30		done
31	fi
32
33	if [ "$SYSCONFDIR" != "/etc" ]; then
34		find "$ROOTFS" -type d -name etc -printf "%h\n" | while read -r e; do
35			mkdir -p "$(dirname $e/$SYSCONFDIR)"
36			mv $e/{etc,$SYSCONFDIR}
37		done
38	fi
39}
40
41feature_enabled() {
42	local feature=$1
43	grep KMOD_FEATURES  $CONFIG_H | head -n 1 | grep -q \+$feature
44}
45
46declare -A map
47map=(
48    ["test-depmod/search-order-simple$MODULE_DIRECTORY/4.4.4/kernel/crypto/"]="mod-simple.ko"
49    ["test-depmod/search-order-simple$MODULE_DIRECTORY/4.4.4/updates/"]="mod-simple.ko"
50    ["test-depmod/search-order-same-prefix$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko"
51    ["test-depmod/search-order-same-prefix$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko"
52    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko"
53    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko"
54    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-c.ko"]="mod-loop-c.ko"
55    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-d.ko"]="mod-loop-d.ko"
56    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-e.ko"]="mod-loop-e.ko"
57    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-f.ko"]="mod-loop-f.ko"
58    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-g.ko"]="mod-loop-g.ko"
59    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-h.ko"]="mod-loop-h.ko"
60    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-i.ko"]="mod-loop-i.ko"
61    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-j.ko"]="mod-loop-j.ko"
62    ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-k.ko"]="mod-loop-k.ko"
63    ["test-depmod/search-order-external-first$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko"
64    ["test-depmod/search-order-external-first$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko"
65    ["test-depmod/search-order-external-first/lib/modules/external/"]="mod-simple.ko"
66    ["test-depmod/search-order-external-last$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko"
67    ["test-depmod/search-order-external-last$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko"
68    ["test-depmod/search-order-external-last/lib/modules/external/"]="mod-simple.ko"
69    ["test-depmod/search-order-override$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko"
70    ["test-depmod/search-order-override$MODULE_DIRECTORY/4.4.4/override/"]="mod-simple.ko"
71    ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/fs/foo/"]="mod-foo-b.ko"
72    ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/"]="mod-foo-c.ko"
73    ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/lib/"]="mod-foo-a.ko"
74    ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/fs/"]="mod-foo.ko"
75    ["test-init/"]="mod-simple.ko"
76    ["test-remove/"]="mod-simple.ko"
77    ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko"
78    ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko"
79    ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-simple.ko"]="mod-simple.ko"
80    ["test-modprobe/show-exports/mod-loop-a.ko"]="mod-loop-a.ko"
81    ["test-modprobe/softdep-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko"
82    ["test-modprobe/softdep-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko"
83    ["test-modprobe/install-cmd-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko"
84    ["test-modprobe/install-cmd-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko"
85    ["test-modprobe/force$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko"
86    ["test-modprobe/oldkernel$MODULE_DIRECTORY/3.3.3/kernel/"]="mod-simple.ko"
87    ["test-modprobe/oldkernel-force$MODULE_DIRECTORY/3.3.3/kernel/"]="mod-simple.ko"
88    ["test-modprobe/alias-to-none$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko"
89    ["test-modprobe/module-param-kcmdline$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko"
90    ["test-modprobe/external/lib/modules/external/"]="mod-simple.ko"
91    ["test-modprobe/module-from-abspath/home/foo/"]="mod-simple.ko"
92    ["test-modprobe/module-from-relpath/home/foo/"]="mod-simple.ko"
93    ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko"
94    ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko"
95    ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko"
96    ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko"
97    ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko"
98    ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko"
99    ["test-modinfo/mod-simple-i386.ko"]="mod-simple-i386.ko"
100    ["test-modinfo/mod-simple-x86_64.ko"]="mod-simple-x86_64.ko"
101    ["test-modinfo/mod-simple-sparc64.ko"]="mod-simple-sparc64.ko"
102    ["test-modinfo/mod-simple-sha1.ko"]="mod-simple.ko"
103    ["test-modinfo/mod-simple-sha256.ko"]="mod-simple.ko"
104    ["test-modinfo/mod-simple-pkcs7.ko"]="mod-simple.ko"
105    ["test-modinfo/external/lib/modules/external/mod-simple.ko"]="mod-simple.ko"
106)
107
108gzip_array=(
109    "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko"
110    )
111
112xz_array=(
113    "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko"
114    )
115
116zstd_array=(
117    "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko"
118    )
119
120attach_sha256_array=(
121    "test-modinfo/mod-simple-sha256.ko"
122    )
123
124attach_sha1_array=(
125    "test-modinfo/mod-simple-sha1.ko"
126    )
127
128attach_pkcs7_array=(
129    "test-modinfo/mod-simple-pkcs7.ko"
130    )
131
132create_rootfs
133
134for k in "${!map[@]}"; do
135    dst=${ROOTFS}/$k
136    src=${MODULE_PLAYGROUND}/${map[$k]}
137
138    if [[ $dst = */ ]]; then
139        install -d "$dst"
140        install -t "$dst" "$src"
141    else
142        install -D "$src" "$dst"
143    fi
144done
145
146# start poking the final rootfs...
147
148# compress modules with each format if feature is enabled
149if feature_enabled ZLIB; then
150	for m in "${gzip_array[@]}"; do
151	    gzip "$ROOTFS/$m"
152	done
153fi
154
155if feature_enabled XZ; then
156	for m in "${xz_array[@]}"; do
157	    xz "$ROOTFS/$m"
158	done
159fi
160
161if feature_enabled ZSTD; then
162	for m in "${zstd_array[@]}"; do
163	    zstd --rm $ROOTFS/$m
164	done
165fi
166
167for m in "${attach_sha1_array[@]}"; do
168    cat "${MODULE_PLAYGROUND}/dummy.sha1" >>"${ROOTFS}/$m"
169done
170
171for m in "${attach_sha256_array[@]}"; do
172    cat "${MODULE_PLAYGROUND}/dummy.sha256" >>"${ROOTFS}/$m"
173done
174
175for m in "${attach_pkcs7_array[@]}"; do
176    cat "${MODULE_PLAYGROUND}/dummy.pkcs7" >>"${ROOTFS}/$m"
177done
178
179touch testsuite/stamp-rootfs
180