home: hub: mkinitfs

Download patch

ref: 8bfd996b8c79d6eda6d80c02b34d6183f303a267
parent: 88d86842aa4e54c763ffc3842dd7b7652ee131ce
author: Natanael Copa <ncopa@alpinelinux.org>
date: Mon Nov 10 06:34:00 CST 2014

init: refactor searching for apkovl

we search on all block devices with known filesystems using blkid.

This should help us find apkovl on ext[234] filesystems and on block
devices that are not on the USB bus.

--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -157,23 +157,43 @@
 	ln -sf /etc/init.d/$1 $sysroot/etc/runlevels/$2/$1
 }
 
+find_ovl_blkdev() {
+	local fsmoddir=/lib/modules/$(uname -r)/kernel/fs
+	blkid | while read line; do
+		mod=
+		UUID=
+		TYPE=
+		dev=${line%%: *}
+		eval ${line#$dev:}
+		for i in $fsmoddir/$TYPE.ko $fsmoddir/*/$TYPE.ko; do
+			[ -f $fsmoddir/*/$TYPE.ko ] && mod=$i && break
+		done
+		[ -n "$mod" ] || continue
+		mnt=/media/${UUID:-${dev##*/}}
+		mkdir -p "$mnt"
+		mount -o ro -t "$TYPE" "$dev" "$mnt" 2>/dev/null || continue
+		ovl=$(find_ovl "$mnt")
+		if [ -f "$ovl" ]; then
+			echo "$ovl"
+			break
+		fi
+		umount "$mnt"
+	done
+}
+
 # we have issues with some slow usb 1 hosts so we add 1 second delay
 # with possibility to increase delay at boot prompt with usbdelay=<sec>
-find_ovl_dev() {
+find_ovl_delayed_usb() {
 	local n i
 	# look for apkovl
 	for n in $(seq 0 ${KOPT_usbdelay:-1}); do
 		# wait for usb to settle if needed
 		wait_usb
-		for i in usb floppy cdrom; do
-			mount -o ro /media/$i 2>/dev/null || continue
-			ovl=$(find_ovl /media/$i)
-			if [ -f "$ovl" ]; then
-				ovl_unmount="$ovl_unmount /media/$i"
-				return
-			fi
-			umount /media/$i 2>/dev/null
-		done
+		ovl=$(find_ovl_blkdev)
+		if [ -f "$ovl" ]; then
+			ovl_unmount="${ovl%/*}"
+			return
+		fi
 		sleep 1
 	done
 }
@@ -587,7 +607,10 @@
 
 case "$OVL_DEV" in
 	'')
-		find_ovl_dev
+		ovl=$(find_ovl $ALPINE_MNT)
+		if ! [ -f "$ovl" ]; then
+			find_ovl_delayed_usb
+		fi
 		;;
 	http://*|https://*|ftp://*)
 		ovl=/tmp/boot.apkovl.tar.gz
@@ -606,9 +629,6 @@
 		;;
 esac
 
-if ! [ -f "$ovl" ]; then
-	ovl=$(find_ovl $ALPINE_MNT)
-fi
 
 # parse pkgs=pkg1,pkg2
 if [ -n "$KOPT_pkgs" ]; then