diff mbox series

systemd: move systemctl utility to separate subpackage

Message ID 20250206144907.1924993-1-oobitots@cisco.com
State New
Headers show
Series systemd: move systemctl utility to separate subpackage | expand

Commit Message

Move systemctl into separate subpackage to minimize
dependencies from core systemd package.

Signed-off-by: Oleksiy Obitotskyy <oobitots@cisco.com>
---
 meta/recipes-core/systemd/systemd_257.1.bb | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

Comments

Ross Burton Feb. 10, 2025, 11:47 a.m. UTC | #1
On 6 Feb 2025, at 14:49, Oleksiy Obitotskyy via lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org> wrote:
> Move systemctl into separate subpackage to minimize
> dependencies from core systemd package.

In what situation would you have systemd or systemctl without the other?

Cheers,
Ross
Hi,

We have next situation:
- a lot of software components that depend on packages and deploy all packages they depend on locally inside component.
- some components directly depend on systemctl only (e.g. this binary used in scripts), so for every component we have to deploy whole systemd locally.
- finally, all/some of those components will be merged in some way and will use systemd/libsystemd, but until then it will be nice to get rid of such duplication.

Regards,
Oleksiy
Alexander Kanavin Feb. 10, 2025, 12:03 p.m. UTC | #3
On Mon, 10 Feb 2025 at 13:01, Oleksiy Obitotskyy via
lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
wrote:
> We have next situation:
> - a lot of software components that depend on packages and deploy all packages they depend on locally inside component.
> - some components directly depend on systemctl only (e.g. this binary used in scripts), so for every component we have to deploy whole systemd locally.
> - finally, all/some of those components will be merged in some way and will use systemd/libsystemd, but until then it will be nice to get rid of such duplication.

I'm sorry, but this does not quite make sense. You need to more
specifically describe what 'deploying whole systemd' means, and why is
that problematic.

Alex
Hi Alexander,

By 'deploying whole systemd' I mean next:

  *
Every component copy and installs packages with libraries, utilities and config files in component local sysroot, i.e. directory used to create final component image:
     *
libsystemd0_255.4
     *
libsystemd-shared_255.4
     *
systemd_255.4

So, on disk we have duplication of files for every component that depend on the systemctl.
In case of separate subpackage we have one root component depend on the systemd and all other components will contain only systemd-systemctl package content.

Of course, I understand it's quite a specific scenario.

Regards,
Oleksiy
Alexander Kanavin Feb. 10, 2025, 5:19 p.m. UTC | #5
They're not actually copied. They're hard-linked from
sysroots-components/. This is a cheap operation and it doesn't waste
disk space.

Alex

On Mon, 10 Feb 2025 at 18:05, Oleksiy Obitotskyy via
lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
wrote:
>
> Hi Alexander,
>
> By 'deploying whole systemd' I mean next:
>
> Every component copy and installs packages with libraries, utilities and config files in component local sysroot, i.e. directory used to create final component image:
>
> libsystemd0_255.4
> libsystemd-shared_255.4
> systemd_255.4
>
> So, on disk we have duplication of files for every component that depend on the systemctl.
> In case of separate subpackage we have one root component depend on the systemd and all other components will contain only systemd-systemctl package content.
>
> Of course, I understand it's quite a specific scenario.
>
> Regards,
> Oleksiy
>
> ________________________________
> From: Alexander Kanavin <alex.kanavin@gmail.com>
> Sent: Monday, February 10, 2025 13:03
> To: Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco) <oobitots@cisco.com>
> Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org>; Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to separate subpackage
>
> On Mon, 10 Feb 2025 at 13:01, Oleksiy Obitotskyy via
> lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> wrote:
> > We have next situation:
> > - a lot of software components that depend on packages and deploy all packages they depend on locally inside component.
> > - some components directly depend on systemctl only (e.g. this binary used in scripts), so for every component we have to deploy whole systemd locally.
> > - finally, all/some of those components will be merged in some way and will use systemd/libsystemd, but until then it will be nice to get rid of such duplication.
>
> I'm sorry, but this does not quite make sense. You need to more
> specifically describe what 'deploying whole systemd' means, and why is
> that problematic.
>
> Alex
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#211106): https://lists.openembedded.org/g/openembedded-core/message/211106
> Mute This Topic: https://lists.openembedded.org/mt/111032725/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Peter Kjellerstedt Feb. 10, 2025, 9:05 p.m. UTC | #6
Additionally, changing the packaging does not affect what is added to 
the sysroot.

