#4607 Add Tailscale to SSH menus (#4787)

* refactor tailsclae & zerotier scripts
* add status & menu
* add to ssh menu
* add install info
This commit is contained in:
/rootzoll 2024-10-06 11:57:50 +02:00 committed by GitHub
parent e81e9ece22
commit 7038bf6ea2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 222 additions and 685 deletions

View File

@ -1,6 +1,6 @@
## What's new in Version 1.11.3 of RaspiBlitz?
- New: Tailscale (basic install script) [details](https://en.wikipedia.org/wiki/Tailscale)
- New: Tailscale (SSH menu > SETTINGS) [details](https://en.wikipedia.org/wiki/Tailscale)
- New: Connect Zeus to CLN via CLNrest (using the clnrest plugin and runes)
- Update: Core Lightning v24.08.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v24.08.1)
- Update: Thunderhub v0.13.31 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.31)

View File

@ -171,6 +171,10 @@ fi
if [ "${labelbase}" == "on" ]; then
OPTIONS+=(LABELBASE "Labelbase (UTXO labeling)")
fi
if [ "${tailscale}" == "on" ]; then
OPTIONS+=(TAILSCALE "Tailscale VPN")
fi
# dont offer to switch to "testnet view for now" - so no wswitch back to mainnet needed
#if [ ${chain} != "main" ]; then
@ -311,7 +315,7 @@ case $CHOICE in
sudo /home/admin/config.scripts/bonus.thunderhub.sh menu
;;
ZEROTIER)
sudo /home/admin/config.scripts/bonus.zerotier.sh menu
sudo /home/admin/config.scripts/internet.zerotier.sh menu
;;
SPHINX)
sudo /home/admin/config.scripts/bonus.sphinxrelay.sh menu
@ -334,6 +338,9 @@ case $CHOICE in
LABELBASE)
sudo /home/admin/config.scripts/bonus.labelbase.sh menu
;;
TAILSCALE)
sudo /home/admin/config.scripts/internet.tailscale.sh menu
;;
FINTS)
sudo /home/admin/config.scripts/bonus.fints.sh menu
;;

View File

