[Buildroot] [PATCH] system: add options for /bin /sbin and /lib to be symlinks into /usr
Yann E. MORIN
yann.morin.1998 at free.fr
Tue Sep 1 22:55:13 UTC 2015
systemd is incresaingly expected things to live in /usr/bin or
/usr/sbin.
However, a lot of packages stil install stuff directly into /bin or
/sbin.
Add an option so that /bin and /sbin be symlinks to /usr/bin and
/usr/sbin. Ditto for .lib for consistency.
That option is forcibly enabled when the init system is systemd.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
---
package/skeleton/skeleton.mk | 17 ++++++++++++++++-
system/Config.in | 13 +++++++++++++
system/skeleton/bin/.empty | 0
system/skeleton/lib/.empty | 0
system/skeleton/sbin/.empty | 0
5 files changed, 29 insertions(+), 1 deletion(-)
delete mode 100644 system/skeleton/bin/.empty
delete mode 100644 system/skeleton/lib/.empty
delete mode 100644 system/skeleton/sbin/.empty
diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mk
index 48e7085..173b485 100644
--- a/package/skeleton/skeleton.mk
+++ b/package/skeleton/skeleton.mk
@@ -19,14 +19,29 @@ else
SKELETON_PATH = system/skeleton
endif
+ifeq ($(BR2_ROOTFS_USR_SYMLINKS),y)
+define SKELETON_USR_SYMLINKS
+ ln -snf usr/bin $(TARGET_DIR)/bin
+ ln -snf usr/sbin $(TARGET_DIR)/sbin
+ ln -snf usr/lib $(TARGET_DIR)/lib
+endef
+else
+define SKELETON_NO_USR_SYMLINKS
+ $(INSTALL) -d -m 0755 $(TARGET_DIR)/bin
+ $(INSTALL) -d -m 0755 $(TARGET_DIR)/sbin
+ $(INSTALL) -d -m 0755 $(TARGET_DIR)/lib
+endef
+endif
+
define SKELETON_INSTALL_TARGET_CMDS
rsync -a --ignore-times $(SYNC_VCS_EXCLUSIONS) \
--chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
$(SKELETON_PATH)/ $(TARGET_DIR)/
+ $(SKELETON_NO_USR_SYMLINKS)
+ $(SKELETON_USR_SYMLINKS)
$(INSTALL) -m 0644 support/misc/target-dir-warning.txt \
$(TARGET_DIR_WARNING_FILE)
ln -snf lib $(TARGET_DIR)/$(LIB_SYMLINK)
- mkdir -p $(TARGET_DIR)/usr
ln -snf lib $(TARGET_DIR)/usr/$(LIB_SYMLINK)
endef
diff --git a/system/Config.in b/system/Config.in
index fad829d..96860d1 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -88,6 +88,7 @@ config BR2_INIT_SYSTEMD
depends on BR2_USE_MMU
depends on !BR2_STATIC_LIBS
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
+ select BR2_ROOTFS_USR_SYMLINKS
select BR2_PACKAGE_SYSTEMD
comment 'systemd needs an (e)glibc toolchain, headers >= 3.10'
@@ -178,6 +179,18 @@ endif
if BR2_ROOTFS_SKELETON_DEFAULT
+config BR2_ROOTFS_USR_SYMLINKS
+ bool "Use symlinks to /usr for /bin, /sbin and /lib"
+ help
+ If you say 'n' here, then /bin /sbin and /lib and their
+ counterparts in /usr will be separate directories. This
+ is the traditional UNIX way. In this case, /usr can be a
+ partition separate from / .
+
+ If you say 'y' here, then /bin /sbin and /lib will be symlinks
+ to their counterparts in /usr. This is the new systemd way. In
+ this case, /usr has to be on the / partition.
+
config BR2_TARGET_ENABLE_ROOT_LOGIN
bool "Enable root login with password"
default y
diff --git a/system/skeleton/bin/.empty b/system/skeleton/bin/.empty
deleted file mode 100644
index e69de29..0000000
diff --git a/system/skeleton/lib/.empty b/system/skeleton/lib/.empty
deleted file mode 100644
index e69de29..0000000
diff --git a/system/skeleton/sbin/.empty b/system/skeleton/sbin/.empty
deleted file mode 100644
index e69de29..0000000
--
1.9.1
More information about the buildroot
mailing list