From a6eec253bf373cf00dbf38c040b72a80681ccf41 Mon Sep 17 00:00:00 2001
From: Caleb Connolly <caleb@postmarketos.org>
Date: Sun, 28 Apr 2024 16:20:14 +0200
Subject: [PATCH] postmarketos-initramfs: switch to udev

mdev is slow and missing features, it also requires that we load all the
modules that we include at once making the boot process slower.

udev is required for unl0kr (and buffyboard), it can also load modules
on demand (and asynchronously). Making the boot process considerably
faster on devices, especially for generic images where we have lots of
drivers for different display panels in the initramfs.

This brings us more in line with other distros and generally improves
compatibility.

If devices use broken kernel modules which don't correctly define
modalias', these drivers may not be loaded by udev. This should be fixed
by defining the missing modalias statements in the driver.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
---
 .../00-initramfs-base.files                   |  9 +++--
 main/postmarketos-initramfs/APKBUILD          | 14 ++++----
 main/postmarketos-initramfs/init.sh           | 11 +++----
 main/postmarketos-initramfs/init_functions.sh | 31 ++++++-----------
 main/postmarketos-initramfs/mdev.conf         | 33 -------------------
 5 files changed, 27 insertions(+), 71 deletions(-)
 delete mode 100644 main/postmarketos-initramfs/mdev.conf

diff --git a/main/postmarketos-initramfs/00-initramfs-base.files b/main/postmarketos-initramfs/00-initramfs-base.files
index 4485d4fcf84..d5bcdfb8004 100644
--- a/main/postmarketos-initramfs/00-initramfs-base.files
+++ b/main/postmarketos-initramfs/00-initramfs-base.files
@@ -3,12 +3,17 @@
 /bin/sh
 /etc/deviceinfo
 /etc/unudhcpd.conf
-/lib/mdev/persistent-storage
 /sbin/blkid
 /usr/bin/unudhcpd
 /usr/sbin/kpartx
 /usr/share/deviceinfo/deviceinfo
 /usr/share/initramfs/init.sh:/init
 /usr/share/initramfs/init_functions.sh:/init_functions.sh
-/usr/share/initramfs/mdev.conf:/etc/mdev.conf
 /usr/share/misc/source_deviceinfo
