[PATCH 03/20] scripts/make-erofs.sh: Avoid unneeded calls to awk and chmod

Demi Marie Obenour
2025-09-04T23:47:52Z

These calls were made to work around permission problems, but it is much
cleaner to solve these problems by making every directory in the new
filesystem image writable so that cp can write to it.

Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
---
scripts/make-erofs.sh | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/scripts/make-erofs.sh b/scripts/make-erofs.sh
index 3f211d848b938405510d0dbf6b11cf5512c9ef5d..e63bcbed9c3028f0f2b55431d46ba9ec67bc26ef 100755
--- a/scripts/make-erofs.sh
+++ b/scripts/make-erofs.sh
@@ -37,18 +37,18 @@ while read -r arg1; do
fi
echo

- parent="$(dirname "$arg2")"
- awk -v parent="$parent" -v root="$root" 'BEGIN {
- n = split(parent, components, "/")
- for (i = 1; i <= n; i++) {
- printf "%s/", root
- for (j = 1; j <= i; j++)
- printf "%s/", components[j]
- print
- }
- }' | xargs -rd '\n' chmod +w -- 2>/dev/null || :
- mkdir -p -- "$root/$parent"
+ if [ "$arg2" = / ]; then
+ cp -RT -- "$arg1" "$root"
+ # Nix store paths are read-only, so fix up permissions
+ # so that subsequent copies can write to directories
+ # created by the above copy. This means giving all
+ # directories 0755 permissions.
+ find "$root" -type d -exec chmod 0755 -- '{}' +
+ continue
+ fi

+ parent=$(dirname "$arg2")
+ mkdir -p -- "$root/$parent"
cp -RT -- "$arg1" "$root/$arg2"
done

--
2.51.0