Emby Universal Installer
As Easy as it can be!
curl https://pkg.emby.media/get.sh | shAll 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:
- Choose channel (
stableorbeta) - Register/unregister repository (or show packages if already registered)
- Choose an app/package
- 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 whenrop=S)
Examples:emby-server,media.emby.client,media.emby.client.betaaop= operation whenrop=S(required whenrop=S)
Valid operations depend on app state and platform (the script will reject invalid combinations):I= install (latest)U= uninstallV= choose a specific version (only offered when multiple versions exist)S= show app infoK= block/unblock package from auto-updating (not available on Pacman)
GET_LOCAL=1
Local test mode. Instead of downloading platform helper scripts frompkg.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-getis available - Pacman if
pacmanis available - DNF if
dnfis available - Zypper if
zypperis 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-serverfrom the beta repo, preventing accidental upgrades to beta versions.Registering the stable repo with a beta Emby Server installed: The script automatically blocks
emby-serverfrom 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:
- Navigate to the package in the packages list
- Select the package to view operations
- 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.shis designed to be safe to run as a regular user.- When a privileged action is needed,
get.shtries to use an elevation tool:sudo(most common)doasrun0pkexecsudo-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.