smol-machines--smolvm
69 行
3.2 KiB
Plaintext
69 行
3.2 KiB
Plaintext
# Headless Chromium with GPU acceleration
|
|
#
|
|
# For pre-warmed browser pools via fork (warm-state preservation, the required
|
|
# --no-zygote/--no-sandbox flags, persistent-workload setup, and CDP access),
|
|
# see README.md in this directory.
|
|
#
|
|
# Guest Vulkan (Venus/virtio-gpu) forwards calls over the virtio-gpu transport
|
|
# to the host GPU. ANGLE inside Chromium uses Venus as its Vulkan backend, so
|
|
# WebGL and compositing run on real hardware — no SwiftShader fallback.
|
|
#
|
|
# Confirmed GL renderer:
|
|
# ANGLE (Intel, Vulkan 1.4.307 (Virtio-GPU Venus (Intel(R) UHD Graphics 620
|
|
# (KBL GT2)) (0x00005917)), venus)
|
|
#
|
|
# ── Setup (one time) ─────────────────────────────────────────────────────────
|
|
#
|
|
# smolvm machine create --name browser -s examples/headless-browser/browser.smolfile
|
|
# smolvm machine start --name browser
|
|
#
|
|
# ── Take a screenshot ────────────────────────────────────────────────────────
|
|
#
|
|
# smolvm machine exec --name browser -- \
|
|
# chromium --headless=new --no-sandbox --disable-dev-shm-usage \
|
|
# --use-gl=angle --use-angle=vulkan \
|
|
# --screenshot=/tmp/out.png --window-size=1280,800 \
|
|
# https://example.com
|
|
#
|
|
# # Copy screenshot to host
|
|
# smolvm machine exec --name browser -- base64 /tmp/out.png | base64 -d > out.png
|
|
#
|
|
# ── Verify GPU renderer ───────────────────────────────────────────────────────
|
|
#
|
|
# smolvm machine exec --name browser -- sh -c '
|
|
# vulkaninfo --summary 2>/dev/null | grep deviceName
|
|
# '
|
|
# # → deviceName = Virtio-GPU Venus (Intel(R) UHD Graphics 620 ...)
|
|
#
|
|
# ── Stop ─────────────────────────────────────────────────────────────────────
|
|
#
|
|
# smolvm machine stop --name browser
|
|
#
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# mesa-vulkan-virtio (the guest virtio Vulkan ICD) is not in Alpine 3.21 stable.
|
|
# Use edge until Alpine 3.22 is released.
|
|
image = "alpine:edge"
|
|
|
|
cpus = 4
|
|
memory = 4096
|
|
gpu = true
|
|
gpu_vram = 2048
|
|
net = true
|
|
|
|
# Venus Vulkan ICD — tells the Vulkan loader where to find the virtio GPU driver.
|
|
# The path is architecture-specific. Change x86_64 → aarch64 on ARM hosts.
|
|
#
|
|
# x86_64: VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.x86_64.json
|
|
# aarch64: VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.aarch64.json
|
|
env = [
|
|
"VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/virtio_icd.x86_64.json",
|
|
]
|
|
|
|
[dev]
|
|
# Install Chromium and the Mesa Venus Vulkan driver.
|
|
# apk is idempotent — subsequent starts skip packages already on disk.
|
|
init = [
|
|
"apk add --no-cache chromium chromium-angle mesa-vulkan-virtio vulkan-loader font-opensans",
|
|
]
|