| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726 |
- #!/bin/sh
- # Copyright (c) Tailscale Inc & contributors
- # SPDX-License-Identifier: BSD-3-Clause
- #
- # This script detects the current operating system, and installs
- # Tailscale according to that OS's conventions.
- #
- # Environment variables:
- # TRACK: Set to "stable" or "unstable" (default: stable)
- # TAILSCALE_VERSION: Pin to a specific version (e.g., "1.88.4")
- #
- # Examples:
- # curl -fsSL https://tailscale.com/install.sh | sh
- # curl -fsSL https://tailscale.com/install.sh | TAILSCALE_VERSION=1.88.4 sh
- # curl -fsSL https://tailscale.com/install.sh | TRACK=unstable sh
- set -eu
- # All the code is wrapped in a main function that gets called at the
- # bottom of the file, so that a truncated partial download doesn't end
- # up executing half a script.
- main() {
- # Step 1: detect the current linux distro, version, and packaging system.
- #
- # We rely on a combination of 'uname' and /etc/os-release to find
- # an OS name and version, and from there work out what
- # installation method we should be using.
- #
- # The end result of this step is that the following three
- # variables are populated, if detection was successful.
- OS=""
- VERSION=""
- PACKAGETYPE=""
- APT_KEY_TYPE="" # Only for apt-based distros
- APT_SYSTEMCTL_START=false # Only needs to be true for Kali
- TRACK="${TRACK:-stable}"
- TAILSCALE_VERSION="${TAILSCALE_VERSION:-}"
- case "$TRACK" in
- stable|unstable)
- ;;
- *)
- echo "unsupported track $TRACK"
- exit 1
- ;;
- esac
- if [ -f /etc/os-release ]; then
- # /etc/os-release populates a number of shell variables. We care about the following:
- # - ID: the short name of the OS (e.g. "debian", "freebsd")
- # - VERSION_ID: the numeric release version for the OS, if any (e.g. "18.04")
- # - VERSION_CODENAME: the codename of the OS release, if any (e.g. "buster")
- # - UBUNTU_CODENAME: if it exists, use instead of VERSION_CODENAME
- . /etc/os-release
- VERSION_MAJOR="${VERSION_ID:-}"
- VERSION_MAJOR="${VERSION_MAJOR%%.*}"
- case "$ID" in
- ubuntu|pop|neon|zorin|tuxedo)
- OS="ubuntu"
- if [ "${UBUNTU_CODENAME:-}" != "" ]; then
- VERSION="$UBUNTU_CODENAME"
- else
- VERSION="$VERSION_CODENAME"
- fi
- PACKAGETYPE="apt"
- # Third-party keyrings became the preferred method of
- # installation in Ubuntu 20.04.
- if [ "$VERSION_MAJOR" -lt 20 ]; then
- APT_KEY_TYPE="legacy"
- else
- APT_KEY_TYPE="keyring"
- fi
- ;;
- debian)
- OS="$ID"
- VERSION="$VERSION_CODENAME"
- PACKAGETYPE="apt"
- # Third-party keyrings became the preferred method of
- # installation in Debian 11 (Bullseye).
- if [ -z "${VERSION_ID:-}" ]; then
- # rolling release. If you haven't kept current, that's on you.
- APT_KEY_TYPE="keyring"
- # Parrot Security is a special case that uses ID=debian
- elif [ "$NAME" = "Parrot Security" ]; then
- # All versions new enough to have this behaviour prefer keyring
- # and their VERSION_ID is not consistent with Debian.
- APT_KEY_TYPE="keyring"
- # They don't specify the Debian version they're based off in os-release
- # but Parrot 6 is based on Debian 12 Bookworm.
- VERSION=bookworm
- elif [ "$VERSION_MAJOR" -lt 11 ]; then
- APT_KEY_TYPE="legacy"
- else
- APT_KEY_TYPE="keyring"
- fi
- ;;
- linuxmint)
- if [ "${UBUNTU_CODENAME:-}" != "" ]; then
- OS="ubuntu"
- VERSION="$UBUNTU_CODENAME"
- elif [ "${DEBIAN_CODENAME:-}" != "" ]; then
- OS="debian"
- VERSION="$DEBIAN_CODENAME"
- else
- OS="ubuntu"
- VERSION="$VERSION_CODENAME"
- fi
- PACKAGETYPE="apt"
- if [ "$VERSION_MAJOR" -lt 5 ]; then
- APT_KEY_TYPE="legacy"
- else
- APT_KEY_TYPE="keyring"
- fi
- ;;
- elementary)
- OS="ubuntu"
- VERSION="$UBUNTU_CODENAME"
- PACKAGETYPE="apt"
- if [ "$VERSION_MAJOR" -lt 6 ]; then
- APT_KEY_TYPE="legacy"
- else
- APT_KEY_TYPE="keyring"
- fi
- ;;
- industrial-os)
- OS="debian"
- PACKAGETYPE="apt"
- if [ "$VERSION_MAJOR" -lt 5 ]; then
- VERSION="buster"
- APT_KEY_TYPE="legacy"
- else
- VERSION="bullseye"
- APT_KEY_TYPE="keyring"
- fi
- ;;
- parrot|mendel)
- OS="debian"
- PACKAGETYPE="apt"
- if [ "$VERSION_MAJOR" -lt 5 ]; then
- VERSION="buster"
- APT_KEY_TYPE="legacy"
- else
- VERSION="bullseye"
- APT_KEY_TYPE="keyring"
- fi
- ;;
- galliumos)
- OS="ubuntu"
- PACKAGETYPE="apt"
- VERSION="bionic"
- APT_KEY_TYPE="legacy"
- ;;
- pureos|kaisen)
- OS="debian"
- PACKAGETYPE="apt"
- VERSION="bullseye"
- APT_KEY_TYPE="keyring"
- ;;
- raspbian)
- OS="$ID"
- VERSION="$VERSION_CODENAME"
- PACKAGETYPE="apt"
- # Third-party keyrings became the preferred method of
- # installation in Raspbian 11 (Bullseye).
- if [ "$VERSION_MAJOR" -lt 11 ]; then
- APT_KEY_TYPE="legacy"
- else
- APT_KEY_TYPE="keyring"
- fi
- ;;
- kali)
- OS="debian"
- PACKAGETYPE="apt"
- APT_SYSTEMCTL_START=true
- # Third-party keyrings became the preferred method of
- # installation in Debian 11 (Bullseye), which Kali switched
- # to in roughly 2021.x releases
- if [ "$VERSION_MAJOR" -lt 2021 ]; then
- # Kali VERSION_ID is "kali-rolling", which isn't distinguishing
- VERSION="buster"
- APT_KEY_TYPE="legacy"
- else
- VERSION="bullseye"
- APT_KEY_TYPE="keyring"
- fi
- ;;
- Deepin|deepin) # https://github.com/tailscale/tailscale/issues/7862
- OS="debian"
- PACKAGETYPE="apt"
- if [ "$VERSION_MAJOR" -lt 20 ]; then
- APT_KEY_TYPE="legacy"
- VERSION="buster"
- else
- APT_KEY_TYPE="keyring"
- VERSION="bullseye"
- fi
- ;;
- pika)
- PACKAGETYPE="apt"
- # All versions of PikaOS are new enough to prefer keyring
- APT_KEY_TYPE="keyring"
- # Older versions of PikaOS are based on Ubuntu rather than Debian
- if [ "$VERSION_MAJOR" -lt 4 ]; then
- OS="ubuntu"
- VERSION="$UBUNTU_CODENAME"
- else
- OS="debian"
- VERSION="$DEBIAN_CODENAME"
- fi
- ;;
- sparky)
- OS="debian"
- PACKAGETYPE="apt"
- VERSION="$DEBIAN_CODENAME"
- APT_KEY_TYPE="keyring"
- ;;
- centos)
- OS="$ID"
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="dnf"
- if [ "$VERSION" = "7" ]; then
- PACKAGETYPE="yum"
- fi
- ;;
- ol)
- OS="oracle"
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="dnf"
- if [ "$VERSION" = "7" ]; then
- PACKAGETYPE="yum"
- fi
- ;;
- rhel|miraclelinux)
- OS="$ID"
- if [ "$ID" = "miraclelinux" ]; then
- OS="rhel"
- fi
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="dnf"
- if [ "$VERSION" = "7" ]; then
- PACKAGETYPE="yum"
- fi
- ;;
- fedora)
- OS="$ID"
- VERSION=""
- PACKAGETYPE="dnf"
- ;;
- rocky|almalinux|nobara|openmandriva|sangoma|risios|cloudlinux|alinux|fedora-asahi-remix|ultramarine)
- OS="fedora"
- VERSION=""
- PACKAGETYPE="dnf"
- ;;
- amzn)
- OS="amazon-linux"
- VERSION="$VERSION_ID"
- PACKAGETYPE="yum"
- ;;
- xenenterprise)
- OS="centos"
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="yum"
- ;;
- opensuse-leap|sles)
- OS="opensuse"
- VERSION="leap/$VERSION_ID"
- PACKAGETYPE="zypper"
- ;;
- opensuse-tumbleweed)
- OS="opensuse"
- VERSION="tumbleweed"
- PACKAGETYPE="zypper"
- ;;
- sle-micro-rancher)
- OS="opensuse"
- VERSION="leap/15.4"
- PACKAGETYPE="zypper"
- ;;
- arch|archarm|endeavouros|blendos|garuda|archcraft|cachyos)
- OS="arch"
- VERSION="" # rolling release
- PACKAGETYPE="pacman"
- ;;
- manjaro|manjaro-arm|biglinux)
- OS="manjaro"
- VERSION="" # rolling release
- PACKAGETYPE="pacman"
- ;;
- alpine)
- OS="$ID"
- VERSION="$VERSION_ID"
- PACKAGETYPE="apk"
- ;;
- postmarketos)
- OS="alpine"
- VERSION="$VERSION_ID"
- PACKAGETYPE="apk"
- ;;
- nixos)
- echo "Please add Tailscale to your NixOS configuration directly:"
- echo
- echo "services.tailscale.enable = true;"
- exit 1
- ;;
- bazzite)
- echo "Bazzite comes with Tailscale installed by default."
- echo "Please enable Tailscale by running the following commands as root:"
- echo
- echo "ujust enable-tailscale"
- echo "tailscale up"
- exit 1
- ;;
- void)
- OS="$ID"
- VERSION="" # rolling release
- PACKAGETYPE="xbps"
- ;;
- gentoo)
- OS="$ID"
- VERSION="" # rolling release
- PACKAGETYPE="emerge"
- ;;
- freebsd)
- OS="$ID"
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="pkg"
- ;;
- osmc)
- OS="debian"
- PACKAGETYPE="apt"
- VERSION="bullseye"
- APT_KEY_TYPE="keyring"
- ;;
- photon)
- OS="photon"
- VERSION="$VERSION_MAJOR"
- PACKAGETYPE="tdnf"
- ;;
- steamos)
- echo "To install Tailscale on SteamOS, please follow the instructions here:"
- echo "https://github.com/tailscale-dev/deck-tailscale"
- exit 1
- ;;
- # TODO: wsl?
- # TODO: synology? qnap?
- esac
- fi
- # If we failed to detect something through os-release, consult
- # uname and try to infer things from that.
- if [ -z "$OS" ]; then
- if type uname >/dev/null 2>&1; then
- case "$(uname)" in
- FreeBSD)
- # FreeBSD before 12.2 doesn't have
- # /etc/os-release, so we wouldn't have found it in
- # the os-release probing above.
- OS="freebsd"
- VERSION="$(freebsd-version | cut -f1 -d.)"
- PACKAGETYPE="pkg"
- ;;
- OpenBSD)
- OS="openbsd"
- VERSION="$(uname -r)"
- PACKAGETYPE=""
- ;;
- Darwin)
- OS="macos"
- VERSION="$(sw_vers -productVersion | cut -f1-2 -d.)"
- PACKAGETYPE="appstore"
- ;;
- Linux)
- OS="other-linux"
- VERSION=""
- PACKAGETYPE=""
- ;;
- esac
- fi
- fi
- # Ideally we want to use curl, but on some installs we
- # only have wget. Detect and use what's available.
- CURL=
- if type curl >/dev/null; then
- CURL="curl -fsSL"
- elif type wget >/dev/null; then
- CURL="wget -q -O-"
- fi
- if [ -z "$CURL" ]; then
- echo "The installer needs either curl or wget to download files."
- echo "Please install either curl or wget to proceed."
- exit 1
- fi
- TEST_URL="https://pkgs.tailscale.com/"
- RC=0
- TEST_OUT=$($CURL "$TEST_URL" 2>&1) || RC=$?
- if [ $RC != 0 ]; then
- echo "The installer cannot reach $TEST_URL"
- echo "Please make sure that your machine has internet access."
- echo "Test output:"
- echo $TEST_OUT
- exit 1
- fi
- # Step 2: having detected an OS we support, is it one of the
- # versions we support?
- OS_UNSUPPORTED=
- case "$OS" in
- ubuntu|debian|raspbian|centos|oracle|rhel|amazon-linux|opensuse|photon)
- # Check with the package server whether a given version is supported.
- URL="https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/installer-supported"
- $CURL "$URL" 2> /dev/null | grep -q OK || OS_UNSUPPORTED=1
- ;;
- fedora)
- # All versions supported, no version checking required.
- ;;
- arch)
- # Rolling release, no version checking needed.
- ;;
- manjaro)
- # Rolling release, no version checking needed.
- ;;
- alpine)
- # All versions supported, no version checking needed.
- # TODO: is that true? When was tailscale packaged?
- ;;
- void)
- # Rolling release, no version checking needed.
- ;;
- gentoo)
- # Rolling release, no version checking needed.
- ;;
- freebsd)
- if [ "$VERSION" != "12" ] && \
- [ "$VERSION" != "13" ] && \
- [ "$VERSION" != "14" ] && \
- [ "$VERSION" != "15" ]
- then
- OS_UNSUPPORTED=1
- fi
- ;;
- openbsd)
- OS_UNSUPPORTED=1
- ;;
- macos)
- # We delegate macOS installation to the app store, it will
- # perform version checks for us.
- ;;
- other-linux)
- OS_UNSUPPORTED=1
- ;;
- *)
- OS_UNSUPPORTED=1
- ;;
- esac
- if [ "$OS_UNSUPPORTED" = "1" ]; then
- case "$OS" in
- other-linux)
- echo "Couldn't determine what kind of Linux is running."
- echo "You could try the static binaries at:"
- echo "https://pkgs.tailscale.com/$TRACK/#static"
- ;;
- "")
- echo "Couldn't determine what operating system you're running."
- ;;
- *)
- echo "$OS $VERSION isn't supported by this script yet."
- ;;
- esac
- echo
- echo "If you'd like us to support your system better, please email [email protected]"
- echo "and tell us what OS you're running."
- echo
- echo "Please include the following information we gathered from your system:"
- echo
- echo "OS=$OS"
- echo "VERSION=$VERSION"
- echo "PACKAGETYPE=$PACKAGETYPE"
- if type uname >/dev/null 2>&1; then
- echo "UNAME=$(uname -a)"
- else
- echo "UNAME="
- fi
- echo
- if [ -f /etc/os-release ]; then
- cat /etc/os-release
- else
- echo "No /etc/os-release"
- fi
- exit 1
- fi
- # Step 3: work out if we can run privileged commands, and if so,
- # how.
- CAN_ROOT=
- SUDO=
- if [ "$(id -u)" = 0 ]; then
- CAN_ROOT=1
- SUDO=""
- elif type sudo >/dev/null; then
- CAN_ROOT=1
- SUDO="sudo"
- elif type doas >/dev/null; then
- CAN_ROOT=1
- SUDO="doas"
- fi
- if [ "$CAN_ROOT" != "1" ]; then
- echo "This installer needs to run commands as root."
- echo "We tried looking for 'sudo' and 'doas', but couldn't find them."
- echo "Either re-run this script as root, or set up sudo/doas."
- exit 1
- fi
- # Step 4: run the installation.
- OSVERSION="$OS"
- [ "$VERSION" != "" ] && OSVERSION="$OSVERSION $VERSION"
- # Prepare package name with optional version
- PACKAGE_NAME="tailscale"
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Installing Tailscale $TAILSCALE_VERSION for $OSVERSION, using method $PACKAGETYPE"
- else
- echo "Installing Tailscale for $OSVERSION, using method $PACKAGETYPE"
- fi
- case "$PACKAGETYPE" in
- apt)
- export DEBIAN_FRONTEND=noninteractive
- if [ "$APT_KEY_TYPE" = "legacy" ] && ! type gpg >/dev/null; then
- $SUDO apt-get update
- $SUDO apt-get install -y gnupg
- fi
- set -x
- $SUDO mkdir -p --mode=0755 /usr/share/keyrings
- case "$APT_KEY_TYPE" in
- legacy)
- $CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.asc" | $SUDO apt-key add -
- $CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.list" | $SUDO tee /etc/apt/sources.list.d/tailscale.list
- $SUDO chmod 0644 /etc/apt/sources.list.d/tailscale.list
- ;;
- keyring)
- $CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.noarmor.gpg" | $SUDO tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
- $SUDO chmod 0644 /usr/share/keyrings/tailscale-archive-keyring.gpg
- $CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.tailscale-keyring.list" | $SUDO tee /etc/apt/sources.list.d/tailscale.list
- $SUDO chmod 0644 /etc/apt/sources.list.d/tailscale.list
- ;;
- esac
- $SUDO apt-get update
- if [ -n "$TAILSCALE_VERSION" ]; then
- $SUDO apt-get install -y "tailscale=$TAILSCALE_VERSION" tailscale-archive-keyring
- else
- $SUDO apt-get install -y tailscale tailscale-archive-keyring
- fi
- if [ "$APT_SYSTEMCTL_START" = "true" ]; then
- $SUDO systemctl enable --now tailscaled
- $SUDO systemctl start tailscaled
- fi
- set +x
- ;;
- yum)
- set -x
- $SUDO yum install yum-utils -y
- $SUDO yum-config-manager -y --add-repo "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo"
- if [ -n "$TAILSCALE_VERSION" ]; then
- $SUDO yum install "tailscale-$TAILSCALE_VERSION" -y
- else
- $SUDO yum install tailscale -y
- fi
- $SUDO systemctl enable --now tailscaled
- set +x
- ;;
- dnf)
- # DNF 5 has a different argument format; determine which one we have.
- DNF_VERSION="3"
- if LANG=C.UTF-8 dnf --version | grep -q '^dnf5 version'; then
- DNF_VERSION="5"
- fi
- # The 'config-manager' plugin wasn't implemented when
- # DNF5 was released; detect that and use the old
- # version if necessary.
- if [ "$DNF_VERSION" = "5" ]; then
- set -x
- $SUDO dnf install -y 'dnf-command(config-manager)' && DNF_HAVE_CONFIG_MANAGER=1 || DNF_HAVE_CONFIG_MANAGER=0
- set +x
- if [ "$DNF_HAVE_CONFIG_MANAGER" != "1" ]; then
- if type dnf-3 >/dev/null; then
- DNF_VERSION="3"
- else
- echo "dnf 5 detected, but 'dnf-command(config-manager)' not available and dnf-3 not found"
- exit 1
- fi
- fi
- fi
- set -x
- if [ "$DNF_VERSION" = "3" ]; then
- $SUDO dnf install -y 'dnf-command(config-manager)'
- $SUDO dnf config-manager --add-repo "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo"
- elif [ "$DNF_VERSION" = "5" ]; then
- # Already installed config-manager, above.
- $SUDO dnf config-manager addrepo --overwrite --from-repofile="https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo"
- else
- echo "unexpected: unknown dnf version $DNF_VERSION"
- exit 1
- fi
- if [ -n "$TAILSCALE_VERSION" ]; then
- $SUDO dnf install -y "tailscale-$TAILSCALE_VERSION"
- else
- $SUDO dnf install -y tailscale
- fi
- $SUDO systemctl enable --now tailscaled
- set +x
- ;;
- tdnf)
- set -x
- curl -fsSL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo" > /etc/yum.repos.d/tailscale.repo
- if [ -n "$TAILSCALE_VERSION" ]; then
- $SUDO tdnf install -y "tailscale-$TAILSCALE_VERSION"
- else
- $SUDO tdnf install -y tailscale
- fi
- $SUDO systemctl enable --now tailscaled
- set +x
- ;;
- zypper)
- set -x
- $SUDO rpm --import "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/repo.gpg"
- $SUDO zypper --non-interactive ar -g -r "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo"
- $SUDO zypper --non-interactive --gpg-auto-import-keys refresh
- if [ -n "$TAILSCALE_VERSION" ]; then
- $SUDO zypper --non-interactive install "tailscale=$TAILSCALE_VERSION"
- else
- $SUDO zypper --non-interactive install tailscale
- fi
- $SUDO systemctl enable --now tailscaled
- set +x
- ;;
- pacman)
- set -x
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Warning: Arch Linux maintains their own Tailscale package. Version pinning may not work as expected, as the target version may no longer be available."
- $SUDO pacman -S "tailscale=$TAILSCALE_VERSION" --noconfirm
- else
- $SUDO pacman -S tailscale --noconfirm
- fi
- $SUDO systemctl enable --now tailscaled
- set +x
- ;;
- pkg)
- set -x
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Warning: FreeBSD maintains their own Tailscale package. Version pinning may not work as expected, as the target version may no longer be available."
- $SUDO pkg install --yes "tailscale-$TAILSCALE_VERSION"
- else
- $SUDO pkg install --yes tailscale
- fi
- $SUDO service tailscaled enable
- $SUDO service tailscaled start
- set +x
- ;;
- apk)
- set -x
- if ! grep -Eq '^http.*/community$' /etc/apk/repositories; then
- if type setup-apkrepos >/dev/null; then
- $SUDO setup-apkrepos -c -1
- else
- echo "installing tailscale requires the community repo to be enabled in /etc/apk/repositories"
- exit 1
- fi
- fi
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Warning: Alpine Linux maintains their own Tailscale package. Version pinning may not work as expected, as the target version may no longer be available."
- $SUDO apk add "tailscale=$TAILSCALE_VERSION"
- else
- $SUDO apk add tailscale
- fi
- $SUDO rc-update add tailscale
- $SUDO rc-service tailscale start
- set +x
- ;;
- xbps)
- set -x
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Warning: Void Linux maintains their own Tailscale package. Version pinning may not work as expected, as the target version may no longer be available."
- $SUDO xbps-install "tailscale-$TAILSCALE_VERSION" -y
- else
- $SUDO xbps-install tailscale -y
- fi
- set +x
- ;;
- emerge)
- set -x
- if [ -n "$TAILSCALE_VERSION" ]; then
- echo "Warning: Gentoo maintains their own Tailscale package. Version pinning may not work as expected, as the target version may no longer be available."
- $SUDO emerge --ask=n "=net-vpn/tailscale-$TAILSCALE_VERSION"
- else
- $SUDO emerge --ask=n net-vpn/tailscale
- fi
- set +x
- ;;
- appstore)
- set -x
- open "https://apps.apple.com/us/app/tailscale/id1475387142"
- set +x
- ;;
- *)
- echo "unexpected: unknown package type $PACKAGETYPE"
- exit 1
- ;;
- esac
- echo "Installation complete! Log in to start using Tailscale by running:"
- echo
- if [ -z "$SUDO" ]; then
- echo "tailscale up"
- else
- echo "$SUDO tailscale up"
- fi
- }
- main
|