fix: fake systemctl for pured.service + pre-install service file

purevpn-cli checks `systemctl is-active pured.service` to determine if
components are installed. Without systemd this always returns inactive,
triggering endless sudo/reinstall loop and ETXTBSY when trying to overwrite
the running daemon binary.

Fake systemctl returns "active" when pured is listening on :9485, "inactive"
otherwise. Also handles start/stop/disable/daemon-reload as no-ops.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 18:59:40 +01:00
parent 06e24a3776
commit 1c2d903a95
2 changed files with 24 additions and 0 deletions

View File

@@ -44,6 +44,15 @@ RUN curl -fsSL "https://apps.purevpn-tools.com/cross-platform/linux-daemon/1.4.1
&& gzip -d /opt/purevpn-cli/pured-linux-x64.gz \ && gzip -d /opt/purevpn-cli/pured-linux-x64.gz \
&& chmod +x /opt/purevpn-cli/pured-linux-x64 && chmod +x /opt/purevpn-cli/pured-linux-x64
# ── Fake systemctl (pured.service) ───────────────────────────────────────────
# purevpn-cli checks `systemctl is-active pured.service` to detect missing
# components. Without systemd, this always returns inactive → endless sudo loop.
# Fake systemctl returns "active" when the daemon is reachable on :9485.
COPY systemctl.sh /usr/local/bin/systemctl
RUN chmod +x /usr/local/bin/systemctl \
&& mkdir -p /etc/systemd/system \
&& cp /opt/purevpn-cli/pured.service /etc/systemd/system/pured.service
# ── PATH ────────────────────────────────────────────────────────────────────── # ── PATH ──────────────────────────────────────────────────────────────────────
ENV PATH=/opt/purevpn-cli/bin:/opt/purevpn-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV PATH=/opt/purevpn-cli/bin:/opt/purevpn-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

15
vpn-node/systemctl.sh Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
# Fake systemctl for containers — handles pured.service lifecycle without systemd.
# All other commands are no-ops so purevpn-cli installer steps don't break.
case "$*" in
*"is-active pured"*)
nc -z 127.0.0.1 9485 2>/dev/null && echo "active" && exit 0
echo "inactive"; exit 1 ;;
*"start pured"*)
NODE_ENV=production /opt/purevpn-cli/pured-linux-x64 --start &
sleep 2; exit 0 ;;
*"stop pured"*|*"disable pured"*)
pkill -f "pured-linux-x64" 2>/dev/null || true; exit 0 ;;
*)
exit 0 ;;
esac