46 lines
1.8 KiB
Bash
Executable File
46 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Optional render node moves GPU work out of QEMU TCG; no physical display is changed.
|
|
set -euo pipefail
|
|
umask 077
|
|
if [[ "${1:-}" == --help ]]; then
|
|
echo 'Usage: ./audit-desktop.sh [accessible /dev/dri/renderD* or card* node]'
|
|
exit 0
|
|
fi
|
|
export NIXOS_AUDIT_REPO
|
|
NIXOS_AUDIT_REPO=$(dirname "$(readlink -f "$0")")
|
|
export NIXOS_AUDIT_RENDER_NODE=${1:-}
|
|
if [[ -n "$NIXOS_AUDIT_RENDER_NODE" ]] &&
|
|
[[ ! -r "$NIXOS_AUDIT_RENDER_NODE" || ! -w "$NIXOS_AUDIT_RENDER_NODE" ]]; then
|
|
echo "Render node is not accessible: $NIXOS_AUDIT_RENDER_NODE" >&2
|
|
exit 1
|
|
fi
|
|
base="${XDG_CACHE_HOME:-$HOME/.cache}/desktop-audit"
|
|
mkdir -p "$base"
|
|
output=$(mktemp -d "$base/run.XXXXXXXX")
|
|
export TMPDIR="$output/tmp"
|
|
mkdir -p "$TMPDIR"
|
|
driver=$(nix build --impure --no-update-lock-file --out-link "$output/driver" --print-out-paths --expr '
|
|
let
|
|
repo = builtins.getEnv "NIXOS_AUDIT_REPO";
|
|
f = builtins.getFlake repo;
|
|
node = builtins.getEnv "NIXOS_AUDIT_RENDER_NODE";
|
|
in (import (repo + "/desktop-test.nix") {
|
|
inputs = f.inputs;
|
|
pkgs = f.inputs.nixpkgs.legacyPackages.x86_64-linux;
|
|
hostRenderNode = if node == "" then null else node;
|
|
}).driver
|
|
')
|
|
if [[ -n "$NIXOS_AUDIT_RENDER_NODE" ]]; then
|
|
mesa=$(nix eval --impure --raw --expr '
|
|
(builtins.getFlake (builtins.getEnv "NIXOS_AUDIT_REPO")).inputs.nixpkgs.legacyPackages.x86_64-linux.mesa.outPath
|
|
')
|
|
# Isolated host-side Mesa software rendering, never global driver overrides.
|
|
# Prevent the test driver appending -nographic over the EGL-headless backend.
|
|
export DISPLAY=""
|
|
export LIBGL_ALWAYS_SOFTWARE=1 LP_NUM_THREADS=4
|
|
export GBM_BACKENDS_PATH="$mesa/lib/gbm" LIBGL_DRIVERS_PATH="$mesa/lib/dri"
|
|
export __EGL_VENDOR_LIBRARY_FILENAMES="$mesa/share/glvnd/egl_vendor.d/50_mesa.json"
|
|
fi
|
|
printf 'Audit output: %s\n' "$output"
|
|
exec "$driver/bin/nixos-test-driver" -o "$output"
|