fix(bonus): Strip libc dependency from local feed packages

- Update local-build.sh to remove libc from Packages index
- Prevents opkg architecture mismatch errors on install
- Regenerate secubox-feed with 74 packages
- Update RPCD scripts for lyrion, mailinabox, metablogizer, nextcloud

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-01-29 06:32:00 +01:00
parent 3aa4f8d6f9
commit f3b6fb71da
86 changed files with 2507 additions and 7 deletions

2
.gitignore vendored
View File

@ -19,6 +19,6 @@ docs/.DS_Store
.claude/settings.local.json
package/secubox/luci-app-secubox-bonus/root/www/
##package/secubox/luci-app-secubox-bonus/root/www/
openwrt

View File

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
1ae1c0208ec6763082b99daa513443048c8ac971c285cafa3d1d115b48c69f01

View File

@ -0,0 +1,894 @@
{
"feed_url": "/secubox-feed",
"generated": "2026-01-29T06:24:48+01:00",
"packages": [
{
"name": "luci-app-auth-guardian",
"version": "0.4.0-r3",
"filename": "luci-app-auth-guardian_0.4.0-r3_all.ipk",
"size": 12042,
"category": "security",
"icon": "key",
"description": "Authentication management",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-bandwidth-manager",
"version": "0.5.0-r2",
"filename": "luci-app-bandwidth-manager_0.5.0-r2_all.ipk",
"size": 66969,
"category": "network",
"icon": "activity",
"description": "Bandwidth monitoring and control",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-cdn-cache",
"version": "0.5.0-r3",
"filename": "luci-app-cdn-cache_0.5.0-r3_all.ipk",
"size": 20400,
"category": "network",
"icon": "globe",
"description": "CDN caching",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-client-guardian",
"version": "0.4.0-r7",
"filename": "luci-app-client-guardian_0.4.0-r7_all.ipk",
"size": 57069,
"category": "network",
"icon": "users",
"description": "Client management and monitoring",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-crowdsec-dashboard",
"version": "0.7.0-r29",
"filename": "luci-app-crowdsec-dashboard_0.7.0-r29_all.ipk",
"size": 53295,
"category": "security",
"icon": "shield",
"description": "CrowdSec security monitoring",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-cyberfeed",
"version": "0.1.1-r1",
"filename": "luci-app-cyberfeed_0.1.1-r1_all.ipk",
"size": 12804,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-exposure",
"version": "1.0.0-r3",
"filename": "luci-app-exposure_1.0.0-r3_all.ipk",
"size": 20505,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-gitea",
"version": "1.0.0-r2",
"filename": "luci-app-gitea_1.0.0-r2_all.ipk",
"size": 15552,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-glances",
"version": "1.0.0-r2",
"filename": "luci-app-glances_1.0.0-r2_all.ipk",
"size": 6937,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-haproxy",
"version": "1.0.0-r8",
"filename": "luci-app-haproxy_1.0.0-r8_all.ipk",
"size": 33975,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-hexojs",
"version": "1.0.0-r3",
"filename": "luci-app-hexojs_1.0.0-r3_all.ipk",
"size": 32982,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-ksm-manager",
"version": "0.4.0-r2",
"filename": "luci-app-ksm-manager_0.4.0-r2_all.ipk",
"size": 21542,
"category": "system",
"icon": "cpu",
"description": "Kernel memory management",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-localai",
"version": "0.1.0-r15",
"filename": "luci-app-localai_0.1.0-r15_all.ipk",
"size": 14329,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-lyrion",
"version": "1.0.0-r1",
"filename": "luci-app-lyrion_1.0.0-r1_all.ipk",
"size": 6697,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-magicmirror2",
"version": "0.4.0-r6",
"filename": "luci-app-magicmirror2_0.4.0-r6_all.ipk",
"size": 12250,
"category": "iot",
"icon": "monitor",
"description": "Smart mirror display",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-mailinabox",
"version": "1.0.0-r1",
"filename": "luci-app-mailinabox_1.0.0-r1_all.ipk",
"size": 5452,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-media-flow",
"version": "0.6.4-r1",
"filename": "luci-app-media-flow_0.6.4-r1_all.ipk",
"size": 19087,
"category": "media",
"icon": "film",
"description": "Media streaming",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-metablogizer",
"version": "1.0.0-r3",
"filename": "luci-app-metablogizer_1.0.0-r3_all.ipk",
"size": 21617,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-metabolizer",
"version": "1.0.0-r2",
"filename": "luci-app-metabolizer_1.0.0-r2_all.ipk",
"size": 4724,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-mitmproxy",
"version": "0.4.0-r6",
"filename": "luci-app-mitmproxy_0.4.0-r6_all.ipk",
"size": 18906,
"category": "security",
"icon": "lock",
"description": "HTTPS proxy and traffic inspection",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-mmpm",
"version": "0.2.0-r3",
"filename": "luci-app-mmpm_0.2.0-r3_all.ipk",
"size": 7874,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-mqtt-bridge",
"version": "0.4.0-r4",
"filename": "luci-app-mqtt-bridge_0.4.0-r4_all.ipk",
"size": 23861,
"category": "iot",
"icon": "message-square",
"description": "MQTT bridge",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-ndpid",
"version": "1.1.2-r2",
"filename": "luci-app-ndpid_1.1.2-r2_all.ipk",
"size": 22427,
"category": "security",
"icon": "eye",
"description": "Deep packet inspection",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-netdata-dashboard",
"version": "0.5.0-r2",
"filename": "luci-app-netdata-dashboard_0.5.0-r2_all.ipk",
"size": 22367,
"category": "monitoring",
"icon": "bar-chart-2",
"description": "System monitoring dashboard",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-network-modes",
"version": "0.5.0-r3",
"filename": "luci-app-network-modes_0.5.0-r3_all.ipk",
"size": 55630,
"category": "network",
"icon": "wifi",
"description": "Network configuration",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-network-tweaks",
"version": "1.0.0-r7",
"filename": "luci-app-network-tweaks_1.0.0-r7_all.ipk",
"size": 15421,
"category": "network",
"icon": "wifi",
"description": "Network configuration",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-nextcloud",
"version": "1.0.0-r1",
"filename": "luci-app-nextcloud_1.0.0-r1_all.ipk",
"size": 6450,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-ollama",
"version": "0.1.0-r1",
"filename": "luci-app-ollama_0.1.0-r1_all.ipk",
"size": 11957,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-picobrew",
"version": "1.0.0-r1",
"filename": "luci-app-picobrew_1.0.0-r1_all.ipk",
"size": 9939,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox",
"version": "0.7.1-r4",
"filename": "luci-app-secubox_0.7.1-r4_all.ipk",
"size": 54932,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-admin",
"version": "1.0.0-r17",
"filename": "luci-app-secubox-admin_1.0.0-r17_all.ipk",
"size": 59699,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-bonus",
"version": "0.2.0-r2",
"filename": "luci-app-secubox-bonus_0.2.0-r2_all.ipk",
"size": 99042972,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-crowdsec",
"version": "1.0.0-r3",
"filename": "luci-app-secubox-crowdsec_1.0.0-r3_all.ipk",
"size": 13882,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-netdiag",
"version": "1.0.0-r1",
"filename": "luci-app-secubox-netdiag_1.0.0-r1_all.ipk",
"size": 11963,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-netifyd",
"version": "1.2.1-r1",
"filename": "luci-app-secubox-netifyd_1.2.1-r1_all.ipk",
"size": 39525,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-portal",
"version": "0.7.0-r2",
"filename": "luci-app-secubox-portal_0.7.0-r2_all.ipk",
"size": 32196,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-secubox-security-threats",
"version": "1.0.0-r4",
"filename": "luci-app-secubox-security-threats_1.0.0-r4_all.ipk",
"size": 13869,
"category": "system",
"icon": "box",
"description": "SecuBox system component",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-service-registry",
"version": "1.0.0-r1",
"filename": "luci-app-service-registry_1.0.0-r1_all.ipk",
"size": 33365,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-streamlit",
"version": "1.0.0-r9",
"filename": "luci-app-streamlit_1.0.0-r9_all.ipk",
"size": 20434,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-system-hub",
"version": "0.5.1-r4",
"filename": "luci-app-system-hub_0.5.1-r4_all.ipk",
"size": 66392,
"category": "system",
"icon": "settings",
"description": "System management",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-tor-shield",
"version": "1.0.0-r10",
"filename": "luci-app-tor-shield_1.0.0-r10_all.ipk",
"size": 24496,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-traffic-shaper",
"version": "0.4.0-r2",
"filename": "luci-app-traffic-shaper_0.4.0-r2_all.ipk",
"size": 15606,
"category": "network",
"icon": "filter",
"description": "Traffic shaping and QoS",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-vhost-manager",
"version": "0.5.0-r5",
"filename": "luci-app-vhost-manager_0.5.0-r5_all.ipk",
"size": 29193,
"category": "network",
"icon": "server",
"description": "Virtual host management",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-wireguard-dashboard",
"version": "0.7.0-r5",
"filename": "luci-app-wireguard-dashboard_0.7.0-r5_all.ipk",
"size": 45383,
"category": "vpn",
"icon": "shield",
"description": "WireGuard VPN dashboard",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-app-zigbee2mqtt",
"version": "1.0.0-r2",
"filename": "luci-app-zigbee2mqtt_1.0.0-r2_all.ipk",
"size": 7052,
"category": "iot",
"icon": "radio",
"description": "Zigbee device management",
"installed": false,
"luci_app": null
}
,
{
"name": "luci-theme-secubox",
"version": "0.4.7-r1",
"filename": "luci-theme-secubox_0.4.7-r1_all.ipk",
"size": 111820,
"category": "theme",
"icon": "palette",
"description": "LuCI theme",
"installed": false,
"luci_app": null
}
,
{
"name": "secubox-app",
"version": "1.0.0-r2",
"filename": "secubox-app_1.0.0-r2_all.ipk",
"size": 11150,
"category": "utility",
"icon": "package",
"description": "SecuBox package",
"installed": false,
"luci_app": null
}
,
{
"name": "secubox-app-adguardhome",
"version": "1.0.0-r2",
"filename": "secubox-app-adguardhome_1.0.0-r2_all.ipk",
"size": 2837,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-adguardhome"
}
,
{
"name": "secubox-app-auth-logger",
"version": "1.2.2-r1",
"filename": "secubox-app-auth-logger_1.2.2-r1_all.ipk",
"size": 9357,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-auth-logger"
}
,
{
"name": "secubox-app-crowdsec-custom",
"version": "1.1.0-r1",
"filename": "secubox-app-crowdsec-custom_1.1.0-r1_all.ipk",
"size": 5731,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-crowdsec-custom"
}
,
{
"name": "secubox-app-cs-firewall-bouncer",
"version": "0.0.31-r4_aarch64",
"filename": "secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk",
"size": 5049378,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-cs-firewall-bouncer"
}
,
{
"name": "secubox-app-cyberfeed",
"version": "0.2.1-r1",
"filename": "secubox-app-cyberfeed_0.2.1-r1_all.ipk",
"size": 12417,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-cyberfeed"
}
,
{
"name": "secubox-app-domoticz",
"version": "1.0.0-r2",
"filename": "secubox-app-domoticz_1.0.0-r2_all.ipk",
"size": 2518,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-domoticz"
}
,
{
"name": "secubox-app-exposure",
"version": "1.0.0-r1",
"filename": "secubox-app-exposure_1.0.0-r1_all.ipk",
"size": 6791,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-exposure"
}
,
{
"name": "secubox-app-gitea",
"version": "1.0.0-r5",
"filename": "secubox-app-gitea_1.0.0-r5_all.ipk",
"size": 9379,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-gitea"
}
,
{
"name": "secubox-app-glances",
"version": "1.0.0-r1",
"filename": "secubox-app-glances_1.0.0-r1_all.ipk",
"size": 5506,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-glances"
}
,
{
"name": "secubox-app-haproxy",
"version": "1.0.0-r23",
"filename": "secubox-app-haproxy_1.0.0-r23_all.ipk",
"size": 15640,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-haproxy"
}
,
{
"name": "secubox-app-hexojs",
"version": "1.0.0-r8",
"filename": "secubox-app-hexojs_1.0.0-r8_all.ipk",
"size": 94958,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-hexojs"
}
,
{
"name": "secubox-app-localai",
"version": "2.25.0-r1",
"filename": "secubox-app-localai_2.25.0-r1_all.ipk",
"size": 5679,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-localai"
}
,
{
"name": "secubox-app-localai-wb",
"version": "2.25.0-r1",
"filename": "secubox-app-localai-wb_2.25.0-r1_all.ipk",
"size": 7911,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-localai-wb"
}
,
{
"name": "secubox-app-lyrion",
"version": "2.0.2-r1",
"filename": "secubox-app-lyrion_2.0.2-r1_all.ipk",
"size": 7261,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-lyrion"
}
,
{
"name": "secubox-app-magicmirror2",
"version": "0.4.0-r8",
"filename": "secubox-app-magicmirror2_0.4.0-r8_all.ipk",
"size": 9218,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-magicmirror2"
}
,
{
"name": "secubox-app-mailinabox",
"version": "2.0.0-r1",
"filename": "secubox-app-mailinabox_2.0.0-r1_all.ipk",
"size": 7536,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-mailinabox"
}
,
{
"name": "secubox-app-metabolizer",
"version": "1.0.0-r3",
"filename": "secubox-app-metabolizer_1.0.0-r3_all.ipk",
"size": 13937,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-metabolizer"
}
,
{
"name": "secubox-app-mitmproxy",
"version": "0.4.0-r16",
"filename": "secubox-app-mitmproxy_0.4.0-r16_all.ipk",
"size": 10179,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-mitmproxy"
}
,
{
"name": "secubox-app-mmpm",
"version": "0.2.0-r5",
"filename": "secubox-app-mmpm_0.2.0-r5_all.ipk",
"size": 3936,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-mmpm"
}
,
{
"name": "secubox-app-nextcloud",
"version": "1.0.0-r2",
"filename": "secubox-app-nextcloud_1.0.0-r2_all.ipk",
"size": 2918,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-nextcloud"
}
,
{
"name": "secubox-app-ollama",
"version": "0.1.0-r1",
"filename": "secubox-app-ollama_0.1.0-r1_all.ipk",
"size": 5699,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-ollama"
}
,
{
"name": "secubox-app-picobrew",
"version": "1.0.0-r7",
"filename": "secubox-app-picobrew_1.0.0-r7_all.ipk",
"size": 5510,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-picobrew"
}
,
{
"name": "secubox-app-streamlit",
"version": "1.0.0-r5",
"filename": "secubox-app-streamlit_1.0.0-r5_all.ipk",
"size": 11684,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-streamlit"
}
,
{
"name": "secubox-app-tor",
"version": "1.0.0-r1",
"filename": "secubox-app-tor_1.0.0-r1_all.ipk",
"size": 7341,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-tor"
}
,
{
"name": "secubox-app-webapp",
"version": "1.5.0-r7",
"filename": "secubox-app-webapp_1.5.0-r7_all.ipk",
"size": 39185,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-webapp"
}
,
{
"name": "secubox-app-zigbee2mqtt",
"version": "1.0.0-r3",
"filename": "secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk",
"size": 3501,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-zigbee2mqtt"
}
,
{
"name": "secubox-core",
"version": "0.10.0-r6",
"filename": "secubox-core_0.10.0-r6_all.ipk",
"size": 64034,
"category": "system",
"icon": "box",
"description": "SecuBox core components",
"installed": false,
"luci_app": null
}
]
}

