Independently reproduced across multiple Ubuntu 22.04 hosts in our fleet
after unattended-upgrades pulled `systemd 249.11-0ubuntu3.22` from
-security. All affected hosts show the same symptom at boot: `systemd-
tmpfiles-setup.service`, `systemd-tmpfiles-setup-dev.service`, `systemd-
tmpfiles-clean.service`, `systemd-journal-flush.service`, and `systemd-
sysusers.service` fail with `undefined symbol: strv_push, version
SD_SHARED`.
Re: comment #1 (cannot reproduce / old binaries against new libsystemd-
shared) — this is not a stale-state problem. The mismatch is inside the
shipped .deb itself, and it is reproducible without booting a system:
`apt download systemd=249.11-0ubuntu3.22` and inspect the .deb contents
directly.
On one representative host (22.04 amd64, freshly rebooted after the
upgrade):
```
$ dpkg-query -W -f='${Version}\n' systemd
249.11-0ubuntu3.22
$ /usr/bin/systemd-tmpfiles --version
/usr/bin/systemd-tmpfiles: symbol lookup error: /usr/bin/systemd-tmpfiles:
undefined symbol: strv_push, version SD_SHARED
$ objdump -T /usr/bin/systemd-tmpfiles | grep ' strv_push$'
0000000000000000 DF *UND* 0000000000000000 (SD_SHARED) strv_push
$ dpkg -L systemd | grep libsystemd-shared
/lib/systemd/libsystemd-shared-249.so
$ nm -D --defined-only /lib/systemd/libsystemd-shared-249.so | grep strv_push
00000000001509d0 T strv_push_pair@@SD_SHARED
0000000000150860 T strv_push_with_size@@SD_SHARED
```
So callers in `/usr/bin/systemd-tmpfiles` (and journalctl, systemd-
sysusers, etc., all shipped by the same .22 deb) still reference a bare
`strv_push@SD_SHARED`, while `libsystemd-shared-249.so` from the same
.22 deb only exports the split variants `strv_push_pair` /
`strv_push_with_size`. This matches the `basic-strv-add-optimizable-
version-of-strv_push-consume-e.patch` in the -0ubuntu3.22 changelog: the
patch splits/renames `strv_push` in the library but the callers were not
rebuilt against the split symbols. Other undefined `strv_*` symbols in
`systemd-tmpfiles` (`strv_find`, `strv_extend_strv`, …) do resolve
correctly — only bare `strv_push` is missing.
`systemctl --failed` on the same host:
```
systemd-journal-flush.service loaded failed failed Flush Journal to
Persistent Storage
systemd-sysusers.service loaded failed failed Create System Users
systemd-tmpfiles-clean.service loaded failed failed Cleanup of Temporary
Directories
systemd-tmpfiles-setup-dev.service loaded failed failed Create Static Device
Nodes in /dev
systemd-tmpfiles-setup.service loaded failed failed Create Volatile Files
and Directories
```
Downstream impact for us: `/run/nagios/` is never created because
`systemd-tmpfiles-setup.service` never runs, so `nagios-nrpe-server`
exits status 2 (cannot write its pidfile) and monitoring goes to
`Connection refused` fleet-wide. PID 1 itself is fine — only the
standalone `systemd-tmpfiles` binary is broken — so we deploy a `nagios-
nrpe-server.service.d/runtime-dir.conf` drop-in adding
`RuntimeDirectory=nagios` to work around it without touching the systemd
package.
Would appreciate a `-0ubuntu3.23` that rebuilds the callers against the
split symbols. Happy to test a proposed build against our reproducer.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2163371
Title:
journalctl and other systemd binaries fail with "undefined symbol:
strv_push, version SD_SHARED" after upgrade to 249.11-0ubuntu3.22
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/2163371/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs