On Fri, Jul 26, 2024 at 9:55 AM Böszörményi Zoltán <[email protected]> wrote:
>
> 2024. 07. 26. 17:21 keltezéssel, Joshua Watt írta:
> > On Fri, Jul 26, 2024 at 5:24 AM Zoltán Böszörményi <[email protected]> 
> > wrote:
> >> With commits 90bc1810 ("bitbake.conf: Add runtimedir") and
> >> 561e853e ("rpcbind: Specify state directory under /run") rpcbind
> >> still can fail during startup.
> >>
> >> It has two problems:
> >> * The lockfile is still hardcoded as "/var/run/rpcbind.lock".
> >>    It needs to use the same internal define for RPCBIND_STATEDIR
> >>    as the paths for rpcbind.xdr and portmap.xdr.
> >> * Using --with-statedir=/run/rpcbind doesn't guarantee that this
> >>    directory exists when rpcbind.service starts. Add this guarantee
> >>    by running rpcbind.service with After=systemd-tmpfiles-setup.service
> >>    and add the tmpfiles.d entry for /run/rpcbind.
> > The original patches have been working for me on nanbield (and
> > kirkstone), so I'm a little confused as to why this is not working for
> > you; I'd like to avoid patching the source code if at all possible as
> > carrying patches like this is a burden
>
> The error I got is:
>
> rpcbind[455]: rpcbind: /var/run/rpcbind.lock: Read-only file system
>
> So, while /var/run is a symlink to /run, the latter is not writable yet.
> Indeed, rpcbind.service was starting very early. These changes
> delay it enough to avoid the problem.
>
> The inconsistency between using /run via --with-statedir=/run
> directly for some the xdr files but not for the lockfile is not nice.
> That must have been an oversight in the source code.

Yes it is, however I suspect this patch isn't _strictly_ necessary to
fix the problem as long as the service file change is done (using a
drop file). That said, I'd rather not carry a patch unnecessarily and
we should attempt to fix it upstream instead of carry the patch.

The systemd service change should also be upstreamed, but thankfully
we can fix it with a drop file instead of a patch so I'm fine with
doing that.

