feat(bonus): Add 'secubox-feed install all' command

Installs all packages from the local feed in dependency order:
1. secubox-core and secubox-app (base)
2. secubox-app-* backend packages
3. luci-app-* frontend packages
4. luci-theme-* themes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-01-30 06:43:57 +01:00
parent c00d468617
commit 98a98c888d
5 changed files with 85 additions and 3 deletions

View File

@ -177,7 +177,14 @@
"Bash(strip_libc_from_ipk:*)",
"Bash(sort:*)",
"Bash(FEED=\"/home/reepost/CyberMindStudio/secubox-openwrt/package/secubox/secubox-app-bonus/root/www/secubox-feed\" grep:*)",
"Bash(zcat:*)"
"Bash(zcat:*)",
"Bash(git -C /home/reepost/CyberMindStudio/secubox-openwrt add package/secubox/*/Makefile package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages.gz)",
"Bash(git -C /home/reepost/CyberMindStudio/secubox-openwrt add package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_*.ipk git -C /home/reepost/CyberMindStudio/secubox-openwrt status --short)",
"Bash(git -C /home/reepost/CyberMindStudio/secubox-openwrt commit -m \"$\\(cat <<''EOF''\nfix\\(deps\\): Remove libubox/libubus/libuci from all SecuBox package dependencies\n\nThese base OpenWrt libraries are always present on the system but their\nversions in the SDK-built feed don''t match the router''s installed versions,\ncausing opkg to fail with \"Cannot satisfy dependencies\" errors.\n\nFixed packages \\(18 total\\):\n- secubox-core: removed libubox, libubus, libuci\n- luci-app-ksm-manager: removed libubus, libubox\n- luci-app-mqtt-bridge: removed libuci\n- secubox-app-adguardhome: removed uci, libuci\n- secubox-app-auth-logger: removed libubox-lua\n- secubox-app-domoticz: removed uci, libuci\n- secubox-app-gitea: removed uci, libuci\n- secubox-app-glances: removed uci, libuci\n- secubox-app-hexojs: removed uci, libuci\n- secubox-app-lyrion: removed uci, libuci\n- secubox-app-magicmirror2: removed uci, libuci\n- secubox-app-mailinabox: removed uci, libuci\n- secubox-app-mitmproxy: removed uci, libuci\n- secubox-app-nextcloud: removed uci, libuci\n- secubox-app-ollama: removed uci, libuci\n- secubox-app-picobrew: removed uci, libuci\n- secubox-app-streamlit: removed uci, libuci\n- secubox-app-zigbee2mqtt: removed uci, libuci\n\nThe packages still work because these libs are implicitly available.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(git -C /home/reepost/CyberMindStudio/secubox-openwrt push origin release/v0.15.0)",
"Bash(git -C /home/reepost/CyberMindStudio/secubox-openwrt add package/secubox/secubox-core/Makefile package/secubox/luci-app-secubox-admin/Makefile package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages* package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_*.ipk package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-secubox-admin_*.ipk)",
"Bash(__NEW_LINE_9c0ea50a93f8f5be__ git -C /home/reepost/CyberMindStudio/secubox-openwrt commit -m \"$\\(cat <<''EOF''\nfix\\(deps\\): Remove ALL dependencies from secubox-core and luci-app-secubox-admin\n\nEven rpcd, bash, jsonfilter, jq depend on libc themselves. Since these\npackages are always present on a working OpenWrt/SecuBox system, we should\nnot declare any dependencies at all.\n\n- secubox-core 0.10.0-r9: DEPENDS:= \\(empty\\)\n- luci-app-secubox-admin 1.0.0-r19: LUCI_DEPENDS:= \\(empty\\)\n\nThis prevents opkg from trying to resolve any feed packages and their\ncascading libc dependencies.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(gzip:*)"
]
}
}

View File

@ -22,7 +22,8 @@ Commands:
fetch-release <pkg> Fetch latest release from GitHub/Gitea
list List packages in local feed
info <pkg> Show package info
install <pkg> Install package from local feed (force-depends)
install <pkg> Install package from local feed
install all Install all packages from local feed
clean Remove old package versions
serve Start simple HTTP server for WAN access
export Export feed URL for sharing
@ -211,6 +212,13 @@ package_info() {
# Install package from local feed (handles dependencies)
install_package() {
local pkg="$1"
# Handle "all" - install all packages
if [ "$pkg" = "all" ]; then
install_all_packages
return $?
fi
local ipk_pattern="$FEED_DIR/${pkg}_"*.ipk
# Find the IPK file
@ -242,6 +250,73 @@ install_package() {
opkg install "$found"
}
# Install all packages from local feed
install_all_packages() {
log "Installing all packages from local feed..."
local total=0
local installed=0
local failed=0
# First pass: install secubox-core and dependencies
for ipk in "$FEED_DIR"/secubox-core_*.ipk "$FEED_DIR"/secubox-app_*.ipk; do
[ -f "$ipk" ] || continue
total=$((total + 1))
local name=$(basename "$ipk" | sed 's/_[0-9].*//')
log " Installing $name..."
if opkg install "$ipk" 2>/dev/null; then
installed=$((installed + 1))
else
failed=$((failed + 1))
fi
done
# Second pass: install secubox-app-* backend packages
for ipk in "$FEED_DIR"/secubox-app-*.ipk; do
[ -f "$ipk" ] || continue
# Skip secubox-app-bonus (meta package)
echo "$ipk" | grep -q "secubox-app-bonus" && continue
total=$((total + 1))
local name=$(basename "$ipk" | sed 's/_[0-9].*//')
log " Installing $name..."
if opkg install "$ipk" 2>/dev/null; then
installed=$((installed + 1))
else
failed=$((failed + 1))
fi
done
# Third pass: install luci-app-* frontend packages
for ipk in "$FEED_DIR"/luci-app-*.ipk; do
[ -f "$ipk" ] || continue
total=$((total + 1))
local name=$(basename "$ipk" | sed 's/_[0-9].*//')
log " Installing $name..."
if opkg install "$ipk" 2>/dev/null; then
installed=$((installed + 1))
else
failed=$((failed + 1))
fi
done
# Fourth pass: install luci-theme-* packages
for ipk in "$FEED_DIR"/luci-theme-*.ipk; do
[ -f "$ipk" ] || continue
total=$((total + 1))
local name=$(basename "$ipk" | sed 's/_[0-9].*//')
log " Installing $name..."
if opkg install "$ipk" 2>/dev/null; then
installed=$((installed + 1))
else
failed=$((failed + 1))
fi
done
log ""
log "Installation complete: $installed/$total succeeded, $failed failed"
return 0
}
# Clean old versions
clean_old_versions() {
log "Cleaning old package versions..."

View File

@ -21,7 +21,7 @@ define Package/secubox-core
TITLE:=SecuBox Core Framework
# No explicit dependencies - all required packages (rpcd, bash, jsonfilter, jq) are part of base OpenWrt
# Declaring them causes opkg to pull from feed, triggering libc version conflicts
DEPENDS:=
DEPENDS:=jq jsonfilter
PKGARCH:=all
endef