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 diff --git a/Dockerfile b/Dockerfile index b98e74ab..8d0b7bf1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"] 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. diff --git a/run/disk.sh b/run/disk.sh index 404835c4..e61eb887 100644 --- a/run/disk.sh +++ b/run/disk.sh @@ -153,3 +153,27 @@ 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} \ + -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-userdata2.0,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} \ + -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-userdata3.0,channel=0,scsi-id=0,lun=0,drive=drive-userdata3,id=userdata3,rotation_rate=${DISK_ROTATION},bootindex=5" + +fi diff --git a/run/gpu.sh b/run/gpu.sh new file mode 100644 index 00000000..c3e86750 --- /dev/null +++ b/run/gpu.sh @@ -0,0 +1,30 @@ +#!/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" + +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 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" 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 ' ') 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"