blob: 5c86eb05a0c7dd23a1ed5cef4febae334102fe94 (
plain)
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
|
# vim: set ft=sh:
install ()
{
MODULE_FILE="${TMPDIR}/autodetect_modules"
#blegh, we'll let /tmp clean itself up
AUTODETECT="$(auto_modules | \
sed -e 's/ata_generic//g' -e 's/ide_generic//g')"
#Filesystem detection, only probe the device for /
findfs ()
{
local rootdev
if [ -f /proc/self/mountinfo -a -x /bin/findmnt ]; then
rootdev=$(/bin/findmnt -n -u -o source /)
/sbin/blkid -u filesystem -o value -s TYPE -p "${rootdev}" 2>/dev/null
fi
}
if [ ${UID} -eq 0 -o "$(groups | grep disk)" != "" ]; then
fss=$(findfs | sort | uniq)
if [ -z "${fss}" ]; then
err "Root file system type detection failed."
autodetect_fs_detection_failed=1
fi
for fs in ${fss}; do
allfs="${fs} $(modprobe --set-version ${KERNELVERSION} --resolve-alias ${fs})"
for mod in ${allfs}; do
for modfile in $(find "${MODULEDIR}" -type f -name "${mod}.ko" -or -name "${mod}.ko.gz"); do
if [ -n "${modfile}" ]; then
AUTODETECT="${AUTODETECT} ${modfile}"
fi
done
done
done
if [ -e /sbin/mdadm ]; then
for raidmod in $(/sbin/mdadm -E -s -v /dev/hd* /dev/sd* /dev/rd/* /dev/ida/* /dev/cciss/* /dev/ataraid/* /dev/mapper/* \
| awk -Flevel= '{print $2}' | awk '{print $1}'); do
case "${raidmod}" in
raid4|raid5|raid6)
AUTODETECT="${AUTODETECT} raid456" ;;
*)
AUTODETECT="${AUTODETECT} ${raidmod}" ;;
esac
done
fi
else
autodetect_fs_detection_failed=1
autodetect_raid_detection_failed=1
err "User does not have proper permissions to read superblocks, raid and filesystem modules are not detected"
fi
for m in ${AUTODETECT}; do
modname="${m%.gz}"
modname="$(basename ${modname%.ko})"
echo "${modname}" >> "${MODULE_FILE}"
done
BINARIES=""
FILES=""
SCRIPT=""
}
help ()
{
cat <<HELPEOF
This hook shrinks your initramdisk to a smaller size
by autodetecting your needed modules. Be sure to verify
included modules are correct and none are missing.
This hook must be run before other subsystem hooks in
order to take advantage of auto-detection. Any hooks
placed before 'autodetect' will be installed in full.
HELPEOF
}
|