-
-
Notifications
You must be signed in to change notification settings - Fork 559
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
detect OS package manager If a supported package manager is not available, use binary installation Check if desktop environment is available Skip installing the UI client if SKIP_UI_APP is set to true added tests for Ubuntu and macOS tests
- Loading branch information
Showing
3 changed files
with
381 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
name: Test installation Darwin | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
paths: | ||
- "release_files/install.sh" | ||
|
||
jobs: | ||
install-cli-only: | ||
runs-on: macos-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Rename brew package | ||
if: ${{ matrix.check_bin_install }} | ||
run: mv /opt/homebrew/bin/brew /opt/homebrew/bin/brew.bak | ||
|
||
- name: Run install script | ||
run: | | ||
sh ./release_files/install.sh | ||
env: | ||
SKIP_UI_APP: true | ||
|
||
- name: Run tests | ||
run: | | ||
if ! command -v netbird &> /dev/null; then | ||
echo "Error: netbird is not installed" | ||
exit 1 | ||
fi | ||
install-all: | ||
runs-on: macos-latest | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Rename brew package | ||
if: ${{ matrix.check_bin_install }} | ||
run: mv /opt/homebrew/bin/brew /opt/homebrew/bin/brew.bak | ||
|
||
- name: Run install script | ||
run: | | ||
sh ./release_files/install.sh | ||
- name: Run tests | ||
run: | | ||
if ! command -v netbird &> /dev/null; then | ||
echo "Error: netbird is not installed" | ||
exit 1 | ||
fi | ||
if [[ $(mdfind "kMDItemContentType == 'com.apple.application-bundle' && kMDItemFSName == '*NetBird UI.app'") ]]; then | ||
echo "Error: NetBird UI is not installed" | ||
exit 1 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
name: Test installation Linux | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
paths: | ||
- "release_files/install.sh" | ||
|
||
jobs: | ||
install-cli-only: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
check_bin_install: [true, false] | ||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Rename apt package | ||
if: ${{ matrix.check_bin_install }} | ||
run: | | ||
sudo mv /usr/bin/apt /usr/bin/apt.bak | ||
sudo mv /usr/bin/apt-get /usr/bin/apt-get.bak | ||
- name: Run install script | ||
run: | | ||
sh ./release_files/install.sh | ||
- name: Run tests | ||
run: | | ||
if ! command -v netbird &> /dev/null; then | ||
echo "Error: netbird is not installed" | ||
exit 1 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,287 @@ | ||
#!/bin/sh | ||
# This code is based on the netbird-installer contribution by physk on GitHub. | ||
# Source: https://github.com/physk/netbird-installer | ||
set -e | ||
|
||
OWNER="netbirdio" | ||
REPO="netbird" | ||
CLI_APP="netbird" | ||
UI_APP="netbird-ui" | ||
|
||
# Set default variable | ||
OS_NAME="" | ||
OS_TYPE="" | ||
ARCH="$(uname -m)" | ||
PACKAGE_MANAGER="" | ||
INSTALL_DIR="" | ||
|
||
get_latest_release() { | ||
curl -s "https://api.github.com/repos/${OWNER}/${REPO}/releases/latest" \ | ||
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | ||
} | ||
|
||
download_release_binary() { | ||
VERSION=$(get_latest_release) | ||
BASE_URL="https://github.com/${OWNER}/${REPO}/releases/download" | ||
BINARY_BASE_NAME="${VERSION#v}_${OS_TYPE}_${ARCH}.tar.gz" | ||
|
||
# for Darwin, download the signed Netbird-UI | ||
if [ "$OS_TYPE" = "darwin" ] && [ "$1" = "$UI_APP" ]; then | ||
BINARY_BASE_NAME="${VERSION#v}_${OS_TYPE}_${ARCH}_signed.zip" | ||
fi | ||
|
||
BINARY_NAME="$1_${BINARY_BASE_NAME}" | ||
DOWNLOAD_URL="${BASE_URL}/${VERSION}/${BINARY_NAME}" | ||
|
||
echo "Installing $1 from $DOWNLOAD_URL" | ||
cd /tmp && curl -LO "$DOWNLOAD_URL" | ||
|
||
if [ "$OS_TYPE" = "darwin" ] && [ "$1" = "$UI_APP" ]; then | ||
INSTALL_DIR="/Applications/NetBird UI.app" | ||
|
||
# Unzip the app and move to INSTALL_DIR | ||
unzip -q -o "$BINARY_NAME" | ||
mv "netbird_ui_${OS_TYPE}_${ARCH}" "$INSTALL_DIR" | ||
else | ||
tar -xzvf "$BINARY_NAME" | ||
sudo mv "${1%_"${BINARY_BASE_NAME}"}" "$INSTALL_DIR" | ||
fi | ||
} | ||
|
||
add_apt_repo() { | ||
sudo apt-get update | ||
sudo apt-get install ca-certificates gnupg -y | ||
|
||
curl -sSL https://pkgs.wiretrustee.com/debian/public.key \ | ||
| gpg --dearmor --output /usr/share/keyrings/wiretrustee-archive-keyring.gpg | ||
|
||
APT_REPO="deb [signed-by=/usr/share/keyrings/wiretrustee-archive-keyring.gpg] https://pkgs.wiretrustee.com/debian stable main" | ||
echo "$APT_REPO" | sudo tee /etc/apt/sources.list.d/wiretrustee.list | ||
|
||
sudo apt-get update | ||
} | ||
|
||
add_rpm_repo() { | ||
cat <<-EOF | sudo tee /etc/yum.repos.d/netbird.repo | ||
[Netbird] | ||
name=Netbird | ||
baseurl=https://pkgs.netbird.io/yum/ | ||
enabled=1 | ||
gpgcheck=0 | ||
gpgkey=https://pkgs.netbird.io/yum/repodata/repomd.xml.key | ||
repo_gpgcheck=1 | ||
EOF | ||
} | ||
|
||
add_aur_repo() { | ||
INSTALL_PKGS="git base-devel go" | ||
REMOVE_PKGS="" | ||
|
||
# Check if dependencies are installed | ||
for PKG in $INSTALL_PKGS; do | ||
if ! pacman -Q "$PKG" > /dev/null 2>&1; then | ||
# Install missing package(s) | ||
sudo pacman -S "$PKG" --noconfirm | ||
|
||
# Add installed package for clean up later | ||
REMOVE_PKGS="$REMOVE_PKGS $PKG" | ||
fi | ||
done | ||
|
||
# Build package from AUR | ||
cd /tmp && git clone https://aur.archlinux.org/netbird.git | ||
cd netbird && makepkg -sri --noconfirm | ||
|
||
if ! $SKIP_UI_APP; then | ||
cd /tmp && git clone https://aur.archlinux.org/netbird-ui.git | ||
cd netbird-ui && makepkg -sri --noconfirm | ||
fi | ||
|
||
# Clean up the installed packages | ||
sudo pacman -Rs "$REMOVE_PKGS" --noconfirm | ||
} | ||
|
||
install_native_binaries() { | ||
# Checks for supported architecture | ||
case "$ARCH" in | ||
x86_64|amd64) | ||
ARCH="amd64" | ||
;; | ||
i?86|x86) | ||
ARCH="386" | ||
;; | ||
aarch64|arm64) | ||
ARCH="arm64" | ||
;; | ||
*) | ||
echo "Architecture ${ARCH} not supported" | ||
exit 2 | ||
;; | ||
esac | ||
|
||
# download and copy binaries to INSTALL_DIR | ||
download_release_binary "$CLI_APP" | ||
if ! $SKIP_UI_APP; then | ||
download_release_binary "$UI_APP" | ||
fi | ||
} | ||
|
||
install_netbird() { | ||
# Check if netbird CLI is installed | ||
if [ -x "$(command -v netbird)" ]; then | ||
if netbird status > /dev/null 2>&1; then | ||
echo "Netbird service is running, please stop it before proceeding" | ||
fi | ||
|
||
echo "Netbird seems to be installed already, please remove it before proceeding" | ||
exit 1 | ||
fi | ||
|
||
# Checks if SKIP_UI_APP env is set | ||
if [ -z "$SKIP_UI_APP" ]; then | ||
SKIP_UI_APP=false | ||
else | ||
if $SKIP_UI_APP; then | ||
echo "SKIP_UI_APP has been set to true in the environment" | ||
echo "Netbird UI installation will be omitted based on your preference" | ||
fi | ||
fi | ||
|
||
# Identify OS name and default package manager | ||
if type uname >/dev/null 2>&1; then | ||
case "$(uname)" in | ||
Linux) | ||
OS_NAME="$(. /etc/os-release && echo "$ID")" | ||
OS_TYPE="linux" | ||
INSTALL_DIR="/usr/bin" | ||
|
||
# Allow netbird UI installation for x64 arch only | ||
if [ "$ARCH" != "amd64" ] && [ "$ARCH" != "arm64" ] \ | ||
&& [ "$ARCH" != "x86_64" ];then | ||
SKIP_UI_APP=true | ||
echo "Netbird UI installation will be omitted as $ARCH is not a compactible architecture" | ||
fi | ||
|
||
# Allow netbird UI installation for linux running desktop enviroment | ||
if [ -z "$XDG_CURRENT_DESKTOP" ];then | ||
SKIP_UI_APP=true | ||
echo "Netbird UI installation will be omitted as Linux does not run desktop environment" | ||
fi | ||
|
||
# Check the availability of a compactible package manager | ||
if [ -x "$(command -v apt)" ]; then | ||
PACKAGE_MANAGER="apt" | ||
echo "The installation will be performed using apt package manager" | ||
fi | ||
if [ -x "$(command -v yum)" ]; then | ||
PACKAGE_MANAGER="yum" | ||
echo "The installation will be performed using yum package manager" | ||
fi | ||
if [ -x "$(command -v dnf)" ]; then | ||
PACKAGE_MANAGER="dnf" | ||
echo "The installation will be performed using dnf package manager" | ||
fi | ||
if [ -x "$(command -v pacman)" ]; then | ||
PACKAGE_MANAGER="pacman" | ||
echo "The installation will be performed using pacman package manager" | ||
fi | ||
;; | ||
Darwin) | ||
OS_NAME="macos" | ||
OS_TYPE="darwin" | ||
INSTALL_DIR="/usr/local/bin" | ||
|
||
# Check the availability of a compatible package manager | ||
if [ -x "$(command -v brew)" ]; then | ||
PACKAGE_MANAGER="brew" | ||
echo "The installation will be performed using brew package manager" | ||
fi | ||
;; | ||
esac | ||
fi | ||
|
||
# Run the installation, if a desktop environment is not detected | ||
# only the CLI will be installed | ||
case "$PACKAGE_MANAGER" in | ||
apt) | ||
add_apt_repo | ||
sudo apt-get install netbird -y | ||
|
||
if ! $SKIP_UI_APP; then | ||
sudo apt-get install netbird-ui -y | ||
fi | ||
;; | ||
yum) | ||
add_rpm_repo | ||
sudo yum -y install netbird | ||
if ! $SKIP_UI_APP; then | ||
sudo yum -y install netbird-ui | ||
fi | ||
;; | ||
dnf) | ||
add_rpm_repo | ||
sudo dnf -y install dnf-plugin-config-manager | ||
sudo dnf config-manager --add-repo /etc/yum.repos.d/netbird.repo | ||
sudo dnf -y install netbird | ||
|
||
if ! $SKIP_UI_APP; then | ||
sudo dnf -y install netbird-ui | ||
fi | ||
;; | ||
pacman) | ||
sudo pacman -Syy | ||
add_aur_repo | ||
;; | ||
brew) | ||
# Remove Wiretrustee if it had been installed using Homebrew before | ||
if brew ls --versions wiretrustee >/dev/null 2>&1; then | ||
echo "Removing existing wiretrustee client" | ||
|
||
# Stop and uninstall daemon service: | ||
wiretrustee service stop | ||
wiretrustee service uninstall | ||
|
||
# Unlik the app | ||
brew unlink wiretrustee | ||
fi | ||
|
||
brew install netbirdio/tap/netbird | ||
if ! $SKIP_UI_APP; then | ||
brew install --cask netbirdio/tap/netbird-ui | ||
fi | ||
;; | ||
*) | ||
if [ "$OS_NAME" = "nixos" ];then | ||
echo "Please add Netbird to your NixOS configuration.nix directly:" | ||
echo | ||
echo "services.netbird.enable = true;" | ||
|
||
if ! $SKIP_UI_APP; then | ||
echo "environment.systemPackages = [ pkgs.netbird-ui ];" | ||
fi | ||
|
||
echo "Build and apply new configuration:" | ||
echo | ||
echo "sudo nixos-rebuild switch" | ||
exit 0 | ||
fi | ||
|
||
install_native_binaries | ||
;; | ||
esac | ||
|
||
# Load and start netbird service | ||
if ! sudo netbird service install 2>&1; then | ||
echo "Netbird service has already been loaded" | ||
fi | ||
if ! sudo netbird service start 2>&1; then | ||
echo "Netbird service has already been started" | ||
fi | ||
|
||
|
||
echo "Installation has been finished. To connect, you need to run NetBird by executing the following command:" | ||
echo "" | ||
echo "sudo netbird up" | ||
} | ||
|
||
install_netbird |