|
@@ -6,44 +6,38 @@ kversion=${hsversion/-/-hardened-}
|
|
[ ${kversion} != ${hsversion} ] || kversion=${hsversion}-hardened
|
|
[ ${kversion} != ${hsversion} ] || kversion=${hsversion}-hardened
|
|
|
|
|
|
|
|
|
|
-# modules.fs: per-filesystem module lists to load during init
|
|
|
|
-# modules.extra: extra modules to add to initramfs (covers modules.fs)
|
|
|
|
-# modules.global: complete module directories to add to initramfs
|
|
|
|
-extralst=${HOME}/initrd/modules.extra
|
|
|
|
-globlst=${HOME}/initrd/modules.global
|
|
|
|
|
|
+# Modules / module directories to add to initramfs
|
|
|
|
+modlst=${HOME}/initrd/modules.init
|
|
|
|
+fwlst=${HOME}/initrd/modules.fw
|
|
initramfs=${HOME}/initrd/initramfs
|
|
initramfs=${HOME}/initrd/initramfs
|
|
|
|
|
|
|
|
|
|
# Modules staging directory
|
|
# Modules staging directory
|
|
-stagedir=`mktemp -d`
|
|
|
|
-modlst=${stagedir}/modules.list
|
|
|
|
-initlst=${stagedir}/initramfs
|
|
|
|
|
|
+stagebase=`mktemp -d`
|
|
|
|
+stagedir=${stagebase}/stage
|
|
|
|
+initlst=${stagebase}/initramfs
|
|
|
|
|
|
mainobj=/usr/src/linux-main
|
|
mainobj=/usr/src/linux-main
|
|
image=/usr/local/addons/initrd/initrd-x86.cpio
|
|
image=/usr/local/addons/initrd/initrd-x86.cpio
|
|
|
|
|
|
|
|
|
|
-# Determine module names to add to initramfs (not necessarily canonical)
|
|
|
|
-extmods=`sed -n '/^[^#]/p' ${extralst}`
|
|
|
|
-globmods=
|
|
|
|
-for globmod in `sed -n '/^[^#]/p' ${globlst}`; do
|
|
|
|
- globmods="${globmods} "`find /lib/modules/${kversion}/kernel/${globmod} \
|
|
|
|
- -name '*.ko' -printf '%f\n' | sed 's/\.ko$//'`
|
|
|
|
-done
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-# Build list of modules to copy, including dependencies
|
|
|
|
-for mod in ${extmods} ${globmods}; do
|
|
|
|
|
|
+# Prepare initramfs kernel modules
|
|
|
|
+sed -n '/^[^#]/p' ${modlst} | while read mod; do
|
|
|
|
+ # Determine module names to add to initramfs (not necessarily canonical)
|
|
|
|
+ if [ -z "${mod##*/*}" ]; then
|
|
|
|
+ find /lib/modules/${kversion}/kernel/${mod} \
|
|
|
|
+ -name '*.ko' -printf '%f\n' | sed 's/\.ko$//'
|
|
|
|
+ else
|
|
|
|
+ echo ${mod}
|
|
|
|
+ fi
|
|
|
|
+done | while read mod; do
|
|
|
|
+ # Build list of modules to copy, including dependencies
|
|
# unlike "modinfo -F depends", "modprobe -i --show-depends" lists nested
|
|
# unlike "modinfo -F depends", "modprobe -i --show-depends" lists nested
|
|
# dependencies, and does it with canonical paths (i.e., _ vs. -, aliases, ...)
|
|
# dependencies, and does it with canonical paths (i.e., _ vs. -, aliases, ...)
|
|
- modprobe -ni --show-depends -S ${kversion} ${mod} \
|
|
|
|
- | sed -n 's/^insmod //p' >> ${modlst}
|
|
|
|
-done
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-# Copy modules and compute their dependencies and map
|
|
|
|
-# (depmod will fail if not all dependencies are present)
|
|
|
|
-for mod in `sort -u ${modlst}`; do
|
|
|
|
|
|
+ modprobe -ni --show-depends -S ${kversion} ${mod}
|
|
|
|
+done | sed -n 's/^insmod //p' | sort -u | while read mod; do
|
|
|
|
+ # Copy modules and compute their dependencies and map
|
|
|
|
+ # (depmod will fail if not all dependencies are present)
|
|
mkdir -p ${stagedir}`dirname ${mod}`
|
|
mkdir -p ${stagedir}`dirname ${mod}`
|
|
cp -p ${mod} ${stagedir}`dirname ${mod}`
|
|
cp -p ${mod} ${stagedir}`dirname ${mod}`
|
|
done
|
|
done
|
|
@@ -51,15 +45,29 @@ cp /lib/modules/${kversion}/modules.{builtin,order} ${stagedir}/lib/modules/${kv
|
|
depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
|
|
depmod -b ${stagedir} -e -F ${mainobj}/System.map ${kversion}
|
|
|
|
|
|
|
|
|
|
|
|
+# Prepare initramfs firmwares
|
|
|
|
+sed -n '/^[^#]/p' ${fwlst} | while read fw; do
|
|
|
|
+ find /lib/firmware/${fw} ! -type d
|
|
|
|
+done | while read fw; do
|
|
|
|
+ mkdir -p ${stagedir}`dirname ${fw}`
|
|
|
|
+ cp -p ${fw} ${stagedir}`dirname ${fw}`
|
|
|
|
+done
|
|
|
|
+
|
|
|
|
+
|
|
# Build complete initramfs file list
|
|
# Build complete initramfs file list
|
|
-cp ${initramfs} ${stagedir}
|
|
|
|
-find ${stagedir} -mindepth 3 -type d \
|
|
|
|
|
|
+cp ${initramfs} ${stagebase}
|
|
|
|
+find ${stagedir} -mindepth 1 -type d \
|
|
-printf 'dir %P 0755 0 0\n' >> ${initlst}
|
|
-printf 'dir %P 0755 0 0\n' >> ${initlst}
|
|
-find ${stagedir} -mindepth 3 -type f \
|
|
|
|
|
|
+find ${stagedir} -mindepth 1 -type f \
|
|
-printf 'file %P %p 0644 0 0\n' >> ${initlst}
|
|
-printf 'file %P %p 0644 0 0\n' >> ${initlst}
|
|
|
|
|
|
|
|
+if [ -n "`find ${stagedir} ! -type d ! -type f`" ]; then
|
|
|
|
+ echo "Enexpected modules/firmware file types"
|
|
|
|
+ exit 1
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
|
|
# Generate initramfs archive
|
|
# Generate initramfs archive
|
|
${mainobj}/usr/gen_init_cpio ${initlst} > ${image}
|
|
${mainobj}/usr/gen_init_cpio ${initlst} > ${image}
|
|
|
|
|
|
-rm -r ${stagedir}
|
|
|
|
|
|
+rm -r ${stagebase}
|