From df510ae9a1494bc1be8d6673fbaa43d3f7cc8f40 Mon Sep 17 00:00:00 2001 From: Armin Kuster Date: Mon, 31 May 2021 19:11:57 +0000 Subject: systemctl: Stop tracebacks use formated error messages When systemctl fail it would throw an exception and dump a traceback. Lets use a more controlled workflow. [Yocto #14395] Signed-off-by: Armin Kuster Signed-off-by: Richard Purdie --- .../systemd/systemd-systemctl/systemctl | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl index de733e255b..e8c3d2d1ee 100755 --- a/meta/recipes-core/systemd/systemd-systemctl/systemctl +++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl @@ -160,7 +160,9 @@ def add_link(path, target): class SystemdUnitNotFoundError(Exception): - pass + def __init__(self, path, unit): + self.path = path + self.unit = unit class SystemdUnit(): @@ -224,7 +226,10 @@ class SystemdUnit(): try: for also in config.get('Install', 'Also'): - SystemdUnit(self.root, also).enable() + try: + SystemdUnit(self.root, also).enable() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit)) except KeyError: pass @@ -265,7 +270,10 @@ def preset_all(root): state = presets.state(service) if state == "enable" or state is None: - SystemdUnit(root, service).enable() + try: + SystemdUnit(root, service).enable() + except SystemdUnitNotFoundError: + sys.exit("Error: Systemctl preset_all issue in %s" % service) # If we populate the systemd links we also create /etc/machine-id, which # allows systemd to boot with the filesystem read-only before generating @@ -307,10 +315,16 @@ def main(): if command == "mask": for service in args.service: - SystemdUnit(root, service).mask() + try: + SystemdUnit(root, service).mask() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit)) elif command == "enable": for service in args.service: - SystemdUnit(root, service).enable() + try: + SystemdUnit(root, service).enable() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit)) elif command == "preset-all": if len(args.service) != 0: sys.exit("Too many arguments.") -- cgit 1.2.3-korg