From 394c84aa1607ffc9076f37a57317377a397419e5 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 31 May 2024 11:32:10 +0200 Subject: [PATCH] Initial commit --- Dockerfile | 16 ++++++++++++++++ README.md | 0 create.sh | 3 +++ run.sh | 4 ++++ scripts/server.sh | 12 ++++++++++++ scripts/server_start.sh | 34 ++++++++++++++++++++++++++++++++++ scripts/signals.sh | 25 +++++++++++++++++++++++++ 7 files changed, 94 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100755 create.sh create mode 100755 run.sh create mode 100755 scripts/server.sh create mode 100755 scripts/server_start.sh create mode 100644 scripts/signals.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c357e34 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +# syntax=docker/dockerfile:1 +FROM jayfield/novnc-baseimage + +RUN openssl req -x509 -nodes -newkey rsa:2048 -keyout /tmp/novnc.key -out /tmp/novnc.pem -days 3650 -subj "/C=US/ST=NY/L=NY/O=NY/OU=NY/CN=NY emailAddress=email@example.com" +ENV DISPLAY_NUM=99 +ENV DISPLAY=:${DISPLAY_NUM} +RUN touch /root/.Xauthority + +ADD scripts /opt/scripts/ + +EXPOSE 5900 + +ENTRYPOINT ["/opt/scripts/server_start.sh", "/opt/scripts/server.sh"] + +# see also +# https://github.com/ich777/docker-krusader diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/create.sh b/create.sh new file mode 100755 index 0000000..660ba4f --- /dev/null +++ b/create.sh @@ -0,0 +1,3 @@ +#/bin/bash + +docker create --name='novnc-server' --net='bridge' -e 'DISPLAY_NUM'='99' -e 'SCREEN_W'='1536' -e 'SCREEN_H'='960' -p '5910:5999/tcp' -p '8099:8099/tcp' 'jayfield/novnc-server' diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..a4d6c29 --- /dev/null +++ b/run.sh @@ -0,0 +1,4 @@ +#/bin/bash + +DISPLAY_NUM=99 +docker run --rm --net bridge -p 5910:59${DISPLAY_NUM}/tcp -e DISPLAY_NUM=${DISPLAY_NUM} -e SCREEN_W=1536 -e SCREEN_H=960 -it $1 bash --login diff --git a/scripts/server.sh b/scripts/server.sh new file mode 100755 index 0000000..d852e00 --- /dev/null +++ b/scripts/server.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -x + +RFB_PORT=59${DISPLAY_NUM} +NOVNC_PORT=80${DISPLAY_NUM} + +echo Display at ${DISPLAY} with ${SCREEN_W}x${SCREEN_H}x24 +/opt/TurboVNC/bin/Xvnc ${DISPLAY} -geometry ${SCREEN_W}x${SCREEN_H} -depth 24 +xinerama -securitytypes none >/var/log/xvfb.log & +icewm-session -o /var/log/icewm.log & +/tmp/websockify/run -D --web=/tmp/noVNC/ --cert=/tmp/novnc.pem --key=/tmp/novnc.key ${NOVNC_PORT} localhost:${RFB_PORT} +socat TCP-LISTEN:60${DISPLAY_NUM},fork,bind=0.0.0.0 UNIX-CONNECT:/tmp/.X11-unix/X${DISPLAY_NUM} + diff --git a/scripts/server_start.sh b/scripts/server_start.sh new file mode 100755 index 0000000..20c662f --- /dev/null +++ b/scripts/server_start.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +APP=$1 +set -x + +# Signal helper +source /opt/scripts/signals.sh + +PID=0 +TERM_handler() { + SIGNAME="$1" + echo "Killing ${PID}" + echo "Signal ${SIGNAME}" + if [ ${PID} -ne 0 ]; then + ps -ef --forest + CHILDS=$(pgrep -P "${PID}") + kill -"${SIGNAME}" -"${PID}" + for i in $CHILDS; do + wait $i + done + fi + ps -ef --forest + ret=$(signal_return_val ${SIGNAME}) + exit $ret +} + +signals_trap_with_arg TERM_handler SIGTERM +${APP} & +PID=$$ + +# wait forever +signals_wait_forever + +# https://docs.docker.com/compose/faq/ +# https://medium.com/@gchudnov/trapping-signals-in-docker-containers-7a57fdda7d86 \ No newline at end of file diff --git a/scripts/signals.sh b/scripts/signals.sh new file mode 100644 index 0000000..bd48be3 --- /dev/null +++ b/scripts/signals.sh @@ -0,0 +1,25 @@ +signals_trap_with_arg() { + func="$1" ; shift + for sig ; do + echo "$func $sig" + trap "$func $sig" "$sig" + done +} + +signals_wait_forever() { + while true + do + tail -f /dev/null & wait ${!} + done +} + +signal_name_to_number() { + SIGNAME="$1" + trap -l | sed -nr "s/.*\b([0-9]+)\) $SIGNAME.*/\1/p" +} + +signal_return_val() { + SIGNAME="$1" + SIGNUM=$(signal_name_to_number ${SIGNAME}) + echo "128 + $SIGNUM" | bc +}