diff --git a/servers/unraid/tail2-pose-server/diagnostic.compose.yaml b/servers/unraid/tail2-pose-server/diagnostic.compose.yaml new file mode 100644 index 0000000..6b4838d --- /dev/null +++ b/servers/unraid/tail2-pose-server/diagnostic.compose.yaml @@ -0,0 +1,64 @@ +services: + diagnostic: + image: nvcr.io/nvidia/pytorch:25.12-py3 + network_mode: host + gpus: all + volumes: + - /:/host:ro + - ./diagnostics:/diagnostics + command: + - /bin/bash + - -lc + - | + set -uo pipefail + exec > /diagnostics/report.txt 2>&1 + echo "timestamp=$$(date -u +%FT%TZ)" + echo "hostname=$$(cat /host/etc/hostname 2>/dev/null || true)" + echo "lan_ipv4=$$(hostname -I 2>/dev/null || true)" + python3 - <<'PY' + import socket + for port in range(18120, 18130): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + sock.bind(('0.0.0.0', port)) + print(f'port_{port}=free') + except OSError as exc: + print(f'port_{port}=busy:{exc.errno}') + finally: + sock.close() + PY + echo '--- nvidia-smi ---' + nvidia-smi + echo '--- cuda/python ---' + python3 - <<'PY' + import torch + print('torch=' + torch.__version__) + print('cuda_available=' + str(torch.cuda.is_available())) + if torch.cuda.is_available(): + print('gpu_name=' + torch.cuda.get_device_name(0)) + print('gpu_total_bytes=' + str(torch.cuda.get_device_properties(0).total_memory)) + PY + echo '--- target directories ---' + for path in /host/mnt/user/appdata/tail2-pose-server /host/mnt/user/appdata/tail2-pose-server-v1; do + if [ -e "$$path" ]; then + stat -c '%A %a %u:%g %n' "$$path" + find "$$path" -mindepth 1 -maxdepth 2 -printf '%M %u:%g %p\n' | head -100 + else + echo "missing $$path" + fi + done + echo '--- NDI runtime candidates ---' + find /host/usr /host/opt /host/mnt/user/appdata -xdev \( -iname 'libndi.so*' -o -iname '*ndi*runtime*' -o -iname 'Processing.NDI.Lib.h' \) -print 2>/dev/null | head -200 + echo '--- camera reachability ---' + python3 - <<'PY' + import socket + print('camera_tcp_probe_only=192.168.50.207') + for port in (80, 443, 5960, 5961): + s = socket.socket() + s.settimeout(1) + try: + rc = s.connect_ex(('192.168.50.207', port)) + finally: + s.close() + print(f'camera_port_{port}_connect_ex={rc}') + PY diff --git a/servers/unraid/tail2-pose-server/diagnostics/.gitignore b/servers/unraid/tail2-pose-server/diagnostics/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/servers/unraid/tail2-pose-server/diagnostics/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore