From af9b3ad7a2c0bded9813886b0025e87acea862f6 Mon Sep 17 00:00:00 2001 From: David Scott Date: Tue, 29 Mar 2016 21:20:53 +0100 Subject: [PATCH] Allow diagnostics to be downloaded on port 62374 A client like `pinata diagnose` can do the equivalent of: nc 192.168.64.2 62374 > foo.tar and find `foo.tar` contains - the output of `/usr/bin/diagnostics` - `iptables -L` - `netstat -an` - `ps uax` - `docker ps` - `dig docker.com` - `wget http://docker.com` This will allow us to diagnose various in-VM faults, without having to ask the user to access the console and run commands. Signed-off-by: David Scott --- alpine/Dockerfile | 2 ++ .../packages/diagnostics/diagnostics-download | 20 +++++++++++++++++++ .../packages/diagnostics/diagnostics-server | 7 +++++++ .../diagnostics/etc/init.d/diagnostics | 1 + 4 files changed, 30 insertions(+) create mode 100755 alpine/packages/diagnostics/diagnostics-download create mode 100755 alpine/packages/diagnostics/diagnostics-server diff --git a/alpine/Dockerfile b/alpine/Dockerfile index 9e2ad2c8c..4dd4dff4b 100644 --- a/alpine/Dockerfile +++ b/alpine/Dockerfile @@ -34,6 +34,8 @@ COPY packages/docker/docker /usr/bin/ COPY packages/docker/etc /etc/ COPY packages/docker-x/docker-x /usr/bin/ COPY packages/diagnostics/diagnostics /usr/bin/ +COPY packages/diagnostics/diagnostics-server /usr/bin/ +COPY packages/diagnostics/diagnostics-download /usr/bin/ COPY packages/diagnostics/etc /etc/ COPY packages/automount/etc /etc/ COPY packages/9pinit/etc /etc/ diff --git a/alpine/packages/diagnostics/diagnostics-download b/alpine/packages/diagnostics/diagnostics-download new file mode 100755 index 000000000..e859edd3d --- /dev/null +++ b/alpine/packages/diagnostics/diagnostics-download @@ -0,0 +1,20 @@ +#!/bin/sh + +# Gather diagnostic data and write a .tar file to stdout + +TEMP=$(mktemp -d diagnoseXXXXXXX) +trap 'rm -rf "$TEMP"' EXIT +cd $TEMP + +# gather diagnostic data +ps uax > "ps -aux" +netstat -an > "netstat -an" +iptables -L > "iptables -L" +dmesg > dmesg +timeout -t 2 docker ps > "docker ps" +/usr/bin/diagnostics > "diagnostics" +dig docker.com > "dig docker.com" +wget -O - http://www.docker.com/ &> "wget docker.com" + +# send everything to the client +tar -c . diff --git a/alpine/packages/diagnostics/diagnostics-server b/alpine/packages/diagnostics/diagnostics-server new file mode 100755 index 000000000..611b0f28c --- /dev/null +++ b/alpine/packages/diagnostics/diagnostics-server @@ -0,0 +1,7 @@ +#!/bin/sh + +# Allow clients (e.g. pinata diagnose) to download diagnostic data + +while /bin/true; do + nc -l -p 62374 -e /usr/bin/diagnostics-download 2>> /var/log/diagnostics-server.log +done diff --git a/alpine/packages/diagnostics/etc/init.d/diagnostics b/alpine/packages/diagnostics/etc/init.d/diagnostics index 2629bfeb6..a5cbf056a 100755 --- a/alpine/packages/diagnostics/etc/init.d/diagnostics +++ b/alpine/packages/diagnostics/etc/init.d/diagnostics @@ -10,4 +10,5 @@ start() ebegin "Checking system state" /usr/bin/diagnostics + /usr/bin/diagnostics-server & }