diff --git a/bin/meshtasticd-start.sh b/bin/meshtasticd-start.sh new file mode 100755 index 000000000..b58d92085 --- /dev/null +++ b/bin/meshtasticd-start.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env sh + +INSTANCE=$1 +CONF_DIR="/etc/meshtasticd/config.d" +VFS_DIR="/var/lib" + +# If no instance ID provided, start bare daemon and exit +echo "no instance ID provided, starting bare meshtasticd service" +if [ -z "${INSTANCE}" ]; then + /usr/bin/meshtasticd + exit 0 +fi + +# Make VFS dir if it does not exist +if [ ! -d "${VFS_DIR}/meshtasticd-${INSTANCE}" ]; then + echo "vfs for ${INSTANCE} does not exist, creating it." + mkdir "${VFS_DIR}/meshtasticd-${INSTANCE}" +fi + +# Abort if config for $INSTANCE does not exist +if [ ! -f "${CONF_DIR}/config-${INSTANCE}.yaml" ]; then + echo "no config for ${INSTANCE} found in ${CONF_DIR}. refusing to start" >&2 + exit 1 +fi + +# Start meshtasticd with instance parameters +printf "starting meshtasticd-%s..., ${INSTANCE}" +if /usr/bin/meshtasticd --config="${CONF_DIR}/config-${INSTANCE}.yaml" --fsdir="${VFS_DIR}/meshtasticd-${INSTANCE}"; then + echo "ok" +else + echo "failed" +fi diff --git a/bin/meshtasticd.service b/bin/meshtasticd.service index 63430bae8..8ca32a8aa 100644 --- a/bin/meshtasticd.service +++ b/bin/meshtasticd.service @@ -1,5 +1,5 @@ [Unit] -Description=Meshtastic Native Daemon +Description=Meshtastic %i Daemon After=network-online.target StartLimitInterval=200 StartLimitBurst=5 @@ -9,7 +9,7 @@ AmbientCapabilities=CAP_NET_BIND_SERVICE User=meshtasticd Group=meshtasticd Type=simple -ExecStart=/usr/bin/meshtasticd +ExecStart=/usr/bin/meshtasticd-start.sh %i Restart=always RestartSec=3 diff --git a/bin/native-install.sh b/bin/native-install.sh index 18cd9205b..dfcb7b40d 100755 --- a/bin/native-install.sh +++ b/bin/native-install.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash cp "release/meshtasticd_linux_$(uname -m)" /usr/bin/meshtasticd +cp "bin/meshtasticd-start.sh" /usr/bin/meshtasticd-start.sh mkdir -p /etc/meshtasticd if [[ -f "/etc/meshtasticd/config.yaml" ]]; then cp bin/config-dist.yaml /etc/meshtasticd/config-upgrade.yaml diff --git a/debian/meshtasticd.install b/debian/meshtasticd.install index 3c68b42b1..62c0150db 100644 --- a/debian/meshtasticd.install +++ b/debian/meshtasticd.install @@ -4,5 +4,6 @@ bin/config.yaml etc/meshtasticd bin/config.d/* etc/meshtasticd/available.d bin/meshtasticd.service lib/systemd/system +bin/meshtasticd-start.sh usr/bin web/* usr/share/meshtasticd/web diff --git a/meshtasticd.spec.rpkg b/meshtasticd.spec.rpkg index 3456001f0..0819d5f8d 100644 --- a/meshtasticd.spec.rpkg +++ b/meshtasticd.spec.rpkg @@ -95,6 +95,9 @@ cp -r bin/config.d/* %{buildroot}%{_sysconfdir}/meshtasticd/available.d # Install systemd service install -D -m 0644 bin/meshtasticd.service %{buildroot}%{_unitdir}/meshtasticd.service +# Install meshtasticd start wrapper +install -D -m 0755 bin/meshtasticd-start.sh %{buildroot}%{_bindir}/meshtasticd-start.sh + # Install the web files under /usr/share/meshtasticd/web mkdir -p %{buildroot}%{_datadir}/meshtasticd/web cp -r web/* %{buildroot}%{_datadir}/meshtasticd/web