Skip to content

Role: plex

Installs Plex Media Server in the Plex LXC, configures the media symlink, and verifies GPU passthrough.

Hosts: plex (LXC 100)

Tasks

Task Tag
Fetch PlexSign.v2.key and dearmor to /etc/apt/keyrings/plexmediaserver.v2.gpg plex, install
Render deb822 sources file pointing at https://repo.plex.tv/deb/ plex, install
Remove legacy .list-format Plex repos and old armored plex.asc keyring plex, install
Install plexmediaserver package plex, install
Enable Plex service at boot plex, install
Create media symlink (plex_zfs_mountplex_media_path) plex, config
Check /dev/nvidia0 availability (if nvidia_transcoding: true) plex, gpu
Report GPU passthrough status plex, gpu

Apt repo: repo.plex.tv, not downloads.plex.tv

Plex migrated the canonical apt mirror from downloads.plex.tv/repo/deb to repo.plex.tv/deb/ in early 2026 and rotated the signing key from PlexSign.key (v1, armored) to PlexSign.v2.key (v2, dearmored to a binary keyring). The old mirror still resolves but is frozen — as of 2026-05-22 the latest published build there was 1.42.2.10156-f737b826c with Last-Modified: 2026-01-28. Any host left pointing at it will silently fall behind: apt update && apt upgrade reports nothing new, but Plex's in-app updater shows newer builds because it pulls release metadata over its own API rather than apt.

The role now templates the new URL and key path; the corresponding install snippet is the same as Plex KB 235974187:

deb [signed-by=/etc/apt/keyrings/plexmediaserver.v2.gpg] https://repo.plex.tv/deb/ public main

Manual edits to /etc/apt/sources.list.d/plex.sources will be overwritten by the next role run — change the template, not the file on the host.

Key variables

Variable Source Value
plex_zfs_mount plex host_vars /stash/rodneystash
plex_media_path plex host_vars /mnt/plex
plex_data_zfs_dataset plex host_vars stash/plex-data
plex_data_zfs_quota plex host_vars 100G
plex_data_mount plex host_vars /stash/plex-data
plex_claim_token plex host_vars Empty after first setup
nvidia_transcoding plex host_vars true

The role creates:

/mnt/plex -> /stash/rodneystash

The ZFS pool and Plex data dataset are mounted into the LXC via Proxmox mount points (mp0 for /stash, mp1 for /stash/plex-data) — these are Proxmox-level configs, not managed by this role. The Plex data directory at /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/ is a symlink pointing to /stash/plex-data. See Plex for that config.

GPU passthrough

The role checks whether /dev/nvidia0 exists inside the container. It reports the result but does not configure passthrough — that requires:

  1. The nvidia role to have run on the Proxmox host
  2. The LXC config (/etc/pve/lxc/100.conf) to have the cgroup2 and mount.entry lines added

See Plex — GPU passthrough for the required LXC config.

First-time setup note

plex_claim_token is only needed when Plex is installed for the first time to link it to a Plex account. Leave it blank once the server is claimed.