diff --git a/Dockerfile b/Dockerfile index 09ec71f..2cae925 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,7 @@ RUN apt-get update \ tini \ wget \ ovmf \ + socat \ procps \ iptables \ iproute2 \ diff --git a/src/install.sh b/src/install.sh index d124c42..d935da8 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,6 +1,10 @@ #!/usr/bin/env bash set -Eeuo pipefail +# Display wait message +MSG="Please wait while the ISO is being downloaded..." +/run/server.sh "QEMU" "$MSG" & + # Check if running with interactive TTY or redirected to docker log if [ -t 1 ]; then PROGRESS="--progress=bar:noscroll" diff --git a/src/network.sh b/src/network.sh index ef6e4dd..07e6a75 100644 --- a/src/network.sh +++ b/src/network.sh @@ -202,6 +202,8 @@ closeNetwork() { if [[ "$DHCP" == [Yy1]* ]]; then + fKill "server.sh" + ip link set "$VM_NET_TAP" down || true ip link delete "$VM_NET_TAP" || true @@ -253,6 +255,8 @@ getInfo() { # Configure Network # ###################################### +fKill "server.sh" + if [ ! -c /dev/vhost-net ]; then if mknod /dev/vhost-net c 10 238; then chmod 660 /dev/vhost-net diff --git a/src/server.sh b/src/server.sh new file mode 100644 index 0000000..2c77fa6 --- /dev/null +++ b/src/server.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -eu + +TMP_FILE=$(mktemp -q /dev/shm/server.XXXXXX) + +stop() { + trap - SIGINT EXIT + { pkill -f socat || true; } 2>/dev/null + [ -f "$TMP_FILE" ] && rm -f "$TMP_FILE" +} + +trap 'stop' EXIT SIGINT SIGTERM SIGHUP + +html() +{ + local h="$2" + h="$h" + h="$h

$1

" + + echo "$h" +} + +BODY="$2" + +HTML=$(html "$BODY" "$1") +printf '%b' "HTTP/1.1 200 OK\nContent-Length: ${#HTML}\nConnection: close\n\n$HTML" > "$TMP_FILE" + +socat TCP4-LISTEN:80,reuseaddr,fork,crlf SYSTEM:"cat $TMP_FILE" 2> /dev/null & +socat TCP4-LISTEN:8006,reuseaddr,fork,crlf SYSTEM:"cat $TMP_FILE" 2> /dev/null & wait $! + +exit