@ -7,7 +7,6 @@ source /mnt/hdd/raspiblitz.conf
echo "services default values"
if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi
if [ ${#networkUPnP} -eq 0 ]; then networkUPnP="off"; fi
if [ ${#touchscreen} -eq 0 ]; then touchscreen=0; fi
if [ ${#lcdrotate} -eq 0 ]; then lcdrotate=0; fi
if [ ${#zerotier} -eq 0 ]; then zerotier="off"; fi
@ -17,6 +16,7 @@ if [ ${#clEncryptedHSM} -eq 0 ]; then clEncryptedHSM="off"; fi
if [ ${#clAutoUnlock} -eq 0 ]; then clAutoUnlock="off"; fi
if [ ${#clWatchtowerClient} -eq 0 ]; then clWatchtowerClient="off"; fi
if [ ${#blitzapi} -eq 0 ]; then blitzapi="off"; fi
if [ ${#tailscale} -eq 0 ]; then tailscale="off"; fi
# detect if LND auto-unlock is active
source <(/home/admin/config.scripts/lnd.autounlock.sh status)
@ -112,10 +112,10 @@ fi
# Important basic options
OPTIONS+=(t 'Run behind Tor' ${runBehindTor})
OPTIONS+=(z 'ZeroTier' ${zerotierSwitch})
OPTIONS+=(l 'Tailscale VPN' ${tailscale})
if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then
OPTIONS+=(y ${dynDomainMenu} ${domainValue})
OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP})
fi
OPTIONS+=(p 'Parallel Testnet/Signet' ${parallelTestnets})
@ -194,26 +194,6 @@ else
echo "Dynamic Domain unchanged."
fi
# UPnP
choice="off"; check=$(echo "${CHOICES}" | grep -c "b")
if [ ${check} -eq 1 ]; then choice="on"; fi
if [ "${networkUPnP}" != "${choice}" ]; then
echo "BTC UPnP Setting changed .."
anychange=1
if [ "${choice}" = "on" ]; then
echo "Starting BTC UPNP ..."
/home/admin/config.scripts/network.upnp.sh on
networkUPnP="on"
needsReboot=1
else
echo "Stopping BTC UPNP ..."
/home/admin/config.scripts/network.upnp.sh off
networkUPnP="off"
needsReboot=1
fi
else
echo "BTC UPnP Setting unchanged."
fi
# Tor process choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "t")
@ -334,15 +314,29 @@ if [ "${zerotierSwitch}" != "${choice}" ]; then
echo "zerotier setting changed .."
anychange=1
error=""
sudo -u admin /home/admin/config.scripts/bonus.zerotier.sh ${choice}
sudo -u admin /home/admin/config.scripts/internet.zerotier.sh ${choice}
if [ "${choice}" != "on" ]; then
dialog --msgbox "ZeroTier is now OFF." 5 46
fi
else
echo "ZeroTier setting unchanged."
fi
# Tailscale process choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "l")
if [ ${check} -eq 1 ]; then choice="on"; fi
if [ "${tailscale}" != "${choice}" ]; then
echo "tailscale setting changed .."
anychange=1
error=""
sudo -u admin /home/admin/config.scripts/internet.tailscale.sh ${choice}
if [ "${choice}" = "on" ]; then
sudo -u admin /home/admin/config.scripts/internet.tailscale.sh menu
fi
else
echo "tailscale setting unchanged."
fi
# LND choice
choice="off"; check=$(echo "${CHOICES}" | grep -c "m")
if [ ${check} -eq 1 ]; then choice="on"; fi

View File

@ -515,7 +515,7 @@ fi
if [ "${#zerotier}" -gt 0 ] && [ "${zerotier}" != "off" ]; then
echo "Provisioning ZeroTier - run config script" >> ${logFile}
/home/admin/_cache.sh set message "Setup ZeroTier"
/home/admin/config.scripts/bonus.zerotier.sh on ${zerotier} >> ${logFile} 2>&1
/home/admin/config.scripts/internet.zerotier.sh on ${zerotier} >> ${logFile} 2>&1
else
echo "Provisioning ZeroTier - not active" >> ${logFile}
fi
@ -729,7 +729,7 @@ fi
if [ "${tailscale}" = "on" ]; then
echo "Provisioning Tailscale - run config script" >> ${logFile}
/home/admin/_cache.sh set message "Setup Tailscale"
sudo -u admin /home/admin/config.scripts/bonus.tailscale.sh on >> ${logFile} 2>&1
sudo -u admin /home/admin/config.scripts/internet.tailscale.sh on >> ${logFile} 2>&1
else
echo "Provisioning Tailscale - keep default" >> ${logFile}
fi

View File

@ -1,654 +0,0 @@
#!/bin/sh
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "config script to install Tailscale"
echo "bonus.tailscale.sh on"
echo "bonus.tailscale.sh off <--delete-data|--keep-data>"
exit 1
fi
# --- Sourced from https://tailscale.com/install.sh on 2024-08-29 ---
# Copyright (c) Tailscale Inc & AUTHORS
# SPDX-License-Identifier: BSD-3-Clause
#
# This script detects the current operating system, and installs
# Tailscale according to that OS's conventions.
set -e
# 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.
installTailscale() {
# 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}"
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
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 expr "$VERSION_ID" : "2.*" >/dev/null; then
APT_KEY_TYPE="keyring"
else
APT_KEY_TYPE="legacy"
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"
elif [ "$VERSION_ID" -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_ID" -lt 5 ]; then
APT_KEY_TYPE="legacy"
else
APT_KEY_TYPE="keyring"
fi
;;
elementary)
OS="ubuntu"
VERSION="$UBUNTU_CODENAME"
PACKAGETYPE="apt"
if [ "$VERSION_ID" -lt 6 ]; then
APT_KEY_TYPE="legacy"
else
APT_KEY_TYPE="keyring"
fi
;;
parrot | mendel)
OS="debian"
PACKAGETYPE="apt"
if [ "$VERSION_ID" -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_ID" -lt 11 ]; then
APT_KEY_TYPE="legacy"
else
APT_KEY_TYPE="keyring"
fi
;;
kali)
OS="debian"
PACKAGETYPE="apt"
YEAR="$(echo "$VERSION_ID" | cut -f1 -d.)"
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 [ "$YEAR" -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) # https://github.com/tailscale/tailscale/issues/7862
OS="debian"
PACKAGETYPE="apt"
if [ "$VERSION_ID" -lt 20 ]; then
APT_KEY_TYPE="legacy"
VERSION="buster"
else
APT_KEY_TYPE="keyring"
VERSION="bullseye"
fi
;;
centos)
OS="$ID"
VERSION="$VERSION_ID"
PACKAGETYPE="dnf"
if [ "$VERSION" = "7" ]; then
PACKAGETYPE="yum"
fi
;;
ol)
OS="oracle"
VERSION="$(echo "$VERSION_ID" | cut -f1 -d.)"
PACKAGETYPE="dnf"
if [ "$VERSION" = "7" ]; then
PACKAGETYPE="yum"
fi
;;
rhel)
OS="$ID"
VERSION="$(echo "$VERSION_ID" | cut -f1 -d.)"
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)
OS="fedora"
VERSION=""
PACKAGETYPE="dnf"
;;
amzn)
OS="amazon-linux"
VERSION="$VERSION_ID"
PACKAGETYPE="yum"
;;
xenenterprise)
OS="centos"
VERSION="$(echo "$VERSION_ID" | cut -f1 -d.)"
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)
OS="arch"
VERSION="" # rolling release
PACKAGETYPE="pacman"
;;
manjaro | manjaro-arm)
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
;;
void)
OS="$ID"
VERSION="" # rolling release
PACKAGETYPE="xbps"
;;
gentoo)
OS="$ID"
VERSION="" # rolling release
PACKAGETYPE="emerge"
;;
freebsd)
OS="$ID"
VERSION="$(echo "$VERSION_ID" | cut -f1 -d.)"
PACKAGETYPE="pkg"
;;
osmc)
OS="debian"
PACKAGETYPE="apt"
VERSION="bullseye"
APT_KEY_TYPE="keyring"
;;
photon)
OS="photon"
VERSION="$(echo "$VERSION_ID" | cut -f1 -d.)"
PACKAGETYPE="tdnf"
;;
# 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" ]; 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 support@tailscale.com"
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"
echo "Installing Tailscale for $OSVERSION, using method $PACKAGETYPE"
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
;;
keyring)
$CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.noarmor.gpg" | $SUDO tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
$CURL "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION.tailscale-keyring.list" | $SUDO tee /etc/apt/sources.list.d/tailscale.list
;;
esac
$SUDO apt-get update
$SUDO apt-get install -y tailscale tailscale-archive-keyring
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"
$SUDO yum install tailscale -y
$SUDO systemctl enable --now tailscaled
set +x
;;
dnf)
set -x
$SUDO dnf install -y 'dnf-command(config-manager)'
$SUDO dnf config-manager --add-repo "https://pkgs.tailscale.com/$TRACK/$OS/$VERSION/tailscale.repo"
$SUDO dnf install -y tailscale
$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
$SUDO tdnf install -y tailscale
$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
$SUDO zypper --non-interactive install tailscale
$SUDO systemctl enable --now tailscaled
set +x
;;
pacman)
set -x
$SUDO pacman -S tailscale --noconfirm
$SUDO systemctl enable --now tailscaled
set +x
;;
pkg)
set -x
$SUDO pkg install tailscale
$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
$SUDO apk add tailscale
$SUDO rc-update add tailscale
$SUDO rc-service tailscale start
set +x
;;
xbps)
set -x
$SUDO xbps-install tailscale -y
set +x
;;
emerge)
set -x
$SUDO emerge --ask=n net-vpn/tailscale
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
}
# --- End of part from https://tailscale.com/install.sh on 2024-08-29 ---
if [ "$1" = "on" ]; then
if ! systemctl is-active tailscaled; then
echo "# Installing Tailscale"
# backup tailscale library if exists
if [ -d /var/lib/tailscale ]; then
if [ ! -d /mnt/hdd/app-data/tailscale ]; then
echo "# Moving the Tailscale data to disk"
sudo mv /var/lib/tailscale /mnt/hdd/app-data/tailscale
else
echo "# Backing up /var/lib/tailscale to /var/lib/tailscale.backup"
sudo mv /var/lib/tailscale /var/lib/tailscale.backup
fi
fi
installTailscale
# move tailscale state to HDD
sudo systemctl stop tailscaled
sudo systemctl disable tailscaled
sudo rm -rf /var/lib/tailscale
sudo mkdir -p /mnt/hdd/app-data/tailscale
sudo cp /lib/systemd/system/tailscaled.service /etc/systemd/system/
sudo sed -i 's|--state=/var/lib/tailscale/tailscaled.state|--state=/mnt/hdd/app-data/tailscale/tailscaled.state|' /etc/systemd/system/tailscaled.service
sudo systemctl enable tailscaled
sudo systemctl start tailscaled
# setting value in raspiblitz config
/home/admin/config.scripts/blitz.conf.sh set tailscale on
echo "# Installation complete!"
if ! tailscale ip -4; then
echo "# Log in to start using Tailscale by running:"
echo
if [ -z "$SUDO" ]; then
echo "tailscale up"
else
echo "$SUDO tailscale up"
fi
else
echo "# Check your Tailscale IP with the command:"
echo "tailscale ip -4"
echo "# Your Tailscale IP is:"
tailscale ip -4
fi
else
echo "# Tailscale is already running"
fi
elif [ "$1" = "off" ]; then
echo "# Removing Tailscale"
sudo systemctl disable --now tailscaled
sudo apt purge -y tailscale
# get delete data status - either by parameter or if not set by user dialog
deleteData=""
if [ "$2" = "--delete-data" ]; then
deleteData="1"
fi
if [ "$2" = "--keep-data" ]; then
deleteData="0"
fi
if [ "${deleteData}" = "" ]; then
if (whiptail --title "Delete Data?" --yes-button "Keep Data" --no-button "Delete Data" --yesno "Do you want to delete all data related to Tailscale?" 0 0); then
deleteData="0"
else
deleteData="1"
fi
fi
# execute on delete data
if [ "${deleteData}" = "1" ]; then
echo "# Removing Tailscale data"
sudo rm -rf /mnt/hdd/app-data/tailscale
else
echo "# Tailscale data is preserved on the disk (if exist)"
fi
# setting value in raspiblitz config
/home/admin/config.scripts/blitz.conf.sh set tailscale off
echo "# Removed Tailscale"
fi

