mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-14 04:07:56 +08:00
update 2026-11-13 00:30:06
This commit is contained in:
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
|
||||
|
||||
Reference in new issue
Block a user