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:
@@ -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
|
||||
|
||||
+11
@@ -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
|
||||
+11
@@ -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
|
||||
+8
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user