All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays
@ 2018-05-07 14:44 Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure Carlos Santos
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

This series makes some improvements in the verification of custom rootfs
skeletons and overlays, regarding mergerd /usr:

Patch 1 adds a script to check if a given path complies to the merged /usr
requirements and makes skeleton-custom.mk use it instead of a bunch of
variables filled by $(shell ...) macros.

Patch 2 ensures that /bin, /lib and /sbin are created for custom skeletons,
either as directories or symlinks, according to BR2_ROOTFS_MERGED_USR. 

Patch 3 uses the script added in patch 1 to check rootfs overlays, in
target-finalize.

Patch 4 allows rootfs overlays to override symbolic links on purpose (e.g.
/var/log, to persist system logs).

Patch 5 removes the restriction of using merged /usr only with the default
skeleton or when systemd is selected.

Carlos Santos (5):
  skeleton-custom: use a script to check merged usr structure
  skeleton-custom: install /bin, /lib, and /sbin
  Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled
  Makefile: allow rootfs overlays to override symbolic links
  system: allow selecting merged /usr along with custom rootfs skeleton

 Makefile                                   | 20 ++++++++++++---
 docs/manual/customize-rootfs.txt           | 17 +++++++++++++
 package/skeleton-custom/skeleton-custom.mk | 25 +++----------------
 support/scripts/check-merged-usr.sh        | 39 ++++++++++++++++++++++++++++++
 system/Config.in                           |  8 ++----
 5 files changed, 78 insertions(+), 31 deletions(-)
 create mode 100755 support/scripts/check-merged-usr.sh

-- 
2.14.3

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
@ 2018-05-07 14:44 ` Carlos Santos
  2019-02-06 16:16   ` Arnout Vandecappelle
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 2/5] skeleton-custom: install /bin, /lib, and /sbin Carlos Santos
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

Introduce support/scripts/check-merged-usr.sh, a script that check if a
given path complies to the merged /usr requirements:

    /
    /bin -> usr/bin
    /lib -> usr/lib
    /sbin -> usr/sbin
    /usr/bin/
    /usr/lib/
    /usr/sbin/

Use this script in skeleton-custom.mk instead of a bunch of variables
filled by $(shell ...) macros. The same script will be used to check
rootfs overlays, in a forthcoming change.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
Changes v1->v2:

- Rebase series to HEAD of master branch
---
 package/skeleton-custom/skeleton-custom.mk | 23 +-----------------
 support/scripts/check-merged-usr.sh        | 39 ++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 22 deletions(-)
 create mode 100755 support/scripts/check-merged-usr.sh

diff --git a/package/skeleton-custom/skeleton-custom.mk b/package/skeleton-custom/skeleton-custom.mk
index 8c57531782..b1cddd9146 100644
--- a/package/skeleton-custom/skeleton-custom.mk
+++ b/package/skeleton-custom/skeleton-custom.mk
@@ -23,32 +23,11 @@ $(error No path specified for the custom skeleton)
 endif
 endif
 
-# Extract the inode numbers for all of those directories. In case any is
-# a symlink, we want to get the inode of the pointed-to directory, so we
-# append '/.' to be sure we get the target directory. Since the symlinks
-# can be anyway (/bin -> /usr/bin or /usr/bin -> /bin), we do that for
-# all of them.
-#
-SKELETON_CUSTOM_LIB_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/lib/. 2>/dev/null)
-SKELETON_CUSTOM_BIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/bin/. 2>/dev/null)
-SKELETON_CUSTOM_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/sbin/. 2>/dev/null)
-SKELETON_CUSTOM_USR_LIB_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/lib/. 2>/dev/null)
-SKELETON_CUSTOM_USR_BIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/bin/. 2>/dev/null)
-SKELETON_CUSTOM_USR_SBIN_INODE = $(shell stat -c '%i' $(SKELETON_CUSTOM_PATH)/usr/sbin/. 2>/dev/null)
-
 # For a merged /usr, ensure that /lib, /bin and /sbin and their /usr
 # counterparts are appropriately setup as symlinks ones to the others.
 ifeq ($(BR2_ROOTFS_MERGED_USR),y)
 
