~alpine/aports

Cmdline override opts, rootdir support, honor $TMPDIR. v1 PROPOSED

Linus Swälas: 1
 Cmdline override opts, rootdir support, honor $TMPDIR.

 2 files changed, 190 insertions(+), 4 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.alpinelinux.org/~alpine/aports/patches/2144/mbox | git am -3
Learn more about email & git

[alpine-aports] [PATCH] Cmdline override opts, rootdir support, honor $TMPDIR. Export this patch

Changes to the more intuitive behaviour that options given on the
command line overrides options given in the config file.

Now honors $TMPDIR if -t is not given.

Adds support for having basedir and rootdir, config comes from
the rootdir, contents for the initramfs comes from the basedir.
---
 ...ine-override_rootdir-support_honor-tmpdir.patch | 182 +++++++++++++++++++++
 main/mkinitfs/APKBUILD                             |  12 +-
 2 files changed, 190 insertions(+), 4 deletions(-)
 create mode 100644 main/mkinitfs/0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch

diff --git a/main/mkinitfs/0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch b/main/mkinitfs/0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
new file mode 100644
index 0000000..94abbe7
--- /dev/null
+++ b/main/mkinitfs/0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
@@ -0,0 +1,182 @@
--- mkinitfs-3.0.5/mkinitfs.in	2016-10-05 23:18:32.000000000 +0200
+++ mkinitfs-3.0.5.new/mkinitfs.in	2016-10-06 01:59:55.000000000 +0200
@@ -9,6 +9,8 @@
 fstab="$datadir"/fstab
 passwd="$datadir"/passwd
 group="$datadir"/group
+basedir=''
+tmpdir=''
 
 startdir=$PWD
 
@@ -126,15 +128,19 @@
 	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
-		[ -e "${basedir}/lib/firmware/${FW}" ] && install -pD "${basedir}/lib/firmware/${FW}" "$tmpdir"/lib/firmware/$FW
+		[ -e "${basedir}/lib/firmware/${FW}" ] && install -pD "${basedir}/lib/firmware/${FW}" "${tmpdir}/lib/firmware/${FW}"
 	done
 	return 0
 }
 
 initfs_apk_keys() {
-	mkdir -p "$tmpdir"/etc/apk/keys
-	[ "$hostkeys" ] && cp "/etc/apk/keys/"* "$tmpdir"/etc/apk/keys/
-	cp "${basedir}etc/apk/keys/"* "$tmpdir"/etc/apk/keys/
+	# If the basedir has nothing to copy, and we're not asked to copy the host's keys, don't do anything.
+	if [ ! -d "${basedir}etc/apk/keys/" ] && [ -z "$hostkeys" ]; then
+		return
+	fi
+	mkdir -p "${tmpdir}/etc/apk/keys"
+	[ -n "$hostkeys" ] && cp "/etc/apk/keys/"* "${tmpdir}/etc/apk/keys/"
+	cp "${basedir}etc/apk/keys/"* "${tmpdir}/etc/apk/keys/"
 }
 
 initfs_cpio() {
@@ -142,9 +148,9 @@
 		(cd "$tmpdir" && find . )
 		return
 	fi
-	rm -f $outfile
+	rm -f "$outfile"
 	umask 0022
-	(cd "$tmpdir" && find . | cpio --quiet -o -H newc | gzip -9) > $outfile
+	(cd "$tmpdir" && find . | cpio --quiet -o -H newc | gzip -9) > "$outfile"
 }
 
 usage() {
@@ -164,41 +170,62 @@
 	-L  list available features
 	-o  set another outfile
 	-q  Quiet mode
+	-r  use another root dir
 	-t  use tempdir when creating initramfs image
 
+  Config and output is based at rootdir, files and modules to be included in
+  the initramfs comes from basedir.
 EOF
 	exit 1
 }
 
 # main
 
-
-while getopts "b:c:f:F:hi:kKLlo:qt:" opt; do
+while getopts "b:c:f:F:hi:kKLlo:qr:t:" opt; do
 	case "$opt" in
-		b) basedir="$OPTARG";;
-		c) config="$OPTARG";;
-		F) myfeatures="$OPTARG";;
-		f) fstab="$OPTARG";;
+		b) arg_basedir="$OPTARG";;
+		c) arg_config="$OPTARG";;
+		F) arg_features="$OPTARG";;
+		f) arg_fstab="$OPTARG";;
 		h) usage;;
