Created
April 16, 2024 16:10
-
-
Save hanicker/176aa1e96d9d572d4ddff9dd6f904deb to your computer and use it in GitHub Desktop.
nordvpn
This file contains hidden or 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
| #!/bin/sh | |
| # check for root access | |
| SUDO= | |
| if [ "$(id -u)" -ne 0 ]; then | |
| SUDO=$(command -v sudo 2> /dev/null) | |
| if [ ! -x "$SUDO" ]; then | |
| echo "Error: Run this script as root" | |
| exit 1 | |
| fi | |
| fi | |
| set -e | |
| ARCH=$(uname -m) | |
| BASE_URL=https://repo.nordvpn.com/ | |
| KEY_PATH=/gpg/nordvpn_public.asc | |
| REPO_PATH_DEB=/deb/nordvpn/debian | |
| REPO_PATH_RPM=/yum/nordvpn/centos | |
| RELEASE="stable main" | |
| ASSUME_YES=true | |
| # Parse command line arguments. Available arguments are: | |
| # -n Non-interactive mode. With this flag present, 'assume yes' or | |
| # 'non-interactive' flags will be passed when installing packages. | |
| # -b <url> The base URL of the public key and repository locations. | |
| # -k <path> Path to the public key for the repository. | |
| # -d <path|file> Repository location for debian packages. | |
| # -v <version> Debian package version to use. | |
| # -r <path|file> Repository location for rpm packages. | |
| while getopts 'nb:k:d:r:v:' opt | |
| do | |
| case $opt in | |
| n) ASSUME_YES=true ;; | |
| b) BASE_URL=$OPTARG ;; | |
| k) KEY_PATH=$OPTARG ;; | |
| d) REPO_PATH_DEB=$OPTARG ;; | |
| r) REPO_PATH_RPM=$OPTARG ;; | |
| v) RELEASE=$OPTARG ;; | |
| *) ;; | |
| esac | |
| done | |
| # Construct the paths to the package repository and its key | |
| PUB_KEY=${BASE_URL}${KEY_PATH} | |
| REPO_URL_DEB=${BASE_URL}${REPO_PATH_DEB} | |
| REPO_URL_RPM=${BASE_URL}${REPO_PATH_RPM} | |
| check_cmd() { | |
| command -v "$1" 2> /dev/null | |
| } | |
| get_install_opts_for_apt() { | |
| flags=$(get_install_opts_for "apt") | |
| RETVAL="$flags" | |
| } | |
| get_install_opts_for_yum() { | |
| flags=$(get_install_opts_for "yum") | |
| RETVAL="$flags" | |
| } | |
| get_install_opts_for_dnf() { | |
| flags=$(get_install_opts_for "dnf") | |
| RETVAL="$flags" | |
| } | |
| get_install_opts_for_zypper() { | |
| flags=$(get_install_opts_for "zypper") | |
| RETVAL="$flags" | |
| } | |
| get_install_opts_for() { | |
| if $ASSUME_YES; then | |
| case "$1" in | |
| zypper) | |
| echo " -n";; | |
| *) | |
| echo " -y";; | |
| esac | |
| fi | |
| echo "" | |
| } | |
| # For any of the following distributions, these steps are performed: | |
| # 1. Add the NordVPN repository key | |
| # 2. Add the NordVPN repository | |
| # 3. Install NordVPN | |
| # Install NordVPN for Debian, Ubuntu, Elementary OS, and Linux Mint | |
| # (with the apt-get package manager) | |
| install_apt() { | |
| if check_cmd apt-get; then | |
| get_install_opts_for_apt | |
| install_opts="$RETVAL" | |
| # Ensure apt is set up to work with https sources | |
| $SUDO apt-get $install_opts update | |
| $SUDO apt-get $install_opts install apt-transport-https | |
| # Add the repository key with either wget or curl | |
| if check_cmd wget; then | |
| wget -qO - "${PUB_KEY}" | $SUDO tee /etc/apt/trusted.gpg.d/nordvpn_public.asc > /dev/null | |
| elif check_cmd curl; then | |
| curl -s "${PUB_KEY}" | $SUDO tee /etc/apt/trusted.gpg.d/nordvpn_public.asc > /dev/null | |
| else | |
| echo "Couldn't find wget or curl - one of them is needed to proceed with the installation" | |
| exit 1 | |
| fi | |
| echo "deb ${REPO_URL_DEB} ${RELEASE}" | $SUDO tee /etc/apt/sources.list.d/nordvpn.list | |
| $SUDO apt-get $install_opts update | |
| $SUDO apt-get $install_opts install nordvpn | |
| exit | |
| fi | |
| } | |
| # Install NordVPN for RHEL and CentOS | |
| # (with the yum package manager) | |
| install_yum() { | |
| if check_cmd yum && check_cmd yum-config-manager; then | |
| get_install_opts_for_yum | |
| install_opts="$RETVAL" | |
| repo="${REPO_URL_RPM}" | |
| if [ ! -f "${REPO_URL_RPM}" ]; then | |
| repo="${repo}/${ARCH}" | |
| fi | |
| $SUDO rpm -v --import "${PUB_KEY}" | |
| $SUDO yum-config-manager --add-repo "${repo}" | |
| $SUDO yum $install_opts install nordvpn | |
| exit | |
| fi | |
| } | |
| # Install NordVPN for Fedora and QubesOS | |
| # (with the dnf package manager) | |
| install_dnf() { | |
| if check_cmd dnf; then | |
| get_install_opts_for_dnf | |
| install_opts="$RETVAL" | |
| repo="${REPO_URL_RPM}" | |
| if [ ! -f "${REPO_URL_RPM}" ]; then | |
| repo="${repo}/${ARCH}" | |
| fi | |
| $SUDO rpm -v --import "${PUB_KEY}" | |
| $SUDO dnf config-manager --add-repo "${repo}" | |
| $SUDO dnf $install_opts install nordvpn | |
| exit | |
| fi | |
| } | |
| # Install NordVPN for openSUSE | |
| # (with the zypper package manager) | |
| install_zypper() { | |
| if check_cmd zypper; then | |
| if ! check_cmd curl; then | |
| echo "Curl is needed to proceed with the installation" | |
| exit 1 | |
| fi | |
| get_install_opts_for_zypper | |
| install_opts="$RETVAL" | |
| $SUDO rpm -v --import "${PUB_KEY}" | |
| if [ -f "${REPO_URL_RPM}" ]; then | |
| $SUDO zypper addrepo -f "${REPO_URL_RPM}" | |
| else | |
| $SUDO zypper addrepo -g -f "${REPO_URL_RPM}/${ARCH}" nordvpn | |
| fi | |
| $SUDO zypper $install_opts install nordvpn | |
| exit | |
| fi | |
| } | |
| install_apt | |
| install_yum | |
| install_dnf | |
| install_zypper | |
| # None of the known package managers (apt, yum, dnf, zypper) are available | |
| echo "Error: Couldn't identify the package manager" | |
| exit 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment