From 8ffc3bf842381d33acdc07a9d3d12b210957d0e1 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sat, 16 Dec 2023 08:17:53 +0100 Subject: [PATCH] feat: GPU passthrough * feat: GPU passthrough --- src/display.sh | 36 ++++++++++++++++++++++++++++++++++-- src/reset.sh | 22 ++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/display.sh b/src/display.sh index 34d5226..23f19e0 100644 --- a/src/display.sh +++ b/src/display.sh @@ -3,15 +3,47 @@ set -Eeuo pipefail # Docker environment variables +: ${GPU:='N'} # GPU passthrough : ${DISPLAY:='none'} # Display type case "${DISPLAY,,}" in vnc) - DISPLAY_OPTS="-nographic -vga std -vnc :0" + if [[ "$GPU" != [Yy1]* ]] || [[ "$ARCH" != "amd64" ]]; then + DISPLAY_OPTS="-nographic -vga std -vnc :0" + else + DISPLAY_OPTS="-vga std -vnc :0" + fi ;; *) - DISPLAY_OPTS="-nographic -display none" + if [[ "$GPU" != [Yy1]* ]] || [[ "$ARCH" != "amd64" ]]; then + DISPLAY_OPTS="-nographic -display none" + else + DISPLAY_OPTS="" + fi ;; esac +if [[ "$GPU" != [Yy1]* ]] || [[ "$ARCH" != "amd64" ]]; then + return 0 +fi + +DISPLAY_OPTS="$DISPLAY_OPTS -display egl-headless,rendernode=/dev/dri/renderD128" +DISPLAY_OPTS="$DISPLAY_OPTS -device virtio-vga,id=video0,max_outputs=1,bus=pcie.0,addr=0x1" + +[ ! -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 + +addPackage "xserver-xorg-video-intel" "Intel GPU drivers" +addPackage "qemu-system-modules-opengl" "OpenGL module" + return 0 diff --git a/src/reset.sh b/src/reset.sh index cbe2188..743e693 100644 --- a/src/reset.sh +++ b/src/reset.sh @@ -32,4 +32,26 @@ VERS=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1) STORAGE="/storage" [ ! -d "$STORAGE" ] && error "Storage folder ($STORAGE) not found!" && exit 13 +# Helper functions + +addPackage () { + + local pkg=$1 + local desc=$2 + + if apt-mark showinstall | grep -qx "$pkg"; then + return 0 + fi + + info "Installing $desc..." + + export DEBCONF_NOWARNINGS="yes" + export DEBIAN_FRONTEND="noninteractive" + + apt-get -qq update + apt-get -qq --no-install-recommends -y install "$pkg" > /dev/null + + return 0 +} + return 0