-		i) init=$OPTARG;;
-		k) keeptmp=1;;
-		K) hostkeys=1;;
+		i) arg_init=$OPTARG;;
+		k) arg_keeptmp=1;;
+		K) arg_hostkeys=1;;
 		L) list_features=1;;
 		l) list_sources=1;;
-		o) outfile="$OPTARG";;
+		o) arg_outfile="$OPTARG";;
 		q) quiet=1;;
-		t) tmpdir="$OPTARG";;
+		r) arg_rootdir="$OPTARG";;
+		t) arg_tmpdir="$OPTARG";;
 		*) usage;;
 	esac
 done
 shift $(( $OPTIND - 1 ))
 
+
 . $(readlink -f "$config")
-features_dir=${features_dir:-"${basedir%/:-}/${sysconfdir#/}/features.d"}
-[ -n "$myfeatures" ] && features="$myfeatures"
+
+# Override any options read from the config with what the
+# user has specifed on the commandline.
+[ -n "$arg_basedir"  ] && basedir="$arg_basedir"
+[ -n "$arg_config"   ] && config="$arg_config"
+[ -n "$arg_features" ] && features="$arg_features"
+[ -n "$arg_fstab"    ] && fstab="$arg_fstab"
+[ -n "$arg_init"     ] && init="$arg_init"
+[ -n "$arg_keeptmp"  ] && keeptmp="$arg_keeptmp"
+[ -n "$arg_hostkeys" ] && hostkeys="$arg_hostkeys"
+[ -n "$arg_outfile"  ] && outfile="$arg_outfile"
+[ -n "$arg_rootdir"  ] && rootdir="$arg_rootdir"
+[ -n "$arg_tmpdir"   ] && tmpdir="$arg_tmpdir"
+
+
+rootdir="${rootdir%/}/"
+[ "${rootdir}" = "${rootdir#/}" ] && rootdir="${PWD}/${rootdir}"
+
+features_dir=${features_dir:-"${rootdir%/}/${sysconfdir#/}/features.d"}
 
 if [ -n "$list_features" ]; then
-	for i in $features_dir/*.files $features_dir/*.modules; do
+	for i in "$features_dir"/*.files "$features_dir"/*.modules; do
 		[ -e "$i" ] || continue
 		local file=${i##*/}
 		echo ${file%.*}
@@ -206,24 +233,27 @@
 	exit 0
 fi
 
-basedir="${basedir%/}/"
-[ "${basedir}" = "${basedir#/}" ] && basedir="${PWD}/${basedir}"
+if [ -z "$basedir" ]; then
+	basedir="$rootdir"
+else
+	[ "${basedir}" = "${basedir#/}" ] && basedir="${PWD}/${basedir}"
+fi
 
 
 [ -n "$1" ] && kernel="$1"
 [ -z "$kernel" ] && kernel=$(uname -r)
 kerneldir="${basedir}lib/modules/$kernel"
 
