Rewrite scriptlets to call /sbin/ldconfig in lua

The scriptlet in glibc adds a dependency on bash to glibc-common,
which is required by glibc, so effectively the whole world depends on
bash. By rewriting the script in lua we drop this dependency, and also
to avoid a (bogus?) warning from rpm about a dependency loop.

If the call fails, an error is printed but the transaction is not failed.
(The original script didn't have "|| :", so the return value from
/sbin/ldconfig would be the return value from the script, causing
the transaction to fail.)

Quoting https://bugzilla.redhat.com/show_bug.cgi?id=2018913#c34:

warning: SCC #1: 5 members (5 external dependencies)
warning:        glibc-2.35-2.fc37.x86_64
warning:                -> glibc-minimal-langpack-2.35-2.fc37.x86_64
warning:                -> glibc-common-2.35-2.fc37.x86_64
warning:        ncurses-libs-6.2-9.20210508.fc36.x86_64
warning:                -> glibc-2.35-2.fc37.x86_64
warning:        bash-5.1.16-2.fc36.x86_64
warning:                -> ncurses-libs-6.2-9.20210508.fc36.x86_64
warning:                -> glibc-2.35-2.fc37.x86_64
warning:        glibc-common-2.35-2.fc37.x86_64
warning:                -> glibc-2.35-2.fc37.x86_64
warning:                -> bash-5.1.16-2.fc36.x86_64
warning:        glibc-minimal-langpack-2.35-2.fc37.x86_64
warning:                -> glibc-common-2.35-2.fc37.x86_64
warning:                -> glibc-2.35-2.fc37.x86_64

If we look into SCC #1, bash obviously requires glibc because it links
to it. The loop is created by glibc → glibc-common → bash, because
glibc-common has %transfiletriggerin and %transfiletriggerpostun using
bash to call /sbin/ldconfig.

https://github.com/coreos/rpm-ostree/pull/3453 provides a workaround
so that rpm-ostree doesn't choke on this.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2022-02-22 16:43:17 +01:00
parent f6ed6cf018
commit 08e0ad8f78

View File

@ -489,12 +489,14 @@ libraries, as well as national language (locale) support.
# File triggers for when libraries are added or removed in standard
# paths.
%transfiletriggerin common -P 2000000 -- /lib /usr/lib /lib64 /usr/lib64
/sbin/ldconfig
%transfiletriggerin common -P 2000000 -p <lua> -- /lib /usr/lib /lib64 /usr/lib64
%glibc_post_funcs
call_ldconfig()
%end
%transfiletriggerpostun common -P 2000000 -- /lib /usr/lib /lib64 /usr/lib64
/sbin/ldconfig
%transfiletriggerpostun common -P 2000000 -p <lua> -- /lib /usr/lib /lib64 /usr/lib64
%glibc_post_funcs
call_ldconfig()
%end
# We need to run ldconfig manually because __brp_ldconfig assumes that