diff --git a/bin/homelab b/bin/homelab index d1c3a94..e2a05bc 100755 --- a/bin/homelab +++ b/bin/homelab @@ -1031,14 +1031,19 @@ def cmd_refresh_creds(args: argparse.Namespace) -> int: def cmd_sync(args: argparse.Namespace) -> int: + # Unlike every other mutating command here, this one had no os.geteuid() + # guard — always shelled out to sudo. Fails outright with "No such file + # or directory: 'sudo'" on minimal root-only Linux images (no sudo + # binary installed at all) reached via `ssh root@host`, e.g. strong. + needs_sudo = os.geteuid() != 0 if sys.platform == "darwin": - return subprocess.call( - ["sudo", "launchctl", "kickstart", "-k", - "system/network.hubris.homelab-context-sync"] - ) - return subprocess.call( - ["sudo", "systemctl", "start", "homelab-context-sync.service"] - ) + cmd = ["launchctl", "kickstart", "-k", + "system/network.hubris.homelab-context-sync"] + else: + cmd = ["systemctl", "start", "homelab-context-sync.service"] + if needs_sudo: + cmd = ["sudo"] + cmd + return subprocess.call(cmd) def cmd_mcp(args: argparse.Namespace) -> int: