On Sun, Jan 12, 2025 at 2:40 PM Artur Kowalski via
lists.openembedded.org <arturkow2000=gmail....@lists.openembedded.org>
wrote:
>
> The flag is similar to --user flag as it causes systemctl to operate on
> user units, but it performs operations globally for all users. This is
> required to for user presets support.

"to for"? Drop the "to"?

>
> Signed-off-by: Artur Kowalski <arturkow2...@gmail.com>
> ---
>  .../systemd/systemd-systemctl/systemctl       | 42 ++++++++++---------
>  1 file changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl 
> b/meta/recipes-core/systemd/systemd-systemctl/systemctl
> index 2229bc7b6d..9b8fe81459 100755
> --- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
> +++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
> @@ -29,15 +29,15 @@ class SystemdFile():
>
>      _clearable_keys = ['WantedBy']
>
> -    def __init__(self, root, path, instance_unit_name):
> +    def __init__(self, root, path, instance_unit_name, unit_type):
>          self.sections = dict()
>          self._parse(root, path)
>          dirname = os.path.basename(path.name) + ".d"
>          for location in locations:
> -            files = (root / location / "system" / dirname).glob("*.conf")
> +            files = (root / location / unit_type / dirname).glob("*.conf")
>              if instance_unit_name:
>                  inst_dirname = instance_unit_name + ".d"
> -                files = chain(files, (root / location / "system" / 
> inst_dirname).glob("*.conf"))
> +                files = chain(files, (root / location / unit_type / 
> inst_dirname).glob("*.conf"))
>              for path2 in sorted(files):
>                  self._parse(root, path2)
>
> @@ -182,21 +182,22 @@ class SystemdUnitNotFoundError(Exception):
>
>
>  class SystemdUnit():
> -    def __init__(self, root, unit):
> +    def __init__(self, root, unit, unit_type):
>          self.root = root
>          self.unit = unit
> +        self.unit_type = unit_type
>          self.config = None
>
>      def _path_for_unit(self, unit):
>          for location in locations:
> -            path = self.root / location / "system" / unit
> +            path = self.root / location / self.unit_type / unit
>              if path.exists() or path.is_symlink():
>                  return path
>
>          raise SystemdUnitNotFoundError(self.root, unit)
>
>      def _process_deps(self, config, service, location, prop, dirstem, 
> instance):
> -        systemdir = self.root / SYSCONFDIR / "systemd" / "system"
> +        systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
>
>          target = ROOT / location.relative_to(self.root)
>          try:
> @@ -229,7 +230,7 @@ class SystemdUnit():
>              # ignore aliases
>              return
>
> -        config = SystemdFile(self.root, path, instance_unit_name)
> +        config = SystemdFile(self.root, path, instance_unit_name, 
> self.unit_type)
>          if instance == "":
>              try:
>                  default_instance = config.get('Install', 
> 'DefaultInstance')[0]
> @@ -250,14 +251,14 @@ class SystemdUnit():
>                  try:
>                       units_enabled.append(unit)
>                       if also not in units_enabled:
> -                        SystemdUnit(self.root, also).enable(units_enabled)
> +                        SystemdUnit(self.root, also, 
> self.unit_type).enable(units_enabled)
>                  except SystemdUnitNotFoundError as e:
>                      sys.exit("Error: Systemctl also enable issue with  %s 
> (%s)" % (service, e.unit))
>
>          except KeyError:
>              pass
>
> -        systemdir = self.root / SYSCONFDIR / "systemd" / "system"
> +        systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
>          target = ROOT / path.relative_to(self.root)
>          try:
>              for dest in config.get('Install', 'Alias'):
> @@ -268,15 +269,15 @@ class SystemdUnit():
>              pass
>
>      def mask(self):
> -        systemdir = self.root / SYSCONFDIR / "systemd" / "system"
> +        systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
>          add_link(systemdir / self.unit, "/dev/null")
>
>
> -def collect_services(root):
> +def collect_services(root, unit_type):
>      """Collect list of service files"""
>      services = set()
>      for location in locations:
> -        paths = (root / location / "system").glob("*")
> +        paths = (root / location / unit_type).glob("*")
>          for path in paths:
>              if path.is_dir():
>                  continue
> @@ -285,16 +286,16 @@ def collect_services(root):
>      return services
>
>
> -def preset_all(root):
> -    presets = Presets('system-preset', root)
> -    services = collect_services(root)
> +def preset_all(root, unit_type):
> +    presets = Presets('{}-preset'.format(unit_type), root)
> +    services = collect_services(root, unit_type)
>
>      for service in services:
>          state = presets.state(service)
>
>          if state == "enable" or state is None:
>              try:
> -                SystemdUnit(root, service).enable()
> +                SystemdUnit(root, service, unit_type).enable()
>              except SystemdUnitNotFoundError:
>                  sys.exit("Error: Systemctl preset_all issue in %s" % service)
>
> @@ -320,6 +321,7 @@ def main():
>      parser.add_argument('--preset-mode',
>                          choices=['full', 'enable-only', 'disable-only'],
>                          default='full')
> +    parser.add_argument('--global', dest="glob", action="store_true", 
> default=False)
>

I guess `glob` because `global` is a keyword? But yuck... makes me
think of https://docs.python.org/3/library/glob.html


>      args = parser.parse_args()
>
> @@ -336,16 +338,18 @@ def main():
>          parser.print_help()
>          return 0
>
> +    unit_type = "user" if args.glob else "system"
> +
>      if command == "mask":
>          for service in args.service:
>              try:
> -                SystemdUnit(root, service).mask()
> +                SystemdUnit(root, service, unit_type).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:
>              try:
> -                SystemdUnit(root, service).enable()
> +                SystemdUnit(root, service, unit_type).enable()
>              except SystemdUnitNotFoundError as e:
>                  sys.exit("Error: Systemctl main enable issue in %s (%s)" % 
> (service, e.unit))
>      elif command == "preset-all":
> @@ -353,7 +357,7 @@ def main():
>              sys.exit("Too many arguments.")
>          if args.preset_mode != "enable-only":
>              sys.exit("Only enable-only is supported as preset-mode.")
> -        preset_all(root)
> +        preset_all(root, unit_type)
>      else:
>          raise RuntimeError()
>
> --
> 2.47.0
>
>
> 
>


--
Alex Kiernan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#209697): 
https://lists.openembedded.org/g/openembedded-core/message/209697
Mute This Topic: https://lists.openembedded.org/mt/110569454/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to