//Peter

> -----Original Message-----
> From: openembedded-core@lists.openembedded.org <openembedded-
> core@lists.openembedded.org> On Behalf Of Alexander Kanavin via
> lists.openembedded.org
> Sent: den 10 februari 2025 18:20
> To: oobitots@cisco.com
> Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> core@lists.openembedded.org; Ruslan Bilovol (rbilovol)
> <rbilovol@cisco.com>
> Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to separate
> subpackage
> 
> They're not actually copied. They're hard-linked from
> sysroots-components/. This is a cheap operation and it doesn't waste
> disk space.
> 
> Alex
> 
> On Mon, 10 Feb 2025 at 18:05, Oleksiy Obitotskyy via
> lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> wrote:
> >
> > Hi Alexander,
> >
> > By 'deploying whole systemd' I mean next:
> >
> > Every component copy and installs packages with libraries, utilities and
> config files in component local sysroot, i.e. directory used to create
> final component image:
> >
> > libsystemd0_255.4
> > libsystemd-shared_255.4
> > systemd_255.4
> >
> > So, on disk we have duplication of files for every component that depend
> on the systemctl.
> > In case of separate subpackage we have one root component depend on the
> systemd and all other components will contain only systemd-systemctl
> package content.
> >
> > Of course, I understand it's quite a specific scenario.
> >
> > Regards,
> > Oleksiy
> >
> > ________________________________
> > From: Alexander Kanavin <alex.kanavin@gmail.com>
> > Sent: Monday, February 10, 2025 13:03
> > To: Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco)
> <oobitots@cisco.com>
> > Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> core@lists.openembedded.org <openembedded-core@lists.openembedded.org>;
> Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> > Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to
> separate subpackage
> >
> > On Mon, 10 Feb 2025 at 13:01, Oleksiy Obitotskyy via
> > lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> > wrote:
> > > We have next situation:
> > > - a lot of software components that depend on packages and deploy all
> packages they depend on locally inside component.
> > > - some components directly depend on systemctl only (e.g. this binary
> used in scripts), so for every component we have to deploy whole systemd
> locally.
> > > - finally, all/some of those components will be merged in some way and
> will use systemd/libsystemd, but until then it will be nice to get rid of
> such duplication.
> >
> > I'm sorry, but this does not quite make sense. You need to more
> > specifically describe what 'deploying whole systemd' means, and why is
> > that problematic.
> >
> > Alex
> >
> >
> >
I'm sorry, I confused you mentioned term sysroot. It's not about yocto - we just use the same term because it's very similar
to how it works into yocto.
We got packages as a result of  yocto build and use these artefacts (packages) on next stage to populate
software components content. For some reason we can't use the same approach with hardlink to deduplicate
components content.

Regards,
Oleksiy
Alexander Kanavin Feb. 11, 2025, 6:31 p.m. UTC | #8
This still doesn’t make sense. Any target file is contained in one and only
one package. Where is the duplication?

Alex

On Tue 11. Feb 2025 at 19.04, Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC
INC at Cisco) <oobitots@cisco.com> wrote:

