Hi Luca,
Sorry, but I am still not following. I do not understand, why would
lib64 not be needed? It's a 64bit architecture, no? If I download a
https://fedoraproject.org/server/download
total 16
dr-xr-xr-x. 2 root root 6 Jan 24 2024 afs
lrwxrwxrwx. 1 root root 7 Jan 24 2024 bin -> usr/bin
drwxr-xr-x. 2 root root 6 Apr 15 00:02 boot
drwxr-xr-x. 2 root root 6 Apr 15 00:02 dev
drwxr-xr-x. 121 root root 8192 Apr 15 00:26 etc
drwxr-xr-x. 2 root root 6 Jan 24 2024 home
lrwxrwxrwx. 1 root root 7 Jan 24 2024 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jan 24 2024 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Jan 24 2024 media
drwxr-xr-x. 2 root root 6 Jan 24 2024 mnt
drwxr-xr-x. 2 root root 6 Jan 24 2024 opt
drwxr-xr-x. 2 root root 6 Apr 15 00:02 proc
dr-xr-x---. 3 root root 126 Apr 15 00:27 root
drwxr-xr-x. 2 root root 6 Apr 15 00:02 run
lrwxrwxrwx. 1 root root 8 Jan 24 2024 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Jan 24 2024 srv
drwxr-xr-x. 2 root root 6 Apr 15 00:02 sys
drwxrwxrwt. 2 root root 6 Apr 15 00:02 tmp
drwxr-xr-x. 12 root root 144 Apr 15 00:03 usr
drwxr-xr-x. 20 root root 4096 Apr 15 00:12 var
Sorry, but I am still not following. I do not understand, why would
lib64 be needed. You detail how it is being created, but there is no
implication from creation to need. We discover unused files all the
time. If I create a Debian arm64 sid chroot using mmdebstrap, it is not
there. Quite obviously, there is no universal need for /lib64 on 64bit
architectures. There still may be a conditional need whose nature we do
not understand yet.
There is one obvious way in which multilib aliasing links are required.
That's when the path of the dynamic loader requires them. We have a wiki
page documenting this: https://wiki.debian.org/ArchitectureSpecificsMemo
* amd64 -> lib64
* loong64 -> lib64
* mips64el -> lib64
* ppc64 -> lib64
* ppc64el -> lib64
* s390x -> lib64
* sparc64 -> lib64
* x32 -> libx32
These are the cases where systemd really should check for aliasing links
of multilib directories and create them if missing. In particular, it
should only ever point them at the corresponding location. Even your
Fedora example has /lib64 point at usr/lib64 and not usr/lib. It is the
/lib64 -> usr/lib link that this bug takes issue with and that systemd
must not create.
Generally speaking, the use of multilib paths for dynamic loaders is
deprecated and new architectures should use plain /lib and use a unique
name therein. loong64 is recent, but they utterly failed at
communicating and hence followed the bad example. In particular, arm64
is not on the list.
As a consequence, I think systemd needs to change in two ways:
* It should never create non-matching aliasing links (such as /lib64 ->
usr/lib).
* When the link target (e.g /usr/lib64) does not exist, it should not
create the aliasing symlink.
If it follows these two rules, it should be good even creating /lib64 on
arm64 even on Debian with no matching on the package manager. It'll also
continue creating the aliasing link on Fedora whose existence (though
not need) you demonstrated.
Helmut