-ifneq ($(SKELETON_CUSTOM_LIB_INODE),$(SKELETON_CUSTOM_USR_LIB_INODE))
-SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /lib
-endif
-ifneq ($(SKELETON_CUSTOM_BIN_INODE),$(SKELETON_CUSTOM_USR_BIN_INODE))
-SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /bin
-endif
-ifneq ($(SKELETON_CUSTOM_SBIN_INODE),$(SKELETON_CUSTOM_USR_SBIN_INODE))
-SKELETON_CUSTOM_NOT_MERGED_USR_DIRS += /sbin
-endif
+SKELETON_CUSTOM_NOT_MERGED_USR_DIRS = $(shell support/scripts/check-merged-usr.sh $(SKELETON_CUSTOM_PATH))
 
 endif # merged /usr
 
diff --git a/support/scripts/check-merged-usr.sh b/support/scripts/check-merged-usr.sh
new file mode 100755
index 0000000000..74c43c89fd
--- /dev/null
+++ b/support/scripts/check-merged-usr.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Check if a given custom skeleton or overlay complies to the merged /usr
+# requirements:
+# /
+# /bin -> usr/bin
+# /lib -> usr/lib
+# /sbin -> usr/sbin
+# /usr/bin/
+# /usr/lib/
+# /usr/sbin/
+#
+# Output: the list non-compliant paths (empty if compliant).
+#
+
+# Extract the inode numbers for all of those directories. In case any is
+# a symlink, we want to get the inode of the pointed-to directory, so we
+# append '/.' to be sure we get the target directory. Since the symlinks
+# can be anyway (/bin -> /usr/bin or /usr/bin -> /bin), we do that for
+# all of them.
+#
+lib_inode=$(stat -c '%i' "${1}/lib/." 2>/dev/null)
+bin_inode=$(stat -c '%i' "${1}/bin/." 2>/dev/null)
+sbin_inode=$(stat -c '%i' "${1}/sbin/." 2>/dev/null)
+usr_lib_inode=$(stat -c '%i' "${1}/usr/lib/." 2>/dev/null)
+usr_bin_inode=$(stat -c '%i' "${1}/usr/bin/." 2>/dev/null)
+usr_sbin_inode=$(stat -c '%i' "${1}/usr/sbin/." 2>/dev/null)
+
+not_merged_dirs=""
+test -z "$lib_inode" || \
+	test "$lib_inode" = "$usr_lib_inode" || \
+		not_merged_dirs="/lib"
+test -z "$bin_inode" || \
+	test "$bin_inode" = "$usr_bin_inode" || \
+		not_merged_dirs="$not_merged_dirs /bin"
+test -z "$sbin_inode" || \
+	test "$sbin_inode" = "$usr_sbin_inode" || \
+		not_merged_dirs="$not_merged_dirs /sbin"
+echo "${not_merged_dirs# }"
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 2/5] skeleton-custom: install /bin, /lib, and /sbin
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure Carlos Santos
@ 2018-05-07 14:44 ` Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled Carlos Santos
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

skeleton-custom does not install the required /bin, /lib and /sbin
directories (or symlinks), which may result in an imcomplete tree, The
user could add the required directories/symlinks to the skeleton but
they may be invalid, depending on the state of BR2_ROOTFS_MERGED_USR.

Steps to reproduce:

- Enable BR2_ROOTFS_MERGED_USR and BR2_INIT_SYSTEMD
- Set BR2_ROOTFS_SKELETON_CUSTOM_PATH to "system/skeleton"
- Run "make skeleton"
- target/{bin.lib,sbin} will not exist

Add calls to SYSTEM_USR_SYMLINKS_OR_DIRS to INSTALL_TARGET_CMDS and
INSTALL_STAGING_CMDS, so the required directories or symlinks are
created.

Add a paragraph to the documentation clarifying that custom skeletons
don't need to contain /bin, /lib or /sbin and must not contain them when
BR2_ROOTFS_MERGED_USR is enabled.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
Changes v1->v2:

- Rebase series to HEAD of master branch
- Rework commit message and documentation, as suggested by Thomas
  Petazzoni
---
 docs/manual/customize-rootfs.txt           | 9 +++++++++
 package/skeleton-custom/skeleton-custom.mk | 2 ++
 2 files changed, 11 insertions(+)

diff --git a/docs/manual/customize-rootfs.txt b/docs/manual/customize-rootfs.txt
index 44fc460670..9d3a62ddaf 100644
--- a/docs/manual/customize-rootfs.txt
+++ b/docs/manual/customize-rootfs.txt
@@ -100,6 +100,15 @@ To enable this feature, enable config option
   +System configuration+ menu. If you specify a relative path, it will
   be relative to the root of the Buildroot tree.
 +
+Custom skeletons don't need to contain the '/bin', '/lib' or '/sbin'
+  directories, since they are created automatically during the build.
+  When +BR2_ROOTFS_MERGED_USR+ is enabled, then the custom skeleton must
+  not contain the '/bin', '/lib' or '/sbin' directories, as Buildroot
+  will create them as symbolic links to the relevant folders in '/usr'.
+  In such a situation, should the skeleton have any programs or
+  libraries, they should be placed in '/usr/bin', '/usr/sbin' and
+  '/usr/lib'.
++
 This method is not recommended because it duplicates the entire
   skeleton, which prevents taking advantage of the fixes or improvements
   brought to the default skeleton in later Buildroot releases.
diff --git a/package/skeleton-custom/skeleton-custom.mk b/package/skeleton-custom/skeleton-custom.mk
index b1cddd9146..01cd62794d 100644
--- a/package/skeleton-custom/skeleton-custom.mk
+++ b/package/skeleton-custom/skeleton-custom.mk
@@ -43,6 +43,7 @@ endif
 # things we customise in the custom skeleton.
 define SKELETON_CUSTOM_INSTALL_TARGET_CMDS
 	$(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(TARGET_DIR))
+	$(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(TARGET_DIR))
 	$(call SYSTEM_LIB_SYMLINK,$(TARGET_DIR))
 	$(INSTALL) -m 0644 support/misc/target-dir-warning.txt \
 		$(TARGET_DIR_WARNING_FILE)
@@ -54,6 +55,7 @@ endef
 # skeleton to staging.
 define SKELETON_CUSTOM_INSTALL_STAGING_CMDS
 	$(call SYSTEM_RSYNC,$(SKELETON_CUSTOM_PATH),$(STAGING_DIR))
+	$(call SYSTEM_USR_SYMLINKS_OR_DIRS,$(STAGING_DIR))
 	$(call SYSTEM_LIB_SYMLINK,$(STAGING_DIR))
 endef
 
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 2/5] skeleton-custom: install /bin, /lib, and /sbin Carlos Santos
@ 2018-05-07 14:44 ` Carlos Santos
  2019-02-06 16:20   ` Arnout Vandecappelle
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 4/5] Makefile: allow rootfs overlays to override symbolic links Carlos Santos
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

Add a step to target-finalize that checks each rootfs overlay, following
the criteria established for custom skeletons and using the same script
uesd by skeleton-custom.mk.

Add a paragraph to the documentation clarifying that rootfs overlays
don't need to contain /bin, /lib or /sbin and must not contain them when
BR2_ROOTFS_MERGED_USR is enabled.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
Changes v1->v2:

- Rebase series to HEAD of master branch
- Rework commit message and documentation, as suggested by Thomas
  Petazzoni

Changes v2-v3:

- Move the removal of --keep-dirlinks in the call to rsync to a separate
  patch.
---
 Makefile                         | 16 ++++++++++++++++
 docs/manual/customize-rootfs.txt |  8 ++++++++
 2 files changed, 24 insertions(+)

diff --git a/Makefile b/Makefile
index c024c65f78..64c97ce6e2 100644
--- a/Makefile
+++ b/Makefile
@@ -746,6 +746,22 @@ endif
 	@$(call MESSAGE,"Sanitizing RPATH in target tree")
 	$(TOPDIR)/support/scripts/fix-rpath target
 
+# For a merged /usr, ensure that /lib, /bin and /sbin and their /usr
+# counterparts are appropriately setup as symlinks ones to the others.
+ifeq ($(BR2_ROOTFS_MERGED_USR),y)
+
+	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
+		$(call MESSAGE,"Sanity check in overlay $(d)"); \
+		not_merged_dirs="$$(support/scripts/check-merged-usr.sh $(d))"; \
+		test -n "$$not_merged_dirs" && { \
+			echo "ERROR: The overlay in $(d) is not" \
+				"using a merged /usr for the following directories:" \
+				$$not_merged_dirs; \
+			exit 1; \
+		} || true$(sep))
+
+endif # merged /usr
+
 	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
 		$(call MESSAGE,"Copying overlay $(d)"); \
 		rsync -a --ignore-times --keep-dirlinks $(RSYNC_VCS_EXCLUSIONS) \
diff --git a/docs/manual/customize-rootfs.txt b/docs/manual/customize-rootfs.txt
index 9d3a62ddaf..bb6d8da6bf 100644
--- a/docs/manual/customize-rootfs.txt
+++ b/docs/manual/customize-rootfs.txt
@@ -22,6 +22,14 @@ A filesystem overlay is a tree of files that is copied directly
   etc., files called +.empty+ and files ending in +~+ are excluded from
   the copy.
 +
+Filesystem overlays don't need to contain the '/bin', '/lib' or '/sbin'
+  directories, since they are created automatically during the build.
+  When +BR2_ROOTFS_MERGED_USR+ is enabled, then the overlay must not
+  contain the '/bin', '/lib' or '/sbin' directories, as Buildroot will
+  create them as symbolic links to the relevant folders in '/usr'.  In
+  such a situation, should the overlay have any programs or libraries,
+  they should be placed in '/usr/bin', '/usr/sbin' and '/usr/lib'.
++
 As shown in xref:customize-dir-structure[], the recommended path for
   this overlay is +board/<company>/<boardname>/rootfs-overlay+.
 
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 4/5] Makefile: allow rootfs overlays to override symbolic links
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
                   ` (2 preceding siblings ...)
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled Carlos Santos
@ 2018-05-07 14:44 ` Carlos Santos
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 5/5] system: allow selecting merged /usr along with custom rootfs skeleton Carlos Santos
  2019-02-06 16:15 ` [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Arnout Vandecappelle
  5 siblings, 0 replies; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

Since commit 0db34529f48 we use rsync with the --keep-dirlinks option to
prevent overlays from accidentally overwriding /{usr,bin,sbin,lib} links
when BR2_ROOTFS_MERGED_USR option is enabled. Unfortunately this also
prevents replacing a symlink by a directory on purpose (e.g. /var/log,
to persist system logs).

Steps to reproduce:

- enable BR2_ROOTFS_MERGED_USR and BR2_PACKAGE_SKELETON_INIT_SYSV
- mkdir some_path/rootfs-overlay/var/log
- enable BR2_ROOTFS_OVERLAY="some_path/rootfs-overlay"
- run 'make'
- 'target/var/log' is still a symlink to '../tmp', not a directory

The --keep-dirlinks option can be dropped, since we run sanity checks
on overlays. Now the rsync invocation is identical to the SYSTEM_RSYNC
logic we have in system/system.mk, so use that variable.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
Changes v1->v2:

- Rebase series to HEAD of master branch
- Rework commit message and documentation, as suggested by Thomas
  Petazzoni

Changes v2-v3:

- Move the removal of --keep-dirlinks in the call to rsync to a separate
  patch.
---
 Makefile | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 64c97ce6e2..dc51269143 100644
--- a/Makefile
+++ b/Makefile
@@ -764,9 +764,7 @@ endif # merged /usr
 
 	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
 		$(call MESSAGE,"Copying overlay $(d)"); \
-		rsync -a --ignore-times --keep-dirlinks $(RSYNC_VCS_EXCLUSIONS) \
-			--chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
-			$(d)/ $(TARGET_DIR)$(sep))
+		$(call SYSTEM_RSYNC,$(d),$(TARGET_DIR))$(sep))
 
 	@$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \
 		$(call MESSAGE,"Executing post-build script $(s)"); \
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 5/5] system: allow selecting merged /usr along with custom rootfs skeleton
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
                   ` (3 preceding siblings ...)
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 4/5] Makefile: allow rootfs overlays to override symbolic links Carlos Santos
@ 2018-05-07 14:44 ` Carlos Santos
  2019-02-06 16:15 ` [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Arnout Vandecappelle
  5 siblings, 0 replies; 9+ messages in thread
From: Carlos Santos @ 2018-05-07 14:44 UTC (permalink / raw)
  To: buildroot

If the user is brave enough to use a custom rootfs skeleton then we must
not prevent using merged /usr too. Actually it is already possible to do
this, although indirectly, by selecting BR2_INIT_SYSTEMD.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
Changes v1->v2:

- Rebase series to HEAD of master branch
---
 system/Config.in | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/system/Config.in b/system/Config.in
index d14a864ca5..911cd424ba 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -31,10 +31,6 @@ config BR2_ROOTFS_SKELETON_CUSTOM_PATH
 	help
 	  Path to custom target skeleton.
 
-# dummy config so merged /usr workarounds can also be activated for
-# custom rootfs skeleton
-config BR2_ROOTFS_MERGED_USR
-
 endif
 
 if BR2_ROOTFS_SKELETON_DEFAULT
@@ -209,8 +205,6 @@ config BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES
 	help
 	  Support extended attributes handling in device tables
 
-if BR2_ROOTFS_SKELETON_DEFAULT
-
 config BR2_ROOTFS_MERGED_USR
 	bool "Use symlinks to /usr for /bin, /sbin and /lib"
 	help
@@ -223,6 +217,8 @@ config BR2_ROOTFS_MERGED_USR
 	  symlinks to their counterparts in /usr. In this case, /usr can
 	  not be a separate filesystem.
 
+if BR2_ROOTFS_SKELETON_DEFAULT
+
 config BR2_TARGET_ENABLE_ROOT_LOGIN
 	bool "Enable root login with password"
 	default y
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays
  2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
                   ` (4 preceding siblings ...)
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 5/5] system: allow selecting merged /usr along with custom rootfs skeleton Carlos Santos
@ 2019-02-06 16:15 ` Arnout Vandecappelle
  5 siblings, 0 replies; 9+ messages in thread
From: Arnout Vandecappelle @ 2019-02-06 16:15 UTC (permalink / raw)
  To: buildroot



On 07/05/2018 16:44, Carlos Santos wrote:
> This series makes some improvements in the verification of custom rootfs
> skeletons and overlays, regarding mergerd /usr:
> 
> Patch 1 adds a script to check if a given path complies to the merged /usr
> requirements and makes skeleton-custom.mk use it instead of a bunch of
> variables filled by $(shell ...) macros.
> 
> Patch 2 ensures that /bin, /lib and /sbin are created for custom skeletons,
> either as directories or symlinks, according to BR2_ROOTFS_MERGED_USR. 
> 
> Patch 3 uses the script added in patch 1 to check rootfs overlays, in
> target-finalize.
> 
> Patch 4 allows rootfs overlays to override symbolic links on purpose (e.g.
> /var/log, to persist system logs).
> 
> Patch 5 removes the restriction of using merged /usr only with the default
> skeleton or when systemd is selected.
> 
> Carlos Santos (5):
>   skeleton-custom: use a script to check merged usr structure
>   skeleton-custom: install /bin, /lib, and /sbin
>   Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled
>   Makefile: allow rootfs overlays to override symbolic links
>   system: allow selecting merged /usr along with custom rootfs skeleton


 Series applied to master, thanks.

 I still have a few individual comments on some of the patches.

 Regards,
 Arnout

> 
>  Makefile                                   | 20 ++++++++++++---
>  docs/manual/customize-rootfs.txt           | 17 +++++++++++++
>  package/skeleton-custom/skeleton-custom.mk | 25 +++----------------
>  support/scripts/check-merged-usr.sh        | 39 ++++++++++++++++++++++++++++++
>  system/Config.in                           |  8 ++----
>  5 files changed, 78 insertions(+), 31 deletions(-)
>  create mode 100755 support/scripts/check-merged-usr.sh
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure Carlos Santos
@ 2019-02-06 16:16   ` Arnout Vandecappelle
  0 siblings, 0 replies; 9+ messages in thread