> I'm sorry, I confused you mentioned term sysroot. It's not about yocto -
> we just use the same term because it's very similar
> to how it works into yocto.
> We got packages as a result of  yocto build and use these artefacts
> (packages) on next stage to populate
> software components content. For some reason we can't use the same
> approach with hardlink to deduplicate
> components content.
>
> Regards,
> Oleksiy
>
> ------------------------------
> *From:* Peter Kjellerstedt <peter.kjellerstedt@axis.com>
> *Sent:* Monday, February 10, 2025 22:05
> *To:* alex.kanavin@gmail.com <alex.kanavin@gmail.com>; Oleksiy Obitotskyy
> -X (oobitots - GLOBALLOGIC INC at Cisco) <oobitots@cisco.com>
> *Cc:* Ross Burton <Ross.Burton@arm.com>;
> openembedded-core@lists.openembedded.org <
> openembedded-core@lists.openembedded.org>; Ruslan Bilovol (rbilovol) <
> rbilovol@cisco.com>
> *Subject:* RE: [OE-core] [PATCH] systemd: move systemctl utility to
> separate subpackage
>
> Additionally, changing the packaging does not affect what is added to
> the sysroot.
>
> //Peter
>
> > -----Original Message-----
> > From: openembedded-core@lists.openembedded.org <openembedded-
> > core@lists.openembedded.org> On Behalf Of Alexander Kanavin via
> > lists.openembedded.org
> > Sent: den 10 februari 2025 18:20
> > To: oobitots@cisco.com
> > Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> > core@lists.openembedded.org; Ruslan Bilovol (rbilovol)
> > <rbilovol@cisco.com>
> > Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to
> separate
> > subpackage
> >
> > They're not actually copied. They're hard-linked from
> > sysroots-components/. This is a cheap operation and it doesn't waste
> > disk space.
> >
> > Alex
> >
> > On Mon, 10 Feb 2025 at 18:05, Oleksiy Obitotskyy via
> > lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> > wrote:
> > >
> > > Hi Alexander,
> > >
> > > By 'deploying whole systemd' I mean next:
> > >
> > > Every component copy and installs packages with libraries, utilities
> and
> > config files in component local sysroot, i.e. directory used to create
> > final component image:
> > >
> > > libsystemd0_255.4
> > > libsystemd-shared_255.4
> > > systemd_255.4
> > >
> > > So, on disk we have duplication of files for every component that
> depend
> > on the systemctl.
> > > In case of separate subpackage we have one root component depend on the
> > systemd and all other components will contain only systemd-systemctl
> > package content.
> > >
> > > Of course, I understand it's quite a specific scenario.
> > >
> > > Regards,
> > > Oleksiy
> > >
> > > ________________________________
> > > From: Alexander Kanavin <alex.kanavin@gmail.com>
> > > Sent: Monday, February 10, 2025 13:03
> > > To: Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco)
> > <oobitots@cisco.com>
> > > Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> > core@lists.openembedded.org <openembedded-core@lists.openembedded.org>;
> > Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> > > Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to
> > separate subpackage
> > >
> > > On Mon, 10 Feb 2025 at 13:01, Oleksiy Obitotskyy via
> > > lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> > > wrote:
> > > > We have next situation:
> > > > - a lot of software components that depend on packages and deploy all
> > packages they depend on locally inside component.
> > > > - some components directly depend on systemctl only (e.g. this binary
> > used in scripts), so for every component we have to deploy whole systemd
> > locally.
> > > > - finally, all/some of those components will be merged in some way
> and
> > will use systemd/libsystemd, but until then it will be nice to get rid of
> > such duplication.
> > >
> > > I'm sorry, but this does not quite make sense. You need to more
> > > specifically describe what 'deploying whole systemd' means, and why is
> > > that problematic.
> > >
> > > Alex
> > >
> > >
> > >
>
Component deliver something and it's content consist of:

  *
binaries/libraries/scripts, etc. that delivered by this component (service) itself
  *
binaries/libraries, etc. on which component depends on

Technically content is per component subdirectory. Every component has its own isolated content.

If we have N components each require only systemd-systemctl it mean every component will store (on disk) whole systemd/libsystemd package files instead of systemctl binary.

