P
PILLARDOCS
Diagnostics & Operations

Troubleshooting & Agent Lifecycle

Detailed procedures for diagnosing corporate firewall SSL proxy interception, verifying SAS expander raw I/O, consulting POSIX exit codes, and performing graceful de-provisioning.

1. Diagnosing Firewall SSL / Deep Packet Inspection (DPI)

Enterprise security perimeters (Palo Alto, Fortinet, Zscaler) often decrypt outbound port 443 HTTPS traffic using a private internal CA certificate. This breaks TLS validation inside isolated containers.

Run this probe from the storage host to test the certificate authority issuer:

bash
curl -vI --tls-max 1.3 https://telemetry.pillarinteractive.com/api/v1/nodes/health-check

If your firewall requires an explicit forward proxy:

bash
docker run -d \
  --name pillar-agent \
  ... \
  -e HTTPS_PROXY="http://proxy.studio.internal:8080" \
  -e NO_PROXY="localhost,127.0.0.1,.internal" \
  ghcr.io/pillarinteractive/pillar-agent:latest

2. Verifying SAS HBA & External JBOD Controller Access

Ensure external SAS expander bays are enumerated and accessible via SCSI generic drivers:

bash
# Verify LSI / Broadcom SAS HBA controller in IT mode
lspci -nn | grep -i -E "lsi|broadcom|sas"

Verify device discovery inside the agent container:

bash
# Test raw device scan inside container
docker exec -it pillar-agent smartctl --scan

3. Preflight POSIX Exit Code Taxonomy

When running ./pillar-agent --preflight, the binary exits with deterministic POSIX codes for automated script orchestration:

Exit CodeIdentifierMeaningRemediation Action
0ExitSuccessPreflight suite passed nominallyNominal. System ready to deploy.
10ExitVfsFailure/proc/diskstats unreadable or missingEnsure mount: -v /proc/diskstats:/proc/diskstats:ro
11ExitSysfsMasked/sys/block hierarchy maskedEnsure mount: -v /sys/block:/sys/block:ro
12ExitDeviceNodeDenied/dev nodes inaccessibleEnsure mount: -v /dev:/dev:ro
20ExitCapSysRawioDeniedCAP_SYS_RAWIO capability missingAdd container flag: --cap-add=SYS_RAWIO
21ExitSeccompDeniedStorage ioctl rejected by Seccomp filterUse standard Docker seccomp or whitelist SG_IO
30ExitHardwareNoDrivesZero physical media discovered on busCheck HBA SAS cabling and JBOD power
40ExitNetworkDnsFailureUnable to resolve telemetry FQDNCheck /etc/resolv.conf and DNS routes
41ExitNetworkTlsHandshakeTLS 1.3 handshake or CA validation failedVerify firewall DPI SSL bypass or add corporate cert
42ExitNetworkPmtuBlackholePath MTU blackhole packet dropVerify standard 1500 MTU on egress gateway
43ExitNetworkProxyRejectedEnterprise proxy rejected CONNECTCheck HTTPS_PROXY credentials and ACL
50ExitProtocolVersionUnsupportedServer returned HTTP 426 Upgrade RequiredUpdate agent: docker pull ghcr.io/...:latest
60ExitWatchdogOOMCeilingMemory RSS > 50MB ceiling exceededSelf-terminated to preserve host memory. Report bug.
61ExitWatchdogCpuSpikeCPU utilization > 2.0% ceiling exceededSelf-terminated to preserve storage I/O. Report bug.

4. Graceful Uninstallation & Node De-Provisioning

Pillar Agent leaves zero drivers, kernel modules, or filesystem modifications behind. Run this snippet to permanently de-provision:

bash
# 1. Stop and remove container
docker stop pillar-agent
docker rm pillar-agent

# 2. Remove persistent API key volume
docker volume rm pillar-agent-data

# 3. If deployed via systemd:
sudo systemctl disable --now pillar-agent.service
sudo rm -f /etc/systemd/system/pillar-agent.service
sudo systemctl daemon-reload