# Jellyfin

- [Jellyfin](#jellyfin)
  - [Docker Install](#docker-install)
  - [Rootless Podman Install](#rootless-podman-install)
  - [Upgrade](#upgrade)
  - [Mounting Media Directory](#mounting-media-directory)

They have podman rootless instructions!

<https://jellyfin.org/docs/general/installation/container/#managing-via-systemd>

## Docker Install

<https://jellyfin.org/docs/general/installation/container>

## Rootless Podman Install

1. Create the jellyfin user

    ```bash
    useradd jellyfin
    loginctl enable-linger $(id -u jellyfin)
    systemctl --user --machine=jellyfin@.host enable podman-restart
    systemctl --user --machine=jellyfin@.host enable --now podman.socket
    mkdir -p /home/jellyfin/.config/containers/systemd
    ```

2. Update the jellyfin record in Caddy.
3. Open port 8096 in the firewall.
4. Copy the files to the server and start the service

    ```bash
    export PODMAN_SERVER=3dserver
    scp -r active/container_jellyfin/quadlets/. $PODMAN_SERVER:/home/jellyfin/.config/containers/systemd/
    ssh $PODMAN_SERVER chown -R jellyfin:jellyfin /home/jellyfin/.config/containers/systemd/

    ssh $PODMAN_SERVER
    machinectl shell jellyfin@
    systemctl --user daemon-reload
    systemctl --user restart jellyfin
    ```

## Upgrade

1. Check [the blog](https://jellyfin.org/posts) for breaking changes
2. Update the `jellyfin.container` with the new image version
3. Update quadlets and restart the service

```bash
# Upload quadlets and restart
export PODMAN_SERVER=3dserver
scp -r active/container_jellyfin/quadlets/. $PODMAN_SERVER:/home/jellyfin/.config/containers/systemd/
ssh $PODMAN_SERVER chown -R jellyfin:jellyfin /home/jellyfin/.config/containers/systemd/

ssh $PODMAN_SERVER
machinectl shell jellyfin@
systemctl --user daemon-reload
systemctl --user restart jellyfin
```

## Mounting Media Directory

Update /etc/fstab with the smb disk details.

Note:

- `x-systemd.automount` which only mounts the device when it's accessed.
- `x-systemd.mount-timeout=30` allows a 30 second timeout
- `_netdev` ensures the device won't be mounted until after the network is available

```conf
UUID=... /btrfs/some-name    btrfs   subvolid=5,compress=zstd:1,x-systemd.automount,x-systemd.mount-timeout=30,_netdev 0 0
```
