-# Preserve permissions (-p) when creating data.tar.gz as non-root user
-( cd $pkg_dir && $TAR $ogargs -X $tmp_dir/tarX --format=gnu -czpf $tmp_dir/data.tar.gz --mtime="$TIMESTAMP" . )
+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
+ ;;
+ esac
+
+ mode=${file_mode##*:}; path=${file_mode%:*}
+ group=${path##*:}; path=${path%:*}
+ user=${path##*:}; path=${path%:*}
+
+ if ! resolve_file_mode_id uid user "$user"; then
+ echo "ERROR: unable to resolve uid of $user" >&2
+ exit 1
+ fi
+
+ if ! resolve_file_mode_id gid group "$group"; then
+ echo "ERROR: unable to resolve gid of $group" >&2
+ exit 1
+ fi
+
+ chown "$uid:$gid" "$pkg_dir/$path"
+ chmod "$mode" "$pkg_dir/$path"
+done
+$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz