From 82635c895c7730181fc24012d6cf770c4a9386c4 Mon Sep 17 00:00:00 2001 From: Seungmin Kim <8457324+ehfd@users.noreply.github.com> Date: Sun, 27 Sep 2026 21:24:09 +0900 Subject: [PATCH 1/2] feat(selkies-project/selkies): add the Selkies desktop module Stream the workspace's desktop to the browser with Selkies behind a coder_app, with the KasmVNC module's variables so a template swaps one for the other. The install script installs what the workspace lacks of Selkies and Xvfb, with PulseAudio where no sound server is installed, from the release's native package and the distribution, as root or with passwordless sudo, or nothing with install_selkies = false; the start script starts selkies-session on the loopback addresses, without a login or TLS of its own, and waits until it answers. --- .icons/selkies.svg | 12 ++ registry/selkies-project/.images/avatar.svg | 12 ++ .../.images/selkies-desktop.png | Bin 0 -> 92190 bytes registry/selkies-project/README.md | 12 ++ .../selkies-project/modules/selkies/README.md | 88 ++++++++ .../modules/selkies/main.test.ts | 168 +++++++++++++++ .../selkies-project/modules/selkies/main.tf | 149 +++++++++++++ .../modules/selkies/main.tftest.hcl | 197 ++++++++++++++++++ .../modules/selkies/scripts/install.sh.tftpl | 99 +++++++++ .../modules/selkies/scripts/start.sh.tftpl | 46 ++++ .../selkies/testdata/selkies-session-mock.sh | 17 ++ 11 files changed, 800 insertions(+) create mode 100644 .icons/selkies.svg create mode 100644 registry/selkies-project/.images/avatar.svg create mode 100644 registry/selkies-project/.images/selkies-desktop.png create mode 100644 registry/selkies-project/README.md create mode 100644 registry/selkies-project/modules/selkies/README.md create mode 100644 registry/selkies-project/modules/selkies/main.test.ts create mode 100644 registry/selkies-project/modules/selkies/main.tf create mode 100644 registry/selkies-project/modules/selkies/main.tftest.hcl create mode 100644 registry/selkies-project/modules/selkies/scripts/install.sh.tftpl create mode 100644 registry/selkies-project/modules/selkies/scripts/start.sh.tftpl create mode 100755 registry/selkies-project/modules/selkies/testdata/selkies-session-mock.sh diff --git a/.icons/selkies.svg b/.icons/selkies.svg new file mode 100644 index 000000000..9bf3875f1 --- /dev/null +++ b/.icons/selkies.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/registry/selkies-project/.images/avatar.svg b/registry/selkies-project/.images/avatar.svg new file mode 100644 index 000000000..9bf3875f1 --- /dev/null +++ b/registry/selkies-project/.images/avatar.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/registry/selkies-project/.images/selkies-desktop.png b/registry/selkies-project/.images/selkies-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..974afb10ce0656b2d649bb750c2be42d341b9ea1 GIT binary patch literal 92190 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

