diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 5e30beeb..dcf8bfe6 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -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 \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 \nEOF\n\\)\")", + "Bash(gzip:*)" ] } } diff --git a/package/secubox/secubox-app-bonus/root/usr/sbin/secubox-feed b/package/secubox/secubox-app-bonus/root/usr/sbin/secubox-feed index 2d4dffb5..4c11cd63 100644 --- a/package/secubox/secubox-app-bonus/root/usr/sbin/secubox-feed +++ b/package/secubox/secubox-app-bonus/root/usr/sbin/secubox-feed @@ -22,7 +22,8 @@ Commands: fetch-release Fetch latest release from GitHub/Gitea list List packages in local feed info Show package info - install Install package from local feed (force-depends) + install 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..." diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-secubox-admin_1.0.0-r18_all.ipk b/package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-secubox-admin_1.0.0-r18_all.ipk deleted file mode 100644 index b62384e6..00000000 Binary files a/package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-secubox-admin_1.0.0-r18_all.ipk and /dev/null differ diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_0.10.0-r8_all.ipk b/package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_0.10.0-r8_all.ipk deleted file mode 100644 index f84edb15..00000000 Binary files a/package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_0.10.0-r8_all.ipk and /dev/null differ diff --git a/package/secubox/secubox-core/Makefile b/package/secubox/secubox-core/Makefile index c4eb2948..f0c36c0a 100644 --- a/package/secubox/secubox-core/Makefile +++ b/package/secubox/secubox-core/Makefile @@ -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