Updated secubox-app-mailinabox plugin catalog to match the main catalog.json entry.
Changes to plugin catalog (plugins/catalog/secubox-app-mailinabox.json):
- category: "productivity" → "hosting" (more accurate classification)
- min_storage_mb: 1024 → 2048 (realistic for email server with attachments)
- status: "stable" → "beta" (matches maturity level)
- tags: added "hosting" tag
- capabilities: added "hosting" capability
- notes: added "Port 25 must be accessible" (important for email server)
Context:
SecuBox uses two catalog sources:
1. Main catalog.json - Used by get_appstore_apps RPCD method for Apps Manager UI
2. Individual plugin catalogs - Used by secubox-appstore CLI for package detection
This ensures both sources provide consistent metadata.
Integration with luci-app-secubox-admin:
✅ secubox-app-mailinabox is now fully integrated into the admin interface
✅ Installation detection works automatically via opkg package checking
✅ Apps Manager will show:
- "Install" button if package not installed
- "Configure" and "Remove" buttons if package is installed
✅ Status detection flow:
1. API.getApps() → reads main catalog.json
2. API.getModules() → calls secubox-appstore list --json
3. secubox-appstore checks if secubox-app-mailinabox is installed via opkg
4. Returns status in modules list
5. Frontend displays appropriate buttons based on status
Also incremented PKG_RELEASE: 4 → 5
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changed Docker dependencies from hard requirements to optional, allowing the package
to install on routers without Docker pre-installed.
Problem:
- Package installation failed with "cannot find dependency dockerd/docker/containerd"
- Users couldn't install the package even though the control script handles Docker
installation automatically via `mailinaboxctl install`
Solution:
- Removed hard dependencies: dockerd, docker, containerd from DEPENDS line
- Kept only essential UCI dependencies: +uci +libuci
- The mailinaboxctl script already handles Docker installation in ensure_packages()
function (line 95) when running `mailinaboxctl install`
Installation workflow now:
1. Install package: opkg install secubox-app-mailinabox_1.0.0-r2_all.ipk ✅
2. Run setup: mailinaboxctl install
- Automatically installs dockerd, docker, containerd via opkg
- Creates directories, pulls Docker image
- Configures service
3. Configure: Edit /etc/config/mailinabox (hostname, admin_email)
4. Start service: /etc/init.d/mailinabox start
Build verification:
✅ Package builds successfully: 3.9KB
✅ No dependency errors during installation
✅ Docker auto-installation handled by control script
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed critical Makefile structure issue that prevented luci-app-secubox-admin from
being indexed by the feed system and built by the SDK.
Changes:
1. Added `include $(TOPDIR)/rules.mk` at the beginning (required for all OpenWrt packages)
2. Added PKG_LICENSE and PKG_MAINTAINER fields (best practices)
3. Added LUCI_PKGARCH:=all to match other LuCI packages
4. Added closing comment `# call BuildPackage - OpenWrt buildroot`
5. Moved include statements to proper positions
This fix aligns the Makefile with the standard OpenWrt/LuCI package structure used
by luci-app-secubox and other working packages.
Additionally:
- Suppressed kconfig warnings in local-build.sh by redirecting stderr to /dev/null
for all `make defconfig` commands (lines 532, 782, 1278)
Build verification:
✅ Package now appears in feeds/secubox.index
✅ Successfully builds: luci-app-secubox-admin_1.0.0-r2_all.ipk (8.3KB)
✅ Total SecuBox packages built: 33
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Removed hard dependency on crowdsec package to fix recursive dependency error:
- luci-app-crowdsec-dashboard previously depended on crowdsec
- This created circular dependency with secubox-app-crowdsec
CrowdSec should be installed separately or via catalog if needed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Adds the missing /usr/share/secubox/plugins/catalog/ directory that is
documented but was not created by the package installer.
Changes:
- Create plugins/catalog directory structure
- Update Makefile to install catalog directory
- Add README explaining module catalog format
- Add example module catalog JSON file as reference
Directory structure:
- /usr/share/secubox/modules/ - Runtime module metadata (empty by design)
- /usr/share/secubox/plugins/catalog/ - Module catalog manifests
- /usr/share/secubox/scripts/ - Shared helper scripts
This completes the directory structure documented in the README.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The luci.magicmirror RPCD backend script needs executable permissions to function properly as an RPCD handler.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>