Regards,
Oleksiy
Alexander Kanavin Feb. 12, 2025, 10:16 a.m. UTC | #10
But systemctl does depend on libsystemd-shared, so a copy of that will
still be in every component. And libsystemd-shared itself pulls in a
lot of stuff, and those libraries no doubt depend on further
libraries:

    linux-vdso.so.1 (0x00007ffe9e9d0000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007fbc40540000)
    libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007fbc404e9000)
    libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007fbc404dd000)
    libcrypt.so.2 => not found
    libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007fbc4047a000)
    libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fbc40466000)
    libseccomp.so.2 => /lib/x86_64-linux-gnu/libseccomp.so.2
(0x00007fbc40446000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbc3ff21000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbc3fd40000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbc40557000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1
(0x00007fbc40418000)
    libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fbc403e5000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0
(0x00007fbc3fca6000)
    libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007fbc403dd000)

Put it another way, what is the difference in a 'component' before and
after this change, in size and amount of files?

I'm just struggling to justify this; it looks like a very niche need,
driven by a custom, proprietary mechanism to install additional
software into products. The change won't be useful to anyone else,
while complicating systemd packaging further.

Alex

On Wed, 12 Feb 2025 at 08:56, Oleksiy Obitotskyy -X (oobitots -
GLOBALLOGIC INC at Cisco) <oobitots@cisco.com> wrote:
>
> Component deliver something and it's content consist of:
>
> binaries/libraries/scripts, etc. that delivered by this component (service) itself
> binaries/libraries, etc. on which component depends on
>
> Technically content is per component subdirectory. Every component has its own isolated content.
>
> If we have N components each require only systemd-systemctl it mean every component will store (on disk) whole systemd/libsystemd package files instead of systemctl binary.
>
> Regards,
> Oleksiy
>
> ________________________________
> From: Alexander Kanavin <alex.kanavin@gmail.com>
> Sent: Tuesday, February 11, 2025 19:31
> To: Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco) <oobitots@cisco.com>
> Cc: Peter Kjellerstedt <peter.kjellerstedt@axis.com>; Ross Burton <Ross.Burton@arm.com>; openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org>; Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to separate subpackage
>
> This still doesn’t make sense. Any target file is contained in one and only one package. Where is the duplication?
>
> Alex
>
> On Tue 11. Feb 2025 at 19.04, Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco) <oobitots@cisco.com> wrote:
>
> I'm sorry, I confused you mentioned term sysroot. It's not about yocto - we just use the same term because it's very similar
> to how it works into yocto.
> We got packages as a result of  yocto build and use these artefacts (packages) on next stage to populate
> software components content. For some reason we can't use the same approach with hardlink to deduplicate
> components content.
>
> Regards,
> Oleksiy
>
> ________________________________
> From: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
> Sent: Monday, February 10, 2025 22:05
> To: alex.kanavin@gmail.com <alex.kanavin@gmail.com>; Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco) <oobitots@cisco.com>
> Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-core@lists.openembedded.org <openembedded-core@lists.openembedded.org>; Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> Subject: RE: [OE-core] [PATCH] systemd: move systemctl utility to separate subpackage
>
> Additionally, changing the packaging does not affect what is added to
> the sysroot.
>
> //Peter
>
> > -----Original Message-----
> > From: openembedded-core@lists.openembedded.org <openembedded-
> > core@lists.openembedded.org> On Behalf Of Alexander Kanavin via
> > lists.openembedded.org
> > Sent: den 10 februari 2025 18:20
> > To: oobitots@cisco.com
> > Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> > core@lists.openembedded.org; Ruslan Bilovol (rbilovol)
> > <rbilovol@cisco.com>
> > Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to separate
> > subpackage
> >
> > They're not actually copied. They're hard-linked from
> > sysroots-components/. This is a cheap operation and it doesn't waste
> > disk space.
> >
> > Alex
> >
> > On Mon, 10 Feb 2025 at 18:05, Oleksiy Obitotskyy via
> > lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> > wrote:
> > >
> > > Hi Alexander,
> > >
> > > By 'deploying whole systemd' I mean next:
> > >
> > > Every component copy and installs packages with libraries, utilities and
> > config files in component local sysroot, i.e. directory used to create
> > final component image:
> > >
> > > libsystemd0_255.4
> > > libsystemd-shared_255.4
> > > systemd_255.4
> > >
> > > So, on disk we have duplication of files for every component that depend
> > on the systemctl.
> > > In case of separate subpackage we have one root component depend on the
> > systemd and all other components will contain only systemd-systemctl
> > package content.
> > >
> > > Of course, I understand it's quite a specific scenario.
> > >
> > > Regards,
> > > Oleksiy
> > >
> > > ________________________________
> > > From: Alexander Kanavin <alex.kanavin@gmail.com>
> > > Sent: Monday, February 10, 2025 13:03
> > > To: Oleksiy Obitotskyy -X (oobitots - GLOBALLOGIC INC at Cisco)
> > <oobitots@cisco.com>
> > > Cc: Ross Burton <Ross.Burton@arm.com>; openembedded-
> > core@lists.openembedded.org <openembedded-core@lists.openembedded.org>;
> > Ruslan Bilovol (rbilovol) <rbilovol@cisco.com>
> > > Subject: Re: [OE-core] [PATCH] systemd: move systemctl utility to
> > separate subpackage
> > >
> > > On Mon, 10 Feb 2025 at 13:01, Oleksiy Obitotskyy via
> > > lists.openembedded.org <oobitots=cisco.com@lists.openembedded.org>
> > > wrote:
> > > > We have next situation:
> > > > - a lot of software components that depend on packages and deploy all
> > packages they depend on locally inside component.
> > > > - some components directly depend on systemctl only (e.g. this binary
> > used in scripts), so for every component we have to deploy whole systemd
> > locally.
> > > > - finally, all/some of those components will be merged in some way and
> > will use systemd/libsystemd, but until then it will be nice to get rid of
> > such duplication.
> > >
> > > I'm sorry, but this does not quite make sense. You need to more
> > > specifically describe what 'deploying whole systemd' means, and why is
> > > that problematic.
> > >
> > > Alex
> > >
> > >
> > >
In practice getting rid of systemd and leaving only systemctl binary gives me approx. 20Mb disk space

