Initial commit
This commit is contained in:
+16
@@ -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
|
||||||
@@ -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'
|
||||||
@@ -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
|
||||||
Executable
+12
@@ -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}
|
||||||
|
|
||||||
Executable
+34
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user