diff --git a/main/postmarketos-initramfs/00-initramfs-base.files b/main/postmarketos-initramfs/00-initramfs-base.files index bdaf75716..19d3bb199 100644 --- a/main/postmarketos-initramfs/00-initramfs-base.files +++ b/main/postmarketos-initramfs/00-initramfs-base.files @@ -3,13 +3,19 @@ /bin/sh /etc/deviceinfo /etc/unudhcpd.conf -/lib/mdev/persistent-storage /sbin/blkid /usr/bin/iskey +/sbin/modprobe /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 97b00789e..cab0b0484 100644 --- a/main/postmarketos-initramfs/APKBUILD +++ b/main/postmarketos-initramfs/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Oliver Smith # Co-Maintainer: Clayton Craft pkgname=postmarketos-initramfs -pkgver=3.0.0 +pkgver=3.1.0 pkgrel=0 pkgdesc="Base files for the postmarketOS initramfs / initramfs-extra" url="https://postmarketos.org" @@ -20,13 +20,13 @@ depends=" e2fsprogs-extra f2fs-tools iskey + kmod lz4 - mdevd - mdev-conf multipath-tools parted postmarketos-fde-unlocker postmarketos-mkinitfs>=2.2 + udev unudhcpd util-linux-misc xz @@ -39,7 +39,6 @@ source=" init.sh init_functions.sh unudhcpd.conf - mdev.conf " arch="noarch" license="GPL-2.0-or-later" @@ -78,9 +77,6 @@ package() { -t "$pkgdir"/usr/share/mkinitfs/files-extra/ mkdir -p "$pkgdir"/etc/mkinitfs/files-extra - install -Dm644 "$srcdir"/mdev.conf \ - -t "$pkgdir"/usr/share/initramfs/ - mkdir -p "$pkgdir"/usr/share/mkinitfs/hooks mkdir -p "$pkgdir"/usr/share/mkinitfs/hooks-extra mkdir -p "$pkgdir"/etc/mkinitfs/hooks @@ -90,10 +86,9 @@ package() { sha512sums=" 59be0649ed87a72d93624bd8a2e3f8c99a0f32f7b7a26f99436de782beba55671472c269eeee86440efc87e0d7148a0bb335fa537791092e73878ca21330544a 00-default.modules 9c0e8f6f61d5da191e03a1aa9d5d0ceb5baf1eae6dbb9bfb0af59817783525119ac8394b135f303f7b6434a3eab0b49185fb90379e06823db847a4999c75ce33 00-initramfs-base.dirs -0fed7dfdf940f5de15ca2fa636214d44ee8549afe5001b81beb0e337e865eb737916e158bc0ed7a7803adc81176386ae8edfc21150de62bb136fdfcdcb888b8b 00-initramfs-base.files +1c64d2da2013213467dfaa40e984e3a7c7e8a885d3327fe164f1e1c091eb9c9f2dfadcc7e1e1ef8a0e7fa36513b2216b4bde97d58c2528a637821a31800ccd34 00-initramfs-base.files 8a4adad3785af474b36a09a05f6a3b2c4b4f43aac331a53b903abfa51ea12be1e3d1d807b7a6e66a1346815f3b0044daf8cd62e21e2dc75d2db13ee265a72985 00-initramfs-extra-base.files -a993c8d3dadf54c7ef942c726f8e238194cf7ad8f9d8d1c43991f1ac9d5f4ec57a72f8005b122ee06bcf5b6fdf22a635cdb234aee2173d073196f7a6f7788ffe init.sh -817c58403af779401932758d70a7c84d6d76a457b60327c1913e1758b66e6dbb19c4fcea8f0d4268e07f86f1b041e8fba47f9b01543c732c84d7c13cca1ff622 init_functions.sh +749865c52a229569c0cd346dd97fe10d49361124eba95bd0dbb25d0737d1efc139c8e2e31f4b7654747ffecfa77403886f1e1fe7d548d47aee03ced43d8ef2eb init.sh +1d3337ace7611853579945dc6563556ced66f386a7f906835425bac9e45c7734682b85b381656dfd5d3b0a727a39e5718e77f0d19af42562c199df25ea9fda59 init_functions.sh ba3275a9af788c7c782322a22a0f144d5e50e3498ea6886486a29331f23ae89cd32d500a3635cfa7cab369afba92edc18aeca64ccbf0cd589061cce23d15b46c unudhcpd.conf -675e7d5bee39b2df7d322117f8dcaccc274d61beaf4d50ead19bbf2109446d64b1c0aa0c5b4f9846eb6c1c403418f28f6364eff4537ba41120fbfcbc484b7da7 mdev.conf " diff --git a/main/postmarketos-initramfs/init.sh b/main/postmarketos-initramfs/init.sh index 10aeeb51a..0b355f280 100644 --- a/main/postmarketos-initramfs/init.sh +++ b/main/postmarketos-initramfs/init.sh @@ -26,18 +26,17 @@ export PATH=/usr/bin:/bin:/usr/sbin:/sbin mount_proc_sys_dev setup_log setup_firmware_path +# Run udev early, before splash, to make sure any relevant display drivers are +# loaded in time +setup_udev 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_dynamic_partitions "${deviceinfo_super_partitions:=}" + run_hooks /hooks if [ "$IN_CI" = "true" ]; then @@ -60,7 +59,6 @@ mount_subpartitions wait_boot_partition mount_boot_partition /boot extract_initramfs_extra /boot/initramfs-extra -setup_udev run_hooks /hooks-extra # For testing the mass storage gadget log export function. We use a flag diff --git a/main/postmarketos-initramfs/init_functions.sh b/main/postmarketos-initramfs/init_functions.sh index 9e23e072c..263959dff 100644 --- a/main/postmarketos-initramfs/init_functions.sh +++ b/main/postmarketos-initramfs/init_functions.sh @@ -5,7 +5,7 @@ ROOT_PARTITION_RESIZED=0 PMOS_BOOT="" PMOS_ROOT="" -CONFIGFS=/config/usb_gadget +CONFIGFS="/config/usb_gadget" CONFIGFS_ACM_FUNCTION="acm.usb0" HOST_IP="${unudhcpd_host_ip:-172.16.42.1}" @@ -100,31 +100,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() { @@ -663,11 +651,11 @@ setup_usb_configfs_udc() { # Remove any existing UDC to avoid "write error: Resource busy" when setting UDC again if [ "$(wc -w <$CONFIGFS/g1/UDC)" -gt 0 ]; then - echo "" > /config/usb_gadget/g1/UDC || echo " Couldn't write to clear UDC" + echo "" > "$CONFIGFS"/g1/UDC || echo " Couldn't write to clear UDC" fi # Link the gadget instance to an USB Device Controller. This activates the gadget. # See also: https://gitlab.com/postmarketOS/pmbootstrap/issues/338 - echo "$_udc_dev" > /config/usb_gadget/g1/UDC || echo " Couldn't write new UDC" + echo "$_udc_dev" > "$CONFIGFS"/g1/UDC || echo " Couldn't write new UDC" } # $1: if set, skip writing to the UDC @@ -676,7 +664,7 @@ setup_usb_network_configfs() { local skip_udc="$1" if ! [ -e "$CONFIGFS" ]; then - echo " /config/usb_gadget does not exist, skipping configfs usb gadget" + echo "$CONFIGFS does not exist, skipping configfs usb gadget" return fi @@ -760,10 +748,10 @@ start_unudhcpd() { # Get usb interface usb_network_function="${deviceinfo_usb_network_function:-ncm.usb0}" usb_network_function_fallback="rndis.usb0" - if [ -n "$(cat /config/usb_gadget/g1/UDC)" ]; then + if [ -n "$(cat $CONFIGFS/g1/UDC)" ]; then INTERFACE="$( - cat "/config/usb_gadget/g1/functions/$usb_network_function/ifname" 2>/dev/null || - cat "/config/usb_gadget/g1/functions/$usb_network_function_fallback/ifname" 2>/dev/null || + cat "$CONFIGFS/g1/functions/$usb_network_function/ifname" 2>/dev/null || + cat "$CONFIGFS/g1/functions/$usb_network_function_fallback/ifname" 2>/dev/null || echo '' )" else @@ -797,12 +785,12 @@ setup_usb_acm_configfs() { active_udc="$(cat $CONFIGFS/g1/UDC)" if ! [ -e "$CONFIGFS" ]; then - echo " /config/usb_gadget does not exist, can't set up serial gadget" + echo " $CONFIGFS does not exist, can't set up serial gadget" return 1 fi # unset UDC - echo "" > /config/usb_gadget/g1/UDC + echo "" > $CONFIGFS/g1/UDC # Create acm function mkdir "$CONFIGFS/g1/functions/$CONFIGFS_ACM_FUNCTION" \ @@ -1142,7 +1130,7 @@ create_logs_disk() { export_logs() { local loop_dev="" usb_mass_storage_function="mass_storage.0" - active_udc="$(cat /config/usb_gadget/g1/UDC)" + active_udc="$(cat $CONFIGFS/g1/UDC)" loop_dev="$(losetup -f)" @@ -1155,7 +1143,7 @@ export_logs() { setup_usb_network_configfs "skip_udc" else # Unset UDC - echo "" > /config/usb_gadget/g1/UDC + echo "" > $CONFIGFS/g1/UDC fi mkdir "$CONFIGFS"/g1/functions/"$usb_mass_storage_function" || return diff --git a/main/postmarketos-initramfs/mdev.conf b/main/postmarketos-initramfs/mdev.conf deleted file mode 100644 index 4be94f2fa..000000000 --- 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