Skip to content

Commit

Permalink
fs/common.mk: use find instead of shell glob patterns
Browse files Browse the repository at this point in the history
Different shells can have different behaviours when it comes to globbing
patterns. The dash shell (/bin/sh) on Debian testing switched to a
different fnmatch/glob implementation that results in this new behaviour:

Using bash:
    $ mkdir /tmp/foo
    $ echo /tmp/foo/.[^.]*
    /tmp/foo/.[^.]*

Using dash:
    $ mkdir /tmp/foo
    $ echo /tmp/foo/.[^.]*
    /tmp/foo/..

The current FAKEROOT script uses this shell glob pattern which now fails
on recent Debian testing systems:

    rm: refusing to remove '.' or '..' directory: skipping '/build/buildroot-fs/cpio/target/run/..'
    rm: refusing to remove '.' or '..' directory: skipping '/build/buildroot-fs/cpio/target/tmp/..'

Additionally, the glob will miss files which have at least two leading
dots, like ..foo ...bar or ......buz  (highly improbable, but still).

It seems safer to use `find | xargs rm` here instead of relying on shell
globbing patterns.

Signed-off-by: Mathieu Mirmont <[email protected]>
Signed-off-by: Yann E. MORIN <[email protected]>
  • Loading branch information
maaaat authored and yann-morin-1998 committed Mar 12, 2022
1 parent 4dc0576 commit 38c4f6b
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fs/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,8 @@ $$(BINARIES_DIR)/$$(ROOTFS_$(2)_FINAL_IMAGE_NAME): $$(ROOTFS_$(2)_DEPENDENCIES)

$$(foreach hook,$$(ROOTFS_$(2)_PRE_GEN_HOOKS),\
$$(call PRINTF,$$($$(hook))) >> $$(FAKEROOT_SCRIPT)$$(sep))
echo "rm -rf $$(TARGET_DIR)/run/* $$(TARGET_DIR)/run/.[^.]* $$(TARGET_DIR)/tmp/* $$(TARGET_DIR)/tmp/.[^.]*" >> $$(FAKEROOT_SCRIPT)
echo "find $$(TARGET_DIR)/run/ -mindepth 1 -prune -print0 | xargs -0r rm -rf --" >> $$(FAKEROOT_SCRIPT)
echo "find $$(TARGET_DIR)/tmp/ -mindepth 1 -prune -print0 | xargs -0r rm -rf --" >> $$(FAKEROOT_SCRIPT)
$$(call PRINTF,$$(ROOTFS_REPRODUCIBLE)) >> $$(FAKEROOT_SCRIPT)
$$(call PRINTF,$$(ROOTFS_SELINUX)) >> $$(FAKEROOT_SCRIPT)
$$(call PRINTF,$$(ROOTFS_$(2)_CMD)) >> $$(FAKEROOT_SCRIPT)
Expand Down

0 comments on commit 38c4f6b

Please sign in to comment.