Plex Media Server install
How to install Plex Media Server in a VM/container and provide it access to media files stored on a NAS.
Install Intel graphics drivers (hardware transcoding)
This is optional, and should only be done if you are using an Intel CPU with Quick Sync Video, which includes all Core i3/i5/i7 CPUs from Sandy Bridge (2nd gen) onwards. Some Atom, Celeron, and Pentium CPUs also support this.
Debian Hardware Video Acceleration guide
- Install the drivers and the
vainfo
utility. If running Plex on a Proxmox LXC container, the drivers will need to be installed on both the host and container.
# Intel 8th gen or newer
apt install intel-media-va-driver vainfo
# Intel 7th gen or older
apt install i965-va-driver vainfo
Reboot the host
Verify hardware is accessible in the container by running:
ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 80 Aug 5 02:44 by-path
crw-rw---- 1 root video 226, 0 Aug 5 02:44 card0
crw-rw---- 1 root render 226, 128 Aug 5 02:44 renderD128
- Run
vainfo
. Should get an output similar to below:
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: va_openDriver() returns -1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Kaby Lake - 2.4.1
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264MultiviewHigh : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
Install Plex
- Install gnupg and curl so we can add the Plex repo
apt install gnupg curl
- Add Plex repo, and add their pgp key
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
- Update repos and install Plex Media Server
apt update
apt install plexmediaserver
- Give Plex rights to the
render
andvideo
groups:
usermod -aG render plex
usermod -aG video plex
Samba Share
- Install
cifs-utils
, which is necessary to mount a CIFS/SMB share on a Linux host
apt install cifs-utils
- Create a group that Plex and your user can use to access the file share
groupadd mediausers
usermod -aG mediausers myuser
usermod -aG mediausers plex
- Create a Samba credentials file
/etc/smbcredentials
user=myuser
password=mypassword
- Secure the file, by ensuring it is owned by and only accessible by root
chown root.root /etc/smbcredentials
chmod 600 /etc/smbcredentials
- Create a systemd unit file (
/etc/systemd/system/mnt-media.mount
) to automount the share on boot:
[Unit]
Description=Mount media share on boot
[Mount]
What=//nas.local/media
Where=/mnt/media
Options=_netdev,credentials=/etc/smbcredentials,iocharset=utf8,rw,gid=mediausers,file_mode=0664,dir_mode=0775
Type=cifs
TimeoutSec=30
[Install]
WantedBy=multi-user.target
This systemd unit file will mount the SMB share \\nas.local\media
at
/mnt/media
, giving members of the mediausers group read/write access to the
media files.
- Start and enable the unit file
systemctl daemon-reload # if you've made changes to the unit file after running systemctl commands
systemctl start mnt-media.mount
systemctl enable mnt-media.mount
Both the plex user and yours should be able to read and write to the
/mnt/media
mountpoint.
Migrating Plex database to another host
On the new host:
# Stop plex
systemctl stop plexmediaserver.service
# Backup old database
mv /var/lib/plexmediaserver/ /var/lib/plexmediaserver.old
# Transfer database from old host to the new one
rsync -av [email protected]:/home/colin/docker/plex/config/ /var/lib/plexmediaserver/
# Change ownership of the database
chown -R plex.plex /var/lib/plexmediaserver/
# Start Plex
systemctl start plexmediaserver.service
Remember to adjust the location of your library’s media files if the location has changed.
Hardware Encoding Troubleshooting
Ensure the correct Intel video drivers are installed.
Sometimes the
renderD128
device shows up as a group other than render. If this is the case, change the group back to render by running:chgrp render /dev/dri/renderD128
Reinstall Plex by running
apt reinstall plexmediaserver
. Once it has finished reinstalling, look in the console output for a line that says Intel i915 Hardware. It should say Found.
PlexMediaServer install: Processor: Intel(R) Core(TM) i7-7700T CPU @ 2.90GHz
PlexMediaServer install: Intel i915 Hardware: Found
PlexMediaServer install: Nvidia GPU card: Not Found