+if [ ! -d "$kerneldir" ]; then
+	echo "$kerneldir does not exist or is not a directory"
+	exit 1
+fi
+
 kflavor=${kernel##*-}
 [ "$kflavor" = "$kernel" ] && kflavor=vanilla
 
 if [ -z "$outfile" ]; then
-	outfile="${basedir}boot/initramfs-${kflavor}"
-fi
-
-if [ ! -d "$kerneldir" ]; then
-	echo "$kerneldir does not exist or is not a directory"
-	exit 1
+	outfile="${rootdir}boot/initramfs-${kernel}"
 fi
 
 if [ -n "$DEBUG_KMOD" ]; then
@@ -232,13 +262,19 @@
 fi
 
 if [ -z "$tmpdir" ]; then
-	tmpdir=$(mktemp -d /tmp/mkinitfs.XXXXXX)
+	tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/mkinitfs.XXXXXX")
 else
 	mkdir -p "$tmpdir"
 fi
 
+tmpdir=$(readlink -f "$tmpdir")
+if [ '/' == "$tmpdir" ] ; then
+	echo "tmpdir must not be /"
+	exit 1
+fi
+
 if [ -z "$keeptmp" ]; then
-	[ -d "$tmpdir" ] && rm -rf "$tmpdir"/*
+	[ -d "$tmpdir" ] && rm -rf "$tmpdir"
 fi
 
 if [ -z "$list_sources" ] && [ -z "$quiet" ]; then
diff --git a/main/mkinitfs/APKBUILD b/main/mkinitfs/APKBUILD
index a7a3d9e..c75961c 100644
--- a/main/mkinitfs/APKBUILD
+++ b/main/mkinitfs/APKBUILD
@@ -2,7 +2,7 @@
pkgname=mkinitfs
pkgver=3.0.5
_ver=${pkgver%_git*}
pkgrel=4
pkgrel=5
pkgdesc="Tool to generate initramfs images for Alpine"
url="http://git.alpinelinux.org/cgit/mkinitfs"
makedepends_build=""
@@ -16,6 +16,7 @@ source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_ver.tar.xz
	0001-init-dont-use-local-in-global-scope.patch
	0001-group-sync-with-alpine-baselayout.patch
	0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
	0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
	"
arch="all"
license="GPL2"
@@ -35,14 +36,17 @@ md5sums="de3f95912a542dfabbf0573620549a29  mkinitfs-3.0.5.tar.xz
a4227598291fa7338ad1128bfef3720c  0001-init-add-support-for-ttyMFD-and-ttyUSB-serial-consol.patch
a74631b5f40001dd259a2a6ebcaec544  0001-init-dont-use-local-in-global-scope.patch
db888a1a502fe281bbe0b1add81bf62f  0001-group-sync-with-alpine-baselayout.patch
a46eb97de6742400ca04777a0a8478b2  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch"
a46eb97de6742400ca04777a0a8478b2  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
fadbbb5e49ead2c6fd8d4e880c83bafa  0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
sha256sums="3f13619f161c506796b91f2db17644eba25c2ffc923aa0c8fff0213d1f660aa4  mkinitfs-3.0.5.tar.xz
17547dbc77bd19d940550ea6243b44212d21a6797aee4202e4e22c31143bf9e6  0001-init-add-support-for-ttyMFD-and-ttyUSB-serial-consol.patch
7253cd8ebc1487e4bfb98d81edd68b24a4364e9fa8e48c73fc6903f2077b056e  0001-init-dont-use-local-in-global-scope.patch
17b8a04db505eea9e176da00f9389ca80f65ed88c0288f6785f9ab108164361a  0001-group-sync-with-alpine-baselayout.patch
8daccc844576f0b06fc9c15a30d750bfecda019b476a0be4cf9bcd7139e219cf  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch"
8daccc844576f0b06fc9c15a30d750bfecda019b476a0be4cf9bcd7139e219cf  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
c24fb5b60a1bdd9d0888cd9ce76996fe5c45cb384b0e30a8837e3cf3724a7727  0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
sha512sums="246f25ce3fb65ea19dbe611ad44a106930c28b2c7111908462d4a252433011280715b2cf87ee81cc6f0860679fd1d0a109d03040647498137e42b22ccc711662  mkinitfs-3.0.5.tar.xz
35b4cf3f74e394d87b321d335ec4dff6973bfd9a38cdc81609e21e025ee3fb9af7d2744cf9941531603df829af1f7fba433074915ba88a688d375cfe40dad07a  0001-init-add-support-for-ttyMFD-and-ttyUSB-serial-consol.patch
ca1bd66bc6d366dc74da389397f3e0d81b3afa21a534269230ab33f415e633b19ce54327b78713847461b67d6d23a85019c79e1fbbf1a964ee0bd26013ddf33f  0001-init-dont-use-local-in-global-scope.patch
2736650e0c06d47f2cd0dcc4a9c3d575b2b5284ee8d1aa0cccd45b5855ff6704171f5b7761b8c88536c8dca84943810e9332db9f2e03681f6355c5068a3a3092  0001-group-sync-with-alpine-baselayout.patch
712038089d3b58a3937549f25412803291690c992bd8e3002f02a46fc9c24903c94086704b5def3aecb422d46d7c501beeaa665000bc7da6ec20965e52eca5a1  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch"
712038089d3b58a3937549f25412803291690c992bd8e3002f02a46fc9c24903c94086704b5def3aecb422d46d7c501beeaa665000bc7da6ec20965e52eca5a1  0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
81880870195b6c64d55570954be2c8e879f58f779ec165ae34504bac43b969dfcb79b0469ab96100df12fb17a7e7b362bb52bbc3402705a931cd41f7304c6d0d  0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
-- 
2.10.0


-- 
A: Because it messes up the order in which people normally read text. 
Q: Why is top-posting such a bad thing? 


---
Unsubscribe:  alpine-aports+unsubscribe@lists.alpinelinux.org
Help:         alpine-aports+help@lists.alpinelinux.org
---