fix(localai): Check Docker daemon is running before extracting rootfs

- Add runtime_is_working() to verify daemon connectivity
- Falls back to standalone binary with helpful message if daemon not running
- Provides hint: /etc/init.d/dockerd start

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-01-21 18:29:53 +01:00
parent 23d511fcae
commit ec1f722687
3 changed files with 69 additions and 8 deletions

View File

@ -65,7 +65,45 @@
"WebFetch(domain:docs.cybermind.fr)",
"WebFetch(domain:lyrion.org)",
"Bash(git pull:*)",
"Bash(git stash:*)"
"Bash(git stash:*)",
"Bash(./secubox-tools/localbuild.sh:*)",
"Bash(./scripts/sync-to-feed.sh:*)",
"Bash(sh:*)",
"Bash(dash:*)",
"Bash(scp:*)",
"Bash(/home/reepost/CyberMindStudio/_files/secubox-openwrt/secubox-tools/local-build.sh:*)",
"Bash(ping:*)",
"WebFetch(domain:docs.mitmproxy.org)",
"WebSearch",
"WebFetch(domain:forum.openwrt.org)",
"WebFetch(domain:nicolargo.github.io)",
"Bash(ssh-keygen:*)",
"Bash(scripts/build-packages.sh:*)",
"Bash(readlink:*)",
"Bash(ROUTER_IP=\"192.168.8.191\":*)",
"Bash(PKG_PATH=\"/home/reepost/CyberMindStudio/_files/secubox-openwrt/secubox-tools/build/aarch64_cortex-a72/secubox-app-webapp_1.1.0-r1_all.ipk\")",
"Bash(__NEW_LINE_cfb353d51df65726__ echo \"Deploying to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_cfb353d51df65726__ echo \"Installing package on router...\")",
"Bash(ROUTER_IP=\"192.168.8.1\")",
"Bash(__NEW_LINE_63a99eb14feaadfb__ echo \"Deploying to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_63a99eb14feaadfb__ echo \"Installing package on router...\")",
"Bash(__NEW_LINE_dd8ac110f380441b__ echo \"Deploying to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_dd8ac110f380441b__ echo \"Installing package on router...\")",
"Bash(ROUTER_IP=\"192.168.255.1\":*)",
"Bash(__NEW_LINE_23d0cf42d6f3e749__ echo \"Deploying to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_23d0cf42d6f3e749__ echo \"Installing package on router...\")",
"Bash(PKG_PATH=\"/home/reepost/CyberMindStudio/_files/secubox-openwrt/secubox-tools/build/aarch64_cortex-a72/secubox-app-webapp_1.2.0-r1_all.ipk\":*)",
"Bash(__NEW_LINE_149ef654235bfc1e__ echo \"Deploying v1.2.0 to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_149ef654235bfc1e__ echo \"Installing package on router...\")",
"Bash(PKG_PATH=\"/home/reepost/CyberMindStudio/_files/secubox-openwrt/secubox-tools/build/aarch64_cortex-a72/secubox-app-webapp_1.3.0-r1_all.ipk\")",
"Bash(__NEW_LINE_00785cf715958748__ echo \"Deploying optimized v1.3.0 to router $ROUTER_IP...\")",
"Bash(__NEW_LINE_00785cf715958748__ echo \"Installing package on router...\")",
"Bash(wc:*)",
"WebFetch(domain:api.github.com)",
"Bash(./build.sh:*)",
"Bash(cd /home/reepost/CyberMindStudio/_files/secubox-openwrt/secubox-tools/sdk ./scripts/feeds update secubox)",
"Bash(./staging_dir/host/bin/ipkg-build:*)",
"Bash(./scripts/ipkg-build:*)"
]
}
}

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=secubox-app-localai
PKG_RELEASE:=8
PKG_RELEASE:=9
PKG_VERSION:=0.1.0
PKG_ARCH:=all
PKG_MAINTAINER:=CyberMind Studio <contact@cybermind.fr>

View File

@ -185,15 +185,19 @@ lxc_install() {
local rootfs="$lxc_path/$CONTAINER_NAME/rootfs"
local config="$lxc_path/$CONTAINER_NAME/config"
# Check if we should extract from Docker image (preferred - includes all backends)
# Check if we can extract from Docker image (preferred - includes all backends)
local use_docker_extract=0
if command -v podman >/dev/null 2>&1 || command -v docker >/dev/null 2>&1; then
if command -v podman >/dev/null 2>&1 && runtime_is_working podman; then
use_docker_extract=1
elif command -v docker >/dev/null 2>&1 && runtime_is_working docker; then
use_docker_extract=1
fi
if [ "$use_docker_extract" = "1" ]; then
lxc_install_from_docker "$rootfs" || return 1
else
log_warn "No working Docker/Podman daemon - using standalone binary"
log_warn "For full backend support, start Docker: /etc/init.d/dockerd start"
lxc_install_standalone "$rootfs" || return 1
fi
@ -205,18 +209,37 @@ lxc_install() {
return 0
}
# Check if container runtime daemon is actually working
runtime_is_working() {
local rt="$1"
case "$rt" in
podman)
# Podman is daemonless, just check command works
podman info >/dev/null 2>&1
;;
docker)
# Docker needs daemon running
docker info >/dev/null 2>&1
;;
*)
return 1
;;
esac
}
# Extract rootfs from Docker image (includes all backends)
lxc_install_from_docker() {
local rootfs="$1"
local rt=""
# Detect available runtime for extraction
if command -v podman >/dev/null 2>&1; then
# Detect available AND WORKING runtime for extraction
if command -v podman >/dev/null 2>&1 && runtime_is_working podman; then
rt="podman"
elif command -v docker >/dev/null 2>&1; then
elif command -v docker >/dev/null 2>&1 && runtime_is_working docker; then
rt="docker"
else
log_error "Need podman or docker to extract image"
log_error "Need working podman or docker to extract image"
log_error "Docker installed but daemon not running? Start with: /etc/init.d/dockerd start"
return 1
fi