Update For Docker Socket Support
This commit is contained in:
+87
-3
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user