secubox-openwrt/package/secubox/secubox-app-repo/root/usr/sbin/repoctl
CyberMind-FR 9cd59b77ba feat(repo): Add secubox-app-repo and luci-app-repo packages
Backend package (secubox-app-repo):
- repoctl CLI for managing local package repository
- repo-sync script to download packages from GitHub releases
- uhttpd-based server on port 8888
- UCI configuration at /etc/config/repo
- RPCD handler for LuCI integration
- Auto-sync cron support (configurable interval)

Frontend package (luci-app-repo):
- Dashboard showing repository status and package counts
- Sync button to trigger package downloads
- Log viewer for sync operations
- Usage instructions for opkg configuration

Supported architectures:
- x86_64, aarch64_cortex-a72, aarch64_generic
- mips_24kc, mipsel_24kc

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-18 10:21:23 +01:00

157 lines
3.8 KiB
Bash
Executable File

#!/bin/sh
# SecuBox Package Repository Control Tool
. /lib/functions.sh
REPO_DIR="/srv/repo.secubox.in"
CONFIG="repo"
usage() {
cat << EOF
Usage: repoctl <command> [options]
Commands:
status Show repository status
sync [version] Sync packages from GitHub release
start Start repository server
stop Stop repository server
restart Restart repository server
list [arch] List packages for architecture
config Show current configuration
set <key> <val> Set configuration value
Configuration keys:
enabled Enable/disable repo (0/1)
version Release version to sync (e.g., v1.0.0-beta)
github_repo GitHub repository (e.g., gkerma/secubox-openwrt)
port Server port (default: 8888)
auto_sync Enable auto-sync cron (0/1)
sync_interval Sync interval in hours (default: 6)
Examples:
repoctl status
repoctl sync v1.0.0-beta
repoctl list x86_64
repoctl set version v1.0.1
EOF
exit 1
}
cmd_status() {
config_load "$CONFIG"
config_get enabled main enabled "1"
config_get version main version "unknown"
config_get github_repo main github_repo "gkerma/secubox-openwrt"
config_get port main port "8888"
config_get last_sync main last_sync "never"
config_get auto_sync main auto_sync "0"
echo "SecuBox Package Repository Status"
echo "=================================="
echo "Enabled: $enabled"
echo "Version: $version"
echo "GitHub Repo: $github_repo"
echo "Server Port: $port"
echo "Last Sync: $last_sync"
echo "Auto Sync: $auto_sync"
echo ""
# Check server status
if netstat -tln 2>/dev/null | grep -q ":$port "; then
echo "Server: RUNNING (port $port)"
else
echo "Server: STOPPED"
fi
# Package counts
echo ""
echo "Packages:"
for dir in "$REPO_DIR/luci"/*; do
[ -d "$dir" ] || continue
arch=$(basename "$dir")
count=$(ls "$dir"/*.ipk 2>/dev/null | wc -l)
echo " $arch: $count packages"
done
}
cmd_sync() {
local version="${1:-}"
if [ -n "$version" ]; then
uci set "$CONFIG.main.version=$version"
uci commit "$CONFIG"
fi
/usr/sbin/repo-sync
}
cmd_start() {
/etc/init.d/repo-server start
echo "Repository server started"
}
cmd_stop() {
/etc/init.d/repo-server stop
echo "Repository server stopped"
}
cmd_restart() {
/etc/init.d/repo-server restart
echo "Repository server restarted"
}
cmd_list() {
local arch="${1:-x86_64}"
local dir="$REPO_DIR/luci/$arch"
if [ ! -d "$dir" ]; then
echo "Architecture '$arch' not found"
echo "Available: $(ls "$REPO_DIR/luci" 2>/dev/null | tr '\n' ' ')"
exit 1
fi
echo "Packages for $arch:"
ls "$dir"/*.ipk 2>/dev/null | while read pkg; do
basename "$pkg"
done
}
cmd_config() {
uci show "$CONFIG"
}
cmd_set() {
local key="$1"
local value="$2"
[ -z "$key" ] || [ -z "$value" ] && usage
uci set "$CONFIG.main.$key=$value"
uci commit "$CONFIG"
echo "Set $key = $value"
# Handle auto_sync changes
if [ "$key" = "auto_sync" ]; then
if [ "$value" = "1" ]; then
config_get interval main sync_interval "6"
echo "0 */$interval * * * /usr/sbin/repo-sync >/dev/null 2>&1" > /etc/cron.d/repo-sync
echo "Enabled auto-sync every $interval hours"
else
rm -f /etc/cron.d/repo-sync
echo "Disabled auto-sync"
fi
/etc/init.d/cron restart 2>/dev/null
fi
}
# Main
case "$1" in
status) cmd_status ;;
sync) cmd_sync "$2" ;;
start) cmd_start ;;
stop) cmd_stop ;;
restart) cmd_restart ;;
list) cmd_list "$2" ;;
config) cmd_config ;;
set) cmd_set "$2" "$3" ;;
*) usage ;;
esac