commit eaa56dfef1409f3a7186a7711c3ce82277246499 Author: Jens Ahrensfeld Date: Sun Aug 18 18:11:02 2024 +0200 Initial commit diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..72c4007 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# syntax=docker/dockerfile:1 +FROM jayfield/novnc-baseimage + +RUN apt-get update && \ + apt-get -y install --no-install-recommends soapysdr-module-all soapyremote-server soapysdr-tools uhd-host uhd-soapysdr gqrx-sdr && \ + rm -rf /var/lib/apt/lists/* + +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" +RUN /usr/bin/uhd_images_downloader + +ENV DISPLAY_NUM=99 +ENV DISPLAY=:${DISPLAY_NUM} + +RUN useradd -m jens -p jens -s /usr/bin/bash + +WORKDIR /home/jensi +RUN touch .Xauthority + +ENV SCRIPTS_HOME=/opt/scripts +ENV PATH=${PATH}:${SCRIPTS_HOME} + +ADD scripts ${SCRIPTS_HOME} +WORKDIR /tmp/apps + +RUN rm -rf /tmp/apps +RUN cd ~ + +EXPOSE 60${DISPLAY_NUM} +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/run.sh b/run.sh new file mode 100755 index 0000000..b2f7a16 --- /dev/null +++ b/run.sh @@ -0,0 +1,9 @@ +docker run --rm -d \ + --privileged \ + --net bridge \ + --env SCREEN_W=1536 \ + --env SCREEN_H=960 \ + --device /dev/snd \ + --name sdr-novnc \ + --volume /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \ + jayfield/sdr-novnc diff --git a/scripts/server.sh b/scripts/server.sh new file mode 100755 index 0000000..90eb171 --- /dev/null +++ b/scripts/server.sh @@ -0,0 +1,10 @@ +#!/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 & +fluxbox & +/tmp/websockify/run -D --web=/tmp/noVNC/ --cert=/tmp/novnc.pem --key=/tmp/novnc.key ${NOVNC_PORT} localhost:${RFB_PORT} 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 +}