View File

@ -0,0 +1,190 @@
#!/bin/sh
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# config script to install Tailscale"
echo "# internet.tailscale.sh state"
echo "# internet.tailscale.sh on"
echo "# internet.tailscale.sh menu"
echo "# internet.tailscale.sh off <--delete-data|--keep-data>"
exit 0
fi
if [ "$1" = "on" ]; then
# check if tailscale is already installed
if [ "$(systemctl is-active tailscaled)" = "active" ]; then
echo "# Tailscale is already running"
exit 0
fi
# get debian release codename
. /etc/os-release
if [ -z "$VERSION_CODENAME" ]; then
echo "error='missing VERSION_CODENAME in /etc/os-release'"
exit 1
fi
echo "# Installing Tailscale"
# backup tailscale library if exists
if [ -d /var/lib/tailscale ]; then
if [ ! -d /mnt/hdd/app-data/tailscale ]; then
echo "# Moving the Tailscale data to disk"
sudo mv /var/lib/tailscale /mnt/hdd/app-data/tailscale
else
echo "# Backing up /var/lib/tailscale to /var/lib/tailscale.backup"
sudo mv /var/lib/tailscale /var/lib/tailscale.backup
fi
fi
# add tailscale repository if not already added
if [ ! -f /etc/apt/sources.list.d/tailscale.list ]; then
echo "# Adding Tailscale repository"
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL "https://pkgs.tailscale.com/stable/debian/$VERSION_CODENAME.noarmor.gpg" -o /tmp/tailscale-archive-keyring.gpg && sudo mv /tmp/tailscale-archive-keyring.gpg /usr/share/keyrings/tailscale-archive-keyring.gpg
curl -fsSL "https://pkgs.tailscale.com/stable/debian/$VERSION_CODENAME.tailscale-keyring.list" -o /tmp/tailscale-keyring.list && sudo mv /tmp/tailscale-keyring.list /etc/apt/sources.list.d/tailscale.list
else
echo "# Tailscale repository already added"
fi
# install tailscale
sudo apt-get update
sudo apt-get install -y tailscale tailscale-archive-keyring
# move tailscale state to HDD
sudo systemctl stop tailscaled
sudo systemctl disable tailscaled
sudo rm -rf /var/lib/tailscale
sudo mkdir -p /mnt/hdd/app-data/tailscale
sudo cp /lib/systemd/system/tailscaled.service /etc/systemd/system/
sudo sed -i 's|--state=/var/lib/tailscale/tailscaled.state|--state=/mnt/hdd/app-data/tailscale/tailscaled.state|' /etc/systemd/system/tailscaled.service
sudo systemctl enable tailscaled
sudo systemctl start tailscaled
# setting value in raspiblitz config
/home/admin/config.scripts/blitz.conf.sh set tailscale on
echo "# Grace period for Tailscale to start ... 10 seconds"
sleep 10
echo
echo "##############################"
echo "# Installation complete!"
echo "# To config or see state of tailscale call:"
echo "# /home/admin/config.scripts/internet.tailscale.sh menu"
exit 0
fi
if [ "$1" = "off" ]; then
echo "# Removing Tailscale"
sudo systemctl disable --now tailscaled
sudo apt purge -y tailscale
# get delete data status - either by parameter or if not set by user dialog
deleteData=""
if [ "$2" = "--delete-data" ]; then
deleteData="1"
fi
if [ "$2" = "--keep-data" ]; then
deleteData="0"
fi
if [ -z "$deleteData" ]; then
if (whiptail --title "Delete Data?" --yes-button "Keep Data" --no-button "Delete Data" --yesno "Do you want to delete all data related to Tailscale?" 0 0); then
deleteData="0"
else
deleteData="1"
fi
fi
# execute on delete data
if [ "$deleteData" = "1" ]; then
echo "# Removing Tailscale data"
sudo rm -rf /mnt/hdd/app-data/tailscale
else
echo "# Tailscale data is preserved on the disk (if exist)"
fi
# setting value in raspiblitz config
/home/admin/config.scripts/blitz.conf.sh set tailscale off
echo "# Removed Tailscale"
exit 0
fi
# gather status if tailscale
installed=0
backend_state=""
status=$(sudo tailscale status --json 2>/dev/null)
if [ -n "$status" ]; then
installed=1
backend_state=$(echo "$status" | jq -r '.BackendState' 2>/dev/null)
login_name=$(echo "$status" | jq -r '.User[] | .LoginName' 2>/dev/null)
fi
if [ "$1" = "status" ]; then
echo "# Tailscale Status"
echo "installed=${installed}"
echo "state=${backend_state}"
# get login URL if needed
login_url=""
if [ "$backend_state" = "NeedsLogin" ]; then
login_url=$(sudo timeout 3s tailscale login --nickname RaspiBlitz 2>&1 | grep https:// | awk '{$1=$1; print}')
fi
echo "login_url=${login_url}"
exit 0
fi
if [ "$1" = "menu" ]; then
# exit if tailscale is not installed
if [ ${installed} -eq 0 ]; then
echo "# Tailscale is not installed"
exit 0
fi
# if tailscale needs login
if [ "$backend_state" = "NeedsLogin" ]; then
echo "# Tailscale needs login"
# while loop until user selects cancel in whiptail
while :
do
# get tailscale login URL
login_url=$(sudo timeout 3s tailscale login --nickname RaspiBlitz 2>&1 | grep https:// | awk '{$1=$1; print}')
if [ -z "$login_url" ]; then
echo "# Error getting login URL"
sleep 3
exit 1
fi
# ask user to login
if (whiptail --title "Tailscale Login Needed" --yes-button "Test Login" --no-button "Cancel Login" --yesno "To connect your RaspiBlitz with Tailscale open the following Url in your browser:\n${login_url}\n\nIf you connected this device to Tailscale successfully, choose 'Test Login'" 0 0); then
# check if tailscale is now logged in
status=$(sudo tailscale status --json 2>/dev/null)
backend_state=$(echo "$status" | jq -r '.BackendState' 2>/dev/null)
if [ "$backend_state" = "NeedsLogin" ]; then
echo "# Tailscale still needs login"
else
echo "# OK Tailscale is logged in"
whiptail --msgbox "Tailscale is now connected" 0 0
break
fi
else
echo "# Cancelled Tailscle login"
sleep 2
break
fi
done
exit 0
else
echo "# Tailscale state is '${backend_state}'"
whiptail --msgbox "Tailscale state on RaspiBlitz is '${backend_state}'.\n\nFor details login with '${login_name}' to Tailscale service:\nhttps://login.tailscale.com\n\nOr use on terminal command:\nsudo tailscale status --json" 0 0
fi
exit 0
fi

View File

@ -3,9 +3,9 @@
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "config script to install, uninstall ZeroTier"
echo "bonus.zerotier.sh on [?networkid]"
echo "bonus.zerotier.sh off"
echo "bonus.zerotier.sh menu"
echo "internet.zerotier.sh on [?networkid]"
echo "internet.zerotier.sh off"
echo "internet.zerotier.sh menu"
exit 1
fi