On 2026-07-16 07:40, Luca Boccassi wrote:
It is clearly not mandatory functionality, as the package works just
fine without it, minus some optional features that are seldomly
needed.
If 'who' always fails, is coreutils working "just fine"? I used "who"
before reading your email this morning (to look into a problem involving
authentication and backups), and if 'who' had failed due to a missing
library I would not have said coreutils is working "just fine".
That being said, to cater to a user population that thinks coreutils
works "just fine" even if 'who' always fails, how about if we instead
look into another idea that I think was briefly mentioned earlier:
namely, packagers run a shell command "optional-libsystemd who pinky
users", where optional-libsystemd is something like the attached script.
The optional-libsystemd script could be generalized to do something
similar for other dynamic libraries that have this issue. (As an aside,
it is annoying that objcopy makes this sort of thing such a pain but
perhaps objcopy could be improved to make it easier.)
Although the script puts a bit of the burden on the packagers, the
feature's burden must go *somewhere*, and since packagers want the
feature they are more likely to maintain it well.
#!/bin/sh
tmpfile=
json='[{"type":"shared","soname":"libsystemd.so.0","priority":"suggested"}]'
for target; do
case $target in
-*) echo "$0: usage: $0 executable-file ..."; exit
esac
case $tmpfile in
('')
size=${#json}
encoded_size=$(printf '\\%o\\%o\\%o\\%o' \
$((size & 255)) \
$((size >> 8 & 255)) \
$((size >> 16 & 255)) \
$((size >> 24 & 255)))
trap '
status=$?
case $tmpfile in
(?*) case $status in
(0) exec rm -f -- "$tmpfile"
esac
rm -f -- "$tmpfile"
esac
exit $status
' EXIT HUP INT PIPE TERM
tmpfile=$(mktemp) || exit
printf '\000\000\000\000%b\156\174\100\100%s' "$encoded_size" "$json" \
>"$tmpfile" || exit
esac
objcopy --add-section .note.dlopen="$tmpfile" \
--set-section-flags .note.dlopen=readonly,contents \
-- "$target" || exit
done