home: hub: mkinitfs

Download patch

ref: 267f158c87b7c8dc16bcb26e85378764ec2a826e
parent: a628a8f922a18a2256532b4f99183bb7e9a1fd68
author: Shiz <hi@shiz.me>
date: Wed Nov 16 20:52:50 CST 2016

mkinitfs: add option to avoid including kernel-specific files

This allows one to make a generic initramfs that doesn't require a running
kernel identical to the one used for booting, if said kernel already includes
everything it needs to function (such as compiling everything in instead of
using kernel modules).

--- a/mkinitfs.in
+++ b/mkinitfs.in
@@ -102,6 +102,7 @@
 }
 
 initfs_kmods() {
+	[ -z "$nokernel" ] || return
 	local glob= file= files= dirs=
 	rm -rf "$tmpdir"/lib/modules
 	# make sure we have modules.dep
@@ -123,6 +124,7 @@
 }
 
 initfs_firmware() {
+	[ -z "$nokernel" ] || return
 	rm -rf "$tmpdir"/lib/firmware
 	mkdir -p "$tmpdir"/lib/firmware
 	find "$tmpdir"/lib/modules -type f -name "*.ko" | xargs modinfo -F firmware | sort -u | while read FW; do
@@ -149,7 +151,7 @@
 
 usage() {
 	cat <<EOF
-usage: mkinitfs [-hkKLl] [-b basedir] [-c configfile] [-F features] [-f fstab]
+usage: mkinitfs [-hkKLln] [-b basedir] [-c configfile] [-F features] [-f fstab]
 		[-i initfile ] [-o outfile] [-t tempdir] [kernelversion]"
 options:
 	-b  prefix files and kernel modules with basedir
@@ -162,6 +164,7 @@
 	-K  copy also host keys to initramfs
 	-l  only list files that would have been used
 	-L  list available features
+	-n  don't include kernel modules or firmware
 	-o  set another outfile
 	-q  Quiet mode
 	-t  use tempdir when creating initramfs image
@@ -173,7 +176,7 @@
 # main
 
 
-while getopts "b:c:f:F:hi:kKLlo:qt:" opt; do
+while getopts "b:c:f:F:hi:kKLlno:qt:" opt; do
 	case "$opt" in
 		b) basedir="$OPTARG";;
 		c) config="$OPTARG";;
@@ -185,6 +188,7 @@
 		K) hostkeys=1;;
 		L) list_features=1;;
 		l) list_sources=1;;
+		n) nokernel=1;;
 		o) outfile="$OPTARG";;
 		q) quiet=1;;
 		t) tmpdir="$OPTARG";;
@@ -210,18 +214,22 @@
 [ "${basedir}" = "${basedir#/}" ] && basedir="${PWD}/${basedir}"
 
 
-[ -n "$1" ] && kernel="$1"
-[ -z "$kernel" ] && kernel=$(uname -r)
-kerneldir="${basedir}lib/modules/$kernel"
+if [ -z "$nokernel" ]; then
+	[ -n "$1" ] && kernel="$1"
+	[ -z "$kernel" ] && kernel=$(uname -r)
+	kerneldir="${basedir}lib/modules/$kernel"
 
-kflavor=${kernel##*-}
-[ "$kflavor" = "$kernel" ] && kflavor=vanilla
+	kflavor=${kernel##*-}
+	[ "$kflavor" = "$kernel" ] && kflavor=vanilla
+else
+	kflavor=generic
+fi
 
 if [ -z "$outfile" ]; then
 	outfile="${basedir}boot/initramfs-${kflavor}"
 fi
 
-if [ ! -d "$kerneldir" ]; then
+if [ -z "$nokernel"] && [ ! -d "$kerneldir" ]; then
 	echo "$kerneldir does not exist or is not a directory"
 	exit 1
 fi