>
> These changes fix the issue for me in nanbield. I can reproduce
> the above problem in scarthgap without these changes.
>
> FWIW, different machines can give very different testing results,
> due to the differences in their number of CPU cores and speed.
> Recently, I had to add a modified rngd.service from dracut
> to rng-tools as an in-house change, because one particular
> machine (slow by today's standards, based on AMD Kabini)
> ended up with this service failing, due to the CPU not supporting
> RDRAND and the JITTER random source driver starting particularly
> slowly on it, so rngd couldn't pick it up when started only from
> initramfs.
>
> >> Signed-off-by: Zoltán Böszörményi <[email protected]>
> >> ---
> >>   ...ke-the-lockfile-follow-with-statedir.patch | 31 ++++++++++++++++++
> >>   ...ice-after-etc-tmpfiles.d-is-processe.patch | 32 +++++++++++++++++++
> >>   .../rpcbind/rpcbind/rpcbind.tmpfiles          |  1 +
> >>   .../recipes-extended/rpcbind/rpcbind_1.2.6.bb |  6 ++++
> >>   4 files changed, 70 insertions(+)
> >>   create mode 100644 
> >> meta/recipes-extended/rpcbind/rpcbind/0001-Make-the-lockfile-follow-with-statedir.patch
> >>   create mode 100644 
> >> meta/recipes-extended/rpcbind/rpcbind/0002-Run-rpcbind.service-after-etc-tmpfiles.d-is-processe.patch
> >>   create mode 100644 meta/recipes-extended/rpcbind/rpcbind/rpcbind.tmpfiles
> >>
> >> diff --git 
> >> a/meta/recipes-extended/rpcbind/rpcbind/0001-Make-the-lockfile-follow-with-statedir.patch
> >>  
> >> b/meta/recipes-extended/rpcbind/rpcbind/0001-Make-the-lockfile-follow-with-statedir.patch
> >> new file mode 100644
> >> index 0000000000..d487312d22
> >> --- /dev/null
> >> +++ 
> >> b/meta/recipes-extended/rpcbind/rpcbind/0001-Make-the-lockfile-follow-with-statedir.patch
> >> @@ -0,0 +1,31 @@
> >> +From f10db88174e73c78c028561715f16ed38148ebde Mon Sep 17 00:00:00 2001
> >> +From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
> >> + <[email protected]>
> >> +Date: Fri, 26 Jul 2024 12:36:06 +0200
> >> +Subject: [PATCH 1/2] Make the lockfile follow --with-statedir=
> >> +MIME-Version: 1.0
> >> +Content-Type: text/plain; charset=UTF-8
> >> +Content-Transfer-Encoding: 8bit
> >> +
> >> +Upstream-Status: Inactive-Upstream [lastrelease: 2021-05-10]
> >> +Signed-off-by: Zoltán Böszörményi <[email protected]>
> >> +---
> >> + src/rpcbind.c | 2 +-
> >> + 1 file changed, 1 insertion(+), 1 deletion(-)
> >> +
> >> +diff --git a/src/rpcbind.c b/src/rpcbind.c
> >> +index 36a95b9..948a284 100644
> >> +--- a/src/rpcbind.c
> >> ++++ b/src/rpcbind.c
> >> +@@ -105,7 +105,7 @@ char *nss_modules = "files";
> >> + /* who to suid to if -s is given */
> >> + #define RUN_AS  "daemon"
> >> +
> >> +-#define RPCBINDDLOCK "/var/run/rpcbind.lock"
> >> ++#define RPCBINDDLOCK RPCBIND_STATEDIR "/rpcbind.lock"
> > /var/run should be a symlink to /run, so I really don't think this
> > should be necessary (at least with the default value for $runtimedir)
> >
> >> +
> >> + int runasdaemon = 0;
> >> + int insecure = 0;
> >> +--
> >> +2.45.2
> >> +
> >> diff --git 
> >> a/meta/recipes-extended/rpcbind/rpcbind/0002-Run-rpcbind.service-after-etc-tmpfiles.d-is-processe.patch
> >>  
> >> b/meta/recipes-extended/rpcbind/rpcbind/0002-Run-rpcbind.service-after-etc-tmpfiles.d-is-processe.patch
> >> new file mode 100644
> >> index 0000000000..f454fdbb3b
> >> --- /dev/null
> >> +++ 
> >> b/meta/recipes-extended/rpcbind/rpcbind/0002-Run-rpcbind.service-after-etc-tmpfiles.d-is-processe.patch
> >> @@ -0,0 +1,32 @@
> >> +From 408b18c77c254baaa9111b3e7031ebf12149db38 Mon Sep 17 00:00:00 2001
> >> +From: =?UTF-8?q?Zolt=C3=A1n=20B=C3=B6sz=C3=B6rm=C3=A9nyi?=
> >> + <[email protected]>
> >> +Date: Fri, 26 Jul 2024 12:54:38 +0200
> >> +Subject: [PATCH 2/2] Run rpcbind.service after /etc/tmpfiles.d is 
> >> processed
> >> +MIME-Version: 1.0
> >> +Content-Type: text/plain; charset=UTF-8
> >> +Content-Transfer-Encoding: 8bit
> >> +
> >> +Upstream-Status: Inactive-Upstream [lastrelease: 2021-05-10]
> >> +Signed-off-by: Zoltán Böszörményi <[email protected]>
> >> +---
> >> + systemd/rpcbind.service.in | 3 +++
> >> + 1 file changed, 3 insertions(+)
> >> +
> >> +diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
> >> +index f45ee1e..e9d94ce 100644
> >> +--- a/systemd/rpcbind.service.in
> >> ++++ b/systemd/rpcbind.service.in
> >> +@@ -9,6 +9,9 @@ RequiresMountsFor=@statedir@
> >> + Requires=rpcbind.socket
> >> + Wants=rpcbind.target
> >> +
> >> ++# Make sure the runtime directory exists
> >> ++After=systemd-tmpfiles-setup.service
> > I'd rather have the recipe provide a drop file for this instead of
> > patching the source
> >
> >> ++
> >> + [Service]
> >> + Type=notify
> >> + EnvironmentFile=-@_sysconfdir@/rpcbind.conf
> >> +--
> >> +2.45.2
> >> +
> >> diff --git a/meta/recipes-extended/rpcbind/rpcbind/rpcbind.tmpfiles 
> >> b/meta/recipes-extended/rpcbind/rpcbind/rpcbind.tmpfiles
> >> new file mode 100644
> >> index 0000000000..fecee72c09
> >> --- /dev/null
> >> +++ b/meta/recipes-extended/rpcbind/rpcbind/rpcbind.tmpfiles
> >> @@ -0,0 +1 @@
> >> +d /run/rpcbind 0755 root root -
> >> diff --git a/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb 
> >> b/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb
> >> index e751eb631c..477092b37d 100644
> >> --- a/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb
> >> +++ b/meta/recipes-extended/rpcbind/rpcbind_1.2.6.bb
> >> @@ -13,8 +13,11 @@ LIC_FILES_CHKSUM = 
> >> "file://COPYING;md5=b46486e4c4a416602693a711bb5bfa39 \
> >>   SRC_URI = "${SOURCEFORGE_MIRROR}/rpcbind/rpcbind-${PV}.tar.bz2 \
> >>              file://init.d \
> >>              file://rpcbind.conf \
> >> +           file://rpcbind.tmpfiles \
> >>              file://rpcbind_add_option_to_fix_port_number.patch \
> >>              file://0001-systemd-use-EnvironmentFile.patch \
> >> +           file://0001-Make-the-lockfile-follow-with-statedir.patch \
> >> +           
> >> file://0002-Run-rpcbind.service-after-etc-tmpfiles.d-is-processe.patch \
> >>             "
> >>   SRC_URI[sha256sum] = 
> >> "5613746489cae5ae23a443bb85c05a11741a5f12c8f55d2bb5e83b9defeee8de"
> >>
> >> @@ -49,6 +52,9 @@ do_install:append () {
> >>                  ${UNPACKDIR}/init.d > ${D}${sysconfdir}/init.d/rpcbind
> >>          chmod 0755 ${D}${sysconfdir}/init.d/rpcbind
> >>          install -m 0644 ${UNPACKDIR}/rpcbind.conf 
> >> ${D}${sysconfdir}/rpcbind.conf
> >> +
> >> +       install -d ${D}${sysconfdir}/tmpfiles.d
> >> +       install -m 0644 ${UNPACKDIR}/rpcbind.tmpfiles 
> >> ${D}${sysconfdir}/tmpfiles.d/rpcbind.conf
> >>   }
> >>
> >>   ALTERNATIVE:${PN} = "rpcinfo"
> >> --
> >> 2.45.2
> >>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#202560): 
https://lists.openembedded.org/g/openembedded-core/message/202560
Mute This Topic: https://lists.openembedded.org/mt/107559508/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to