update 2026-06-29 16:54:16

This commit is contained in:
action committed 2026-06-29 16:54:16 +08:00
1 parent 278ea898f0
commit c8ceebd509
8 files changed
+342 -24

No files matched your search

@@ -5,6 +5,7 @@ set -u
XRAY_RELEASE_PAGE="https://github.com/XTLS/Xray-core/releases/latest"
MIHOMO_RELEASE_PAGE="https://github.com/MetaCubeX/mihomo/releases/latest"
NAIVEPROXY_RELEASE_API="https://api.github.com/repos/klzgrad/naiveproxy/releases/latest"
HELLOWORLD_RELEASE_API="https://api.github.com/repos/fw876/helloworld/releases/latest"
XRAY_BINARY="/usr/bin/xray"
MIHOMO_BINARY="/usr/bin/mihomo"
NAIVEPROXY_BINARY="/usr/bin/naive"
@@ -164,6 +165,20 @@ is_openwrt_env() {
[ -r /etc/openwrt_release ] || command -v opkg >/dev/null 2>&1
}
detect_package_manager() {
if command -v apk >/dev/null 2>&1; then
printf '%s' 'apk'
return 0
fi
if command -v opkg >/dev/null 2>&1; then
printf '%s' 'opkg'
return 0
fi
return 1
}
find_mihomo_binary() {
if command -v mihomo >/dev/null 2>&1; then
command -v mihomo
@@ -831,6 +846,240 @@ get_naiveproxy_latest_info() {
return 0
}
get_mainprogram_current_version() {
local pm="$1"
local version
case "$pm" in
apk)
version="$(apk info -e luci-app-ssr-plus 2>/dev/null | sed -n 's/^luci-app-ssr-plus-\([0-9][^-[:space:]]*-[^[:space:]]*\).*$/\1/p' | sed -n '1p')"
[ -n "$version" ] || version="$(apk list -I luci-app-ssr-plus 2>/dev/null | sed -n 's/^luci-app-ssr-plus-\([0-9][^-[:space:]]*-[^[:space:]]*\).*$/\1/p' | sed -n '1p')"
;;
opkg)
version="$(opkg status luci-app-ssr-plus 2>/dev/null | sed -n 's/^Version:[[:space:]]*//p' | sed -n '1p')"
;;
esac
[ -n "$version" ] || return 1
printf '%s' "$version"
}
mainprogram_asset_suffix() {
case "$1" in
apk)
printf '%s' '.apk'
;;
opkg)
printf '%s' '.ipk'
;;
*)
return 1
;;
esac
}
select_mainprogram_asset() {
local asset_list="$1"
local pm="$2"
local suffix candidate
suffix="$(mainprogram_asset_suffix "$pm")" || return 1
candidate="$(printf '%s\n' "$asset_list" | grep -F "$suffix" | grep -E '^luci-app-ssr-plus[_-]' | sed -n '1p')"
[ -n "$candidate" ] || return 1
printf '%s' "$candidate"
}
mainprogram_asset_version() {
local asset="$1"
local version
version="$(printf '%s' "$asset" | sed -n 's/^luci-app-ssr-plus_\([^_]*\)_.*\.ipk$/\1/p')"
[ -n "$version" ] || version="$(printf '%s' "$asset" | sed -n 's/^luci-app-ssr-plus-\(.*\)\.apk$/\1/p')"
[ -n "$version" ] || return 1
printf '%s' "$version"
}
get_mainprogram_latest_info() {
local pm release_json tag version asset asset_list url
pm="$(detect_package_manager)" || return 2
release_json="$(fetch_text "$HELLOWORLD_RELEASE_API")" || return 3
tag="$(printf '%s\n' "$release_json" | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' | sed -n '1p')"
[ -n "$tag" ] || return 3
asset_list="$(printf '%s\n' "$release_json" | sed -n 's/.*"name":[[:space:]]*"\([^"]*\.\(ipk\|apk\)\)".*/\1/p')"
asset="$(select_mainprogram_asset "$asset_list" "$pm")" || return 4
version="$(mainprogram_asset_version "$asset" 2>/dev/null || trim_version "$tag")"
url="$(mirror_wrap_url "https://github.com/fw876/helloworld/releases/download/$tag/$asset")"
log_kv package_manager "$pm"
log_kv arch "$(get_openwrt_arch)"
log_kv asset "$asset"
log_kv latest_version "$version"
log_kv download_url "$url"
return 0
}
mainprogram_info() {
local pm current installed latest_output latest_rc latest_version arch asset can_upgrade
installed=0
current=""
pm="$(detect_package_manager 2>/dev/null || true)"
arch="$(get_openwrt_arch)"
if [ -n "$pm" ] && current="$(get_mainprogram_current_version "$pm")" && [ -n "$current" ]; then
installed=1
fi
latest_output="$(get_mainprogram_latest_info 2>/dev/null)"
latest_rc=$?
log_kv component mainprogram
log_kv installed "$installed"
log_kv current_version "$current"
log_kv package_manager "$pm"
log_kv arch "$arch"
log_kv asset ''
if [ $latest_rc -ne 0 ]; then
log_kv can_upgrade 0
case "$latest_rc" in
2) log_kv error 'unsupported_package_manager' ;;
3) log_kv error 'fetch_failed' ;;
4) log_kv error 'asset_not_found' ;;
*) log_kv error 'unknown_error' ;;
esac
return 0
fi
latest_version="$(printf '%s\n' "$latest_output" | sed -n 's/^latest_version=//p' | sed -n '1p')"
pm="$(printf '%s\n' "$latest_output" | sed -n 's/^package_manager=//p' | sed -n '1p')"
arch="$(printf '%s\n' "$latest_output" | sed -n 's/^arch=//p' | sed -n '1p')"
asset="$(printf '%s\n' "$latest_output" | sed -n 's/^asset=//p' | sed -n '1p')"
can_upgrade=0
if [ -z "$current" ] || version_gt "$latest_version" "$current"; then
can_upgrade=1
fi
printf '%s\n' "$latest_output" | sed '/^download_url=/d'
log_kv can_upgrade "$can_upgrade"
log_kv error ''
}
mainprogram_local_info() {
local pm current installed
installed=0
current=""
pm="$(detect_package_manager 2>/dev/null || true)"
if [ -n "$pm" ] && current="$(get_mainprogram_current_version "$pm")" && [ -n "$current" ]; then
installed=1
fi
log_kv component mainprogram
log_kv installed "$installed"
log_kv current_version "$current"
log_kv latest_version ''
log_kv package_manager "$pm"
log_kv arch "$(get_openwrt_arch)"
log_kv asset ''
log_kv can_upgrade 0
log_kv error ''
}
mainprogram_install_package() {
local pm="$1"
local package_file="$2"
case "$pm" in
apk)
apk add --allow-untrusted "$package_file" >/dev/null 2>&1
;;
opkg)
opkg install "$package_file" >/dev/null 2>&1
;;
*)
return 1
;;
esac
}
mainprogram_upgrade() {
local latest_output latest_rc latest_version download_url package_manager asset tmp_dir package_file current_before current_after
latest_output="$(get_mainprogram_latest_info 2>/dev/null)"
latest_rc=$?
if [ $latest_rc -ne 0 ]; then
log_kv success 0
case "$latest_rc" in
2) log_kv message 'Unsupported package manager' ;;
3) log_kv message 'Failed to fetch release metadata' ;;
4) log_kv message 'Matching release asset not found' ;;
*) log_kv message 'Unknown error' ;;
esac
return 0
fi
latest_version="$(printf '%s\n' "$latest_output" | sed -n 's/^latest_version=//p' | sed -n '1p')"
download_url="$(printf '%s\n' "$latest_output" | sed -n 's/^download_url=//p' | sed -n '1p')"
package_manager="$(printf '%s\n' "$latest_output" | sed -n 's/^package_manager=//p' | sed -n '1p')"
asset="$(printf '%s\n' "$latest_output" | sed -n 's/^asset=//p' | sed -n '1p')"
current_before="$(get_mainprogram_current_version "$package_manager" 2>/dev/null || true)"
tmp_dir="$(mktemp -d /tmp/ssrplus-mainprogram.XXXXXX)"
if [ -z "$tmp_dir" ] || [ ! -d "$tmp_dir" ]; then
log_kv success 0
log_kv message 'Failed to create temp directory'
return 0
fi
package_file="$tmp_dir/$asset"
trap "rm -rf '$tmp_dir'" EXIT INT TERM
if ! download_file "$download_url" "$package_file"; then
log_kv success 0
log_kv message 'Download failed'
return 0
fi
if [ ! -s "$package_file" ]; then
log_kv success 0
log_kv message 'Download failed'
return 0
fi
if ! mainprogram_install_package "$package_manager" "$package_file"; then
log_kv success 0
log_kv message 'Install failed'
return 0
fi
current_after="$(get_mainprogram_current_version "$package_manager" 2>/dev/null || true)"
if [ -z "$current_after" ]; then
log_kv success 0
log_kv message 'Installed package check failed'
return 0
fi
if [ -x /etc/init.d/rpcd ]; then
/etc/init.d/rpcd restart >/dev/null 2>&1 || true
fi
if [ -x /etc/init.d/uhttpd ]; then
/etc/init.d/uhttpd reload >/dev/null 2>&1 || true
fi
log_kv component mainprogram
log_kv success 1
log_kv previous_version "$current_before"
log_kv current_version "$current_after"
log_kv latest_version "$latest_version"
log_kv package_manager "$package_manager"
log_kv arch "$(get_openwrt_arch)"
log_kv asset "$asset"
log_kv can_upgrade 0
log_kv message 'Upgrade completed'
return 0
}
xray_info() {
local current installed latest_output latest_rc latest_version arch asset can_upgrade
@@ -1366,6 +1615,15 @@ naiveproxy_upgrade() {
}
case "${1:-}" in
mainprogram_info)
mainprogram_info
;;
mainprogram_local_info)
mainprogram_local_info
;;
mainprogram_upgrade)
mainprogram_upgrade
;;
xray_info)
xray_info
;;
@@ -1422,7 +1680,7 @@ case "${1:-}" in
;;
*)
log_kv success 0
log_kv message 'Usage: update_components.sh xray_info|xray_local_info|xray_upgrade|mihomo_info|mihomo_local_info|mihomo_upgrade|naiveproxy_info|naiveproxy_local_info|naiveproxy_upgrade|country_mmdb_info|country_mmdb_local_info|country_mmdb_upgrade|geosite_info|geosite_local_info|geosite_upgrade|v2ray_geo_info|v2ray_geo_local_info|v2ray_geo_upgrade'
log_kv message 'Usage: update_components.sh mainprogram_info|mainprogram_local_info|mainprogram_upgrade|xray_info|xray_local_info|xray_upgrade|mihomo_info|mihomo_local_info|mihomo_upgrade|naiveproxy_info|naiveproxy_local_info|naiveproxy_upgrade|country_mmdb_info|country_mmdb_local_info|country_mmdb_upgrade|geosite_info|geosite_local_info|geosite_upgrade|v2ray_geo_info|v2ray_geo_local_info|v2ray_geo_upgrade'
return 1 2>/dev/null || exit 1
;;
esac