68 lines
1.9 KiB
Shell
68 lines
1.9 KiB
Shell
#!/system/bin/sh
|
|
# Shared installer/release-catalog helpers for module and staged-update layouts.
|
|
|
|
rknnovpn_install_copy_tree() {
|
|
_src="$1"
|
|
_dst="$2"
|
|
[ -d "$_src" ] || return 0
|
|
find "$_src" -type f 2>/dev/null | while IFS= read -r _file; do
|
|
[ -f "$_file" ] || continue
|
|
_rel="${_file#$_src/}"
|
|
_target="${_dst}/${_rel}"
|
|
mkdir -p "$(dirname "$_target")" 2>/dev/null || return 1
|
|
cp -f "$_file" "$_target" || return 1
|
|
done
|
|
}
|
|
|
|
rknnovpn_install_file_sha256() {
|
|
_file="$1"
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
sha256sum "$_file" 2>/dev/null | awk '{print $1}'
|
|
return $?
|
|
fi
|
|
if [ -n "${BUSYBOX:-}" ] && "$BUSYBOX" sha256sum "$_file" >/dev/null 2>&1; then
|
|
"$BUSYBOX" sha256sum "$_file" 2>/dev/null | awk '{print $1}'
|
|
return $?
|
|
fi
|
|
if command -v toybox >/dev/null 2>&1; then
|
|
toybox sha256sum "$_file" 2>/dev/null | awk '{print $1}'
|
|
return $?
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
rknnovpn_module_version() {
|
|
_module_path="${1:-${MODPATH:-}}"
|
|
if [ -n "$_module_path" ] && [ -f "${_module_path}/module.prop" ]; then
|
|
awk -F= '$1=="version"{print $2; exit}' "${_module_path}/module.prop" 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
rknnovpn_safe_release_name() {
|
|
_raw="$1"
|
|
_safe="$(echo "$_raw" | sed 's/[^A-Za-z0-9._-]/_/g; s/^[._-]*//; s/[._-]*$//')"
|
|
[ -n "$_safe" ] || _safe="unknown"
|
|
echo "$_safe"
|
|
}
|
|
|
|
rknnovpn_copy_if_present() {
|
|
_src="$1"
|
|
_dst="$2"
|
|
if [ -f "$_src" ]; then
|
|
mkdir -p "$(dirname "$_dst")" 2>/dev/null || return 1
|
|
cp -f "$_src" "$_dst"
|
|
fi
|
|
}
|
|
|
|
rknnovpn_manifest_hash_entry() {
|
|
_rel="$1"
|
|
_file="$2"
|
|
_manifest="$3"
|
|
[ -f "$_file" ] || return 0
|
|
_hash="$(rknnovpn_install_file_sha256 "$_file")" || return 1
|
|
if [ "$MANIFEST_FIRST" -eq 0 ]; then
|
|
printf ',\n' >> "$_manifest"
|
|
fi
|
|
MANIFEST_FIRST=0
|
|
printf ' "%s": "%s"' "$_rel" "$_hash" >> "$_manifest"
|
|
}
|