update 2026-11-13 00:30:06

This commit is contained in:
action committed 2026-11-13 00:30:06 +08:00
1 parent 95406bc799
commit 1ed10ddea8
101 files changed
+29943 -28459

No files matched your search

@@ -30,11 +30,30 @@ if command -v apk >/dev/null 2>&1; then
}
' | sort -V | tail -1)
elif command -v opkg >/dev/null 2>&1; then
installed=$(opkg status "$PKG" 2>/dev/null | awk '
/^Version: / { version = $2 }
/^Status: .* installed$/ { installed = 1 }
END { if (installed) print version }
')
# 直接读状态文件:opkg update 占着锁时 opkg status 会失败,面板就误报未安装。
if [ -r /usr/lib/opkg/status ]; then
installed=$(awk -v p="$PKG" '
$1 == "Package:" { cur = $2; ver = ""; ok = 0 }
$1 == "Version:" { ver = $2 }
$1 == "Status:" { ok = ($NF == "installed") }
cur == p && ok && ver != "" { print ver; exit }
' /usr/lib/opkg/status)
else
installed=$(opkg status "$PKG" 2>/dev/null | awk '
/^Version: / { version = $2 }
/^Status: .* installed$/ { installed = 1 }
END { if (installed) print version }
')
fi
latest=$(
for _list in /var/opkg-lists/*; do
[ "${_list%.sig}" = "$_list" ] || continue
zcat "$_list" 2>/dev/null || cat "$_list" 2>/dev/null
done | awk -v p="$PKG" '
$1 == "Package:" { cur = $2 }
cur == p && $1 == "Version:" { print $2 }
' | sort -V | tail -1
)
fi
printf '%s\t%s\n' "$installed" "$latest"
@@ -1,6 +1,6 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-3.0-only
# Background apk index refresh for the Maintenance view. Returns at once.
# Background package index refresh for the Maintenance view. Returns at once.
LOCK=/tmp/luci-app-honk.idx.lock
@@ -10,10 +10,15 @@ if [ -f "$LOCK" ]; then
fi
: > "$LOCK"
(
if command -v apk >/dev/null 2>&1; then
flock -n /tmp/luci-app-honk.apk.lock apk update
fi
) >/dev/null 2>&1 </dev/null &
if command -v apk >/dev/null 2>&1; then
apk update >/dev/null 2>&1 </dev/null &
elif command -v opkg >/dev/null 2>&1; then
opkg update >/dev/null 2>&1 </dev/null &
else
exit 0
fi
_pid=$!
# 有一个镜像卡住就会把 opkg 锁占死,60 秒后直接掐掉。
( sleep 60; kill -TERM "$_pid" 2>/dev/null; sleep 5; kill -KILL "$_pid" 2>/dev/null ) >/dev/null 2>&1 &
exit 0
@@ -33,6 +33,23 @@ service_running() {
honk_lifecycle_managed_pid >/dev/null 2>&1
}
# 镜像卡住时 opkg update 会一直占着锁;这里给它上闸,超时直接掐掉。
pkg_update() {
_limit=$1; shift
"$@" &
_pid=$!
( sleep "$_limit"; kill -TERM "$_pid" 2>/dev/null ) &
_watch=$!
wait "$_pid" 2>/dev/null
_rc=$?
kill -TERM "$_watch" 2>/dev/null
wait "$_watch" 2>/dev/null
if [ "$_rc" != 0 ]; then
echo "note: 索引刷新超时或被中断(${_limit}s),改用现有缓存继续"
fi
return 0
}
restore_service_state() {
if [ "$was_running" = 1 ]; then
echo "--- 升级前为运行状态,重启加载新内核 ---"
@@ -91,7 +108,7 @@ fi
if command -v apk >/dev/null 2>&1; then
(
flock 9
apk update 2>&1
apk list "$PKG" 2>/dev/null | grep -q "^$PKG-" || pkg_update 60 apk update 2>&1
ver=$(apk list "$PKG" 2>/dev/null | awk -v p="$PKG" '$1 ~ "^" p "-[0-9]" { v=$1; sub("^" p "-", "", v); print v }' | sort -V | tail -1)
if [ -n "$ver" ]; then
constraint="$PKG=$ver"
@@ -121,6 +138,26 @@ fi
echo "result: $PKG is at the latest available version"
rc=0
fi
elif command -v opkg >/dev/null 2>&1; then
(
flock 9
opkg list "$PKG" 2>/dev/null | grep -q "^$PKG - " || pkg_update 60 opkg update 2>&1
opkg install "$PKG" 2>&1
exit 0
) 9>/tmp/luci-app-honk.opkg.lock
rc=$?
if [ "$rc" != 0 ]; then
:
elif ! opkg status "$PKG" 2>/dev/null | grep -q '^Status: .* installed$'; then
echo "result: $PKG is not installed"
rc=1
elif opkg list-upgradable 2>/dev/null | grep -q "^${PKG} - "; then
echo "result: $PKG still has a pending upgrade"
rc=1
else
echo "result: $PKG is at the latest available version"
rc=0
fi
else
echo "no package manager found"
exit 3