From: Arnout Vandecappelle @ 2019-02-06 16:16 UTC (permalink / raw)
  To: buildroot



On 07/05/2018 16:44, Carlos Santos wrote:

> +SKELETON_CUSTOM_NOT_MERGED_USR_DIRS = $(shell support/scripts/check-merged-usr.sh $(SKELETON_CUSTOM_PATH))

 This line was too long.


> +# Output: the list non-compliant paths (empty if compliant).
                     ^of

 Regards,
 Arnout

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled
  2018-05-07 14:44 ` [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled Carlos Santos
@ 2019-02-06 16:20   ` Arnout Vandecappelle
  0 siblings, 0 replies; 9+ messages in thread
From: Arnout Vandecappelle @ 2019-02-06 16:20 UTC (permalink / raw)
  To: buildroot



On 07/05/2018 16:44, Carlos Santos wrote:

> +# For a merged /usr, ensure that /lib, /bin and /sbin and their /usr
> +# counterparts are appropriately setup as symlinks ones to the others.
> +ifeq ($(BR2_ROOTFS_MERGED_USR),y)
> +
> +	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
> +		$(call MESSAGE,"Sanity check in overlay $(d)"); \
> +		not_merged_dirs="$$(support/scripts/check-merged-usr.sh $(d))"; \
> +		test -n "$$not_merged_dirs" && { \
> +			echo "ERROR: The overlay in $(d) is not" \
> +				"using a merged /usr for the following directories:" \
> +				$$not_merged_dirs; \
> +			exit 1; \
> +		} || true$(sep))

 This is really not OK, it should be done already before building, using the
