main/postmarketos-usb-moded: new aport

This pkg contains usb-moded profile config and config for setting
default profile based on pmb_select.

Signed-off-by: Clayton Craft <craftyguy@postmarketos.org>

Signed-off-by: Clayton Craft <craftyguy@postmarketos.org>
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6531>
This commit is contained in:
Clayton Craft
2025-12-27 22:46:16 -08:00
committed by The Friendly Merge Bot
parent 7d35823389
commit c957fa0c83
11 changed files with 269 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
# Maintainer: Clayton Craft <clayton@craftyguy.net>
pkgname=postmarketos-usb-moded
pkgver=1
pkgrel=0
pkgdesc="Meta package for configuring usb-moded on postmarketOS"
url="https://postmarketos.org"
arch="noarch"
license="GPL-3.0-or-later"
depends="
umtprd
usb-moded
usb-moded-notify
"
subpackages="
$pkgname-default-profile-charging:charging_default
$pkgname-default-profile-developer:developer_default
$pkgname-systemd
"
_pmb_select="$pkgname-default-profile"
_source644="
etc/usb-moded/configfs.ini
etc/usb-moded/dyn-modes/developer_mode_systemd.ini
etc/usb-moded/dyn-modes/tethering_mode_systemd.ini
etc/usb-moded/dyn-modes/mtp_ffs_mode_systemd.ini
etc/umtprd/umtprd.conf
usr/lib/systemd/system/usb-moded-developer-mode.service
usr/lib/systemd/system/usb-moded-tethering-mode.service
usr/lib/systemd/system/usb-moded.service.d/override.conf
"
_source755="
usr/bin/usb-moded-developer-mode
usr/bin/usb-moded-tethering-mode
"
# Avoid filename based checksum conflicts by including the whole path.
flatpath() {
local i
for i in $@; do
echo "rootfs-$i" | sed s./.-.g
done
}
source="$(flatpath $_source644 $_source600 $_source755)"
package() {
# usb-moded default profile config are provided by subpackages in this
# APKBUILD and it won't exist when this is evaluated at the top level.
# It's moved into this function to work around it.
depends="
$depends
$pkgname-default-profile
"
local i
for i in $_source644; do
install -Dm644 "$srcdir/$(flatpath "$i")" "$pkgdir/$i"
done
for i in $_source600; do
install -Dm600 "$srcdir/$(flatpath "$i")" "$pkgdir/$i"
done
for i in $_source755; do
install -Dm755 "$srcdir/$(flatpath "$i")" "$pkgdir/$i"
done
}
charging_default() {
pkgdesc="Make 'charging mode' the default usb-moded profile (usb networking must be manually enabled)"
provides="$pkgname-default-profile=$pkgver-r$pkgrel"
provider_priority=90
mkdir -p "$subpkgdir"/etc/usb-moded
cat <<-EOF > "$subpkgdir"/etc/usb-moded/usbmode.ini
[usbmode]
mode = charging_only
EOF
}
developer_default() {
pkgdesc="Make 'developer mode' the default usb-moded profile (always enables usb networking)"
provides="$pkgname-default-profile=$pkgver-r$pkgrel"
# We want this mode to be the default if not specified with e.g. pmb_select
provider_priority=100
mkdir -p "$subpkgdir"/etc/usb-moded
cat <<-EOF > "$subpkgdir"/etc/usb-moded/usbmode.ini
[usbmode]
mode = developer_mode
EOF
}
sha512sums="
231c1cfb991bb4d9f9807bb81e970bc2f63b7ea6e9bb06cf06a698af69b4a9f82f015252ec4c802ad0f8b58456d624f07e62902f04207dc5bac76cc785c296a7 rootfs-etc-usb-moded-configfs.ini
d373201040a911663fd74123e9ef35e43dedfd375eeefe8ca949a3e24737d457a4693e836b1c5ad6f4cf3149b656ae24d751f767babb9858a42114c5d2ad083e rootfs-etc-usb-moded-dyn-modes-developer_mode_systemd.ini
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
79dc304cc5d455135f929a0ba60487f03b1b66d09245d972f685ee5ddabc8414f74159e47bbb13bff862163fa07dd9497a30ab7e32074bff95f2189685d851a2 rootfs-usr-lib-systemd-system-usb-moded.service.d-override.conf
9aab1a91a817e2337320ee0fa1bf6133e65e9269631560c1860c3b777adb336d036cebbc2510d1df35a82bf4396d553ff9e2edd0004027c7a3130168f7f50d90 rootfs-usr-bin-usb-moded-developer-mode
5cc40b1a0c86904d824f8f03e3f44900aaf407c5c462902f4f58cd58c603be1c5919651b91320983e21da42f5891e29df504bf4f1bddef64fedc68c2accdccbc rootfs-usr-bin-usb-moded-tethering-mode
"
@@ -0,0 +1,16 @@
# FunctionFS configuration
usb_functionfs_mode 0x1
usb_dev_path "/dev/mtp/ep0"
usb_epin_path "/dev/mtp/ep1"
usb_epout_path "/dev/mtp/ep2"
usb_epint_path "/dev/mtp/ep3"
usb_max_packet_size 0x200
# Prevent disconnection on cable status, managed by usb-moded
loop_on_disconnect 1
# Storage to expose over MTP
storage "/home" "Home" "rw"
manufacturer "postmarketOS"
product "Device"
@@ -0,0 +1,12 @@
[mode]
name=developer_mode
module=none
network=0
[options]
idProduct=0xD001
idVendorOverride=0x18D1
sysfs_value=ncm.usb0
dhcp_server=0
command_up=systemctl start usb-moded-developer-mode
command_down=systemctl stop usb-moded-developer-mode
@@ -0,0 +1,11 @@
[mode]
name=mtp_ffs_mode
module=none
[options]
idProduct=0x1D6B
idVendorOverride=0x0100
sysfs_value=ffs.mtp
command_up=systemctl start umtprd
command_down=systemctl stop umtprd
ffs_daemon_mountpoint=mtp
@@ -0,0 +1,12 @@
[mode]
name=tethering_mode
module=none
network=0
[options]
idProduct=0xD001
idVendorOverride=0x18D1
sysfs_value=ncm.usb0
dhcp_server=0
command_up=systemctl start usb-moded-tethering-mode
command_down=systemctl stop usb-moded-tethering-mode
@@ -0,0 +1,47 @@
#!/bin/sh
# Enable/disable developer USB mode by delegating network operations to NetworkManager
# Dynamically generate NetworkManager connection because it is only available in the right USB mode
#
# Copyright (c) Dylan Van Assche (2025)
IFACE=usb0
IP_ADDRESS_SERVER=172.16.42.1
IP_ADDRESS_CLIENT=172.16.42.2
CONNECTION_NAME="USB Developer Mode"
up() {
# Bring interface and NetworkManager connection up
nmcli connection add con-name "$CONNECTION_NAME" type ethernet \
ifname "$IFACE" ipv4.method manual ipv4.addresses "$IP_ADDRESS_SERVER"/16
nmcli connection up "$CONNECTION_NAME"
# Start DHCP server
unudhcpd -i "$IFACE" -s "$IP_ADDRESS_SERVER" -c "$IP_ADDRESS_CLIENT" &
}
down() {
# Stop DHCP server
killall -9 unudhcpd
# Bring NetworkManager connection down
nmcli connection down "$CONNECTION_NAME"
nmcli connection delete "$CONNECTION_NAME"
# NetworkManager brings the interface up automatically,
# but doesn't remove it when bringing down.
ifconfig "$IFACE" down
}
case $1 in
up)
up
;;
down)
down
;;
*)
echo "need an argument (up|down)"
exit 0
;;
esac
@@ -0,0 +1,39 @@
#!/bin/sh
# Enable/disable tethering USB mode by delegating network operations to NetworkManager.
# Dynamically generate NetworkManager connection because it is only available in the right USB mode.
#
# Copyright (c) Dylan Van Assche (2025)
IFACE=usb0
CONNECTION_NAME="USB Tethering Mode"
up() {
# Bring interface and NetworkManager connection up
nmcli connection add con-name "$CONNECTION_NAME" type ethernet \
ifname "$IFACE" ipv4.method shared
nmcli connection up "$CONNECTION_NAME"
}
down() {
# Bring NetworkManager connection down
nmcli connection down "$CONNECTION_NAME"
nmcli connection delete "$CONNECTION_NAME"
# NetworkManager brings the interface up automatically,
# but doesn't remove it when bringing down.
ifconfig "$IFACE" down
}
case $1 in
up)
up
;;
down)
down
;;
*)
echo "need an argument (up|down)"
exit 0
;;
esac
@@ -0,0 +1,11 @@
[Unit]
Description=USB Moded Developer Mode
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=usb-moded-developer-mode up
ExecStop=usb-moded-developer-mode down
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,11 @@
[Unit]
Description=USB Moded Tethering Mode
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=usb-moded-tethering-mode up
ExecStop=usb-moded-tethering-mode down
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,8 @@
[Unit]
After=default.target
[Service]
ExecStartPre=-/usr/bin/killall unudhcpd
ExecStartPre=mkdir -p /config
ExecStartPre=/bin/mount -t configfs none /config