Skip to contentSkip to conversation

systemd: fix runtime dependency

PATCH In review Chen Qi 3 participants 8 messages Oct 16, 2014

lore
Share & tools
lore

Chen Qi

author
#0 lore raw

cover systemd: fix runtime dependency

The following changes since commit fcbd1b19383daf5e160a864df1418130da01be28:

build-appliance-image: Update to dizzy head revision (2014-10-11 08:11:11 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib ChenQi/systemd-rdepends
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=ChenQi/systemd-rdepends

Chen Qi (1):
systemd: fix runtime dependency

 meta/recipes-core/systemd/systemd-serialgetty.bb | 2 --
 meta/recipes-core/systemd/systemd_216.bb         | 5 ++---
 2 files changed, 2 insertions(+), 5 deletions(-)
Signature · 1 line
1.9.1
author
#1 lore raw

PATCH 1/1 systemd: fix runtime dependency

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems. The problem is that several runtime dependencies are coded as 'recommended' in our project.

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency.
Otherwise, getty services in systemd cannot start correctly.
2. Add systemd-serialgetty as a runtime dependency. Otherwise, serialgetty services cannot start correctly in systemd and we would have problem when using `runqemu qemux86 nographic'.
3. Remove 'systemd' from RDEPENDS of systemd-serialgetty. systemd-serialgetty justs ships systemd unit files, even if the init manager is 'sysvinit', these files do no harm.

---
 meta/recipes-core/systemd/systemd-serialgetty.bb | 2 --
 meta/recipes-core/systemd/systemd_216.bb         | 5 ++---
 2 files changed, 2 insertions(+), 5 deletions(-)
meta/recipes-core/systemd/systemd-serialgetty.bb +0 -2
index 1c34d5c..f3acaad 100644
@@ -36,8 +36,6 @@ do_install() {
 	fi
 }
 
-RDEPENDS_${PN} = "systemd"
-
 # This is a machine specific file
 FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
 PACKAGE_ARCH = "${MACHINE_ARCH}"
meta/recipes-core/systemd/systemd_216.bb +2 -3
index ebf9395..62fe5c7 100644
@@ -267,11 +267,10 @@ FILES_${PN} = " ${base_bindir}/* \
 FILES_${PN}-dbg += "${rootlibdir}/.debug ${systemd_unitdir}/.debug ${systemd_unitdir}/*/.debug ${base_libdir}/security/.debug/"
 FILES_${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
 
-RDEPENDS_${PN} += "kmod dbus util-linux-mount udev (= ${EXTENDPKGV})"
+RDEPENDS_${PN} += "kmod dbus systemd-serialgetty util-linux-mount util-linux-agetty udev (= ${EXTENDPKGV})"
 RDEPENDS_${PN} += "volatile-binds"
 
-RRECOMMENDS_${PN} += "systemd-serialgetty systemd-compat-units udev-hwdb\
-                      util-linux-agetty \
+RRECOMMENDS_${PN} += "systemd-compat-units udev-hwdb\
                       util-linux-fsck e2fsprogs-e2fsck \
                       kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 os-release \
 "
Signature · 1 line
1.9.1
#2 lore raw
Quoted 4 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems. The problem is that several runtime dependencies are coded as 'recommended' in our project.

Quoted 9 lines

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency.
Otherwise, getty services in systemd cannot start correctly.
2. Add systemd-serialgetty as a runtime dependency. Otherwise, serialgetty services cannot start correctly in systemd and we would have problem when using `runqemu qemux86 nographic'.
3. Remove 'systemd' from RDEPENDS of systemd-serialgetty. systemd-serialgetty justs ships systemd unit files, even if the init manager is 'sysvinit', these files do no harm.

This looks really weird. It doesn't make any sense that systemd should depend on systemd-serialgetty; the original dependency was right.

serialgetty works fine under systemd with all my configurations as-is.

I think you need to look more closely at your project-specific configuration to understand why things aren't getting set up correctly for you.

Peter

Quoted 38 lines
---
  meta/recipes-core/systemd/systemd-serialgetty.bb | 2 --
  meta/recipes-core/systemd/systemd_216.bb         | 5 ++---
  2 files changed, 2 insertions(+), 5 deletions(-)
meta/recipes-core/systemd/systemd-serialgetty.bb +0 -2
index 1c34d5c..f3acaad 100644
@@ -36,8 +36,6 @@ do_install() {
  	fi
  }
 
-RDEPENDS_${PN} = "systemd"
-
  # This is a machine specific file
  FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
  PACKAGE_ARCH = "${MACHINE_ARCH}"
meta/recipes-core/systemd/systemd_216.bb +2 -3
index ebf9395..62fe5c7 100644
@@ -267,11 +267,10 @@ FILES_${PN} = " ${base_bindir}/* \
  FILES_${PN}-dbg += "${rootlibdir}/.debug ${systemd_unitdir}/.debug ${systemd_unitdir}/*/.debug ${base_libdir}/security/.debug/"
  FILES_${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
 
-RDEPENDS_${PN} += "kmod dbus util-linux-mount udev (= ${EXTENDPKGV})"
+RDEPENDS_${PN} += "kmod dbus systemd-serialgetty util-linux-mount util-linux-agetty udev (= ${EXTENDPKGV})"
  RDEPENDS_${PN} += "volatile-binds"
 
-RRECOMMENDS_${PN} += "systemd-serialgetty systemd-compat-units udev-hwdb\
-                      util-linux-agetty \
+RRECOMMENDS_${PN} += "systemd-compat-units udev-hwdb\
                        util-linux-fsck e2fsprogs-e2fsck \
                        kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 os-release \
  "
author
#3 lore raw
Quoted 16 lines · Peter A. Bigot
Quoted 4 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems. The problem is that several runtime dependencies are coded as 'recommended' in our project.

Quoted 10 lines

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency.
Otherwise, getty services in systemd cannot start correctly.
2. Add systemd-serialgetty as a runtime dependency. Otherwise, serialgetty services cannot start correctly in systemd
and
we would have problem when using `runqemu qemux86 nographic'.
3. Remove 'systemd' from RDEPENDS of systemd-serialgetty. systemd-serialgetty justs ships systemd unit files, even if the init manager is 'sysvinit', these files do no harm.

Quoted 2 lines

This looks really weird. It doesn't make any sense that systemd should depend on systemd-serialgetty; the original dependency was right.

If systemd-serialgetty should rdepends on systemd, then in the same logic, we should also change sysvinit-inittab to rdepend on sysvinit. I don't think this is right.

Quoted 2 lines

serialgetty works fine under systemd with all my configurations as-is.

Yes. But it needs to be first installed to work correctly.

Quoted 2 lines

I think you need to look more closely at your project-specific configuration to understand why things aren't getting set up correctly for you.

You can hand-edit local.conf with IMAGE_INSTALL_remove/_append to workaround a lot of runtime dependency issue. The problem is that setting 'NO_RECOMMENDATIONS' to "1" is valid, however, such valid configuration would raise a non-workable minimal image.

Try the following steps with the current project.
1. set NO_RECOMMENDATIONS to "1" in local.conf
2. Change in local.conf to use systemd as the init manager
3. bitbake core-image-minimal
4. runqemu qemux86 nographic

My point is that a system should let users login in on serial console. Our sysvinit based system does this, and our systemd based system should also do this.

Quoted 44 lines

Peter

Quoted 40 lines
---
  meta/recipes-core/systemd/systemd-serialgetty.bb | 2 --
  meta/recipes-core/systemd/systemd_216.bb         | 5 ++---
  2 files changed, 2 insertions(+), 5 deletions(-)
meta/recipes-core/systemd/systemd-serialgetty.bb +0 -1
index 1c34d5c..f3acaad 100644
@@ -36,8 +36,6 @@ do_install() {
      fi
  }
  -RDEPENDS_${PN} = "systemd"
-
  # This is a machine specific file
  FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
  PACKAGE_ARCH = "${MACHINE_ARCH}"
meta/recipes-core/systemd/systemd_216.bb +0 -0
index ebf9395..62fe5c7 100644
@@ -267,11 +267,10 @@ FILES_${PN} = " ${base_bindir}/* \
  FILES_${PN}-dbg += "${rootlibdir}/.debug ${systemd_unitdir}/.debug 

${systemd_unitdir}/*/.debug ${base_libdir}/security/.debug/"
FILES_${PN}-dev += "${base_libdir}/security/*.la
${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
-RDEPENDS_${PN} += "kmod dbus util-linux-mount udev (= ${EXTENDPKGV})"
+RDEPENDS_${PN} += "kmod dbus systemd-serialgetty util-linux-mount util-linux-agetty udev (= ${EXTENDPKGV})"
RDEPENDS_${PN} += "volatile-binds"
-RRECOMMENDS_${PN} += "systemd-serialgetty systemd-compat-units
udev-hwdb\

meta/recipes-core/systemd/systemd_216.bb +1 -1
-                      util-linux-agetty \
+RRECOMMENDS_${PN} += "systemd-compat-units udev-hwdb\
                        util-linux-fsck e2fsprogs-e2fsck \
                        kernel-module-autofs4 kernel-module-unix 

kernel-module-ipv6 os-release \
"

#4 lore raw
Quoted 18 lines · ChenQi
Quoted 17 lines · Peter A. Bigot
Quoted 15 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems. The problem is that several runtime dependencies are coded as 'recommended' in our project.

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency. Otherwise, getty services in systemd cannot start correctly.
2. Add systemd-serialgetty as a runtime dependency. Otherwise, serialgetty services cannot start correctly in
systemd and
we would have problem when using `runqemu qemux86 nographic'.
3. Remove 'systemd' from RDEPENDS of systemd-serialgetty. systemd-serialgetty justs ships systemd unit files, even if the
init
manager is 'sysvinit', these files do no harm.

Quoted 4 lines
Quoted 2 lines

This looks really weird. It doesn't make any sense that systemd should depend on systemd-serialgetty; the original dependency was right.

If systemd-serialgetty should rdepends on systemd, then in the same logic, we should also change sysvinit-inittab to rdepend on sysvinit. I don't think this is right.

OK, that makes sense: systemd-serialgetty doesn't depend on systemd, it's just not particularly useful without it. Without digging into details, I could see a case for removing the RDEPENDS on systemd from systemd-serialgetty. Maybe RRECOMMENDS is better.

However, so much more so does systemd not depend on systemd-serialgetty, so adding the dependency in the reverse direction is simply wrong. A system without a serial console is unusual but not invalid.

Quoted 5 lines
Quoted 3 lines

serialgetty works fine under systemd with all my configurations as-is.

Yes. But it needs to be first installed to work correctly.

Agreed.

Quoted 4 lines
Quoted 2 lines

I think you need to look more closely at your project-specific configuration to understand why things aren't getting set up correctly for you.

You can hand-edit local.conf with IMAGE_INSTALL_remove/_append to workaround a lot of runtime dependency issue. The problem is that setting 'NO_RECOMMENDATIONS' to "1" is valid, however, such valid configuration would raise a non-workable minimal image.

The documentation for NO_RECOMMENDATIONS has: http://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#var-NO_RECOMMENDATIONS

Note: Some recommended packages might be required for certain system functionality, such as kernel modules. It is up to you to add packages with the |IMAGE_INSTALL| <http://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#var-IMAGE_INSTALL> variable.

AFAICT, if this doesn't work for you because you use NO_RECOMMENDATIONS, it's a problem with your configuration, not with OE.

Peter

Quoted 55 lines

Try the following steps with the current project.
1. set NO_RECOMMENDATIONS to "1" in local.conf
2. Change in local.conf to use systemd as the init manager
3. bitbake core-image-minimal
4. runqemu qemux86 nographic

My point is that a system should let users login in on serial console. Our sysvinit based system does this, and our systemd based system should also do this.

Quoted 45 lines

Peter

Quoted 41 lines
---
  meta/recipes-core/systemd/systemd-serialgetty.bb | 2 --
  meta/recipes-core/systemd/systemd_216.bb         | 5 ++---
  2 files changed, 2 insertions(+), 5 deletions(-)
meta/recipes-core/systemd/systemd-serialgetty.bb +0 -1
index 1c34d5c..f3acaad 100644
@@ -36,8 +36,6 @@ do_install() {
      fi
  }
  -RDEPENDS_${PN} = "systemd"
-
  # This is a machine specific file
  FILES_${PN} = "${systemd_unitdir}/system/*.service ${sysconfdir}"
  PACKAGE_ARCH = "${MACHINE_ARCH}"
meta/recipes-core/systemd/systemd_216.bb +0 -0
index ebf9395..62fe5c7 100644
@@ -267,11 +267,10 @@ FILES_${PN} = " ${base_bindir}/* \
  FILES_${PN}-dbg += "${rootlibdir}/.debug ${systemd_unitdir}/.debug 

${systemd_unitdir}/*/.debug ${base_libdir}/security/.debug/"
FILES_${PN}-dev += "${base_libdir}/security/*.la
${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd"
-RDEPENDS_${PN} += "kmod dbus util-linux-mount udev (=
${EXTENDPKGV})"
+RDEPENDS_${PN} += "kmod dbus systemd-serialgetty util-linux-mount util-linux-agetty udev (= ${EXTENDPKGV})"
RDEPENDS_${PN} += "volatile-binds"
-RRECOMMENDS_${PN} += "systemd-serialgetty systemd-compat-units
udev-hwdb\

meta/recipes-core/systemd/systemd_216.bb +1 -1
-                      util-linux-agetty \
+RRECOMMENDS_${PN} += "systemd-compat-units udev-hwdb\
                        util-linux-fsck e2fsprogs-e2fsck \
                        kernel-module-autofs4 kernel-module-unix 

kernel-module-ipv6 os-release \
"

#5 lore raw
In reply to Chen Qi
Quoted 2 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems.

IMO, this is just a configuration issue and can be fixed much better in a higher level packagegroup recipe. RRECOMMENDS for serial getty are fine; although a serial console is very common on embedded systems, it is not strictly necessary.

Quoted 3 lines

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency. Otherwise, getty services in systemd cannot start correctly.

afais, it would make more sense to move this dependency into systemd-serialgetty (and not systemd as in your patch). Or are there other units in systemd which call agetty?

Enrico

#6 lore raw
Quoted 10 lines · Enrico Scholz
Quoted 2 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems.

IMO, this is just a configuration issue and can be fixed much better in a higher level packagegroup recipe. RRECOMMENDS for serial getty are fine; although a serial console is very common on embedded systems, it is not strictly necessary.

Quoted 6 lines
Quoted 3 lines

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency. Otherwise, getty services in systemd cannot start correctly.

afais, it would make more sense to move this dependency into systemd-serialgetty (and not systemd as in your patch). Or are there other units in systemd which call agetty?

There are other units that use getty. OE's systemd has a patch to use getty not agetty but for some reason console-getty is not one of the units patched (maybe the unit was created after the patch was made); that probably needs to be reviewed. There is at least one other oe-core provider of getty (viz. mingetty); at one point it was important to use one of them (I forget which) on gumstix Overo boards.

Peter

author
#7 lore raw
In reply to Enrico Scholz
Quoted 9 lines · Enrico Scholz
Quoted 2 lines · Chen Qi

Previously, if we set 'NO_RECOMMENDATIONS' to "1", we cannot reach login in systemd systems.

IMO, this is just a configuration issue and can be fixed much better in a higher level packagegroup recipe. RRECOMMENDS for serial getty are fine; although a serial console is very common on embedded systems, it is not strictly necessary.

These [email protected] is part of the systemd package. In our system, it's first removed from systemd package, then generated from a separate recipe.

That's just a configuration file which occupies almost no space in image. However, without it, you cannot use serial console in systemd system.

In sysvinit, the serial console configuration is in /etc/inittab.

I just can't see any advantage of not using [email protected].

Quoted 9 lines
Quoted 3 lines

This patch makes the following changes.
1. Add util-linux-agetty as a runtime dependency. Otherwise, getty services in systemd cannot start correctly.

afais, it would make more sense to move this dependency into systemd-serialgetty (and not systemd as in your patch). Or are there other units in systemd which call agetty?

Enrico

[email protected]

util-linux-agetty is really a necessity, otherwise you just don't console.

//Chen Qi