diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2014-11-10 12:34:00 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2014-11-10 12:45:33 +0000 |
commit | 8bfd996b8c79d6eda6d80c02b34d6183f303a267 (patch) | |
tree | 5dff31908cc4dc89af4743ccb610c789a5ec95b7 /initramfs-init.in | |
parent | 88d86842aa4e54c763ffc3842dd7b7652ee131ce (diff) | |
download | mkinitfs-8bfd996b8c79d6eda6d80c02b34d6183f303a267.tar.bz2 mkinitfs-8bfd996b8c79d6eda6d80c02b34d6183f303a267.tar.xz |
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.
Diffstat (limited to 'initramfs-init.in')
-rwxr-xr-x | initramfs-init.in | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/initramfs-init.in b/initramfs-init.in index ff2f02d..22daede 100755 --- a/initramfs-init.in +++ b/initramfs-init.in @@ -157,23 +157,43 @@ rc_add() { 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 @@ mount -t tmpfs $root_opts tmpfs $sysroot 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 @@ case "$OVL_DEV" in ;; esac -if ! [ -f "$ovl" ]; then - ovl=$(find_ovl $ALPINE_MNT) -fi # parse pkgs=pkg1,pkg2 if [ -n "$KOPT_pkgs" ]; then |