build: add user/group ID resolve function

With the introduction of `./tmp/userids` the `ipkg-build` script can now
resolve values of "PKG_FILE_MODES", allowing users to set names rather
than numeric values.

Signed-off-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
Paul Spooren 2020-09-13 16:02:02 -10:00 committed by Daniel Golle
parent 34cc2c9a99
commit 51ec51871f

View File

@ -68,6 +68,40 @@ pkg_appears_sane() {
return $PKG_ERROR return $PKG_ERROR
} }
resolve_file_mode_id() {
type="$1"
name="$2"
position=1
if [ "$type" = "group" ]; then
position=2
fi
# root is always 0
if [ "$name" = "root" ]; then
echo 0
exit 0
fi
# return numeric names
if [ "$name" -eq "$name" 2>/dev/null ]; then
echo "$name"
exit 0
fi
ids=$(grep "$name" "$TOPDIR/tmp/userids")
for id in $ids; do
resolved_name=$(echo "$id" | cut -d ":" -f "$position" | cut -d "=" -f 1)
resolved_id=$(echo "$id" | cut -d ":" -f "$position" | cut -d "=" -f 2)
if [ "$resolved_name" = "$name" ]; then
echo "$resolved_id"
exit 0
fi
done
>&2 echo "No $type ID found for $name"
exit 1
}
### ###
# ipkg-build "main" # ipkg-build "main"
### ###
@ -142,10 +176,14 @@ for file_mode in $file_modes; do
;; ;;
esac esac
path=$(echo "$file_mode" | cut -d ':' -f 1) path=$(echo "$file_mode" | cut -d ':' -f 1)
user_group=$(echo "$file_mode" | cut -d ':' -f 2-3) user=$(echo "$file_mode" | cut -d ':' -f 2)
group=$(echo "$file_mode" | cut -d ':' -f 3)
mode=$(echo "$file_mode" | cut -d ':' -f 4) mode=$(echo "$file_mode" | cut -d ':' -f 4)
chown "$user_group" "$pkg_dir/$path" uid=$(resolve_file_mode_id user "$user")
gid=$(resolve_file_mode_id group "$group")
chown "$uid:$gid" "$pkg_dir/$path"
chmod "$mode" "$pkg_dir/$path" chmod "$mode" "$pkg_dir/$path"
done done
$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz $TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz