feat: add OpenRC (Gentoo) + svcmgr check (Linux) (#927)

Co-authored-by: AAGaming <aagaming@riseup.net>
This commit is contained in:
Nao
2026-07-13 22:16:34 -04:00
committed by GitHub
co-authored by AAGaming
parent 91abff7811
commit dfaeb0beb3
3 changed files with 93 additions and 8 deletions
@@ -8,6 +8,25 @@ from ..enums import UserType
logger = logging.getLogger("localplatform")
def _get_service_manager() -> str:
try:
if isinstance(os.getenv("LINUX_SERVICE_MANAGER"), str): return os.getenv("LINUX_SERVICE_MANAGER") # pyright: ignore[reportReturnType]
link = os.path.realpath("/sbin/init")
if not link: raise Exception("This Linux installation doesn't have /sbin/init.")
service = os.path.basename(link)
match service:
case "openrc-init":
return "openrc"
case _:
if service != "init": return service
# Non-supervised or highly non-standard Linux installation
return "no_init"
except:
# As it's the most common, default to Systemd
return "systemd"
service_manager = _get_service_manager()
# subprocess._ENV
ENV = Mapping[str, str]
ProcessIO = int | IO[Any] | None
@@ -138,16 +157,36 @@ def setuid(user : UserType = UserType.HOST_USER):
raise Exception("Unknown user type")
async def service_active(service_name : str) -> bool:
res, _, _ = await run(["systemctl", "is-active", service_name], stdout=DEVNULL, stderr=DEVNULL)
match service_manager:
case "systemd":
cmd = ["systemctl", "is-active", service_name]
case "openrc":
cmd = ["rc-service"]
if _get_effective_user_id() != 0: cmd.append("--user")
cmd.append(service_name)
cmd.append("status")
case _:
return True # Stub unsupported services
res, _, _ = await run(cmd, stdout=DEVNULL, stderr=DEVNULL)
return res.returncode == 0
async def service_restart(service_name : str, block : bool = True) -> bool:
match service_manager:
case "systemd":
await run(["systemctl", "daemon-reload"])
logger.info("Systemd reload done.")
cmd = ["systemctl", "restart", service_name]
if not block:
cmd.append("--no-block")
case "openrc":
cmd = ["rc-service"]
if _get_effective_user_id() != 0: cmd.append("--user")
cmd.append(service_name)
cmd.append("restart")
case _:
return True # Stub unsupported services
res, _, _ = await run(cmd, stdout=PIPE, stderr=STDOUT)
return res.returncode == 0
@@ -157,7 +196,17 @@ async def service_stop(service_name : str) -> bool:
# Service isn't running. pretend we stopped it
return True
match service_manager:
case "systemd":
cmd = ["systemctl", "stop", service_name]
case "openrc":
cmd = ["rc-service"]
if _get_effective_user_id() != 0: cmd.append("--user")
cmd.append(service_name)
cmd.append("stop")
case _:
return True # Stub unsupported services
res, _, _ = await run(cmd, stdout=PIPE, stderr=STDOUT)
return res.returncode == 0
@@ -166,7 +215,17 @@ async def service_start(service_name : str) -> bool:
# Service is running. pretend we started it
return True
match service_manager:
case "systemd":
cmd = ["systemctl", "start", service_name]
case "openrc":
cmd = ["rc-service"]
if _get_effective_user_id() != 0: cmd.append("--user")
cmd.append(service_name)
cmd.append("start")
case _:
return True # Stub unsupported services
res, _, _ = await run(cmd, stdout=PIPE, stderr=STDOUT)
return res.returncode == 0
+13
View File
@@ -0,0 +1,13 @@
#!/sbin/openrc-run
export UNPRIVILEGED_PATH="${HOMEBREW_FOLDER}"
export PRIVILEGED_PATH="${HOMEBREW_FOLDER}"
export LOG_LEVEL="DEBUG"
supervisor=supervise-daemon
directory="${HOMEBREW_FOLDER}/services"
command="${HOMEBREW_FOLDER}/services/PluginLoader"
depend() {
need net
}
+13
View File
@@ -0,0 +1,13 @@
#!/sbin/openrc-run
export UNPRIVILEGED_PATH="${HOMEBREW_FOLDER}"
export PRIVILEGED_PATH="${HOMEBREW_FOLDER}"
export LOG_LEVEL="INFO"
supervisor=supervise-daemon
directory="${HOMEBREW_FOLDER}/services"
command="${HOMEBREW_FOLDER}/services/PluginLoader"
depend() {
need net
}