summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--functions23
-rw-r--r--hooks/btrfs7
-rw-r--r--install/autodetect20
-rw-r--r--install/btrfs16
4 files changed, 42 insertions, 24 deletions
diff --git a/functions b/functions
index 49b4ab4..4bdb27e 100644
--- a/functions
+++ b/functions
@@ -8,7 +8,7 @@ auto_modules ()
[ -n "$m" ] && mods="$mods $m"
done
- echo "${mods}" | sed 's|-|_|g'
+ echo "${mods}" | tr '-' '_'
[ -z "${mods}" ] && return 1
return 0
}
@@ -26,7 +26,7 @@ checked_modules ()
{
if [ -e "${MODULE_FILE}" ]; then
for mod in $(all_modules $@); do
- modname="$(basename ${mod%%\.ko} | sed 's|-|_|g')"
+ modname="$(basename ${mod%.ko} | tr '-' '_')"
if grep "^${modname}$" "${MODULE_FILE}" >/dev/null 2>&1; then
echo ${modname}
fi
@@ -145,9 +145,11 @@ HAS_MODULES="n"
#modules are handled specially in order to enable autodetection
add_module ()
{
- local fil path fw mod deps
- #cleanup - remove .ko, replace - and _ with [-_] to match either
- fil=$(basename "${1}" | sed -e "s|[-_]|\[-_\]|g" -e "s|\.ko$||g")
+ local m fil path fw mod deps
+ #cleanup - remove .ko, replace - with _
+ m=$(basename "${1%.ko}" | tr '-' '_')
+ #find pattern - replace _ with [-_] to match either
+ fil=$(echo "$m" | sed 's|_|\[-_\]|g')
found=0
for path in $(find "${MODULEDIR}" -type f -name "${fil}.ko"); do
@@ -164,8 +166,15 @@ add_module ()
HAS_MODULES="y"
add_file "${path}" && found=1
done
- if [ ${found} -eq 0 ]; then
- err "module '$fil' not found"
+ if [ ${found} -eq 1 ]; then
+ #explicit module depends
+ case "$m" in
+ fat) add_module "nls_cp437" ;;
+ ocfs2) add_module "configfs" ;;
+ libcrc32c) add_module "crc32c"; add_module "crc32c_intel" ;;
+ esac
+ else
+ err "module '$m' not found"
fi
}
diff --git a/hooks/btrfs b/hooks/btrfs
new file mode 100644
index 0000000..c4836c5
--- /dev/null
+++ b/hooks/btrfs
@@ -0,0 +1,7 @@
+# vim: set ft=sh:
+
+run_hook ()
+{
+ /sbin/modprobe btrfs
+ /sbin/btrfs device scan
+}
diff --git a/install/autodetect b/install/autodetect
index 63e85c2..914a96b 100644
--- a/install/autodetect
+++ b/install/autodetect
@@ -4,10 +4,8 @@ install ()
{
MODULE_FILE="${TMPDIR}/autodetect_modules"
#blegh, we'll let /tmp clean itself up
- AUTODETECT="$(auto_modules -e '/scsi/' -e '/block' -e '/fusion/' \
- -e '/usb/' -e '/ide/' -e '/ieee1394/' -e '/cdrom' \
- -e '/net/' -e '/pcmcia' -e '/ata' \
- | grep -v -e 'ata_generic.ko' -e 'ide-generic.ko')"
+ AUTODETECT="$(auto_modules | \
+ sed -e 's/ata_generic//g' -e 's/ide_generic//g')"
#Filesystem detection, use sysfs instead of /proc
@@ -46,19 +44,7 @@ install ()
fi
for m in ${AUTODETECT}; do
- modname="$(basename ${m%%\.ko})"
- grep "^${modname}$" "${MODULE_FILE}" >/dev/null 2>&1 && continue
- case "${m}" in
- #*/ieee1394/*) echo -e "sbp2\nsd_mod\nsr_mod" >> "${MODULE_FILE}";;
- *ext3*) echo "jbd" >> "${MODULE_FILE}" ;;
- *ext4*) echo -e "jbd2\nmbcache\ncrc16" >> "${MODULE_FILE}" ;;
- *afs*) echo "rxrpc" >> "${MODULE_FILE}" ;;
- *cramfs*) echo "zlib_inflate" >> "${MODULE_FILE}" ;;
- *isofs*) echo "zlib_inflate" >> "${MODULE_FILE}" ;;
- *msdos*) echo "fat" >> "${MODULE_FILE}" ;;
- *vfat*) echo -e "fat\nnls_cp437" >> "${MODULE_FILE}" ;;
- *ocfs2*) echo -e "ocfs2_dlm\njbd\nocfs2_nodemanager\nconfigfs" >> "${MODULE_FILE}" ;;
- esac
+ modname="$(basename ${m%.ko})"
echo "${modname}" >> "${MODULE_FILE}"
done
diff --git a/install/btrfs b/install/btrfs
new file mode 100644
index 0000000..60dc2ac
--- /dev/null
+++ b/install/btrfs
@@ -0,0 +1,16 @@
+# vim:set ft=sh:
+
+install()
+{
+ MODULES="$(all_modules btrfs)"
+ BINARIES="/sbin/btrfs"
+ SCRIPT="btrfs"
+}
+
+help ()
+{
+cat <<HELPEOF
+ This hook is needed to support Btrfs volumes spread
+ over multiple devices.
+HELPEOF
+}