From 7a917eee3c8173f59852e2cb8680105ab5d33671 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Sat, 23 May 2026 14:26:19 +0200 Subject: [PATCH] main/postmarketos-usb-moded: handle initramfs situation initramfs starts USB NCM gadget and unudhcpd for SSH login. This requires special handling since unudhpcd is unmanaged by the service manager until the userspace is started. Once entered in userspace, the usb-moded-developer-mode needs to be activated which configures NetworkManager and starts unudhcpd under the service manager. This way, a full handover is possible and the gadgets can be properly switched without any leftovers from the initramfs due to the unmanaged situation. Part-of: --- extra-repos/systemd/postmarketos-base-systemd/APKBUILD | 4 ++-- ...rootfs-usr-lib-systemd-system-preset-90-base.preset | 1 + main/postmarketos-initramfs/APKBUILD | 4 ++-- main/postmarketos-initramfs/init_2nd.sh | 3 +++ main/postmarketos-initramfs/init_functions.sh | 3 +++ main/postmarketos-usb-moded/APKBUILD | 10 +++++----- .../rootfs-etc-init.d-usb-moded-developer-mode.initd | 4 ++++ .../rootfs-etc-init.d-usb-moded-tethering-mode.initd | 4 ++++ ...lib-systemd-system-usb-moded-developer-mode.service | 2 ++ ...lib-systemd-system-usb-moded-tethering-mode.service | 2 ++ 10 files changed, 28 insertions(+), 9 deletions(-) diff --git a/extra-repos/systemd/postmarketos-base-systemd/APKBUILD b/extra-repos/systemd/postmarketos-base-systemd/APKBUILD index 5ea4eefe5..c6efb3cb7 100644 --- a/extra-repos/systemd/postmarketos-base-systemd/APKBUILD +++ b/extra-repos/systemd/postmarketos-base-systemd/APKBUILD @@ -1,7 +1,7 @@ # pmbootstrap installs this, if systemd is selected in "pmbootstrap init". maintainer="Clayton Craft " pkgname=postmarketos-base-systemd -pkgver=78 +pkgver=79 pkgrel=0 pkgdesc="Meta package for running postmarketOS with systemd" url="https://postmarketos.org" @@ -118,7 +118,7 @@ b7c3e70f5e4d88d6df6a8d58f4bb6af3d3051c5130cf13ad86a491fcbf7a69ae33ba31d663946c35 bd85f6153d857e1aec191b5fc8c8fc0d87125bf0198bef20d1e91ef40ca7e9ed1209a64ae279f98dc8733969ad6e71e29623180ef2203e386023a950d9ce8269 rootfs-usr-lib-systemd-logind.conf e49972d276441e9da284315bab5f70d8d25ccba5e43d7e7ec6607c34a3d4dfa512f7303d5ce41076819ef24f5dced5acc74001b4d569258269de34da27912466 rootfs-usr-lib-systemd-resolved.conf.d-disable-dnsovertls.conf 93ab180810dbd2a1477f7ea0f0959be90f099272fe5840030a0772771c97a066b70068c476d32c6a4610b8f7b9fc5bfcf1d7a93f071cec026553ac6a3b8b5324 rootfs-usr-lib-systemd-resolved.conf.d-disable-mdns.conf -2734d023e5b2bab895a1acb940b90c4d9bf580c3dc2ee9ba73a61e1210c682d65367c0541fa34cdda251ebd1d40ab5711bd4965587937cfb066a60f2cb01315d rootfs-usr-lib-systemd-system-preset-90-base.preset +351a3791dcdcd74dbd563881bf025a456c0423542650268c22d083ad1edecb303c09614c4a759203a3219f57ebbee408b28f2665aa38efea5933663dec974564 rootfs-usr-lib-systemd-system-preset-90-base.preset bde7052939d1ddde22fe1df86439d3f1b0cd41810911cee7acf26aac08afe1610360cbbd257b3c1a2e5e7409dff27ade8f3a302a38cd1b99c6cc6eed4cc64a78 rootfs-usr-lib-systemd-system--.slice.d-10-oomd-defaults.conf bde7052939d1ddde22fe1df86439d3f1b0cd41810911cee7acf26aac08afe1610360cbbd257b3c1a2e5e7409dff27ade8f3a302a38cd1b99c6cc6eed4cc64a78 rootfs-usr-lib-systemd-system-system.slice.d-10-oomd-defaults.conf cedd159b98ce47ee9d03e5f332c4132c7c3eff32135aa7b7993e19c4867d55aff689b418fc549e139c0ea4690f1094e86efcee7a5bc6cd6998ba99821064a917 rootfs-usr-lib-systemd-system-tmp.mount.d-10-min-memory.conf diff --git a/extra-repos/systemd/postmarketos-base-systemd/rootfs-usr-lib-systemd-system-preset-90-base.preset b/extra-repos/systemd/postmarketos-base-systemd/rootfs-usr-lib-systemd-system-preset-90-base.preset index 0bdfe4f58..1adae7eaa 100644 --- a/extra-repos/systemd/postmarketos-base-systemd/rootfs-usr-lib-systemd-system-preset-90-base.preset +++ b/extra-repos/systemd/postmarketos-base-systemd/rootfs-usr-lib-systemd-system-preset-90-base.preset @@ -39,6 +39,7 @@ enable tuned.service enable tuned-ppd.service enable irqbalance.service enable usb-signaller.service +enable usb-moded-developer-mode.service enable dbus-broker.service enable avahi-daemon.service diff --git a/main/postmarketos-initramfs/APKBUILD b/main/postmarketos-initramfs/APKBUILD index d25436790..91c25eba3 100644 --- a/main/postmarketos-initramfs/APKBUILD +++ b/main/postmarketos-initramfs/APKBUILD @@ -112,8 +112,8 @@ ace852ba267b3408998970df6042603c8bec1d033066d1c30ed65f1be955fee8644b57882898f102 69852928464f01757e2f473bd2c2e7ecb4132ecf3e26bdec95932e928dfe9042f59316e0a509fd38bcda88e24dd94bf33e8a88118b5adbec7023d1c13da12f59 00-initramfs-base.files 6d91270b96ce0c745391174201dde63b43a73ae6456c2e1138046beef3548580588fedbeae7cc914079162e99343b45d82c6e6a7ee1d03829aae7697ae52f575 00-initramfs-extra-base.files bd72e8b6345a46ec13516c64d78d4fa1a9a18a8db9ab04aac605f9708629453dc65b6fbccd96b58eeb1ea68102ddbcae9dc6b369255c6c6c1fb18ce0bd43ec79 init.sh -85bc25e72ce67a2b9ae91bf5486707b35b8a118f527ae7d95f8ce45da5ec61bd77987f69963843a9db7baf692c5635a233f5fbada8417f545866bc4b95c32ba5 init_functions.sh -6201869d3731bdbe4330ffe1c6cf66ab48918b4693153e5ad648f87fa1a28c93095a218de66ce9b24d8f13df92042959591293b26fbc64279480a015ea23ce06 init_2nd.sh +73a4f59264881d299ed05a97602e053e68e4db91f97cf2cde63e5fb8b57802ae2c2a4a169eabb241fca66c035968024cfca74cfbeacf5c5b8e7269af5db3eba2 init_functions.sh +09cf0fcd415a20f421c5b56ac39c273a8ad9467260eee056c6c5e79c7ac1352fbdf73ab6e9620d4a314d876d7908ebac869faa34d11a96b296520388ddc36e8e init_2nd.sh 4eca94327274511011967cde1f663b00b1a8182f7dddc3ba19d5c1f0ac094087a154a250c140ca70ac75a2e7c5bb70b03e94fa5eca63a5393efc4a23d025e1c3 init_functions_2nd.sh 675e7d5bee39b2df7d322117f8dcaccc274d61beaf4d50ead19bbf2109446d64b1c0aa0c5b4f9846eb6c1c403418f28f6364eff4537ba41120fbfcbc484b7da7 mdev.conf " diff --git a/main/postmarketos-initramfs/init_2nd.sh b/main/postmarketos-initramfs/init_2nd.sh index 3cbaff4e5..a4d39634d 100644 --- a/main/postmarketos-initramfs/init_2nd.sh +++ b/main/postmarketos-initramfs/init_2nd.sh @@ -90,6 +90,9 @@ fi killall udevd syslogd 2>/dev/null +# kill unudhpcd to allow rootfs to take over with service manager +stop_unudhpcd + # Kill any getty shells that might be running for pid in $(pidof sh); do if ! [ "$pid" = "1" ]; then diff --git a/main/postmarketos-initramfs/init_functions.sh b/main/postmarketos-initramfs/init_functions.sh index c0cf2736b..2af724650 100644 --- a/main/postmarketos-initramfs/init_functions.sh +++ b/main/postmarketos-initramfs/init_functions.sh @@ -1058,6 +1058,9 @@ debug_shell() { if [ -n "$have_udc" ]; then setup_usb_acm_configfs + else + # USB networking was configured, but DHCP server needs to be started + start_unudhcpd fi # mount pstore, if possible diff --git a/main/postmarketos-usb-moded/APKBUILD b/main/postmarketos-usb-moded/APKBUILD index 5123e5aba..44f2822d6 100644 --- a/main/postmarketos-usb-moded/APKBUILD +++ b/main/postmarketos-usb-moded/APKBUILD @@ -1,6 +1,6 @@ maintainer="Clayton Craft " pkgname=postmarketos-usb-moded -pkgver=8 +pkgver=9 pkgrel=0 pkgdesc="Meta package for configuring usb-moded on postmarketOS" url="https://postmarketos.org" @@ -119,12 +119,12 @@ d373201040a911663fd74123e9ef35e43dedfd375eeefe8ca949a3e24737d457a4693e836b1c5ad6 3d4e20f9e8e357030ce5f5c73367aef31cebecce48a9b1ff7915731335a83715e0679812959ac9ee41f88447a8636177244c0b9c5109cd8a227caecb9931ed9e rootfs-etc-usb-moded-dyn-modes-tethering_mode_systemd.ini af41dc4ceb7255dbb88273916306c6e7e66c879bb67523c9571f9e812c9b36ab00ea666ade49369cd5846b4552a53add58cd1aea574a496bf53ddd3fbc630922 rootfs-etc-usb-moded-dyn-modes-mtp_ffs_mode_systemd.ini 912f0700c87883b55f631cfc3d76e172ff1c21aa57b0c18d1e7b9671ecd6254b1e7565816e3967c68caab196076bf7c8b848375c89185aa4466f4ca7f65231be rootfs-etc-umtprd-umtprd.conf -2c838fd0ad66c92386f6159c7d96d3ba940e13834642eb2cb7612d79d6b8832e9bd06b1eb189141f21fa9085d8b43ea514c15d82736ebd6b94533811f5a15f11 rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service -56ce2662dd8f88795bd2e9063f20747e1377d896fbcf9e1ae43c90ef511c4a11517d7c673f857cf194070c425f417df8f40ced9b95749ed1df53e1be122a8ef7 rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service +885d47e027657584a4e690c8304f5583ee35bee42d2b502dff5e350fb896d606d5ff3fb9a5900f3851427edc7835f2f7332d8cd7cb4591babdd27c5f2ae7f508 rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service +05c4170355c8fcbc96e82df2433daff73d015ef462e1cb3f8f7c0aa08310e018be117f166fa5839fbeb8586b515fbcbf144529be8e8755d8c3a21b54718b07ed rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service 969cfeb3ff0a0153f0d383db18600a3d94e80d39cfb6fb0bae3439c6550785d022852447e93834c50d8d1ec8edc7eec4114db1de64ed454aa9b01f4e6f621e08 rootfs-usr-lib-systemd-system-usb-moded-mtp-mode.service fe4d085730d448e51bbce9e99c3cc7b4662e5fadd6108e5f2e74040f0d4e901132aa7f3367acad183198c5a150862bdef536a6a1968784bf9babc1702c2f16fe rootfs-usr-lib-systemd-system-usb-moded.service.d-override.conf -95681a9bb2d5f8d99f51762d09dc4f0c487442a20070ad1439de1309b775ac1752fe60a205389cc74a1ee9026afc4ad984ac3363659a6749792835654a111d7f rootfs-etc-init.d-usb-moded-developer-mode.initd -1d8b98508f7969a4ba671866eee5e54261c50362e41b18bfebf004a6ed1e97d01a8eb83e3a33c392cbd00ea1a20f0f004b4794582ef1b71dedbba0fba2dc4602 rootfs-etc-init.d-usb-moded-tethering-mode.initd +0981a7cfc53d887997b5342a9add41784ffdfe011cac8510aa78620776ab9a7bf24d4e62d30eb6d2852d52a3ea060c1de074fcea9f4fe017d888b06871e911d0 rootfs-etc-init.d-usb-moded-developer-mode.initd +1662006de519b7b45c2d817be974b43d732d166f71c6782e7d136770aadddcc2ea820fcece21bf95e68f578c9ae7ba88867981fff726feab61cdc36efdf5ec6e rootfs-etc-init.d-usb-moded-tethering-mode.initd b8a4d9c8d1e2cde8d6b31bbb3e61d37c05cf2aa1e04cb25c24308839d045205e0604b103d2d60f9834782dcc64ab346cfe8f97797d4d0c86f54e4cfceb6af679 rootfs-etc-init.d-usb-moded-mtp-mode.initd e021a58fcabef47c3806bea14c86def6ba6787be2f725b1b5f9a24a5b0eb5ba8bee2887337b17c9db9a7df84d2b07b8f14da5092f2afeedaf57689b8e5e82ef0 rootfs-usr-bin-usb-moded-developer-mode dbc653b07f220a0fa4533be4ceac65651b19e32c88d66cafd0bcd4ee2cded2627c410917052eb113612cdea1c9e489bbaf290dade0f9b8c897363cb8fe34631f rootfs-usr-bin-usb-moded-tethering-mode diff --git a/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-developer-mode.initd b/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-developer-mode.initd index 72b99c8ca..2cdfabd25 100644 --- a/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-developer-mode.initd +++ b/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-developer-mode.initd @@ -4,6 +4,10 @@ description="USB Moded Developer Mode" command="usb-moded-developer-mode" command_args="up" +depends() { + need net +} + stop() { usb-moded-developer-mode down } diff --git a/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-tethering-mode.initd b/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-tethering-mode.initd index 4e294984e..169c700ce 100644 --- a/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-tethering-mode.initd +++ b/main/postmarketos-usb-moded/rootfs-etc-init.d-usb-moded-tethering-mode.initd @@ -4,6 +4,10 @@ description="USB Moded Tethering Mode" command="usb-moded-tethering-mode" command_args="up" +depends() { + need net +} + stop() { usb-moded-tethering-mode down } diff --git a/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service b/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service index d8df1e24d..db0dc4e18 100644 --- a/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service +++ b/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-developer-mode.service @@ -1,5 +1,7 @@ [Unit] Description=USB Moded Developer Mode +Wants=network.target +After=network.target [Service] Type=oneshot diff --git a/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service b/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service index 2675dfe89..7efa65476 100644 --- a/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service +++ b/main/postmarketos-usb-moded/rootfs-usr-lib-systemd-system-usb-moded-tethering-mode.service @@ -1,5 +1,7 @@ [Unit] Description=USB Moded Tethering Mode +Wants=network.target +After=network.target [Service] Type=oneshot