aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorFlorian Eckert <fe@dev.tdt.de>2021-12-03 15:57:33 +0100
committerFlorian Eckert <fe@dev.tdt.de>2021-12-06 14:49:43 +0100
commit0b027b131c97ec901c3b3dc9211ee434d21291dc (patch)
tree16c8336217eaf8096d6da1d5236879aa1400b753 /net
parent4be2a5b73757eb0037d41da962518eaac4e4d3ac (diff)
ModemManager: refactoring procd init script
The way the init script is written now, we get a bad output when calling the ubus service backend. ubus call service list "{'verbose':true,'name':'modemmanager'}" >{ > "modemmanager": { > "instances": { > "instance1": { > "running": true, > "pid": 20511, > "command": [ > "sh", > "-c", > ". >/usr/share/ModemManager/modemmanager.common; \t >mkdir -m 0755 -p /var/run/modemmanager; \t >mm_cleanup_interfaces; \t >( mm_report_events_from_cache ) >/dev/null 2>&1 & \t >/usr/sbin/ModemManager" > ], > "term_timeout": 5, > "respawn": { > "threshold": 3600, > "timeout": 5, > "retry": 5 > }, > "pidfile":"/var/run/modemmanager/modemmanager.pid" > } > } > } >}" I also get the output in the log that the PID file cannot be created. > daemon.err procd: Failed to remove pidfile: :No such file or directory The changes in this commit fixes this issues, by moving startup into a wrapper script. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Diffstat (limited to 'net')
-rw-r--r--net/modemmanager/Makefile1
-rwxr-xr-xnet/modemmanager/files/modemmanager.init10
-rw-r--r--net/modemmanager/files/usr/sbin/ModemManager-wrapper33
3 files changed, 38 insertions, 6 deletions
diff --git a/net/modemmanager/Makefile b/net/modemmanager/Makefile
index ce87b0a36..db59989b2 100644
--- a/net/modemmanager/Makefile
+++ b/net/modemmanager/Makefile
@@ -98,6 +98,7 @@ define Package/modemmanager/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ModemManager $(1)/usr/sbin
+ $(INSTALL_BIN) ./files/usr/sbin/ModemManager-wrapper $(1)/usr/sbin
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mmcli $(1)/usr/bin
diff --git a/net/modemmanager/files/modemmanager.init b/net/modemmanager/files/modemmanager.init
index b3f9f9290..a3f6c1b12 100755
--- a/net/modemmanager/files/modemmanager.init
+++ b/net/modemmanager/files/modemmanager.init
@@ -22,14 +22,12 @@ start_service() {
# it starts.
#
# All these commands need to be executed on every MM start, even after
- # procd-triggered respawns, which is why they're all included as instance command
+ # procd-triggered respawns, which is why this is wrapped in a startup
+ # wrapper script called '/usr/sbin/ModemManager-wrapper'.
#
+ . /usr/share/ModemManager/modemmanager.common
procd_open_instance
- procd_set_param command sh -c ". /usr/share/ModemManager/modemmanager.common; \
- mkdir -m 0755 -p ${MODEMMANAGER_RUNDIR}; \
- mm_cleanup_interfaces; \
- ( mm_report_events_from_cache ) >/dev/null 2>&1 & \
- /usr/sbin/ModemManager"
+ procd_set_param command /usr/sbin/ModemManager-wrapper
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
procd_set_param pidfile "${MODEMMANAGER_PID_FILE}"
procd_close_instance
diff --git a/net/modemmanager/files/usr/sbin/ModemManager-wrapper b/net/modemmanager/files/usr/sbin/ModemManager-wrapper
new file mode 100644
index 000000000..f5fb6d1f2
--- /dev/null
+++ b/net/modemmanager/files/usr/sbin/ModemManager-wrapper
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+trap_with_arg() {
+ func="$1" ; shift
+ for sig ; do
+ # shellcheck disable=SC2064
+ trap "$func $sig" "$sig"
+ done
+}
+
+func_trap() {
+ logger "ModemManager-wrapper[$$]" "Sending signal ${1}..."
+ kill "-${1}" "$CHILD" 2>/dev/null
+}
+
+main() {
+ . /usr/share/ModemManager/modemmanager.common
+
+ trap_with_arg func_trap INT TERM KILL
+
+ mkdir -p "${MODEMMANAGER_RUNDIR}"
+ chmod 0755 "${MODEMMANAGER_RUNDIR}"
+ mm_cleanup_interfaces
+
+ /usr/sbin/ModemManager "$@" 1>/dev/null 2>/dev/null &
+ CHILD="$!"
+ sleep 2
+ mm_report_events_from_cache
+
+ wait "$CHILD"
+}
+
+main "$@"