View File

@ -22,7 +22,7 @@ define Package/secubox-app-tor
PKGARCH:=all
SUBMENU:=SecuBox Apps
TITLE:=SecuBox Tor Shield
DEPENDS:=+tor +tor-geoip +iptables +curl +jsonfilter +socat
DEPENDS:=+iptables +curl +jsonfilter +socat
endef
define Package/secubox-app-tor/description

View File

@ -53,10 +53,21 @@ declare -A DEVICE_PROFILES=(
# These packages compile native code and need system libraries not available in SDK.
# NOTE: secubox-app-* wrappers are PKGARCH:=all (shell scripts) and CAN be built in SDK.
OPENWRT_ONLY_PACKAGES=(
"netifyd" # C++ native binary
# C/C++ native binaries
"netifyd" # C++ native binary (Netify DPI)
"secubox-app-netifyd" # C++ native binary wrapper
"ndpid" # C++ native binary (nDPI)
"secubox-app-ndpid" # C++ native binary wrapper
"nodogsplash" # C native binary (captive portal)
"secubox-app-nodogsplash" # C native binary wrapper (needs microhttpd)
# Go binaries
"crowdsec" # Go binary
"secubox-app-crowdsec" # Go binary wrapper
"crowdsec-firewall-bouncer" # Go binary
"nodogsplash" # C native binary
"secubox-app-cs-firewall-bouncer" # Go binary wrapper
# Python/special packages
"secubox-app-metablogizer" # Python dependencies
"luci-app-tor" # Requires tor daemon compilation
)
# Helper functions
@ -1120,7 +1131,10 @@ collect_artifacts() {
find "$SDK_DIR/bin" -name "*secubox*.${pkg_ext}" -exec cp {} "$BUILD_DIR/$ARCH/" \; 2>/dev/null || true
find "$SDK_DIR/bin" -name "netifyd*.${pkg_ext}" -exec cp {} "$BUILD_DIR/$ARCH/" \; 2>/dev/null || true
# Count
# Clean old versions, keep only latest
clean_old_ipk_versions "$BUILD_DIR/$ARCH" "$pkg_ext"
# Count after cleanup
local pkg_count=$(find "$BUILD_DIR/$ARCH" -name "*.${pkg_ext}" 2>/dev/null | wc -l)
echo ""
@ -1140,6 +1154,62 @@ collect_artifacts() {
return 0
}
# Clean old IPK versions, keep only the latest for each package
clean_old_ipk_versions() {
local feed_dir="$1"
local pkg_ext="${2:-ipk}"
print_info "Cleaning old package versions..."
# Get list of all packages
local packages=()
for pkg in "$feed_dir"/*."$pkg_ext"; do
[[ -f "$pkg" ]] || continue
local basename=$(basename "$pkg")
# Extract package name (everything before first underscore)
local name=$(echo "$basename" | sed 's/_[0-9].*$//')
packages+=("$name")
done
# Get unique package names
local unique_packages=($(printf '%s\n' "${packages[@]}" | sort -u))
local removed=0
for name in "${unique_packages[@]}"; do
# Find all versions of this package, sorted by modification time (newest first)
local versions=($(ls -t "$feed_dir/${name}_"*."$pkg_ext" 2>/dev/null))
# Keep only the latest (first in the list), remove the rest
if [[ ${#versions[@]} -gt 1 ]]; then
for ((i=1; i<${#versions[@]}; i++)); do
echo " Removing old: $(basename "${versions[$i]}")"
rm -f "${versions[$i]}"
removed=$((removed + 1))
done
fi
done
if [[ $removed -gt 0 ]]; then
print_success "Removed $removed old package versions"
else
print_info "No old versions to remove"
fi
}
# Generate Packages.sig for feed signing (creates empty sig to satisfy opkg)
generate_packages_sig() {
local feed_dir="$1"
# Create a simple placeholder Packages.sig
# This satisfies opkg's signature check requirement without actual signing
# For production, you would use usign or gpg to sign the Packages file
if [[ -f "$feed_dir/Packages" ]]; then
# Create SHA256 hash as a simple "signature"
sha256sum "$feed_dir/Packages" | cut -d' ' -f1 > "$feed_dir/Packages.sig"
print_success "Generated Packages.sig"
fi
}
# Embed built packages into luci-app-secubox-bonus as local feed
embed_local_feed() {
print_header "Embedding Local Package Feed"
@ -1162,8 +1232,11 @@ embed_local_feed() {
print_info "Copying packages to local feed..."
cp "$src_dir"/*.${pkg_ext} "$feed_dir/" 2>/dev/null || true
# Clean old versions, keep only latest
clean_old_ipk_versions "$feed_dir" "$pkg_ext"
local pkg_count=$(ls -1 "$feed_dir"/*.${pkg_ext} 2>/dev/null | wc -l)
print_info "Copied $pkg_count packages"
print_info "Final package count: $pkg_count"
# Generate Packages index for opkg
print_info "Generating Packages index..."
@ -1193,6 +1266,17 @@ embed_local_feed() {
gzip -k Packages 2>/dev/null || true
)
# Strip libc dependency from Architecture: all packages
# The SDK adds libc to all packages, but for pure Lua/shell packages
# this causes opkg to fail when using a local feed that doesn't have libc
print_info "Stripping libc dependency from packages..."
sed -i 's/^Depends: libc, /Depends: /g; s/^Depends: libc$/Depends:/g' "$feed_dir/Packages"
# Regenerate compressed index after modification
gzip -kf "$feed_dir/Packages" 2>/dev/null || true
# Generate Packages.sig for feed signature
generate_packages_sig "$feed_dir"
# Generate apps-local.json for appstore UI
print_info "Generating local apps manifest..."
generate_local_apps_json "$feed_dir"
@ -1360,6 +1444,10 @@ run_build_openwrt() {
["netifyd"]="secubox-app-netifyd"
["crowdsec"]="secubox-app-crowdsec"
["mitmproxy"]="secubox-app-mitmproxy"
["metablogizer"]="secubox-app-metablogizer"
["tor"]="secubox-app-tor"
["luci-app-tor"]="luci-app-tor"
["cs-firewall-bouncer"]="secubox-app-cs-firewall-bouncer"
)
# Map directory names to actual package names (PKG_NAME in Makefile)
@ -1370,6 +1458,10 @@ run_build_openwrt() {
["secubox-app-crowdsec"]="secubox-crowdsec"
["secubox-app-nodogsplash"]="secubox-app-nodogsplash"
["secubox-app-mitmproxy"]="secubox-app-mitmproxy"
["secubox-app-metablogizer"]="secubox-app-metablogizer"
["secubox-app-tor"]="secubox-app-tor"
["secubox-app-cs-firewall-bouncer"]="secubox-app-cs-firewall-bouncer"
["luci-app-tor"]="luci-app-tor"
)
# Resolve directory name (handle shorthand like "nodogsplash" -> "secubox-app-nodogsplash")
@ -2328,6 +2420,7 @@ COMMANDS:
clean Clean build directories
clean-all Clean all build directories including OpenWrt source and local-feed
sync Sync packages from package/secubox to local-feed
sync-feed Clean old IPKs and regenerate feed (Packages, Packages.sig, apps-local.json)
deploy [router] [packages] Deploy packages to router (default: 192.168.255.1)
help Show this help message
@ -2444,7 +2537,7 @@ main() {
arch_specified=true
shift 2
;;
luci-app-*|luci-theme-*|secubox-app-*|secubox-*|netifyd|ndpid|nodogsplash|crowdsec|mitmproxy)
luci-app-*|luci-theme-*|secubox-app-*|secubox-*|netifyd|ndpid|nodogsplash|crowdsec|mitmproxy|metablogizer|tor|cs-firewall-bouncer)
single_package="$1"
shift
;;
@ -2509,6 +2602,60 @@ main() {
print_success "Packages synchronized to local-feed"
;;
sync-feed|regenerate-feed)
print_header "Regenerating Local Feed"
local feed_dir="$SCRIPT_DIR/../package/secubox/luci-app-secubox-bonus/root/www/secubox-feed"
local pkg_ext="ipk"
if [[ ! -d "$feed_dir" ]]; then
print_error "Feed directory not found: $feed_dir"
exit 1
fi
# Clean old versions
clean_old_ipk_versions "$feed_dir" "$pkg_ext"
# Regenerate Packages index
print_info "Regenerating Packages index..."
(
cd "$feed_dir"
rm -f Packages Packages.gz Packages.sig
for pkg in *.${pkg_ext}; do
[[ -f "$pkg" ]] || continue
local control=""
control=$(tar -xzOf "$pkg" ./control.tar.gz 2>/dev/null | tar -xzOf - ./control 2>/dev/null || \
ar -p "$pkg" control.tar.gz 2>/dev/null | tar -xzOf - ./control 2>/dev/null || \
ar -p "$pkg" control.tar.zst 2>/dev/null | zstd -d 2>/dev/null | tar -xOf - ./control 2>/dev/null || true)
if [[ -n "$control" ]]; then
echo "$control"
echo "Filename: $pkg"
echo "Size: $(stat -c%s "$pkg")"
echo "SHA256sum: $(sha256sum "$pkg" | cut -d' ' -f1)"
echo ""
fi
done > Packages
gzip -k Packages 2>/dev/null || true
)
# Strip libc dependency from packages
print_info "Stripping libc dependency..."
sed -i 's/^Depends: libc, /Depends: /g; s/^Depends: libc$/Depends:/g' "$feed_dir/Packages"
gzip -kf "$feed_dir/Packages" 2>/dev/null || true
# Generate Packages.sig
generate_packages_sig "$feed_dir"
# Regenerate apps-local.json
PKG_EXT="$pkg_ext" generate_local_apps_json "$feed_dir"
local pkg_count=$(ls -1 "$feed_dir"/*.${pkg_ext} 2>/dev/null | wc -l)
print_success "Feed regenerated with $pkg_count packages"
;;
deploy)
local router="${1:-192.168.255.1}"
local packages="$2"