Facebook
Twitter
Pinterest
Tumblr
GitHub
RSS
  • About
  • Blog
  • Download
  • Emby Premiere
  • Sign In
  • Support
Search Results for

    Show / Hide Table of Contents

    Emby Universal Installer

    As Easy as it can be!

    curl https://pkg.emby.media/get.sh | sh
    Copied to clipboard
    Use the button to copy-paste or type the command to run in a terminal

    All apps - all distros - all architectures
    all channels - all package managers - all versions
    ONE COMMAND

    About

    get.sh is the recommended way to set up the Emby package repository on Linux. It is a single, universal script that:

    • detects your system’s package manager automatically (APT, DNF, Zypper, Pacman)
    • guides you through repository setup and package installation
    • avoids immediate elevation: it runs as a regular user and only requests root permissions for actions that require it

    Quick start (interactive)

    • Run the installer script as shown above.
    • Then follow the prompts:
    1. Choose channel (stable or beta)
    2. Register/unregister repository (or show packages if already registered)
    3. Choose an app/package
    4. Install/uninstall/view info (and optionally open Software Center if supported)

    Non-interactive usage (automation)

    get.sh supports non-interactive usage via environment variables.

    Environment variables

    • ch = stable|beta
      Selects repository channel.

    • rop = R|S|U
      Repository operation:

      • R = register (or “reload” if already registered)
      • S = show packages (requires repo already registered)
      • U = unregister (requires repo already registered)
    • app = package id (required when rop=S)
      Examples: emby-server, media.emby.client, media.emby.client.beta

    • aop = operation when rop=S (required when rop=S)
      Valid operations depend on app state and platform (the script will reject invalid combinations):

      • I = install (latest)
      • U = uninstall
      • V = choose a specific version (only offered when multiple versions exist)
      • S = show app info
      • K = block/unblock package from auto-updating (not available on Pacman)
    • GET_LOCAL = 1
      Local test mode. Instead of downloading platform helper scripts from pkg.emby.media, the script will use local files from ./tree_update/ (useful when developing this repository).

    Examples

    Register stable repo:

    curl -fsSL https://pkg.emby.media/get.sh | env ch=stable rop=R sh
    

    Unregister beta repo:

    curl -fsSL https://pkg.emby.media/get.sh | env ch=beta rop=U sh
    

    Show packages (beta) and install the beta client:

    curl -fsSL https://pkg.emby.media/get.sh | env ch=beta rop=S app=media.emby.client.beta aop=I sh
    

    What get.sh does (high level)

    1) Detects the platform (package manager)

    get.sh selects the first supported platform it finds:

    • APT if apt-get is available
    • Pacman if pacman is available
    • DNF if dnf is available
    • Zypper if zypper is available

    If rpm-ostree is detected, get.sh prints a message with manual steps and exits (rpm-ostree is not currently supported by the interactive installer).

    If none of the above is found, the script exits with an error.

    2) Fetches a platform helper script

    After detecting the platform, get.sh fetches exactly one helper script (unless GET_LOCAL=1 is used):

    • APT: https://pkg.emby.media/apt/setup.sh
    • Pacman: https://pkg.emby.media/pac/setup.sh
    • DNF: https://pkg.emby.media/rpm/setup-dnf.sh
    • Zypper: https://pkg.emby.media/rpm/setup-zypper.sh

    That helper script provides a shared set of functions (an “interface”) that get.sh calls to:

    • check whether the repository is registered
    • register/unregister the repository
    • list available packages
    • install/uninstall packages, show package info, etc.

    3) Performs requested actions

    Repository-level actions:

    • Register (or reload) repository for the chosen channel
    • Unregister repository for the chosen channel

    App/package actions:

    • Install/uninstall
    • Show package information
    • Select and install a specific version (when supported and multiple versions exist)
    • Block/unblock package from auto-updating (APT, DNF, Zypper only)

    Cross-channel update protection

    When you have both the stable and beta repositories registered, there's a risk of accidentally upgrading your Emby Server from one channel to another during routine system updates. To prevent this, get.sh includes automatic cross-channel update protection.

    Automatic blocking

    When registering a repository, get.sh automatically blocks cross-channel server updates:

    • Registering the beta repo with a stable Emby Server installed: The script automatically blocks emby-server from the beta repo, preventing accidental upgrades to beta versions.

    • Registering the stable repo with a beta Emby Server installed: The script automatically blocks emby-server from the stable repo, preventing accidental downgrades to stable versions.

    When automatic blocking occurs, you'll see a message like:

    An Emby Server (stable) installation was detected on this system.
    The Emby Server package from the beta repo has been blocked automatically
    in order to prevent automatic updates being offered, which could
    lead to unwanted installation of a beta server version over your
    stable installation.
    

    Manual blocking/unblocking

    You can also manually control package update blocking from the package operations menu:

    1. Navigate to the package in the packages list
    2. Select the package to view operations
    3. Use the K option to toggle blocking:
      • If currently blocked: "Unblock package from auto-updating"
      • If not blocked: "Block package from auto-updating"

    Blocked packages are shown in the package list with "(updates blocked)" next to their status.

    Platform implementation

    The blocking feature uses platform-native mechanisms:

    • APT: Creates pinning rules in /etc/apt/preferences.d/ with negative priority
    • DNF: Adds excludepkgs= to the repo file in /etc/yum.repos.d/
    • Zypper: Creates repo-scoped package locks via zypper addlock -r
    • Pacman: Not supported (no beta server packages available)

    Security model / elevation

    • get.sh is designed to be safe to run as a regular user.
    • When a privileged action is needed, get.sh tries to use an elevation tool:
      • sudo (most common)
      • doas
      • run0
      • pkexec
      • sudo-rs

    If no elevation tool is available and you are not already running as root, operations that require root privileges will fail with an error.


    Troubleshooting

    “Could not find a supported package manager”

    Your system must have one of: APT, Pacman, DNF, or Zypper.

    “No elevation tool available”

    Install sudo (or another supported elevation tool) and re-run.

    “This system uses rpm-ostree which is not yet supported”

    Follow the instructions printed by get.sh (it suggests installing the .repo file and using rpm-ostree install ..., then rebooting).

    Debugging downloads

    get.sh uses either curl or wget (whichever is available). If downloads fail, verify connectivity to https://pkg.emby.media/.


    Local development / testing (GET_LOCAL=1)

    From the repository root:

    GET_LOCAL=1 env ch=stable rop=R sh tree_update/get.sh
    

    This forces get.sh to use tree_update/apt/setup.sh, tree_update/pac/setup.sh, etc. instead of downloading them.

    On this Page
    Back to Top 2026 © EMBY LLC. Please see our terms of use and privacy policy.