3.0M    libsystemd-shared
960K    libsystemd
9.4M    systemd
424K    libnss-systemd

~5 Mb could be extra dependency libraries removed after systemd removal.

Regarding runtime dependencies - components will be merged on target and all dependencies will be resolved. All necessary libraries will be taken from one "base" component that will deliver whatever we need, like glibc, systemd, etc. We have only one "base" component (or more - it depends how many different libraries/versions we need to support).

Regards,
Oleksiy
Alexander Kanavin Feb. 12, 2025, 3:19 p.m. UTC | #12
On Wed, 12 Feb 2025 at 15:22, Oleksiy Obitotskyy -X (oobitots -
GLOBALLOGIC INC at Cisco) <oobitots@cisco.com> wrote:
>
 In practice getting rid of systemd and leaving only systemctl binary
gives me approx. 20Mb disk space
>
> 3.0M    libsystemd-shared
> 960K    libsystemd
> 9.4M    systemd
> 424K    libnss-systemd
>
> ~5 Mb could be extra dependency libraries removed after systemd removal.

libsystemd-shared shouldn't be there, as it is required by systemctl.
So the savings are less.

Is it trying to save space on target device, or trying to save space
on the build host? You really do need to describe your process in more
detail.

There's also a standard mechanism for adding software to targets (or
making the initial target rootfilesystems): packages and package
manager. You need to explain why that is not being used.

> Regarding runtime dependencies - components will be merged on target and all dependencies will be resolved. All necessary libraries will be taken from one "base" component that will deliver whatever we need, like glibc, systemd, etc. We have only one "base" component (or more - it depends how many different libraries/versions we need to support).
>

