Download the install-outline-fedora.sh script
Run it:
chmod +x install-outline-fedora.sh
./install-outline-fedora.shThen start Outline:
outline-client| #!/usr/bin/env bash | |
| set -Eeuo pipefail | |
| readonly APP_ID="org.getoutline.OutlineClient" | |
| readonly DOWNLOAD_URL="https://s3.amazonaws.com/outline-releases/client/linux/stable/outline-client_amd64.deb" | |
| readonly INSTALL_DIR="/opt/Outline" | |
| WORK_DIR="" | |
| log() { | |
| printf '\n\033[1;34m==>\033[0m %s\n' "$*" | |
| } | |
| error() { | |
| printf '\n\033[1;31mError:\033[0m %s\n' "$*" >&2 | |
| exit 1 | |
| } | |
| cleanup() { | |
| if [[ -n "${WORK_DIR:-}" && -d "$WORK_DIR" ]]; then | |
| rm -rf "$WORK_DIR" | |
| fi | |
| } | |
| trap cleanup EXIT | |
| # Do not run the entire script as root. It invokes sudo only where needed. | |
| if [[ "$EUID" -eq 0 ]]; then | |
| error "Run this script as your normal user, not with sudo." | |
| fi | |
| # The official Linux package is currently amd64/x86_64. | |
| case "$(uname -m)" in | |
| x86_64 | amd64) | |
| ;; | |
| *) | |
| error "Unsupported architecture: $(uname -m). This installer requires x86_64." | |
| ;; | |
| esac | |
| log "Requesting administrator access" | |
| sudo -v | |
| log "Removing the broken Flatpak installation" | |
| if command -v flatpak >/dev/null 2>&1; then | |
| flatpak kill "$APP_ID" 2>/dev/null || true | |
| flatpak override --user --reset "$APP_ID" 2>/dev/null || true | |
| if flatpak info "$APP_ID" >/dev/null 2>&1; then | |
| flatpak uninstall -y "$APP_ID" | |
| fi | |
| fi | |
| log "Installing Fedora dependencies" | |
| sudo dnf install -y \ | |
| curl \ | |
| dpkg \ | |
| libcap \ | |
| NetworkManager \ | |
| gtk3 \ | |
| nss \ | |
| alsa-lib \ | |
| libdrm \ | |
| mesa-libgbm \ | |
| libnotify \ | |
| libXScrnSaver \ | |
| libXtst \ | |
| libsecret \ | |
| at-spi2-core \ | |
| libuuid \ | |
| xdg-utils \ | |
| desktop-file-utils \ | |
| hicolor-icon-theme | |
| log "Ensuring NetworkManager and TUN support are available" | |
| sudo systemctl enable --now NetworkManager | |
| if [[ ! -c /dev/net/tun ]]; then | |
| sudo modprobe tun | |
| fi | |
| if [[ ! -c /dev/net/tun ]]; then | |
| error "/dev/net/tun is still unavailable after loading the tun module." | |
| fi | |
| WORK_DIR="$(mktemp -d)" | |
| DEB_FILE="$WORK_DIR/outline-client_amd64.deb" | |
| log "Downloading the official Outline Client package" | |
| curl \ | |
| --fail \ | |
| --location \ | |
| --retry 3 \ | |
| --retry-delay 2 \ | |
| --connect-timeout 20 \ | |
| --output "$DEB_FILE" \ | |
| "$DOWNLOAD_URL" | |
| log "Validating the downloaded package" | |
| dpkg-deb --info "$DEB_FILE" >/dev/null || | |
| error "The downloaded file is not a valid Debian package." | |
| PACKAGE_NAME="$(dpkg-deb --field "$DEB_FILE" Package)" | |
| PACKAGE_ARCH="$(dpkg-deb --field "$DEB_FILE" Architecture)" | |
| PACKAGE_VERSION="$(dpkg-deb --field "$DEB_FILE" Version)" | |
| [[ "$PACKAGE_NAME" == "outline-client" ]] || | |
| error "Unexpected package name: $PACKAGE_NAME" | |
| [[ "$PACKAGE_ARCH" == "amd64" ]] || | |
| error "Unexpected package architecture: $PACKAGE_ARCH" | |
| log "Installing Outline Client $PACKAGE_VERSION" | |
| # dpkg cannot register Debian packages properly in Fedora's RPM database. | |
| # Extracting the package payload installs the application without pretending | |
| # that it is an RPM package. | |
| sudo rm -rf "$INSTALL_DIR" | |
| sudo dpkg-deb --extract "$DEB_FILE" / | |
| [[ -x "$INSTALL_DIR/Outline" ]] || | |
| error "Outline executable was not installed at $INSTALL_DIR/Outline" | |
| [[ -f "$INSTALL_DIR/chrome-sandbox" ]] || | |
| error "Chromium sandbox executable was not installed." | |
| log "Applying ownership and SELinux labels" | |
| sudo chown -R root:root "$INSTALL_DIR" | |
| sudo restorecon -RF "$INSTALL_DIR" 2>/dev/null || true | |
| log "Configuring the Chromium sandbox" | |
| sudo chown root:root "$INSTALL_DIR/chrome-sandbox" | |
| sudo chmod 4755 "$INSTALL_DIR/chrome-sandbox" | |
| log "Granting the networking capabilities required to create TUN interfaces" | |
| sudo setcap \ | |
| 'cap_net_admin,cap_dac_override+eip' \ | |
| "$INSTALL_DIR/Outline" | |
| log "Creating a command-line launcher" | |
| sudo ln -sfn "$INSTALL_DIR/Outline" /usr/local/bin/outline-client | |
| log "Refreshing desktop application metadata" | |
| sudo update-desktop-database /usr/share/applications 2>/dev/null || true | |
| sudo gtk-update-icon-cache \ | |
| --force \ | |
| --ignore-theme-index \ | |
| /usr/share/icons/hicolor 2>/dev/null || true | |
| log "Verifying the installation" | |
| CAPABILITIES="$(getcap "$INSTALL_DIR/Outline" || true)" | |
| SANDBOX_MODE="$(stat --format='%a' "$INSTALL_DIR/chrome-sandbox")" | |
| printf 'Outline version: %s\n' "$PACKAGE_VERSION" | |
| printf 'Executable: %s\n' "$INSTALL_DIR/Outline" | |
| printf 'Capabilities: %s\n' "${CAPABILITIES:-missing}" | |
| printf 'chrome-sandbox mode: %s\n' "$SANDBOX_MODE" | |
| printf 'TUN device: %s\n' "/dev/net/tun" | |
| [[ "$CAPABILITIES" == *"cap_net_admin"* ]] || | |
| error "cap_net_admin was not applied successfully." | |
| [[ "$CAPABILITIES" == *"cap_dac_override"* ]] || | |
| error "cap_dac_override was not applied successfully." | |
| [[ "$SANDBOX_MODE" == "4755" ]] || | |
| error "chrome-sandbox does not have mode 4755." | |
| cat <<'EOF' | |
| Outline Client was installed successfully. | |
| Launch it from the application menu or run: | |
| outline-client | |
| Do not launch it with sudo. | |
| This installation is not tracked by Fedora's RPM package manager. | |
| Run this installer again to update Outline to the latest stable version. | |
| EOF |