120 lines
2.9 KiB
Bash
Executable File
120 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# SecuBox Lyrion manager
|
|
|
|
CONFIG="lyrion"
|
|
CONTAINER="secbx-lyrion"
|
|
OPKG_UPDATED=0
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage: lyrionctl <command>
|
|
|
|
Commands:
|
|
install Install prerequisites, prep folders, pull image
|
|
check Run prerequisite checks (storage, docker)
|
|
update Pull new image and restart service
|
|
status Show docker container status
|
|
logs Show docker logs (use -f to follow)
|
|
service-run Internal: run container under procd
|
|
service-stop Stop container
|
|
EOF
|
|
}
|
|
|
|
require_root() { [ "$(id -u)" -eq 0 ] || { echo "Root required" >&2; exit 1; }; }
|
|
|
|
uci_get() { uci -q get ${CONFIG}.main.$1; }
|
|
|
|
defaults() {
|
|
image="$(uci_get image || echo ghcr.io/lyrion/lyrion:latest)"
|
|
data_path="$(uci_get data_path || echo /srv/lyrion)"
|
|
media_path="$(uci_get media_path || echo /srv/media)"
|
|
port="$(uci_get port || echo 8096)"
|
|
timezone="$(uci_get timezone || echo UTC)"
|
|
}
|
|
|
|
ensure_dir() { [ -d "$1" ] || mkdir -p "$1"; }
|
|
|
|
ensure_packages() {
|
|
require_root
|
|
for pkg in "$@"; do
|
|
if ! opkg status "$pkg" >/dev/null 2>&1; then
|
|
if [ "$OPKG_UPDATED" -eq 0 ]; then
|
|
opkg update || return 1
|
|
OPKG_UPDATED=1
|
|
fi
|
|
opkg install "$pkg" || return 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
check_prereqs() {
|
|
defaults
|
|
ensure_dir "$data_path"
|
|
[ -d /sys/fs/cgroup ] || { echo "[ERROR] /sys/fs/cgroup missing" >&2; return 1; }
|
|
ensure_packages dockerd docker containerd
|
|
/etc/init.d/dockerd enable >/dev/null 2>&1
|
|
/etc/init.d/dockerd start >/dev/null 2>&1
|
|
}
|
|
|
|
pull_image() { defaults; docker pull "$image"; }
|
|
|
|
stop_container() { docker stop "$CONTAINER" >/dev/null 2>&1 || true; docker rm "$CONTAINER" >/dev/null 2>&1 || true; }
|
|
|
|
cmd_install() {
|
|
require_root
|
|
check_prereqs || exit 1
|
|
ensure_dir "$data_path/config"
|
|
pull_image || exit 1
|
|
uci set ${CONFIG}.main.enabled='1'
|
|
uci commit ${CONFIG}
|
|
/etc/init.d/lyrion enable
|
|
echo "Lyrion prerequisites installed. Start with /etc/init.d/lyrion start"
|
|
}
|
|
|
|
cmd_check() {
|
|
check_prereqs
|
|
echo "Prerequisite check completed."
|
|
}
|
|
|
|
cmd_update() {
|
|
require_root
|
|
pull_image || exit 1
|
|
if /etc/init.d/lyrion enabled >/dev/null 2>&1; then
|
|
/etc/init.d/lyrion restart
|
|
else
|
|
echo "Image updated. Restart manually."
|
|
fi
|
|
}
|
|
|
|
cmd_status() { docker ps -a --filter "name=$CONTAINER"; }
|
|
|
|
cmd_logs() { docker logs "$@" "$CONTAINER"; }
|
|
|
|
cmd_service_run() {
|
|
require_root
|
|
check_prereqs || exit 1
|
|
defaults
|
|
stop_container
|
|
exec docker run --rm \
|
|
--name "$CONTAINER" \
|
|
-p "${port}:8096" \
|
|
-v "$data_path/config:/config" \
|
|
-v "$media_path:/media" \
|
|
-e TZ="$timezone" \
|
|
"$image"
|
|
}
|
|
|
|
cmd_service_stop() { require_root; stop_container; }
|
|
|
|
case "${1:-}" in
|
|
install) shift; cmd_install "$@" ;;
|
|
check) shift; cmd_check "$@" ;;
|
|
update) shift; cmd_update "$@" ;;
|
|
status) shift; cmd_status "$@" ;;
|
|
logs) shift; cmd_logs "$@" ;;
|
|
service-run) shift; cmd_service_run "$@" ;;
|
|
service-stop) shift; cmd_service_stop "$@" ;;
|
|
help|--help|-h|'') usage ;;
|
|
*) echo "Unknown command: $1" >&2; usage >&2; exit 1 ;;
|
|
esac
|