Subject: [alpine-devel] [PATCH 1/3] mkinitfs: add option to avoid including kernel-specific files

From: Shiz <[email-masked]>
Date: Thu, 17 Nov 2016 02:52:50 +0100

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).
---
 mkinitfs.in | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/mkinitfs.in b/mkinitfs.in
index d69ccc5..a860cbc 100755
--- a/mkinitfs.in
+++ b/mkinitfs.in
@@ -102,6 +102,7 @@ find_kmods() {
 }
 
 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_kmods() {
 }
 
 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 @@ initfs_cpio() {
 
 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 @@ options:
 	-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 @@ EOF
 # 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 @@ while getopts "b:c:f:F:hi:kKLlo:qt:" opt; do
 		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}" = "${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
-- 
2.10.0

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Shiz <[email-masked]>
Date: Thu, 17 Nov 2016 02:52:51 +0100

The kernel passes arguments from /proc/cmdline as a single string like
foo=bar baz="something with spaces". In the latter case, with the added
single quotes the actual value of ${KOPT_baz} would contain these quotes
as well, which is not the intention.
---
 initramfs-init.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/initramfs-init.in b/initramfs-init.in
index 78bcbe4..9aa1d3f 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -279,7 +279,7 @@ for opt; do
 
 	for i in $myopts; do
 		case "$opt" in
-		$i=*)	eval "KOPT_${i}='${opt#*=}'";;
+		$i=*)	eval "KOPT_${i}=${opt#*=}";;
 		$i)	eval "KOPT_${i}=yes";;
 		no$i)	eval "KOPT_${i}=no";;
 		esac
-- 
2.10.0

---

---

From: Shiz <[email-masked]>
Date: Thu, 17 Nov 2016 02:52:52 +0100

This fixes various issues in later boot procedures if relying on localhost
to work properly and if no further networking configuration is done.
---
 initramfs-init.in | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/initramfs-init.in b/initramfs-init.in
index 9aa1d3f..b8ce2f1 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -313,6 +313,9 @@ if [ "$KOPT_dma" = no ]; then
 	modprobe libata dma=0
 fi
 
+# setup loopback interface
+ip_set lo 127.0.0.1 255.0.0.0
+
 # The following values are supported:
 #   alpine_repo=auto         -- default, search for .boot_repository
 #   alpine_repo=http://...   -- network repository
-- 
2.10.0

---