Update For Docker Socket Support
CI / test (push) Successful in 1m1s
Release rolling / release (push) Successful in 7m11s

This commit is contained in:
Raven Scott
2026-07-19 13:26:52 -04:00
parent 1458915d78
commit 584e1c9c42
9 changed files with 152 additions and 15 deletions
+87 -3
View File
@@ -102,6 +102,23 @@ host_triple() {
echo "${os}-${arch}"
}
# First existing Docker Engine unix socket (empty if none).
detect_docker_socket() {
local p
for p in \
"${PEARDATA_DOCKER_SOCKET:-}" \
/var/run/docker.sock \
/run/docker.sock \
/var/run/podman/podman.sock \
/run/podman/podman.sock
do
[[ -n "$p" && -S "$p" ]] || continue
printf '%s\n' "$p"
return 0
done
return 1
}
# ─── args ───────────────────────────────────────────────────────────────────
parse_args() {
while [[ $# -gt 0 ]]; do
@@ -341,12 +358,71 @@ install_server() {
run_root sh -c "printf '\\n# Host journal for Logs tab (set to 0 to disable)\\nPEARDATA_JOURNAL=1\\n' >> '${SERVER_DIR}/.env'"
fi
# Docker socket access — container names (e.g. dozzle) + per-container metrics
local docker_detected=0
local docker_sock=""
local docker_group_name=""
docker_sock="$(detect_docker_socket || true)"
if [[ -n "$docker_sock" ]]; then
docker_detected=1
elif getent group docker >/dev/null 2>&1; then
docker_detected=1
docker_sock="/var/run/docker.sock"
elif command -v docker >/dev/null 2>&1; then
docker_detected=1
docker_sock="/var/run/docker.sock"
fi
if getent group docker >/dev/null 2>&1; then
docker_group_name="docker"
fi
if [[ "$docker_detected" -eq 1 ]]; then
ok "Docker detected${docker_sock:+ (socket ${docker_sock})}"
if [[ -n "$docker_group_name" ]]; then
log "Adding peardata to ${docker_group_name} for Docker socket / container names…"
if command -v usermod >/dev/null 2>&1; then
run_root usermod -aG "$docker_group_name" peardata || warn "usermod -aG ${docker_group_name} peardata failed"
elif command -v gpasswd >/dev/null 2>&1; then
run_root gpasswd -a peardata "$docker_group_name" || warn "gpasswd -a peardata ${docker_group_name} failed"
else
warn "Could not add peardata to ${docker_group_name} (no usermod/gpasswd)"
fi
else
warn "Docker socket present but no 'docker' group — grant peardata read access to ${docker_sock} manually"
fi
if ! run_root grep -qE '^PEARDATA_DOCKER=' "${SERVER_DIR}/.env" 2>/dev/null; then
log "Enabling PEARDATA_DOCKER=1 in ${SERVER_DIR}/.env (container metrics + names)"
run_root sh -c "printf '\\n# Docker collector (names via socket; set to 0 to disable)\\nPEARDATA_DOCKER=1\\nPEARDATA_DOCKER_SOCKET=%s\\n' '${docker_sock}' >> '${SERVER_DIR}/.env'"
else
# Keep collector flag; refresh socket path if unset
if ! run_root grep -qE '^PEARDATA_DOCKER_SOCKET=' "${SERVER_DIR}/.env" 2>/dev/null; then
run_root sh -c "printf 'PEARDATA_DOCKER_SOCKET=%s\\n' '${docker_sock}' >> '${SERVER_DIR}/.env'"
fi
fi
else
log "Docker not detected — skipping socket access (install Docker later, then re-run installer or: usermod -aG docker peardata && PEARDATA_DOCKER=1)"
fi
run_root chown -R peardata:peardata "$SERVER_DIR" 2>/dev/null || run_root chown -R peardata "$SERVER_DIR"
unit_path="/etc/systemd/system/peardata.service"
local journal_group_line=""
# systemd SupplementaryGroups replaces the user's supplementary set — list every group we need
local supp_groups=()
if getent group systemd-journal >/dev/null 2>&1; then
journal_group_line="SupplementaryGroups=systemd-journal"
supp_groups+=("systemd-journal")
fi
if [[ "$docker_detected" -eq 1 && -n "$docker_group_name" ]]; then
supp_groups+=("$docker_group_name")
fi
local supp_groups_line=""
if [[ ${#supp_groups[@]} -gt 0 ]]; then
supp_groups_line="SupplementaryGroups=${supp_groups[*]}"
fi
local docker_after_line=""
local docker_wants_line=""
if [[ "$docker_detected" -eq 1 ]]; then
docker_after_line="After=docker.service"
docker_wants_line="Wants=docker.service"
fi
log "Writing ${unit_path}"
run_root tee "$unit_path" >/dev/null <<EOF
@@ -355,6 +431,8 @@ Description=PearData PearMonitor agent (HyperDHT + REST metrics)
Documentation=${GITEA_URL}/${OWNER}/${REPO}
After=network-online.target
Wants=network-online.target
${docker_after_line}
${docker_wants_line}
[Service]
Type=simple
@@ -366,7 +444,7 @@ TimeoutStartSec=30
TimeoutStopSec=30
User=peardata
Group=peardata
${journal_group_line}
${supp_groups_line}
NoNewPrivileges=true
PrivateTmp=true
Environment=NODE_ENV=production
@@ -399,6 +477,11 @@ EOF
env_pk="$(run_root grep -E '^SERVER_PUBLIC_KEY=' "${SERVER_DIR}/.env" 2>/dev/null | head -1 | cut -d= -f2- | tr -d '[:space:]' || true)"
fi
local docker_summary="not detected (optional)"
if [[ "$docker_detected" -eq 1 ]]; then
docker_summary="enabled · peardata ∈ ${docker_group_name:-docker} · ${docker_sock} (human container names)"
fi
cat <<EOF
${C_BOLD}Server installed${C_RESET}
@@ -407,6 +490,7 @@ ${C_BOLD}Server installed${C_RESET}
Data: ${SERVER_DIR}/data
Service: peardata.service
Journal: peardata ∈ systemd-journal · PEARDATA_JOURNAL=1 (Logs tab)
Docker: ${docker_summary}
REST: http://127.0.0.1:18888/api/v3/info (localhost by default)
${C_BOLD}Keys (written on first successful start)${C_RESET}