approach similar to how it's done in skeleton-custom. It should then probably go
at the end of system/system.mk as well.

 I've applied anyway since it works :-)

 Oh, one more thing, both for this one and the skeleton check: we should also do
the check in case MERGED_USR is not selected. Indeed, we have 5 packages that
rely in the value of MERGED_USR, and that do the wrong thing if MERGED_USR is
not selected but the symlinks exist.

> +
> +endif # merged /usr
> +
>  	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
>  		$(call MESSAGE,"Copying overlay $(d)"); \
>  		rsync -a --ignore-times --keep-dirlinks $(RSYNC_VCS_EXCLUSIONS) \
> diff --git a/docs/manual/customize-rootfs.txt b/docs/manual/customize-rootfs.txt
> index 9d3a62ddaf..bb6d8da6bf 100644
> --- a/docs/manual/customize-rootfs.txt
> +++ b/docs/manual/customize-rootfs.txt
> @@ -22,6 +22,14 @@ A filesystem overlay is a tree of files that is copied directly
>    etc., files called +.empty+ and files ending in +~+ are excluded from
>    the copy.
>  +
> +Filesystem overlays don't need to contain the '/bin', '/lib' or '/sbin'
> +  directories, since they are created automatically during the build.

 This sentence doesn't make much sense for the overlay (I mean, why would you
