diff options
-rw-r--r-- | users/wpcarro/tools/systemd-shell/default.nix | 8 | ||||
-rw-r--r-- | users/wpcarro/tools/systemd-shell/setup.py | 9 | ||||
-rw-r--r-- | users/wpcarro/tools/systemd-shell/systemd-shell | 36 |
3 files changed, 53 insertions, 0 deletions
diff --git a/users/wpcarro/tools/systemd-shell/default.nix b/users/wpcarro/tools/systemd-shell/default.nix new file mode 100644 index 000000000000..eace76b7087b --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: + +pkgs.python310Packages.buildPythonApplication { + pname = "systemd-shell"; + version = "0.0.1"; + src = ./.; + doCheck = false; +} diff --git a/users/wpcarro/tools/systemd-shell/setup.py b/users/wpcarro/tools/systemd-shell/setup.py new file mode 100644 index 000000000000..f45e058e672e --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/setup.py @@ -0,0 +1,9 @@ +from setuptools import setup + +setup( + name="systemd-shell", + version="0.0.1", + author="William Carroll", + author_email="wpcarro@gmail.com", + scripts=["systemd-shell"], +) diff --git a/users/wpcarro/tools/systemd-shell/systemd-shell b/users/wpcarro/tools/systemd-shell/systemd-shell new file mode 100644 index 000000000000..646d59143afd --- /dev/null +++ b/users/wpcarro/tools/systemd-shell/systemd-shell @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +# Drop into a new shell environment with the same variables defined in a systemd +# unit file (for debugging purposes). +# +# USAGE: +# $ systemd-shell -u buildkite-agent-foundation-1.service + +import argparse +import os + +def parse_env(entry): + x = entry[12:].split("=", 1) + return x[0].removeprefix("\"").removesuffix("\""), x[1].removeprefix("\"").removesuffix("\"") + +def run(unit): + envfile = [] + print("--- Environment ---") + for line in open(f"/etc/systemd/system/{unit}").readlines(): + if line.startswith("Environment="): + key, val = parse_env(line[:-1]) + print(f"export {key}={val}") + envfile.append(f"{key}={val}") + else: + continue + print() + + env = " ".join(envfile) + print("--- Command ---") + os.system(f"/usr/bin/env {env} /bin/sh") + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("-u", "--unit", type=str, required=True) + args = parser.parse_args() + run(args.unit) |