shared: nudge people into sending us patches to make /lib64/ symlink generation work on all archs that need it

This is an attempt to nudge people into sending us patches that fix
bug #14311 for us, given that the original submitter lost interest.
This commit is contained in:
Lennart Poettering 2021-11-10 12:35:27 +01:00
parent 1fb2d8fcb6
commit 04ba1bb038

View file

@ -20,10 +20,10 @@
#include "user-util.h"
typedef struct BaseFilesystem {
const char *dir;
const char *dir; /* directory or symlink to create */
mode_t mode;
const char *target;
const char *exists;
const char *target; /* if non-NULL create as symlink to this target */
const char *exists; /* conditionalize this entry on existance of this file */
bool ignore_failure;
} BaseFilesystem;
@ -39,11 +39,26 @@ static const BaseFilesystem table[] = {
{ "sys", 0755, NULL, NULL, true },
{ "dev", 0755, NULL, NULL, true },
#if defined(__i386__) || defined(__x86_64__)
/* Various architecture ABIs define the path to the dynamic loader via the /lib64/ subdirectory of
* the root directory. When booting from an otherwise empty root file system (where only /usr/ has
* been mounted into) it is thus necessary to create a symlink pointing to the right subdirectory of
* /usr/ first otherwise we couldn't invoke any dynamic binary. Let's detect this case here, and
* create the symlink as needed should it be missing. We prefer doing this consistently with Debian's
* multiarch logic, but support Fedora-style multilib too.*/
{ "lib64", 0, "usr/lib/x86_64-linux-gnu\0"
"usr/lib64\0", "ld-linux-x86-64.so.2" },
#else
/* gcc doesn't allow pragma to be used within constructs, hence log about this separately below */
# define WARN_LIB64 1
#endif
};
#ifdef WARN_LIB64
#pragma message "If your architecture knows a /lib64/ or /lib32/ directory, please add an entry creating it here."
/* And if your architecture doesn't know these directories, make sure to add ifdeffery here to
* suppress this pragma message. */
#endif
int base_filesystem_create(const char *root, uid_t uid, gid_t gid) {
_cleanup_close_ int fd = -1;
int r;