n%{ 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 [!IMPORTANT] +> The workspace needs a desktop installed, as the [`codercom/example-desktop`](https://hub.docker.com/r/codercom/example-desktop) image has. + +![Selkies desktop in a Coder workspace](../../.images/selkies-desktop.png) + +`desktop_environment` names a session installed in the workspace (`xfce`, `kde`, `lxqt`, `gnome`, `mate`) or gives a command to run; empty starts the workspace's default desktop. The module's variables are those of the [KasmVNC module](https://registry.coder.com/modules/coder/kasmvnc), so a template swaps one for the other or offers both. + +## Selkies in the Image + +Where the image carries Selkies and Xvfb, the module installs nothing and needs neither `sudo` nor network access, and `install_selkies = false` keeps it that way. Selkies publishes native packages, a Python wheel, and an AppImage; see its [native install guide](https://github.com/selkies-project/selkies/blob/main/docs/native.md). + +```tf +module "selkies" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/selkies-project/selkies/coder" + version = "1.0.0" + agent_id = coder_agent.main.id + desktop_environment = "xfce" + install_selkies = false +} +``` + +## Installing at Start + +Otherwise, the module installs the release's native package, the distribution's Xvfb, and PulseAudio where the workspace has no sound server, as root or with passwordless `sudo`, on the distributions a release publishes packages for (for 2.0.0: Ubuntu 24.04 and 26.04, Debian 12 and 13, Fedora, RHEL 9 and its rebuilds, Alpine, and Arch Linux). `selkies_version` pins a release, and `release_url` points at a mirror laid out like GitHub's releases. + +```tf +module "selkies" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/selkies-project/selkies/coder" + version = "1.0.0" + agent_id = coder_agent.main.id + desktop_environment = "xfce" + selkies_version = "2.0.0" + release_url = "https://artifacts.example.com/selkies/releases" +} +``` + +## Wayland + +`wayland = true` streams through Selkies' Wayland backend instead of an Xvfb. The desktop is then a Wayland compositor, or a desktop that starts one, nested in Selkies' own. + +```tf +module "selkies" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/selkies-project/selkies/coder" + version = "1.0.0" + agent_id = coder_agent.main.id + desktop_environment = "labwc" + wayland = true +} +``` + +## Network Access + +The module contacts the network only when it installs: + +- `/latest`, to resolve the latest release without GitHub's rate-limited API, unless `selkies_version` is set. +- `/download//selkies--`, the package. +- The distribution's package repositories, for Xvfb, PulseAudio, and the package's dependencies. + +Once it runs, the browser reaches Selkies through Coder's proxy on the workspace's loopback addresses; no WebRTC, STUN, or TURN server is involved. + +## Troubleshooting + +The logs are in `~/.coder-modules/selkies-project/selkies/logs/`: `install.log`, `start.log`, and Selkies' own `selkies-session.log`. `coder port-forward --tcp 8080:8080` reaches the same desktop at `http://localhost:8080`, which browsers treat as a secure context for the clipboard, gamepads, and the microphone. diff --git a/registry/selkies-project/modules/selkies/main.test.ts b/registry/selkies-project/modules/selkies/main.test.ts new file mode 100644 index 000000000..321975515 --- /dev/null +++ b/registry/selkies-project/modules/selkies/main.test.ts @@ -0,0 +1,168 @@ +import { afterEach, describe, expect, it, setDefaultTimeout } from "bun:test"; +import path from "node:path"; +import { + execContainer, + readFileContainer, + removeContainer, + runContainer, + runTerraformApply, + runTerraformInit, + type TerraformState, + testRequiredVariables, + writeCoder, + writeFileContainer, +} from "~test"; + +setDefaultTimeout(120_000); + +const IMAGE = "node:22-bookworm-slim"; + +type Variables = Readonly<{ + agent_id: string; + desktop_environment?: string; + port?: number; + install_selkies?: boolean; +}>; + +interface Scripts { + install: string; + start: string; +} + +const scriptsOf = (state: TerraformState): Scripts => { + const scripts: Partial = {}; + for (const resource of state.resources) { + if (resource.type !== "coder_script") { + continue; + } + for (const instance of resource.instances) { + const { display_name: name, script } = instance.attributes as Record< + string, + unknown + >; + if (typeof script !== "string") { + continue; + } + if (name === "Selkies: Install Script") { + scripts.install = script; + } else if (name === "Selkies: Start Script") { + scripts.start = script; + } + } + } + if (!scripts.install || !scripts.start) { + throw new Error("the module must create an install and a start script"); + } + return scripts as Scripts; +}; + +let containers: string[] = []; + +afterEach(async () => { + for (const id of containers) { + await removeContainer(id); + } + containers = []; +}); + +// A workspace with the coder CLI stubbed and, as an image carrying Selkies +// would have them, a launcher and an Xvfb on PATH +const workspace = async (launcher?: string): Promise => { + const id = await runContainer(IMAGE); + containers.push(id); + await writeCoder(id, "#!/bin/sh\nexit 0\n"); + if (launcher !== undefined) { + await writeFileContainer(id, "/usr/local/bin/selkies-session", launcher, { + user: "root", + }); + await writeFileContainer(id, "/usr/local/bin/Xvfb", "#!/bin/sh\n", { + user: "root", + }); + await execContainer( + id, + ["chmod", "755", "/usr/local/bin/selkies-session", "/usr/local/bin/Xvfb"], + ["--user", "root"], + ); + } + return id; +}; + +const mockLauncher = () => + Bun.file( + path.join(import.meta.dir, "testdata", "selkies-session-mock.sh"), + ).text(); + +const run = (id: string, script: string) => + execContainer(id, ["bash", "-c", script]); + +describe("selkies", async () => { + await runTerraformInit(import.meta.dir); + + testRequiredVariables(import.meta.dir, { agent_id: "foo" }); + + it("installs nothing where the image has Selkies, and starts it behind the app's port", async () => { + const scripts = scriptsOf( + await runTerraformApply(import.meta.dir, { + agent_id: "foo", + desktop_environment: "xfce", + }), + ); + const id = await workspace(await mockLauncher()); + + const install = await run(id, scripts.install); + expect(install.exitCode).toBe(0); + expect(install.stdout).toContain( + "Selkies and its display server are installed", + ); + + const start = await run(id, scripts.start); + expect(start.exitCode).toBe(0); + expect(start.stdout).toContain("Selkies is ready on port 8080"); + const args = await readFileContainer(id, "/tmp/selkies-session.args"); + expect(args.trim().split("\n")).toEqual([ + "--port=8080", + "--enable-basic-auth=false", + "--enable-https=false", + "--session=xfce", + ]); + + const again = await run(id, scripts.start); + expect(again.exitCode).toBe(0); + expect(again.stdout).toContain("Selkies already answers on port 8080"); + }); + + it("installs nothing when install_selkies is false, and says what is missing", async () => { + const scripts = scriptsOf( + await runTerraformApply(import.meta.dir, { + agent_id: "foo", + install_selkies: false, + }), + ); + const id = await workspace(); + + const install = await run(id, scripts.install); + expect(install.exitCode).not.toBe(0); + expect(install.stdout).toContain( + "The workspace lacks selkies-session Xvfb and install_selkies is false", + ); + }); + + it("reports a Selkies that exits before it answers", async () => { + const scripts = scriptsOf( + await runTerraformApply(import.meta.dir, { + agent_id: "foo", + port: 8081, + }), + ); + const id = await workspace( + "#!/bin/sh\necho 'Xvfb did not come up' >&2\nexit 1\n", + ); + + // The install script runs first, as Coder orders them, and lays out the module's directory + expect((await run(id, scripts.install)).exitCode).toBe(0); + const start = await run(id, scripts.start); + expect(start.exitCode).not.toBe(0); + expect(start.stdout).toContain("Selkies exited before it answered"); + expect(start.stdout).toContain("Xvfb did not come up"); + }); +}); diff --git a/registry/selkies-project/modules/selkies/main.tf b/registry/selkies-project/modules/selkies/main.tf new file mode 100644 index 000000000..81c7591c5 --- /dev/null +++ b/registry/selkies-project/modules/selkies/main.tf @@ -0,0 +1,149 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.13" + } + } +} + +variable "agent_id" { + description = "The ID of a Coder agent." + type = string +} + +variable "port" { + description = "The port Selkies listens on, on the workspace's loopback addresses." + type = number + default = 8080 + + validation { + condition = var.port >= 1 && var.port <= 65535 && floor(var.port) == var.port + error_message = "port must be an integer between 1 and 65535." + } +} + +variable "desktop_environment" { + description = "The desktop to start: a session installed in the workspace, by name (xfce, kde, lxqt, gnome, mate), or a command. Empty starts the workspace's default desktop." + type = string + default = "" +} + +variable "wayland" { + description = "Stream through Selkies' Wayland backend instead of an Xvfb." + type = bool + default = false +} + +variable "install_selkies" { + description = "Install what the workspace lacks of Selkies and Xvfb, as root or with passwordless sudo. Set to false when the image carries both." + type = bool + default = true +} + +variable "selkies_version" { + description = "The Selkies release to install, such as 2.0.0. Empty installs the latest." + type = string + default = "" + + validation { + condition = can(regex("^([0-9A-Za-z][0-9A-Za-z._-]*)?$", var.selkies_version)) + error_message = "selkies_version must be a release tag such as 2.0.0, or empty for the latest." + } +} + +variable "release_url" { + description = "Where Selkies' releases are downloaded from: GitHub's, or a mirror laid out the same way (/download//). A mirror without a /latest redirect needs selkies_version." + type = string + default = "https://github.com/selkies-project/selkies/releases" + + validation { + condition = can(regex("^https?://[^\\s'\"]+[^/\\s'\"]$", var.release_url)) + error_message = "release_url must be an http(s) URL without quotes or a trailing slash." + } +} + +variable "order" { + description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)." + type = number + default = null +} + +variable "group" { + description = "The name of a group that this app belongs to." + type = string + default = null +} + +variable "subdomain" { + description = "Is subdomain sharing enabled in your cluster?" + type = bool + default = true +} + +variable "share" { + description = "Who can open the app: the workspace's owner, any authenticated user, or anyone." + type = string + default = "owner" + + validation { + condition = var.share == "owner" || var.share == "authenticated" || var.share == "public" + error_message = "Incorrect value. Please set either 'owner', 'authenticated', or 'public'." + } +} + +locals { + icon = "/icon/selkies.svg" + module_directory = "$HOME/.coder-modules/selkies-project/selkies" + + install_script = templatefile("${path.module}/scripts/install.sh.tftpl", { + ARG_INSTALL = tostring(var.install_selkies) + ARG_WAYLAND = tostring(var.wayland) + ARG_VERSION = var.selkies_version + ARG_RELEASE_URL = var.release_url + }) + + start_script = templatefile("${path.module}/scripts/start.sh.tftpl", { + ARG_PORT = tostring(var.port) + ARG_WAYLAND = tostring(var.wayland) + ARG_DESKTOP_B64 = base64encode(var.desktop_environment) + }) +} + +module "coder_utils" { + source = "registry.coder.com/coder/coder-utils/coder" + version = "0.0.2" + + agent_id = var.agent_id + module_directory = local.module_directory + display_name_prefix = "Selkies" + icon = local.icon + install_script = local.install_script + start_script = local.start_script +} + +# Selkies derives its path prefix from the URL it is loaded from, so a path app works as well as a subdomain. +resource "coder_app" "selkies" { + agent_id = var.agent_id + slug = "selkies" + display_name = "Selkies" + url = "http://localhost:${var.port}" + icon = local.icon + subdomain = var.subdomain + share = var.share + order = var.order + group = var.group + + healthcheck { + url = "http://localhost:${var.port}/api/health" + interval = 5 + threshold = 6 + } +} + +output "scripts" { + description = "Ordered list of coder exp sync names for the scripts this module runs: the install script, then the start script." + value = module.coder_utils.scripts +} diff --git a/registry/selkies-project/modules/selkies/main.tftest.hcl b/registry/selkies-project/modules/selkies/main.tftest.hcl new file mode 100644 index 000000000..4745486f4 --- /dev/null +++ b/registry/selkies-project/modules/selkies/main.tftest.hcl @@ -0,0 +1,197 @@ +mock_provider "coder" {} + +run "defaults" { + command = plan + + variables { + agent_id = "agent" + } + + assert { + condition = coder_app.selkies.url == "http://localhost:8080" + error_message = "The app must reach Selkies on the default port." + } + + assert { + condition = coder_app.selkies.slug == "selkies" && coder_app.selkies.display_name == "Selkies" && coder_app.selkies.icon == "/icon/selkies.svg" + error_message = "The app must be named and branded Selkies." + } + + assert { + condition = coder_app.selkies.subdomain && coder_app.selkies.share == "owner" + error_message = "The app must default to a subdomain its owner alone opens, as the KasmVNC module's does." + } + + assert { + condition = local.module_directory == "$HOME/.coder-modules/selkies-project/selkies" + error_message = "The module must keep its data under the standard per-module root." + } + + assert { + condition = strcontains(local.start_script, "--enable-basic-auth=false --enable-https=false") && !strcontains(local.start_script, "--public") + error_message = "Selkies must listen on the loopback addresses alone, leaving the login and TLS to Coder." + } + + assert { + condition = strcontains(local.start_script, "ARG_DESKTOP=$(echo -n '' | base64 -d)") + error_message = "An empty desktop_environment must start the workspace's default desktop." + } + + assert { + condition = strcontains(local.install_script, "ARG_INSTALL='true'") && strcontains(local.install_script, "ARG_VERSION=''") + error_message = "The module must install the latest release where the workspace lacks Selkies." + } + + assert { + condition = strcontains(local.install_script, "ARG_RELEASE_URL='https://github.com/selkies-project/selkies/releases'") && !strcontains(local.install_script, "api.github.com") + error_message = "The latest release must be resolved from GitHub's releases redirect, not its rate-limited API." + } +} + +run "health_check_and_scripts" { + command = apply + + variables { + agent_id = "agent" + } + + assert { + condition = one(coder_app.selkies.healthcheck).url == "http://localhost:8080/api/health" + error_message = "The health check must use Selkies' /api/health endpoint." + } + + assert { + condition = length(output.scripts) == 2 + error_message = "The module must run an install script and then a start script." + } +} + +run "kasmvnc_module_variables" { + command = plan + + variables { + agent_id = "agent" + desktop_environment = "xfce" + port = 6800 + subdomain = false + share = "authenticated" + order = 3 + group = "Desktops" + } + + assert { + condition = coder_app.selkies.url == "http://localhost:6800" && !coder_app.selkies.subdomain && coder_app.selkies.share == "authenticated" + error_message = "The app must follow the port, subdomain, and share variables." + } + + assert { + condition = coder_app.selkies.order == 3 && coder_app.selkies.group == "Desktops" + error_message = "The app must keep its order and group." + } + + assert { + condition = strcontains(local.start_script, base64encode("xfce")) && strcontains(local.start_script, "ARG_PORT='6800'") + error_message = "The start script must start the named desktop on the configured port." + } +} + +run "desktop_command" { + command = plan + + variables { + agent_id = "agent" + desktop_environment = "startxfce4 --replace 'now'" + } + + assert { + condition = strcontains(local.start_script, base64encode("startxfce4 --replace 'now'")) + error_message = "A desktop command must reach the start script intact, quotes included." + } +} + +run "wayland" { + command = plan + + variables { + agent_id = "agent" + wayland = true + } + + assert { + condition = strcontains(local.start_script, "ARG_WAYLAND='true'") && strcontains(local.install_script, "ARG_WAYLAND='true'") + error_message = "The Wayland backend must reach both scripts, so neither starts nor installs an Xvfb." + } +} + +run "image_carries_selkies" { + command = plan + + variables { + agent_id = "agent" + install_selkies = false + } + + assert { + condition = strcontains(local.install_script, "ARG_INSTALL='false'") + error_message = "install_selkies = false must keep the install script from installing." + } +} + +run "pinned_release_from_a_mirror" { + command = plan + + variables { + agent_id = "agent" + selkies_version = "2.0.0" + release_url = "https://artifacts.example.com/selkies/releases" + } + + assert { + condition = strcontains(local.install_script, "ARG_VERSION='2.0.0'") && strcontains(local.install_script, "ARG_RELEASE_URL='https://artifacts.example.com/selkies/releases'") + error_message = "The install script must download the pinned release from the mirror." + } +} + +run "rejects_an_invalid_share" { + command = plan + + variables { + agent_id = "agent" + share = "everyone" + } + + expect_failures = [var.share] +} + +run "rejects_a_version_that_is_not_a_tag" { + command = plan + + variables { + agent_id = "agent" + selkies_version = "2.0.0'; true" + } + + expect_failures = [var.selkies_version] +} + +run "rejects_a_release_url_with_a_trailing_slash" { + command = plan + + variables { + agent_id = "agent" + release_url = "https://github.com/selkies-project/selkies/releases/" + } + + expect_failures = [var.release_url] +} + +run "rejects_a_port_out_of_range" { + command = plan + + variables { + agent_id = "agent" + port = 70000 + } + + expect_failures = [var.port] +} diff --git a/registry/selkies-project/modules/selkies/scripts/install.sh.tftpl b/registry/selkies-project/modules/selkies/scripts/install.sh.tftpl new file mode 100644 index 000000000..4cf2acf36 --- /dev/null +++ b/registry/selkies-project/modules/selkies/scripts/install.sh.tftpl @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# Install what the workspace lacks of Selkies and its display server: the +# release's native package and the distribution's Xvfb, with PulseAudio where +# no sound server is installed, as root or with passwordless sudo. A workspace +# that has Selkies and its display server installs nothing. +if [ -r /etc/os-release ]; then + # shellcheck source=/dev/null + . /etc/os-release +fi + +set -euo pipefail + +ARG_INSTALL='${ARG_INSTALL}' +ARG_WAYLAND='${ARG_WAYLAND}' +ARG_VERSION='${ARG_VERSION}' +ARG_RELEASE_URL='${ARG_RELEASE_URL}' + +missing=() +command -v selkies-session > /dev/null || missing+=(selkies-session) +[ "$ARG_WAYLAND" = true ] || command -v Xvfb > /dev/null || missing+=(Xvfb) +if [ $${#missing[@]} -eq 0 ]; then + echo "Selkies and its display server are installed" + exit 0 +fi +if [ "$ARG_INSTALL" != true ]; then + echo "The workspace lacks $${missing[*]} and install_selkies is false: install them in the image" >&2 + exit 1 +fi + +sudo=() +if [ "$(id -u)" -ne 0 ]; then + if ! sudo -n true 2> /dev/null; then + echo "Installing $${missing[*]} needs root or sudo without a password: install them in the image instead" >&2 + exit 1 + fi + sudo=(sudo) +fi + +if command -v apt-get > /dev/null; then + platform="$${ID:-}$([ "$${ID:-}" = ubuntu ] && echo "$${VERSION_ID:-}" || echo "$${VERSION_CODENAME:-}")-$(dpkg --print-architecture).deb" + apt=("$${sudo[@]}" env DEBIAN_FRONTEND=noninteractive apt-get -o DPkg::Lock::Timeout=300) + "$${apt[@]}" update -qq + install_file=("$${apt[@]}" install -y) + install_repo=("$${apt[@]}" install -y --no-install-recommends) + xvfb=xvfb +elif command -v dnf > /dev/null; then + platform="$([ "$${ID:-}" = fedora ] && echo fc || echo "el$${VERSION_ID%%.*}")-$(uname -m).rpm" + install_file=("$${sudo[@]}" dnf install -y) + install_repo=("$${sudo[@]}" dnf install -y) + xvfb=xorg-x11-server-Xvfb +elif command -v apk > /dev/null; then + platform="$(uname -m).apk" + install_file=("$${sudo[@]}" apk add --allow-untrusted) + install_repo=("$${sudo[@]}" apk add) + xvfb=xvfb +elif command -v pacman > /dev/null; then + platform="$(uname -m).pkg.tar.zst" + install_file=("$${sudo[@]}" pacman -U --noconfirm) + install_repo=("$${sudo[@]}" pacman -S --noconfirm --needed) + xvfb=xorg-server-xvfb +else + echo "No package manager Selkies publishes packages for (apt, dnf, apk, pacman): install Selkies in the image instead" >&2 + exit 1 +fi + +if ! command -v selkies-session > /dev/null; then + command -v curl > /dev/null || "$${install_repo[@]}" curl + version=$ARG_VERSION + if [ -z "$version" ]; then + # The latest release's tag, from the redirect GitHub answers without its rate-limited API + latest=$(curl -fsSLI -o /dev/null -w '%%{url_effective}' "$ARG_RELEASE_URL/latest") || latest= + version=$${latest##*/} + if [ -z "$version" ] || [ "$version" = latest ]; then + echo "Could not resolve the latest release at $ARG_RELEASE_URL: set selkies_version" >&2 + exit 1 + fi + fi + file="selkies-$version-$platform" + work=$(mktemp -d) + trap 'rm -rf "$work"' EXIT + # The package manager reads the file as an unprivileged user of its own + chmod 755 "$work" + echo "Installing Selkies $version ($file)" + if ! curl -fsSL -o "$work/$file" "$ARG_RELEASE_URL/download/$version/$file"; then + echo "Selkies $version publishes no $file for $${PRETTY_NAME:-this workspace}: install Selkies in the image instead" >&2 + exit 1 + fi + "$${install_file[@]}" "$work/$file" +fi + +if [ "$ARG_WAYLAND" != true ] && ! command -v Xvfb > /dev/null; then + echo "Installing Xvfb" + "$${install_repo[@]}" "$xvfb" +fi +if ! command -v pulseaudio > /dev/null && ! command -v pipewire-pulse > /dev/null; then + echo "Installing PulseAudio" + "$${install_repo[@]}" pulseaudio +fi +echo "Selkies and its display server are installed" diff --git a/registry/selkies-project/modules/selkies/scripts/start.sh.tftpl b/registry/selkies-project/modules/selkies/scripts/start.sh.tftpl new file mode 100644 index 000000000..f020bcf44 --- /dev/null +++ b/registry/selkies-project/modules/selkies/scripts/start.sh.tftpl @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# Start Selkies with the workspace's desktop behind the app's port, unless it +# already answers. Coder authenticates the app and terminates TLS, so Selkies +# listens on the loopback addresses without a login or TLS of its own. +set -euo pipefail + +ARG_PORT='${ARG_PORT}' +ARG_WAYLAND='${ARG_WAYLAND}' +ARG_DESKTOP=$(echo -n '${ARG_DESKTOP_B64}' | base64 -d) +LOG_PATH="$HOME/.coder-modules/selkies-project/selkies/logs/selkies-session.log" + +# A GET of /api/health over bash's own TCP, so the check needs no curl +healthy() { + ( + exec 3<> "/dev/tcp/127.0.0.1/$ARG_PORT" + printf 'GET /api/health HTTP/1.0\r\nHost: localhost\r\n\r\n' >&3 + read -r -t 5 _ status _ <&3 + [ "$status" = 200 ] + ) 2> /dev/null +} + +if healthy; then + echo "Selkies already answers on port $ARG_PORT" + exit 0 +fi + +mkdir -p "$(dirname "$LOG_PATH")" +args=(--port="$ARG_PORT" --enable-basic-auth=false --enable-https=false) +[ -z "$ARG_DESKTOP" ] || args+=(--session="$ARG_DESKTOP") +SELKIES_WAYLAND="$ARG_WAYLAND" nohup selkies-session "$${args[@]}" >> "$LOG_PATH" 2>&1 & +pid=$! +echo "Starting Selkies on port $ARG_PORT; its log is $LOG_PATH" +for _ in $(seq 1 60); do + if healthy; then + echo "Selkies is ready on port $ARG_PORT" + exit 0 + fi + if ! kill -0 "$pid" 2> /dev/null; then + echo "Selkies exited before it answered; the end of its log:" >&2 + tail -n 20 "$LOG_PATH" >&2 + exit 1 + fi + sleep 1 +done +echo "Selkies did not answer on port $ARG_PORT within 60 seconds; see $LOG_PATH" >&2 +exit 1 diff --git a/registry/selkies-project/modules/selkies/testdata/selkies-session-mock.sh b/registry/selkies-project/modules/selkies/testdata/selkies-session-mock.sh new file mode 100755 index 000000000..174cee8ac --- /dev/null +++ b/registry/selkies-project/modules/selkies/testdata/selkies-session-mock.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# Stands in for selkies-session: records how it was started, and answers +# /api/health on the port it was given, as Selkies does +printf '%s\n' "$@" > /tmp/selkies-session.args +printf 'SELKIES_WAYLAND=%s\n' "${SELKIES_WAYLAND:-}" > /tmp/selkies-session.env +port=8080 +for arg in "$@"; do + case "$arg" in --port=*) port=${arg#--port=} ;; esac +done +exec node -e ' + require("node:http") + .createServer((req, res) => { + res.writeHead(req.url === "/api/health" ? 200 : 404); + res.end(); + }) + .listen(Number(process.argv[1]), "127.0.0.1"); +' "$port" From 40960316833b5a4e82f3cc96c1080d5c50d9971d Mon Sep 17 00:00:00 2001 From: Seungmin Kim <8457324+ehfd@users.noreply.github.com> Date: Mon, 28 Sep 2026 12:51:36 +0900 Subject: [PATCH 2/2] feat(selkies-project/templates): add a Selkies desktop template for Docker Run Selkies' desktop image as a Docker workspace with a persistent home, shared memory for the desktop's browsers, and the Selkies module starting the image's default desktop. A workspace picks no GPU or an NVIDIA one, whose NVENC then encodes the stream, and X11 or Wayland. Without a GPU, the container keeps NVIDIA's runtime from passing the host's GPUs in, as it would where that runtime is Docker's default. --- .../.images/docker-desktop.png | Bin 0 -> 127094 bytes .../templates/docker-desktop/README.md | 30 +++ .../templates/docker-desktop/main.tf | 171 ++++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 registry/selkies-project/.images/docker-desktop.png create mode 100644 registry/selkies-project/templates/docker-desktop/README.md create mode 100644 registry/selkies-project/templates/docker-desktop/main.tf diff --git a/registry/selkies-project/.images/docker-desktop.png b/registry/selkies-project/.images/docker-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..13b01d572791088ad66dc1eb59a8dbb0f2fda956 GIT binary patch literal 127094 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�WHk9e6-(?cF=>Dk#84OZ$K*R>9W524|2hVg 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 z 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"]` to the container, as Selkies' [Getting Started](https://docs.selkies.io/start) does with `docker run`. + +## Architecture + +This template provisions the following resources: + +- Docker container from `ghcr.io/selkies-project/selkies/desktop:latest-ubuntu26.04` (ephemeral) +- Docker volume (persistent on `/home/ubuntu`) + +The Coder agent runs in place of the image's own init, and the Selkies module starts the image's default desktop and Selkies behind Coder's proxy, so the image's own login, TLS, and TURN server are not used. When the workspace restarts, anything outside the home directory is reset to the image. diff --git a/registry/selkies-project/templates/docker-desktop/main.tf b/registry/selkies-project/templates/docker-desktop/main.tf new file mode 100644 index 000000000..0532c5bd7 --- /dev/null +++ b/registry/selkies-project/templates/docker-desktop/main.tf @@ -0,0 +1,171 @@ +terraform { + required_providers { + coder = { + source = "coder/coder" + } + docker = { + source = "kreuzwerker/docker" + } + } +} + +variable "docker_socket" { + default = "" + description = "(Optional) Docker socket URI" + type = string +} + +provider "docker" { + # Defaulting to null if the variable is an empty string lets us have an optional variable without having to set our own default + host = var.docker_socket != "" ? var.docker_socket : null +} + +data "coder_provisioner" "me" {} +data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} + +data "coder_parameter" "gpu" { + name = "gpu" + display_name = "GPU" + description = "The GPU the desktop renders and encodes the stream on. NVIDIA needs the NVIDIA Container Toolkit on the Docker host." + default = "none" + mutable = true + option { + name = "None" + value = "none" + } + option { + name = "NVIDIA" + value = "nvidia" + } +} + +data "coder_parameter" "display_backend" { + name = "display_backend" + display_name = "Display backend" + description = "The display server the desktop runs on." + default = "x11" + mutable = true + option { + name = "X11" + value = "x11" + } + option { + name = "Wayland" + value = "wayland" + } +} + +resource "coder_agent" "main" { + arch = data.coder_provisioner.me.arch + os = "linux" + + metadata { + display_name = "CPU Usage" + key = "0_cpu_usage" + script = "coder stat cpu" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "RAM Usage" + key = "1_ram_usage" + script = "coder stat mem" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Home Disk" + key = "3_home_disk" + script = "coder stat disk --path $${HOME}" + interval = 60 + timeout = 1 + } +} + +# See https://registry.coder.com/modules/selkies-project/selkies +module "selkies" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/selkies-project/selkies/coder" + version = "~> 1.0" + agent_id = coder_agent.main.id + install_selkies = false + wayland = data.coder_parameter.display_backend.value == "wayland" +} + +resource "docker_volume" "home_volume" { + name = "coder-${data.coder_workspace.me.id}-home" + # Protect the volume from being deleted due to changes in attributes. + lifecycle { + ignore_changes = all + } + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace_owner.me.name + } + labels { + label = "coder.owner_id" + value = data.coder_workspace_owner.me.id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + # This field becomes outdated if the workspace is renamed but can + # be useful for debugging or cleaning out dangling volumes. + labels { + label = "coder.workspace_name_at_creation" + value = data.coder_workspace.me.name + } +} + +resource "docker_container" "workspace" { + count = data.coder_workspace.me.start_count + # Selkies' desktop image: LXQt, Firefox, and Chrome, with Selkies and Xvfb installed + image = "ghcr.io/selkies-project/selkies/desktop:latest-ubuntu26.04" + # Uses lower() to avoid Docker restriction on container names. + name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}" + # Hostname makes the shell more user friendly: ubuntu@my-workspace:~$ + hostname = data.coder_workspace.me.name + # The agent runs in place of the image's own init, and the module starts the desktop and Selkies + entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")] + env = [ + "CODER_AGENT_TOKEN=${coder_agent.main.token}", + # The image asks for every NVIDIA GPU, which a host whose default runtime is NVIDIA's would otherwise pass in + "NVIDIA_VISIBLE_DEVICES=${data.coder_parameter.gpu.value == "nvidia" ? "all" : "void"}", + ] + gpus = data.coder_parameter.gpu.value == "nvidia" ? "all" : null + runtime = data.coder_parameter.gpu.value == "nvidia" ? "nvidia" : null + # Browsers crash in Docker's default 64 MB of shared memory + shm_size = 2048 + host { + host = "host.docker.internal" + ip = "host-gateway" + } + volumes { + container_path = "/home/ubuntu" + volume_name = docker_volume.home_volume.name + read_only = false + } + + # Add labels in Docker to keep track of orphan resources. + labels { + label = "coder.owner" + value = data.coder_workspace_owner.me.name + } + labels { + label = "coder.owner_id" + value = data.coder_workspace_owner.me.id + } + labels { + label = "coder.workspace_id" + value = data.coder_workspace.me.id + } + labels { + label = "coder.workspace_name" + value = data.coder_workspace.me.name + } +}