From 3129fe2373a6877fae6be9372503cac5bc918e70 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 14:10:31 +0200 Subject: [PATCH 01/11] feat: Multiple disk support --- run/disk.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/run/disk.sh b/run/disk.sh index 404835c4..798a78b2 100644 --- a/run/disk.sh +++ b/run/disk.sh @@ -153,3 +153,25 @@ DISK_OPTS="\ -device virtio-scsi-pci,id=hw-userdata,bus=pcie.0,addr=0xc \ -drive file=${DATA},if=none,id=drive-userdata,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \ -device scsi-hd,bus=hw-userdata.0,channel=0,scsi-id=0,lun=0,drive=drive-userdata,id=userdata0,rotation_rate=${DISK_ROTATION},bootindex=3" + +STORAGE2="/storage2" +DATA2="${STORAGE2}/data.img" + +if [ -f "${DATA2}" ]; then + + DISK_OPTS="${DISK_OPTS} \ + -drive file=${DATA2},if=none,id=drive-userdata2,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \ + -device scsi-hd,bus=hw-userdata.2,channel=0,scsi-id=0,lun=0,drive=drive-userdata2,id=userdata2,rotation_rate=${DISK_ROTATION},bootindex=4" + +fi + +STORAGE3="/storage3" +DATA3="${STORAGE3}/data.img" + +if [ -f "${DATA3}" ]; then + + DISK_OPTS="${DISK_OPTS} \ + -drive file=${DATA3},if=none,id=drive-userdata3,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \ + -device scsi-hd,bus=hw-userdata.3,channel=0,scsi-id=0,lun=0,drive=drive-userdata3,id=userdata3,rotation_rate=${DISK_ROTATION},bootindex=5" + +fi From edf149f6ccca0c7c006762ac49f808c414c76307 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:28:56 +0200 Subject: [PATCH 02/11] build: Update to QEMU v8.1.1 (Debian 13) --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b98e74ab..28604247 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ FROM qemux/qemu-host as builder # RUN go mod download # RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /qemu-host.bin . -FROM debian:bookworm-slim +FROM debian:trixie-slim ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND noninteractive @@ -16,6 +16,7 @@ RUN apt-get update && apt-get -y upgrade && \ apt-get --no-install-recommends -y install \ curl \ cpio \ + tini \ wget \ fdisk \ unzip \ @@ -64,4 +65,4 @@ LABEL org.opencontainers.image.url=https://hub.docker.com/r/kroese/virtual-dsm/ HEALTHCHECK --interval=60s --retries=2 CMD /run/check.sh -ENTRYPOINT ["/run/run.sh"] +ENTRYPOINT ["/usr/bin/tini", "-s", "/run/run.sh"] From 9c1805c5e0709118c70e82e789e839e099b777c6 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:30:13 +0200 Subject: [PATCH 03/11] feat: Multiple disk support --- run/disk.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/run/disk.sh b/run/disk.sh index 798a78b2..e61eb887 100644 --- a/run/disk.sh +++ b/run/disk.sh @@ -158,10 +158,11 @@ STORAGE2="/storage2" DATA2="${STORAGE2}/data.img" if [ -f "${DATA2}" ]; then - + DISK_OPTS="${DISK_OPTS} \ + -device virtio-scsi-pci,id=hw-userdata2,bus=pcie.0,addr=0xd \ -drive file=${DATA2},if=none,id=drive-userdata2,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \ - -device scsi-hd,bus=hw-userdata.2,channel=0,scsi-id=0,lun=0,drive=drive-userdata2,id=userdata2,rotation_rate=${DISK_ROTATION},bootindex=4" + -device scsi-hd,bus=hw-userdata2.0,channel=0,scsi-id=0,lun=0,drive=drive-userdata2,id=userdata2,rotation_rate=${DISK_ROTATION},bootindex=4" fi @@ -169,9 +170,10 @@ STORAGE3="/storage3" DATA3="${STORAGE3}/data.img" if [ -f "${DATA3}" ]; then - + DISK_OPTS="${DISK_OPTS} \ + -device virtio-scsi-pci,id=hw-userdata3,bus=pcie.0,addr=0xe \ -drive file=${DATA3},if=none,id=drive-userdata3,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \ - -device scsi-hd,bus=hw-userdata.3,channel=0,scsi-id=0,lun=0,drive=drive-userdata3,id=userdata3,rotation_rate=${DISK_ROTATION},bootindex=5" + -device scsi-hd,bus=hw-userdata3.0,channel=0,scsi-id=0,lun=0,drive=drive-userdata3,id=userdata3,rotation_rate=${DISK_ROTATION},bootindex=5" fi From 6722d23429f6154010dd51005916fc733a897632 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:32:52 +0200 Subject: [PATCH 04/11] fix: Remove GPU drivers --- run/install.sh | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/run/install.sh b/run/install.sh index e15bb2c5..7db83b0c 100644 --- a/run/install.sh +++ b/run/install.sh @@ -134,24 +134,15 @@ if { tar tf "$PAT"; } >/dev/null 2>&1; then else - export DEBCONF_NOWARNINGS="yes" - export DEBIAN_FRONTEND="noninteractive" - if [ "$ARCH" != "amd64" ]; then info "Install: Installing QEMU..." - apt-get -qq update && apt-get -qq -y upgrade - apt-get -qq --no-install-recommends -y install qemu-user > /dev/null - - fi + export DEBCONF_NOWARNINGS="yes" + export DEBIAN_FRONTEND="noninteractive" - if [[ "${GPU}" == [Yy1]* ]] && [[ "$ARCH" == "amd64" ]]; then - - info "Install: Installing GPU drivers..." - - apt-get -qq update && apt-get -qq -y upgrade - apt-get -qq --no-install-recommends -y install xserver-xorg-video-intel > /dev/null + apt-get -qq update + apt-get -qq --no-install-recommends -y install qemu-user > /dev/null fi @@ -213,14 +204,14 @@ SIZE=$(stat -c%s "${SYSTEM}") PART="$TMP/partition.fdisk" -{ echo "label: dos" - echo "label-id: 0x6f9ee2e9" - echo "device: ${SYSTEM}" - echo "unit: sectors" - echo "sector-size: 512" - echo "" - echo "${SYSTEM}1 : start= 2048, size= 4980480, type=83" - echo "${SYSTEM}2 : start= 4982528, size= 4194304, type=82" +{ echo "label: dos" + echo "label-id: 0x6f9ee2e9" + echo "device: ${SYSTEM}" + echo "unit: sectors" + echo "sector-size: 512" + echo "" + echo "${SYSTEM}1 : start= 2048, size= 4980480, type=83" + echo "${SYSTEM}2 : start= 4982528, size= 4194304, type=82" } > "$PART" sfdisk -q "$SYSTEM" < "$PART" From 0599e85b5eb515d5f58ab3186c35929af56e6e53 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:35:04 +0200 Subject: [PATCH 05/11] style: Indentations --- run/serial.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/run/serial.sh b/run/serial.sh index 5d999bd8..4d715160 100644 --- a/run/serial.sh +++ b/run/serial.sh @@ -52,8 +52,8 @@ fi SERIAL_OPTS="\ -serial mon:stdio \ - -device virtio-serial-pci,id=virtio-serial0,bus=pcie.0,addr=0x3 \ - -chardev pty,id=charserial0 \ - -device isa-serial,chardev=charserial0,id=serial0 \ - -chardev socket,id=charchannel0,host=127.0.0.1,port=12345,reconnect=10 \ - -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=vchannel" + -device virtio-serial-pci,id=virtio-serial0,bus=pcie.0,addr=0x3 \ + -chardev pty,id=charserial0 \ + -device isa-serial,chardev=charserial0,id=serial0 \ + -chardev socket,id=charchannel0,host=127.0.0.1,port=12345,reconnect=10 \ + -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=vchannel" From d5efb52fae46895b035c50ab8ebb93cf09f715de Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:45:39 +0200 Subject: [PATCH 06/11] feat: GPU passthrough support --- run/gpu.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 run/gpu.sh diff --git a/run/gpu.sh b/run/gpu.sh new file mode 100644 index 00000000..edc8b845 --- /dev/null +++ b/run/gpu.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -Eeuo pipefail + +DEF_OPTS="-nodefaults -boot strict=on -display egl-headless,rendernode=/dev/dri/renderD128" +DEF_OPTS="${DEF_OPTS} -device virtio-vga,id=video0,max_outputs=1,bus=pcie.0,addr=0x1" + +if ! apt-mark showinstall | grep -q "xserver-xorg-video-intel"; then + + info "Installing GPU drivers..." + + export DEBCONF_NOWARNINGS="yes" + export DEBIAN_FRONTEND="noninteractive" + + apt-get -qq update + apt-get -qq --no-install-recommends -y install xserver-xorg-video-intel > /dev/null + +fi From a566f7f1452882916ffaeb170d4f19f65801a575 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 18:48:47 +0200 Subject: [PATCH 07/11] feat: GPU passthrough support --- run/run.sh | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/run/run.sh b/run/run.sh index adc664c0..7094fec9 100755 --- a/run/run.sh +++ b/run/run.sh @@ -4,8 +4,8 @@ set -Eeuo pipefail # Docker environment variables : ${URL:=''} # URL of the PAT file -: ${GPU:='N'} # Enable GPU passthrough -: ${DEBUG:='N'} # Enable debug mode +: ${GPU:='N'} # Enable GPU passthrough +: ${DEBUG:='N'} # Enable debugging mode : ${ALLOCATE:='Y'} # Preallocate diskspace : ${ARGUMENTS:=''} # Extra QEMU parameters : ${CPU_CORES:='1'} # Amount of CPU cores @@ -42,17 +42,10 @@ if [[ ! -f "$STORAGE/$BASE.boot.img" ]] || [[ ! -f "$STORAGE/$BASE.system.img" ] . /run/install.sh fi -# Initialize disks -. /run/disk.sh - -# Initialize network -. /run/network.sh - -# Initialize serialport -. /run/serial.sh - -# Configure shutdown -. /run/power.sh +. /run/disk.sh # Initialize disks +. /run/network.sh # Initialize network +. /run/serial.sh # Initialize serialport +. /run/power.sh # Configure shutdown KVM_ERR="" KVM_OPTS="" @@ -82,10 +75,7 @@ EXTRA_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4" EXTRA_OPTS="$EXTRA_OPTS -object rng-random,id=objrng0,filename=/dev/urandom" EXTRA_OPTS="$EXTRA_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c" -if [[ "${GPU}" == [Yy1]* ]]; then - DEF_OPTS="-nodefaults -boot strict=on -display egl-headless,rendernode=/dev/dri/renderD128" - DEF_OPTS="${DEF_OPTS} -device virtio-vga,id=video0,max_outputs=1,bus=pcie.0,addr=0x1" -fi +[[ "${GPU}" == [Yy1]* ]] && [[ "$ARCH" == "amd64" ]] && . /run/gpu.sh ARGS="${DEF_OPTS} ${CPU_OPTS} ${RAM_OPTS} ${MAC_OPTS} ${MON_OPTS} ${SERIAL_OPTS} ${NET_OPTS} ${DISK_OPTS} ${EXTRA_OPTS} ${ARGUMENTS}" ARGS=$(echo "$ARGS" | sed 's/\t/ /g' | tr -s ' ') From 45bb4ac4c48be7e03e9c38eb61cc529c935a0277 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 19:30:57 +0200 Subject: [PATCH 08/11] build: Debian Bookworm --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 28604247..8d0b7bf1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ FROM qemux/qemu-host as builder # RUN go mod download # RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /qemu-host.bin . -FROM debian:trixie-slim +FROM debian:bookworm-slim ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND noninteractive From fb2756c36b8edf66d9efd7f4d0f2709c9b6f94ae Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 19:34:49 +0200 Subject: [PATCH 09/11] feat: GPU passthrough support --- run/gpu.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/run/gpu.sh b/run/gpu.sh index edc8b845..c3e86750 100644 --- a/run/gpu.sh +++ b/run/gpu.sh @@ -1,6 +1,19 @@ #!/bin/bash set -Eeuo pipefail +[ ! -d /dev/dri ] && mkdir -m 755 /dev/dri + +if [ ! -c /dev/dri/card0 ]; then + mknod /dev/dri/card0 c 226 0 +fi + +if [ ! -c /dev/dri/renderD128 ]; then + mknod /dev/dri/renderD128 c 226 128 +fi + +chmod 666 /dev/dri/card0 +chmod 666 /dev/dri/renderD128 + DEF_OPTS="-nodefaults -boot strict=on -display egl-headless,rendernode=/dev/dri/renderD128" DEF_OPTS="${DEF_OPTS} -device virtio-vga,id=video0,max_outputs=1,bus=pcie.0,addr=0x1" From bff8c217ef58295e22cd190d3ed4abafd3f17777 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 19:41:07 +0200 Subject: [PATCH 10/11] docs: GPU passthrough support --- readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/readme.md b/readme.md index d5507194..5ae28cfb 100644 --- a/readme.md +++ b/readme.md @@ -181,8 +181,6 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti - /dev/dri ``` - As the Intel GPU drivers will be downloaded during installation, you need to re-install DSM when you want to apply this to an existing instance. - * ### What are the differences compared to the standard DSM? There are only two minor differences: the Virtual Machine Manager package is not provided, and Surveillance Station doesn't include any free licenses. From 8b1c9a49e81d2190c9c2929e43a5bde7306c9708 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 9 Oct 2023 19:46:26 +0200 Subject: [PATCH 11/11] Shellcheck SC2153 --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 1311b506..986386e6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,4 +11,4 @@ jobs: - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: - SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2317 -e SC2028 + SHELLCHECK_OPTS: -x -e SC2001 -e SC2002 -e SC2223 -e SC2034 -e SC2064 -e SC2317 -e SC2028 -e SC2153