diff --git a/Dockerfile b/Dockerfile index 11ac0ce6f..a439f5522 100644 --- a/Dockerfile +++ b/Dockerfile @@ -105,13 +105,22 @@ RUN --mount=type=cache,id=pulse-go-mod,target=/go/pkg/mod \ -trimpath \ -o pulse-host-agent-windows-amd64.exe ./cmd/pulse-host-agent -# Build pulse-sensor-proxy +# Build pulse-sensor-proxy for all Linux architectures (for download endpoint) RUN --mount=type=cache,id=pulse-go-mod,target=/go/pkg/mod \ --mount=type=cache,id=pulse-go-build,target=/root/.cache/go-build \ - CGO_ENABLED=0 GOOS=linux go build \ + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-s -w" \ -trimpath \ - -o pulse-sensor-proxy ./cmd/pulse-sensor-proxy + -o pulse-sensor-proxy-linux-amd64 ./cmd/pulse-sensor-proxy && \ + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build \ + -ldflags="-s -w" \ + -trimpath \ + -o pulse-sensor-proxy-linux-arm64 ./cmd/pulse-sensor-proxy && \ + CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build \ + -ldflags="-s -w" \ + -trimpath \ + -o pulse-sensor-proxy-linux-armv7 ./cmd/pulse-sensor-proxy && \ + cp pulse-sensor-proxy-linux-amd64 pulse-sensor-proxy # Runtime image for the Docker agent (offered via --target agent_runtime) FROM alpine:3.20 AS agent_runtime @@ -188,7 +197,10 @@ COPY --from=backend-builder /app/pulse-host-agent-windows-amd64.exe /opt/pulse/b # Create symlink for Windows without .exe extension RUN ln -s pulse-host-agent-windows-amd64.exe /opt/pulse/bin/pulse-host-agent-windows-amd64 -# Copy pulse-sensor-proxy binary for download endpoint +# Copy multi-arch pulse-sensor-proxy binaries for download endpoint +COPY --from=backend-builder /app/pulse-sensor-proxy-linux-amd64 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-sensor-proxy-linux-arm64 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-sensor-proxy-linux-armv7 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-sensor-proxy /opt/pulse/bin/pulse-sensor-proxy # Create config directory diff --git a/scripts/install-sensor-proxy.sh b/scripts/install-sensor-proxy.sh index 539f17bd5..29cde817b 100755 --- a/scripts/install-sensor-proxy.sh +++ b/scripts/install-sensor-proxy.sh @@ -101,7 +101,7 @@ cleanup_cluster_authorized_keys_manual() { if command -v pvecm >/dev/null 2>&1; then while IFS= read -r node_ip; do [[ -n "$node_ip" ]] && nodes+=("$node_ip") - done < <(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}') + done < <(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}' || true) fi if [[ ${#nodes[@]} -eq 0 ]]; then @@ -841,7 +841,7 @@ if [[ -z "$HOST" ]]; then # Discover cluster nodes if command -v pvecm >/dev/null 2>&1; then - CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}') + CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}' || true) if [[ -n "$CLUSTER_NODES" ]]; then for node_ip in $CLUSTER_NODES; do @@ -1016,7 +1016,7 @@ print_info "Proxy public key: ${PROXY_PUBLIC_KEY:0:50}..." # Discover cluster nodes if command -v pvecm >/dev/null 2>&1; then # Extract node IPs from pvecm status - CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}') + CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}' || true) if [[ -n "$CLUSTER_NODES" ]]; then print_info "Discovered cluster nodes: $(echo $CLUSTER_NODES | tr '\n' ' ')" diff --git a/scripts/pulse-sensor-cleanup.sh b/scripts/pulse-sensor-cleanup.sh index e52550c06..f941db067 100755 --- a/scripts/pulse-sensor-cleanup.sh +++ b/scripts/pulse-sensor-cleanup.sh @@ -50,7 +50,7 @@ if [[ -z "$HOST" ]]; then # Discover cluster nodes if command -v pvecm >/dev/null 2>&1; then - CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}') + CLUSTER_NODES=$(pvecm status 2>/dev/null | awk '/0x[0-9a-f]+.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $3}' || true) if [[ -n "$CLUSTER_NODES" ]]; then for node_ip in $CLUSTER_NODES; do