put /bin in an overlay, unless there is some file in it? and in that case, the
following sentence applies and is more important.), so I've removed it.

 Regards,
 Arnout
> +  When +BR2_ROOTFS_MERGED_USR+ is enabled, then the overlay must not
> +  contain the '/bin', '/lib' or '/sbin' directories, as Buildroot will
> +  create them as symbolic links to the relevant folders in '/usr'.  In
> +  such a situation, should the overlay have any programs or libraries,
> +  they should be placed in '/usr/bin', '/usr/sbin' and '/usr/lib'.
> ++
>  As shown in xref:customize-dir-structure[], the recommended path for
>    this overlay is +board/<company>/<boardname>/rootfs-overlay+.
>  
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-02-06 16:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-07 14:44 [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Carlos Santos
2018-05-07 14:44 ` [Buildroot] [PATCH v3 1/5] skeleton-custom: use a script to check merged usr structure Carlos Santos
2019-02-06 16:16   ` Arnout Vandecappelle
2018-05-07 14:44 ` [Buildroot] [PATCH v3 2/5] skeleton-custom: install /bin, /lib, and /sbin Carlos Santos
2018-05-07 14:44 ` [Buildroot] [PATCH v3 3/5] Makefile: check rootfs overlays with BR2_ROOTFS_MERGED_USR enabled Carlos Santos
2019-02-06 16:20   ` Arnout Vandecappelle
2018-05-07 14:44 ` [Buildroot] [PATCH v3 4/5] Makefile: allow rootfs overlays to override symbolic links Carlos Santos
2018-05-07 14:44 ` [Buildroot] [PATCH v3 5/5] system: allow selecting merged /usr along with custom rootfs skeleton Carlos Santos
2019-02-06 16:15 ` [Buildroot] [PATCH v3 0/5] Improve verification of custom rootfs skeletons and overlays Arnout Vandecappelle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.