Setting Up Jellyfin Media Server on Fedora Atomic Desktops

Want your own personal Netflix without dealing with traditional Linux server setup? This guide walks you through setting up Jellyfin media server on Fedora Kinoite (or any Atomic desktop) using Podman containers—making it easier to maintain and less likely to break your system.

What You’ll Need

Step 1: Setting Up Your Development Environment

Frustration Level:

# Create a new toolbox container
toolbox create jellyfin

# Enter your new container
toolbox enter jellyfin

# Install essential tools
sudo dnf install -y podman-compose vim git curl wget
exit

What's happening: We're creating a disposable environment that won't affect your core system.

Step 2: Creating Directory Structure

Frustration Level:

# Create configuration directories
mkdir -p ~/jellyfin/{config,cache}
mkdir -p ~/media/{tvshows,movies,music}

Pro Tip: Keep these in your home directory to avoid permission headaches!

Step 3: SELinux Configuration

Frustration Level:

# Apply SELinux contexts
sudo semanage fcontext -a -t container_file_t "/home/$USER/jellyfin(/.*)?"
sudo semanage fcontext -a -t container_file_t "/home/$USER/media(/.*)?"
sudo restorecon -Rvv ~/jellyfin ~/media

Step 4: Podman Compose Configuration

Frustration Level:

Create ~/jellyfin/podman-compose.yml:


version: '3.8'
services:
  jellyfin:
    image: docker.io/jellyfin/jellyfin:latest
    container_name: jellyfin
    user: "$(id -u):$(id -g)"
    volumes:
      - ~/jellyfin/config:/config
      - ~/jellyfin/cache:/cache
      - ~/media:/media:ro
    ports:
      - 8096:8096
      - 8920:8920
    environment:
      - TZ=America/New_York
      - JELLYFIN_PublishedServerUrl=http://your-server-ip:8096
    restart: unless-stopped

Step 5: Deployment & Automation

Frustration Level:

# Start Jellyfin
podman-compose -f ~/jellyfin/podman-compose.yml up -d

# Configure firewall
sudo firewall-cmd --permanent --add-port=8096/tcp
sudo firewall-cmd --permanent --add-port=8920/tcp
sudo firewall-cmd --reload

# Create systemd service (run outside toolbox!)
podman generate systemd --new --name jellyfin > ~/.config/systemd/user/jellyfin.service
systemctl --user enable --now jellyfin.service

Common Mistake: Running systemd commands inside toolbox will fail!

Step 6: Verification

Frustration Level:

# Check container status
podman ps

# View logs
podman logs jellyfin

# Test access
curl http://localhost:8096

Step 7: Maintenance

Frustration Level:

# Update container
podman-compose -f ~/jellyfin/podman-compose.yml pull
podman-compose -f ~/jellyfin/podman-compose.yml up -d

# Cleanup images
podman image prune -a

Troubleshooting Guide

### Permission Issues
    
    podman unshare chown -R $(id -u):$(id -g) ~/jellyfin
    
    
### SELinux Diagnostics
    
    sudo ausearch -m avc -ts recent | audit2why
    
    
### Nuclear Option
    
    podman-compose -f ~/jellyfin/podman-compose.yml down
    rm -rf ~/jellyfin/config/*