From 16c9892a8fd676250c32eba7f914eb9f669b917a Mon Sep 17 00:00:00 2001 From: Minecrell Date: Sat, 28 May 2022 12:57:34 +0200 Subject: [PATCH] main/postmarketos-mkinitfs: load file system modules dynamically (MR 3166) At the moment, mkinitfs loads some file system modules always (ext4), some dynamically (brtfs) and some not at all (f2fs, vfat), expecting them to be built-in. To support generic kernels (e.g. from Alpine) properly, use the partition type detection for both boot and root partition and always load the necessary modules before mounting. --- main/postmarketos-mkinitfs/APKBUILD | 8 ++--- main/postmarketos-mkinitfs/init.sh | 2 +- main/postmarketos-mkinitfs/init_functions.sh | 32 ++++++++++++++++---- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/main/postmarketos-mkinitfs/APKBUILD b/main/postmarketos-mkinitfs/APKBUILD index af2f88aa8..2397c2b5c 100644 --- a/main/postmarketos-mkinitfs/APKBUILD +++ b/main/postmarketos-mkinitfs/APKBUILD @@ -2,7 +2,7 @@ # Co-Maintainer: Clayton Craft pkgname=postmarketos-mkinitfs pkgver=1.4.1 -pkgrel=4 +pkgrel=5 pkgdesc="Tool to generate initramfs images for postmarketOS" url="https://postmarketos.org" depends=" @@ -69,7 +69,7 @@ check() { sha512sums=" f827acb0a10c0e5c1631f1b712e91fde7eb4ade0f1174eb2ef1754018bf4518ea1ad3229fd335c25fb0c6fe46ae20890f5cf43e58c8143ae17b5ab9bb36f0199 postmarketos-mkinitfs-1.4.1.tar.gz -08a3e79c6fa7d3839d43515b8da7817cb36f4ab014552fd0164957c232bb16fde337e57c47c9734d396a5fca3328fbf49ebabe4728c6071c80b04dad14886bba 00-default.modules -d16dc495afcab64e8ae70b8de06444aac3d655ca59c544717ea779d160d597a0a32da62e55e7493b0c7626e1e7fcefa3f94b917ae16ac7d2990a3038934a6fac init.sh -ef099d394406462268fe9e2d28a5355ef09a30fa7283d58e2c567088bd767fb8079399426ccaabe48dbc7774cf9cd7a5b853d850a978ae05e0d74909cee5b207 init_functions.sh +1297ca5349326406a9db64a1dac47a822c257d781d1ecc6215b5aca7e2d22fa95396448318d6163dc8b172e2ce1d32ee846d32d796234fa4507016d39d3c4a82 00-default.modules +ccdceaa710d97d6f57d8d66bfcbec448486d08083341712303f62123039f729229b88528308e411a308a2b90b81b60de89fe91143a6facbb11cbc9b4055eeaec init.sh +b6f433aa5a758e58ae4745f2b11f691f4d3ffbef35d9002bc2721ba797b3e7653e9449b6a1b503c47d725f644e0d7c0e5426f8a575f4cc437c21cfc6e2f4cdf3 init_functions.sh " diff --git a/main/postmarketos-mkinitfs/init.sh b/main/postmarketos-mkinitfs/init.sh index 1d1f8798f..9ef7593ec 100644 --- a/main/postmarketos-mkinitfs/init.sh +++ b/main/postmarketos-mkinitfs/init.sh @@ -16,7 +16,7 @@ create_device_nodes setup_log setup_firmware_path # shellcheck disable=SC2154,SC2086 -[ -d /lib/modules ] && modprobe -a ${deviceinfo_modules_initfs} ext4 usb_f_rndis +[ -d /lib/modules ] && modprobe -a ${deviceinfo_modules_initfs} usb_f_rndis setup_mdev setup_dynamic_partitions "${deviceinfo_super_partitions:=}" diff --git a/main/postmarketos-mkinitfs/init_functions.sh b/main/postmarketos-mkinitfs/init_functions.sh index eea1674b2..3c6003f96 100644 --- a/main/postmarketos-mkinitfs/init_functions.sh +++ b/main/postmarketos-mkinitfs/init_functions.sh @@ -213,6 +213,11 @@ find_boot_partition() { || findfs LABEL="pmOS_boot" } +get_partition_type() { + partition="$1" + blkid "$partition" | sed 's/^.*TYPE="\([a-zA-z0-9_]*\)".*$/\1/' +} + # $1: path # $2: set to "rw" for read-write # Mount the boot partition. It gets mounted twice, first at /boot (ro), then at @@ -234,6 +239,22 @@ mount_boot_partition() { echo "Mount boot partition ($partition) to $1 (read-only)" fi + type="$(get_partition_type "$partition")" + case "$type" in + ext*) + echo "Detected ext filesystem" + modprobe ext4 + # ext2 might be handled by the ext2 or ext4 kernel module + # so let mount detect that automatically by omitting -t + ;; + vfat) + echo "Detected vfat filesystem" + modprobe vfat + mount_opts="-t vfat $mount_opts" + ;; + *) echo "WARNING: Detected unsupported '$type' filesystem ($partition)." ;; + esac + # shellcheck disable=SC2086 mount $mount_opts "$partition" "$1" } @@ -338,11 +359,6 @@ unlock_root_partition() { fi } -get_partition_type() { - partition="$1" - blkid "$partition" | sed 's/^.*TYPE="\([a-zA-z0-9_]*\)".*$/\1/' -} - resize_root_filesystem() { if [ "$ROOT_PARTITION_RESIZED" = 1 ]; then show_splash /splash-resizefs.ppm.gz @@ -352,10 +368,12 @@ resize_root_filesystem() { case "$type" in ext4) echo "Resize 'ext4' root filesystem ($partition)" + modprobe ext4 resize2fs -f "$partition" ;; f2fs) echo "Resize 'f2fs' root filesystem ($partition)" + modprobe f2fs resize.f2fs "$partition" ;; btrfs) @@ -380,10 +398,12 @@ mount_root_partition() { case "$type" in ext4) echo "Detected ext4 filesystem" + modprobe ext4 mount -t ext4 -o ro "$partition" /sysroot ;; f2fs) echo "Detected f2fs filesystem" + modprobe f2fs mount -t f2fs -o ro "$partition" /sysroot ;; btrfs) @@ -391,7 +411,7 @@ mount_root_partition() { modprobe btrfs mount -t btrfs -o ro "$partition" /sysroot ;; - *) echo "WARNING: Detected '$type' filesystem ($partition)." ;; + *) echo "WARNING: Detected unsupported '$type' filesystem ($partition)." ;; esac if ! [ -e /sysroot/usr ]; then echo "ERROR: unable to mount root partition!"