[PATCH] build: fix missing file handling for file_modes
Paul Spooren
mail at aparcar.org
Tue Sep 8 19:11:22 EDT 2020
The `ipkg-build` script uses `file_modes` (-m) to set file modes
during package creation. If a single OpenWrt package results in
multiple `ipk` packages, the `PKG_FILE_MODES` are applied to every
single one of them. This can cause in errors files can be missing
between e.g. a *full* and a *mini* variant.
This commit checks if the file/folder exists, if not a warning is
printed but no longer a positive exit code produced.
Also clean up indention of surrounding lines.
Signed-off-by: Paul Spooren <mail at aparcar.org>
---
scripts/ipkg-build | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/scripts/ipkg-build b/scripts/ipkg-build
index e3a9a882cf..62b72ada88 100755
--- a/scripts/ipkg-build
+++ b/scripts/ipkg-build
@@ -134,19 +134,24 @@ cd $pkg_dir
for file_mode in $file_modes; do
case $file_mode in
/*:*:*:*)
- ;;
+ ;;
*)
- echo "ERROR: file modes must use absolute path and contain user:group:mode"
- echo "$file_mode"
- exit 1
- ;;
+ echo "ERROR: file modes must use absolute path and contain user:group:mode"
+ echo "$file_mode"
+ exit 1
+ ;;
esac
- path=$(echo "$file_mode" | cut -d ':' -f 1)
- user_group=$(echo "$file_mode" | cut -d ':' -f 2-3)
- mode=$(echo "$file_mode" | cut -d ':' -f 4)
- chown "$user_group" "$pkg_dir/$path"
- chmod "$mode" "$pkg_dir/$path"
+ path=$(echo "$file_mode" | cut -d ':' -f 1)
+ if [ -e "$pkg_dir/$path" ]; then
+ user_group=$(echo "$file_mode" | cut -d ':' -f 2-3)
+ mode=$(echo "$file_mode" | cut -d ':' -f 4)
+
+ chown "$user_group" "$pkg_dir/$path"
+ chmod "$mode" "$pkg_dir/$path"
+ else
+ echo "WARNING: skip mod change for non existing $path"
+ fi
done
$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz
--
2.25.1
More information about the openwrt-devel
mailing list