+/usr/bin/iskey
+/usr/share/libinput/*.quirks
+/bin/udevadm
+/sbin/udevd
+/etc/udev/rules.d
+/lib/udev/rules.d
+/lib/udev/scsi_id
diff --git a/main/postmarketos-initramfs/APKBUILD b/main/postmarketos-initramfs/APKBUILD
index 84fc70f99a3..54111006236 100644
--- a/main/postmarketos-initramfs/APKBUILD
+++ b/main/postmarketos-initramfs/APKBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Oliver Smith <ollieparanoid@postmarketos.org>
 # Co-Maintainer: Clayton Craft <clayton@craftyguy.net>
 pkgname=postmarketos-initramfs
-pkgver=2.6.1
+pkgver=2.7.0
 pkgrel=0
 pkgdesc="Base files for the postmarketOS initramfs / initramfs-extra"
 url="https://postmarketos.org"
@@ -19,12 +19,13 @@ depends="
 	e2fsprogs
 	e2fsprogs-extra
 	f2fs-tools
+	iskey
 	lz4
-	mdev-conf
 	multipath-tools
 	parted
 	postmarketos-fde-unlocker
 	postmarketos-mkinitfs>=2.2
+	udev
 	unudhcpd
 	util-linux-misc
 	xz
@@ -37,7 +38,6 @@ source="
 	init.sh
 	init_functions.sh
 	unudhcpd.conf
-	mdev.conf
 	"
 arch="noarch"
 license="GPL-2.0-or-later"
@@ -88,11 +88,9 @@ package() {
 sha512sums="
 59be0649ed87a72d93624bd8a2e3f8c99a0f32f7b7a26f99436de782beba55671472c269eeee86440efc87e0d7148a0bb335fa537791092e73878ca21330544a  00-default.modules
 5b364300f31c91fd0591eb0715f67cbf5383f45246a5fb9f34b79f7cb2e3b15768b2130e5f32f816cc169950f988c1beabc879ba31645c58ce131a288dbc071d  00-initramfs-base.dirs
-ab41b45b0613f25a61114ed8c8b92bc53c60838f6e2e0ba18c76e5369b2984e6023a0661887692673aca3f647f268c468a468f6b1ac424cfee609017a89481dd  00-initramfs-base.files
-ede9eb44fe180578ca97b7abfa2c4f1b4e277a49e4ca8b8911005acd844dbce38f200bc84280ded5a35fe5abd32bec391efc4af1929db12aa52da0c1036c6983  00-initramfs-fullsize.files
+6604d9fcdff7722a130abdb91318d02831ae696454dad276f4079f875a1cd80f6cd0a93324cc728090bfabc3f3b3c3778ee745aa9351a16f057eefd46dd56008  00-initramfs-base.files
 8a4adad3785af474b36a09a05f6a3b2c4b4f43aac331a53b903abfa51ea12be1e3d1d807b7a6e66a1346815f3b0044daf8cd62e21e2dc75d2db13ee265a72985  00-initramfs-extra-base.files
-42ff1c71326ce8ad1f023031b3aa3d96e2b6ab5daf035a363f59a9c17255a348d59adbe808d44f6c31cb03a1c4a0278111c8b7842b7cf1854c1693db3836b7a9  init.sh
-4e1536b338352608abfefc1564712656392a218a0e3bdc23077d60bd4f991843799e107822b03afcdcf3579e8fd7e28167f9d13e66839c3b6a882e039148cebd  init_functions.sh
+6a9b340de06901087d910b4b6e2e84dfa1d2ef35d5c97dd67d68980a4df6971df35b5c432949ff1ce8e53070857fdc137e9e1536526bb442b5c8e164c3f192e5  init.sh
+db06ac44f21eed3b4da31e4ccd3d59aad95c8a7fe9d71f39ea74ef627e8b68a69d8e999dd6e616a5b7f780014e94b528bf063074b03fa65078e0d9ef5a98f4e2  init_functions.sh
 ba3275a9af788c7c782322a22a0f144d5e50e3498ea6886486a29331f23ae89cd32d500a3635cfa7cab369afba92edc18aeca64ccbf0cd589061cce23d15b46c  unudhcpd.conf
-675e7d5bee39b2df7d322117f8dcaccc274d61beaf4d50ead19bbf2109446d64b1c0aa0c5b4f9846eb6c1c403418f28f6364eff4537ba41120fbfcbc484b7da7  mdev.conf
 "
diff --git a/main/postmarketos-initramfs/init.sh b/main/postmarketos-initramfs/init.sh
index 4ef435f10c5..e05d23118a1 100644
--- a/main/postmarketos-initramfs/init.sh
+++ b/main/postmarketos-initramfs/init.sh
@@ -28,16 +28,13 @@ setup_log
 setup_firmware_path
 
 if [ "$IN_CI" = "false" ]; then
-	# shellcheck disable=SC2154
-	load_modules /lib/modules/initramfs.load "libcomposite"
 	setup_framebuffer
 	show_splash "Loading..."
-	setup_mdev
-	setup_dynamic_partitions "${deviceinfo_super_partitions:=}"
-else
-	# loads all modules
-	setup_udev
 fi
+
+setup_udev
+setup_dynamic_partitions "${deviceinfo_super_partitions:=}"
+
 run_hooks /hooks
 
 if [ "$IN_CI" = "true" ]; then
diff --git a/main/postmarketos-initramfs/init_functions.sh b/main/postmarketos-initramfs/init_functions.sh
index 00e227b7ef1..f6a618cd612 100644
--- a/main/postmarketos-initramfs/init_functions.sh
+++ b/main/postmarketos-initramfs/init_functions.sh
@@ -67,31 +67,19 @@ setup_firmware_path() {
 	echo -n /lib/firmware/postmarketos >$SYS
 }
 
-# shellcheck disable=SC3043
-load_modules() {
-	local file="$1"
-	local modules="$2"
-	[ -f "$file" ] && modules="$modules $(grep -v ^\# "$file")"
-	# shellcheck disable=SC2086
-	modprobe -a $modules
-}
-
-setup_mdev() {
-	# Start mdev daemon
-	mdev -d
-}
-
 setup_udev() {
-	# Use udev to coldplug all devices so that they can be used via libinput (e.g.
-	# by unl0kr). This is the same series of steps performed by the udev,
+	if ! command -v udevd > /dev/null || ! command -v udevadm > /dev/null; then
+		echo "ERROR: udev not found!"
+		return
+	fi
+
+	# This is the same series of steps performed by the udev,
 	# udev-trigger and udev-settle RC services. See also:
 	# - https://git.alpinelinux.org/aports/tree/main/eudev/setup-udev
 	# - https://git.alpinelinux.org/aports/tree/main/udev-init-scripts/APKBUILD
-	if command -v udevd > /dev/null && command -v udevadm > /dev/null; then
-		udevd -d
-		udevadm trigger --type=devices --action=add
-		udevadm settle
-	fi
+	udevd -d --resolve-names=never
+	udevadm trigger --type=devices --action=add
+	udevadm settle
 }
 
 get_uptime_seconds() {
@@ -856,6 +844,7 @@ debug_shell() {
 	if [ -x /usr/bin/buffyboard ]; then
 		hide_splash
 		modprobe uinput
+		setfont /usr/share/consolefonts/ter-128n.psf.gz -C /dev/tty1
 		buffyboard 2>/dev/tty1 &
 		if [ "$active_console" != "tty1" ]; then
 			run_getty tty1
diff --git a/main/postmarketos-initramfs/mdev.conf b/main/postmarketos-initramfs/mdev.conf
deleted file mode 100644
index 4be94f2facd..00000000000
--- a/main/postmarketos-initramfs/mdev.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# This is an mdev config for the postmarketOS initramfs
-#
-
-# Devices:
-# Syntax: %s %d:%d %s
-# devices user:group mode
-
-$MODALIAS=.*	0:0	0660	@modprobe -q -b "$MODALIAS"
-
-# null does already exist; therefore ownership has to be changed with command
-null	0:0 0666	@chmod 666 $MDEV
-zero	0:0 0666
-full	0:0 0666
-
-random	0:0 0666
-urandom	0:0 0444
-hwrandom 0:0 0660
-
-console 0:0 0600
-
-kmem	0:0 0640
-mem	0:0 0640
-
-# Set up /dev/disk/by-* symlinks
-dasd.*		0:0 0660 */lib/mdev/persistent-storage
-mmcblk.*	0:0 0660 */lib/mdev/persistent-storage
-nbd.*		0:0 0660 */lib/mdev/persistent-storage
-nvme.*		0:0 0660 */lib/mdev/persistent-storage
-sd[a-z].*	0:0 0660 */lib/mdev/persistent-storage
-sr[0-9]+	0:0 0660 */lib/mdev/persistent-storage
-vd[a-z].*	0:0 0660 */lib/mdev/persistent-storage
-xvd[a-z].*	0:0 0660 */lib/mdev/persistent-storage
-- 
GitLab