Merge branch 'feature/KASM-4046_gpu_passthrough' into 'develop'

General GPU Pass through improvements, NVIDIA MIG Support

Closes KASM-4046

See merge request kasm-technologies/internal/workspaces-core-images!351
This commit is contained in:
Richard Koliser 2026-05-11 18:21:26 +00:00
commit 21fac2e9a6
14 changed files with 217 additions and 36 deletions

View file

@ -19,11 +19,20 @@ export AWS_DEFAULT_REGION=us-east-1
# Install tools for testing
apk add \
aws-cli \
curl \
jq \
openssh-client
AWS_CLI_IMAGE=public.ecr.aws/aws-cli/aws-cli:2.34.33
aws() {
docker run --rm \
-e AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY \
-e AWS_DEFAULT_REGION \
"${AWS_CLI_IMAGE}" "$@"
}
## Functions ##
# Ami locater
getami () {
@ -88,7 +97,7 @@ aws ec2 run-instances \
--security-group-ids sg-029d5bc88b001fbe5 \
--subnet-id subnet-0ee70521f1f979f5f \
--associate-public-ip-address \
--user-data file:///root/user-data \
--user-data "$(cat /root/user-data)" \
--block-device-mapping '[ { "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": 120 } } ]' \
--instance-initiated-shutdown-behavior terminate > /tmp/instance.json
INSTANCE=$(cat /tmp/instance.json | jq -r " .Instances[0].InstanceId")

View file

@ -134,6 +134,10 @@ RUN bash $STARTUPDIR/set_user_permission.sh $STARTUPDIR $HOME && \
COPY ./src/ubuntu/install/extra $INST_SCRIPTS/extra/
RUN bash $INST_SCRIPTS/extra/$EXTRA_SH && rm -rf $INST_SCRIPTS/extra/
### VirtualGL
COPY ./src/ubuntu/install/virtualgl $INST_SCRIPTS/virtualgl/
RUN bash $INST_SCRIPTS/virtualgl/install_virtualgl.sh && rm -rf $INST_SCRIPTS/virtualgl/
### Custom Folder Emblems
COPY ./src/ubuntu/install/emblems $INST_SCRIPTS/emblems/
RUN bash $INST_SCRIPTS/emblems/install_emblems.sh && rm -rf $INST_SCRIPTS/emblems/
@ -144,6 +148,8 @@ ADD /src/common/resources/images/egress_info.svg /usr/share/extra/icons/egress_i
ADD /src/common/resources/images/egress_error.svg /usr/share/extra/icons/egress_error.svg
ADD /src/common/resources/images/egress_offline.svg /usr/share/extra/icons/egress_offline.svg
RUN rm -f "$HOME/.local/share/wget/.wget-hsts"
### Create user and home directory for base images that don't already define it
RUN (groupadd -g 1000 kasm-user \
&& useradd -M -u 1000 -g 1000 kasm-user \

View file

@ -112,10 +112,6 @@ ADD ./src/common/startup_scripts $STARTUPDIR
RUN bash $STARTUPDIR/set_user_permission.sh $STARTUPDIR $HOME && \
echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
### VirtualGL
COPY ./src/ubuntu/install/virtualgl $INST_SCRIPTS/virtualgl/
RUN bash $INST_SCRIPTS/virtualgl/install_virtualgl.sh && rm -rf $INST_SCRIPTS/virtualgl/
### Sysbox support
COPY ./src/ubuntu/install/sysbox $INST_SCRIPTS/sysbox/
RUN bash $INST_SCRIPTS/sysbox/install_systemd.sh && rm -rf $INST_SCRIPTS/sysbox/

View file

@ -139,6 +139,10 @@ COPY ./src/common/startup_scripts $STARTUPDIR
RUN bash $STARTUPDIR/set_user_permission.sh $STARTUPDIR $HOME && \
echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
### VirtualGL
COPY ./src/ubuntu/install/virtualgl $INST_SCRIPTS/virtualgl/
RUN bash $INST_SCRIPTS/virtualgl/install_virtualgl.sh && rm -rf $INST_SCRIPTS/virtualgl/
### extra configurations needed per distro variant
COPY ./src/ubuntu/install/extra $INST_SCRIPTS/extra/
RUN bash $INST_SCRIPTS/extra/$EXTRA_SH && rm -rf $INST_SCRIPTS/extra/

View file

@ -115,6 +115,10 @@ COPY ./src/common/startup_scripts $STARTUPDIR
RUN bash $STARTUPDIR/set_user_permission.sh $STARTUPDIR $HOME && \
echo 'source $STARTUPDIR/generate_container_user' >> $HOME/.bashrc
### VirtualGL
COPY ./src/ubuntu/install/virtualgl $INST_SCRIPTS/virtualgl/
RUN bash $INST_SCRIPTS/virtualgl/install_virtualgl.sh && rm -rf $INST_SCRIPTS/virtualgl/
### extra configurations needed per distro variant
COPY ./src/ubuntu/install/extra $INST_SCRIPTS/extra/
RUN bash $INST_SCRIPTS/extra/$EXTRA_SH && rm -rf $INST_SCRIPTS/extra/

View file

@ -7,4 +7,6 @@ network:
runtime_configuration:
allow_override_standard_vnc_server_settings: true
allow_override_list:
- pointer.enabled
- pointer.enabled
server:
allow_environment_variables_to_override_config_settings: true

View file

@ -47,13 +47,7 @@ BUILD_ARCH=$(uname -p)
if [ -z ${KASM_PROFILE_CHUNK_SIZE} ]; then
KASM_PROFILE_CHUNK_SIZE=100000
fi
if [ -z ${DRINODE+x} ]; then
DRINODE="/dev/dri/renderD128"
fi
KASMNVC_HW3D=''
if [ ! -z ${HW3D+x} ]; then
KASMVNC_HW3D="-hw3d"
fi
STARTUP_COMPLETE=0
######## FUNCTION DECLARATIONS ##########
@ -218,9 +212,9 @@ function start_kasmvnc (){
fi
if [[ "${BUILD_ARCH}" =~ ^aarch64$ ]] && [[ -f /lib/aarch64-linux-gnu/libgcc_s.so.1 ]] ; then
LD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1 vncserver $DISPLAY $KASMVNC_HW3D -drinode $DRINODE -depth $VNC_COL_DEPTH -geometry $VNC_RESOLUTION -websocketPort $NO_VNC_PORT -httpd ${KASM_VNC_PATH}/www -sslOnly -FrameRate=$MAX_FRAME_RATE -interface 0.0.0.0 -BlacklistThreshold=0 -FreeKeyMappings $VNCOPTIONS $KASM_SVC_SEND_CUT_TEXT $KASM_SVC_ACCEPT_CUT_TEXT
LD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1 vncserver $DISPLAY -depth $VNC_COL_DEPTH -geometry $VNC_RESOLUTION -websocketPort $NO_VNC_PORT -httpd ${KASM_VNC_PATH}/www -sslOnly -FrameRate=$MAX_FRAME_RATE -interface 0.0.0.0 -BlacklistThreshold=0 -FreeKeyMappings $VNCOPTIONS $KASM_SVC_SEND_CUT_TEXT $KASM_SVC_ACCEPT_CUT_TEXT
else
vncserver $DISPLAY $KASMVNC_HW3D -drinode $DRINODE -depth $VNC_COL_DEPTH -geometry $VNC_RESOLUTION -websocketPort $NO_VNC_PORT -httpd ${KASM_VNC_PATH}/www -sslOnly -FrameRate=$MAX_FRAME_RATE -interface 0.0.0.0 -BlacklistThreshold=0 -FreeKeyMappings $VNCOPTIONS $KASM_SVC_SEND_CUT_TEXT $KASM_SVC_ACCEPT_CUT_TEXT
vncserver $DISPLAY -depth $VNC_COL_DEPTH -geometry $VNC_RESOLUTION -websocketPort $NO_VNC_PORT -httpd ${KASM_VNC_PATH}/www -sslOnly -FrameRate=$MAX_FRAME_RATE -interface 0.0.0.0 -BlacklistThreshold=0 -FreeKeyMappings $VNCOPTIONS $KASM_SVC_SEND_CUT_TEXT $KASM_SVC_ACCEPT_CUT_TEXT
fi
KASM_PROCS['kasmvnc']=$(cat $HOME/.vnc/*${DISPLAY_NUM}.pid)
@ -247,7 +241,7 @@ function start_window_manager (){
if [ -n "$KASM_ENABLE_ZINK" ] && [ -n "$KASM_EGL_CARD" ] && [ -n "$KASM_RENDERD" ]; then
echo "Starting XFCE with Zink"
LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink DISPLAY=:1 /usr/bin/startxfce4 --replace &
elif [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then
elif [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -w "${KASM_RENDERD}" ] && [ -w "${KASM_EGL_CARD}" ] ; then
echo "Starting XFCE with VirtualGL using EGL device ${KASM_EGL_CARD}"
DISPLAY=:1 /opt/VirtualGL/bin/vglrun -d "${KASM_EGL_CARD}" /usr/bin/startxfce4 --replace &
else
@ -267,7 +261,7 @@ function start_window_manager (){
fi
echo -e "\n------------------ KDE window manager startup------------------"
if [ "${START_DE}" == "kde5" ] ; then
if [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -O "${KASM_RENDERD}" ] && [ -O "${KASM_EGL_CARD}" ] ; then
if [ -f /opt/VirtualGL/bin/vglrun ] && [ ! -z "${KASM_EGL_CARD}" ] && [ ! -z "${KASM_RENDERD}" ] && [ -w "${KASM_RENDERD}" ] && [ -w "${KASM_EGL_CARD}" ] ; then
echo "Starting KDE with VirtualGL using EGL device ${KASM_EGL_CARD}"
DISPLAY=:1 /opt/VirtualGL/bin/vglrun -d "${KASM_EGL_CARD}" /usr/bin/startplasma-x11 &
else

View file

@ -15,7 +15,7 @@ echo "Install KasmVNC server"
cd /tmp
BUILD_ARCH=$(uname -m)
UBUNTU_CODENAME=""
COMMIT_ID="d9b4772680641bd7b122519bdfdcdc4b3b264d8f"
COMMIT_ID="0a64d3381cf2ebfb53685c9c9c804e8a327bf0a3"
BRANCH="master" # just use 'release' for a release branch
KASMVNC_VER="1.4.1"
COMMIT_ID_SHORT=$(echo "${COMMIT_ID}" | cut -c1-6)

View file

@ -27,6 +27,16 @@ elif [[ "${DISTRO}" == "parrotos7" ]]; then
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
else
if [ "${DISTRO}" == "parrotos6" ]; then
if ! getent group kasm-default-profile >/dev/null; then
groupadd --system kasm-default-profile
fi
if ! id kasm-default-profile >/dev/null 2>&1; then
useradd --system --gid kasm-default-profile --home-dir /home/kasm-default-profile --shell /usr/sbin/nologin kasm-default-profile
fi
fi
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \
-o Dpkg::Options::="--force-confdef" \
-o Dpkg::Options::="--force-confold"
fi

View file

@ -29,9 +29,12 @@ fi
if [[ "${DISTRO}" == @(oracle8|oracle9|rhel9|fedora42|fedora43|almalinux8|almalinux9|rockylinux8|rockylinux9|alpine) ]]; then
useradd --system --shell /usr/sbin/nologin --home-dir /bin proxy
elif [ "${DISTRO}" == "opensuse" ]; then
useradd --system --shell /usr/sbin/nologin --home-dir /bin proxy
groupadd -f -g 65511 proxy
usermod -a -G proxy proxy
if ! getent group proxy >/dev/null; then
groupadd -g 65511 proxy
fi
if ! id proxy >/dev/null 2>&1; then
useradd --system --shell /usr/sbin/nologin --home-dir /bin -g proxy proxy
fi
fi
# File and perms

View file

@ -1,13 +1,100 @@
#!/usr/bin/env bash
set -e
if [ "${DISTRO}" == "parrotos7" ]; then
PARROTEXTRA="-t echo-backports"
fi
ARCH="$(uname -m)"
INSTALL_INTEL_VA_DRIVERS="false"
if [[ "${ARCH}" == "x86_64" || "${ARCH}" == "amd64" ]]; then
INSTALL_INTEL_VA_DRIVERS="true"
fi
install_optional_pkg() {
local pkg_mgr="$1"
local pkg="$2"
local install_cmd="$3"
if ! eval "${install_cmd}"; then
echo "WARN: Package '${pkg}' is not available for ${DISTRO} (${pkg_mgr}); continuing"
fi
}
install_first_available_pkg() {
local pkg_mgr="$1"
local install_prefix="$2"
shift 2
local pkg
for pkg in "$@"; do
if eval "${install_prefix} ${pkg}"; then
return 0
fi
done
echo "WARN: None of the equivalent packages are available for ${DISTRO} (${pkg_mgr}): $*; continuing"
return 0
}
echo "Install some common tools for further installation"
if [[ "${DISTRO}" == @(fedora42|fedora43|oracle8|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]]; then
dnf install -y wget net-tools bzip2 tar vim hostname procps-ng bc vulkan-tools
yum install -y vim wget net-tools bzip2 ca-certificates bc
install_first_available_pkg "yum" "yum install -y" mesa-demos mesa-utils
install_first_available_pkg "yum" "yum install -y" libva-utils vainfo
install_first_available_pkg "yum" "yum install -y" mesa-va-drivers mesa-dri-drivers
install_optional_pkg "yum" "vulkan-tools" "yum install -y vulkan-tools"
install_optional_pkg "yum" "mesa-vulkan-drivers" "yum install -y mesa-vulkan-drivers"
install_optional_pkg "yum" "xorg-x11-drv-amdgpu" "yum install -y xorg-x11-drv-amdgpu"
install_optional_pkg "yum" "xorg-x11-drv-ati" "yum install -y xorg-x11-drv-ati"
install_first_available_pkg "yum" "yum install -y" libdrm-amdgpu libdrm_amdgpu1
install_first_available_pkg "yum" "yum install -y" libdrm-radeon libdrm_radeon1
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_first_available_pkg "yum" "yum install -y" intel-media-driver intel-media-va-driver
install_first_available_pkg "yum" "yum install -y" libva-intel-driver i965-va-driver
fi
elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39|fedora40|fedora41|fedora42|fedora43|oracle8|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]]; then
dnf install -y wget net-tools bzip2 tar vim hostname procps-ng bc
install_first_available_pkg "dnf" "dnf install -y" mesa-demos mesa-utils
install_first_available_pkg "dnf" "dnf install -y" libva-utils vainfo
install_first_available_pkg "dnf" "dnf install -y" mesa-va-drivers mesa-dri-drivers
install_optional_pkg "dnf" "vulkan-tools" "dnf install -y vulkan-tools"
install_optional_pkg "dnf" "mesa-vulkan-drivers" "dnf install -y mesa-vulkan-drivers"
install_optional_pkg "dnf" "xorg-x11-drv-amdgpu" "dnf install -y xorg-x11-drv-amdgpu"
install_optional_pkg "dnf" "xorg-x11-drv-ati" "dnf install -y xorg-x11-drv-ati"
install_first_available_pkg "dnf" "dnf install -y" libdrm-amdgpu libdrm_amdgpu1
install_first_available_pkg "dnf" "dnf install -y" libdrm-radeon libdrm_radeon1
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_first_available_pkg "dnf" "dnf install -y" intel-media-driver intel-media-va-driver
install_first_available_pkg "dnf" "dnf install -y" libva-intel-driver i965-va-driver
fi
elif [[ "${DISTRO}" == @(rhel9) ]]; then
dnf install -y wget net-tools bzip2 tar vim hostname procps-ng bc
install_first_available_pkg "dnf" "dnf install -y" mesa-demos mesa-utils
install_first_available_pkg "dnf" "dnf install -y" libva-utils vainfo
install_first_available_pkg "dnf" "dnf install -y" mesa-va-drivers mesa-dri-drivers
install_optional_pkg "dnf" "vulkan-tools" "dnf install -y vulkan-tools"
install_optional_pkg "dnf" "mesa-vulkan-drivers" "dnf install -y mesa-vulkan-drivers"
install_optional_pkg "dnf" "xorg-x11-drv-amdgpu" "dnf install -y xorg-x11-drv-amdgpu"
install_optional_pkg "dnf" "xorg-x11-drv-ati" "dnf install -y xorg-x11-drv-ati"
install_first_available_pkg "dnf" "dnf install -y" libdrm-amdgpu libdrm_amdgpu1
install_first_available_pkg "dnf" "dnf install -y" libdrm-radeon libdrm_radeon1
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_first_available_pkg "dnf" "dnf install -y" intel-media-driver intel-media-va-driver
install_first_available_pkg "dnf" "dnf install -y" libva-intel-driver i965-va-driver
fi
elif [ "${DISTRO}" == "opensuse" ]; then
zypper install -yn wget net-tools bzip2 tar vim gzip iputils bc vulkan-tools
zypper install -yn wget net-tools bzip2 tar vim gzip iputils bc
install_first_available_pkg "zypper" "zypper install -yn" Mesa-demos mesa-utils Mesa-demo-x
install_first_available_pkg "zypper" "zypper install -yn" libva-utils vainfo
install_first_available_pkg "zypper" "zypper install -yn" Mesa-libva mesa-va-drivers
install_optional_pkg "zypper" "vulkan-tools" "zypper install -yn vulkan-tools"
install_first_available_pkg "zypper" "zypper install -yn" libdrm_amdgpu1 libdrm-amdgpu1
install_first_available_pkg "zypper" "zypper install -yn" libdrm_radeon1 libdrm-radeon1
install_optional_pkg "zypper" "xf86-video-amdgpu" "zypper install -yn xf86-video-amdgpu"
install_optional_pkg "zypper" "xf86-video-ati" "zypper install -yn xf86-video-ati"
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_first_available_pkg "zypper" "zypper install -yn" intel-media-driver intel-media-va-driver
install_first_available_pkg "zypper" "zypper install -yn" libva-intel-driver i965-va-driver
fi
elif [ "${DISTRO}" == "alpine" ]; then
apk add --no-cache \
ca-certificates \
@ -24,8 +111,20 @@ elif [ "${DISTRO}" == "alpine" ]; then
sudo \
tar \
wget \
bc \
vulkan-tools
bc
install_first_available_pkg "apk" "apk add --no-cache" mesa-demos mesa-utils
install_first_available_pkg "apk" "apk add --no-cache" libva-utils vainfo
install_first_available_pkg "apk" "apk add --no-cache" mesa-va-gallium mesa-va-drivers
install_optional_pkg "apk" "vulkan-tools" "apk add --no-cache vulkan-tools"
install_optional_pkg "apk" "mesa-vulkan-radeon" "apk add --no-cache mesa-vulkan-radeon"
install_optional_pkg "apk" "xf86-video-amdgpu" "apk add --no-cache xf86-video-amdgpu"
install_optional_pkg "apk" "xf86-video-ati" "apk add --no-cache xf86-video-ati"
install_first_available_pkg "apk" "apk add --no-cache" libdrm-amdgpu libdrm_amdgpu1
install_first_available_pkg "apk" "apk add --no-cache" libdrm-radeon libdrm_radeon1
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_first_available_pkg "apk" "apk add --no-cache" intel-media-driver intel-media-va-driver
install_first_available_pkg "apk" "apk add --no-cache" libva-intel-driver i965-va-driver
fi
else
apt-get update
# Update tzdata noninteractive (otherwise our script is hung on user input later).
@ -38,8 +137,26 @@ else
# software-properties is removed from kali-rolling and debian trixie
if grep -q "kali-rolling" /etc/os-release || grep -q "trixie" /etc/os-release || grep -qi "parrot" /etc/os-release; then
apt-get install ${PARROTEXTRA} -y vim wget net-tools locales bzip2 wmctrl mesa-utils bc vulkan-tools
fi
if grep -q "kali-rolling" /etc/os-release || grep -q "trixie" /etc/os-release || grep -qi "parrot" /etc/os-release; then
apt-get install ${PARROTEXTRA} -y vim wget net-tools locales bzip2 wmctrl bc
else
apt-get install ${PARROTEXTRA} -y vim wget net-tools locales bzip2 wmctrl software-properties-common mesa-utils bc vulkan-tools
apt-get install ${PARROTEXTRA} -y vim wget net-tools locales bzip2 wmctrl software-properties-common bc
fi
install_optional_pkg "apt" "mesa-utils" "apt-get install ${PARROTEXTRA} -y mesa-utils"
install_first_available_pkg "apt" "apt-get install ${PARROTEXTRA} -y" mesa-utils-extra mesa-demos
install_optional_pkg "apt" "vainfo" "apt-get install ${PARROTEXTRA} -y vainfo"
install_optional_pkg "apt" "vulkan-tools" "apt-get install ${PARROTEXTRA} -y vulkan-tools"
install_optional_pkg "apt" "mesa-va-drivers" "apt-get install ${PARROTEXTRA} -y mesa-va-drivers"
install_optional_pkg "apt" "mesa-vulkan-drivers" "apt-get install ${PARROTEXTRA} -y mesa-vulkan-drivers"
install_optional_pkg "apt" "xserver-xorg-video-amdgpu" "apt-get install ${PARROTEXTRA} -y xserver-xorg-video-amdgpu"
install_optional_pkg "apt" "xserver-xorg-video-ati" "apt-get install ${PARROTEXTRA} -y xserver-xorg-video-ati"
install_optional_pkg "apt" "libdrm-amdgpu1" "apt-get install ${PARROTEXTRA} -y libdrm-amdgpu1"
install_optional_pkg "apt" "libdrm-radeon1" "apt-get install ${PARROTEXTRA} -y libdrm-radeon1"
if [ "${INSTALL_INTEL_VA_DRIVERS}" == "true" ]; then
install_optional_pkg "apt" "intel-media-va-driver" "apt-get install ${PARROTEXTRA} -y intel-media-va-driver"
install_optional_pkg "apt" "i965-va-driver" "apt-get install ${PARROTEXTRA} -y i965-va-driver"
fi
# Install openssh-client on Ubuntu

View file

@ -1,16 +1,40 @@
BUILD_ARCH=$(uname -p)
download_rpm() {
if [[ "${BUILD_ARCH}" =~ ^aarch64$ ]] ; then
url=https://github.com/VirtualGL/virtualgl/releases/download/3.1.3/VirtualGL-3.1.3.aarch64.rpm
else
url=https://github.com/VirtualGL/virtualgl/releases/download/3.1.3/VirtualGL-3.1.3.x86_64.rpm
fi
if [ "$DISTRO" = "ubuntu" ]; then
#install virtualgl
#wget https://sourceforge.net/projects/virtualgl/files/2.6.95%20%283.0rc1%29/virtualgl_2.6.95_amd64.deb -P /tmp
wget -O "$virtualgl_rpm" "$url"
}
cleanup_rpm() {
rm "$virtualgl_rpm"
}
skip_parrotos_due_to_i386_dependencies_lacking() {
if [[ "$DISTRO" == @(parrotos6|parrotos7) ]]; then
exit
fi
}
set -e
virtualgl_deb=/tmp/virtualgl.deb
virtualgl_rpm=/tmp/virtualgl.rpm
BUILD_ARCH=$(arch)
skip_parrotos_due_to_i386_dependencies_lacking
if command -v apt-get &>/dev/null; then
if [[ "${BUILD_ARCH}" =~ ^aarch64$ ]] ; then
apt-get update && apt-get install -y --no-install-recommends \
libxau6 libxdmcp6 libxcb1 libxext6 libx11-6
apt-get update && apt-get install -y --no-install-recommends \
libglvnd0 libgl1 libglx0 libegl1 libgles2
dpkg -i $INST_SCRIPTS/virtualgl/virtualgl_*arm64.deb
wget -O "$virtualgl_deb" https://github.com/VirtualGL/virtualgl/releases/download/3.1.3/virtualgl_3.1.3_arm64.deb
else
dpkg --add-architecture i386
apt-get update && apt-get install -y --no-install-recommends \
@ -26,13 +50,25 @@ if [ "$DISTRO" = "ubuntu" ]; then
libegl1 libegl1:i386 \
libgles2 libgles2:i386
if ! grep -q "24.04" /etc/os-release; then
if [[ "$DISTRO" = "ubuntu" ]] && ! grep -q "24.04" /etc/os-release; then
add-apt-repository ppa:kisak/turtle
apt full-upgrade -y
fi
dpkg -i $INST_SCRIPTS/virtualgl/virtualgl_*amd64.deb
wget -O "$virtualgl_deb" https://github.com/VirtualGL/virtualgl/releases/download/3.1.3/virtualgl_3.1.3_amd64.deb
fi
apt install -f -y
rm -rf $INST_SCRIPTS/virtualgl/
apt-get install -y "$virtualgl_deb"
rm "$virtualgl_deb"
fi
if [[ "$DISTRO" =~ ^opensuse ]]; then
download_rpm
zypper --no-gpg-checks install -y "$virtualgl_rpm"
cleanup_rpm
elif command -v dnf &>/dev/null; then
download_rpm
dnf install -y "$virtualgl_rpm"
cleanup_rpm
fi
rm -rf $INST_SCRIPTS/virtualgl/