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