I guess what I'm trying to object is splitting things into smaller
packages when the full set must be installed anyway. Accepting this
would open the door for further such tweaks, which just make things
more complex, without actual benefit for standard, commonly accepted
ways to handle target installation.

Alex
> Is it trying to save space on target device, or trying to save space
> on the build host? You really do need to describe your process in more
> detail.

It's attempt to save space on build host.



> I guess what I'm trying to object is splitting things into smaller

> packages when the full set must be installed anyway. Accepting this
> would open the door for further such tweaks, which just make things
> more complex, without actual benefit for standard, commonly accepted
> ways to handle target installation.

I agree with this.

Regards,
Oleksiy
Alexander Kanavin Feb. 13, 2025, 9:57 a.m. UTC | #14
On Thu, 13 Feb 2025 at 08:00, Oleksiy Obitotskyy -X (oobitots -
GLOBALLOGIC INC at Cisco) <oobitots@cisco.com> wrote:
>
> > Is it trying to save space on target device, or trying to save space
> > on the build host? You really do need to describe your process in more
> > detail.
>
> It's attempt to save space on build host.

I wonder if you can special-case this in your scripts, e.g. remove the
bulk of systemd, except systemctl and libsystemd-shared, after the
'sysroot' has been made?

Alex
diff mbox series

Patch

diff --git a/meta/recipes-core/systemd/systemd_257.1.bb b/meta/recipes-core/systemd/systemd_257.1.bb
index cdf72a5015..2d4d3e0a7f 100644
--- a/meta/recipes-core/systemd/systemd_257.1.bb
+++ b/meta/recipes-core/systemd/systemd_257.1.bb
@@ -429,6 +429,7 @@  PACKAGE_BEFORE_PN = "\
     ${PN}-mime \
     ${PN}-networkd \
     ${PN}-rpm-macros \
+    ${PN}-systemctl \
     ${PN}-udev-rules \
     ${PN}-vconsole-setup \
     ${PN}-zsh-completion \
@@ -678,13 +679,8 @@  CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \
 "
 
 FILES:${PN} = " ${base_bindir}/* \
-                ${base_sbindir}/shutdown \
-                ${base_sbindir}/halt \
-                ${base_sbindir}/poweroff \
-                ${base_sbindir}/runlevel \
                 ${base_sbindir}/telinit \
                 ${base_sbindir}/resolvconf \
-                ${base_sbindir}/reboot \
                 ${base_sbindir}/init \
                 ${datadir}/dbus-1/services \
                 ${datadir}/dbus-1/system-services \
@@ -749,9 +745,19 @@  FILES:${PN} = " ${base_bindir}/* \
 
 FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
 
+FILES:${PN}-systemctl = " \
+                ${bindir}/systemctl \
+                ${base_sbindir}/shutdown \
+                ${base_sbindir}/halt \
+                ${base_sbindir}/poweroff \
+                ${base_sbindir}/runlevel \
+                ${base_sbindir}/reboot \
+"
+
 RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck util-linux-swaponoff"
 RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}"
 RDEPENDS:${PN} += "volatile-binds"
+RDEPENDS:${PN} += "${PN}-systemctl"
 
 RRECOMMENDS:${PN} += "${PN}-extra-utils \
                       udev-hwdb \
@@ -867,14 +873,15 @@  python do_warn_musl() {
 }
 addtask warn_musl before do_configure
 
-ALTERNATIVE:${PN} = "halt reboot shutdown poweroff \
-                     ${@bb.utils.contains('PACKAGECONFIG', 'sysvinit', 'runlevel', '', d)} \
+ALTERNATIVE:${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'sysvinit', 'runlevel', '', d)} \
                      ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}"
 
 ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd"
 ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf"
 ALTERNATIVE_PRIORITY[resolv-conf] ?= "50"
 
+ALTERNATIVE:${PN}-systemctl = "halt reboot shutdown poweroff runlevel"
+
 ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl"
 ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt"
 ALTERNATIVE_PRIORITY[halt] ?= "300"