#!/bin/sh # # This script should be run via curl as root: # sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/safing/portmaster/master/spn/tools/install-spn.sh)" # or wget # sudo sh -c "$(wget -qO- https://raw.githubusercontent.com/safing/portmaster/master/spn/tools/install-spn.sh)" # # As an alternative, you can first download the install script and run it afterwards: # wget https://raw.githubusercontent.com/safing/portmaster/master/spn/tools/install-spn.sh # sudo sh ./install.sh # # set -e ARCH= INSTALLDIR= PMSTART= ENABLENOW= INSTALLSYSTEMD= SYSTEMDINSTALLPATH= apply_defaults() { ARCH=${ARCH:-amd64} INSTALLDIR=${INSTALLDIR:-/opt/safing/spn} PMSTART=${PMSTART:-https://updates.safing.io/latest/linux_${ARCH}/start/portmaster-start} SYSTEMDINSTALLPATH=${SYSTEMDINSTALLPATH:-/etc/systemd/system/spn.service} if command_exists systemctl; then INSTALLSYSTEMD=${INSTALLSYSTEMD:-yes} ENABLENOW=${ENABLENOW:-yes} else INSTALLSYSTEMD=${INSTALLSYSTEMD:-no} ENABLENOW=${ENABLENOW:-no} fi # The hostname may be freshly set, ensure the ENV variable is correct. export HOSTNAME=$(hostname) } command_exists() { command -v "$@" >/dev/null 2>&1 } setup_tty() { if [ -t 0 ]; then interactive=yes fi if [ -t 1 ]; then RED=$(printf '\033[31m') GREEN=$(printf '\033[32m') YELLOW=$(printf '\033[33m') BLUE=$(printf '\033[34m') BOLD=$(printf '\033[1m') RESET=$(printf '\033[m') else RED="" GREEN="" YELLOW="" BLUE="" BOLD="" RESET="" fi } log() { echo ${GREEN}${BOLD}"-> "${RESET}"$@" >&2 } error() { echo ${RED}"Error: $@"${RESET} >&2 } warn() { echo ${YELLOW}"warn: $@"${RESET} >&2 } run_systemctl() { systemctl $@ >/dev/null 2>&1 } download_file() { local src=$1 local dest=$2 if command_exists curl; then curl --silent --fail --show-error --location --output $dest $src elif command_exists wget; then wget --quiet -O $dest $src else error "No suitable download command found, either curl or wget must be installed" exit 1 fi } ensure_install_dir() { log "Creating ${INSTALLDIR}" mkdir -p ${INSTALLDIR} } download_pmstart() { log "Downloading portmaster-start ..." local dest="${INSTALLDIR}/portmaster-start" if [ -f "${dest}" ]; then warn "Overwriting existing portmaster-start at ${dest}" fi download_file ${PMSTART} ${dest} log "Changing permissions" chmod a+x ${dest} } download_updates() { log "Downloading updates ..." ${INSTALLDIR}/portmaster-start --data=${INSTALLDIR} update } setup_systemd() { log "Installing systemd service unit ..." if [ ! "${INSTALLSYSTEMD}" = "yes" ]; then warn "Skipping setup of systemd service unit" echo "To launch the hub, execute the following as root:" echo "" echo "${INSTALLDIR}/portmaster-start --data ${INSTALLDIR} hub" echo "" return fi if [ -f "${SYSTEMDINSTALLPATH}" ]; then warn "Overwriting existing unit path" fi cat >${SYSTEMDINSTALLPATH} < " HOSTNAME fi if [ "${METRICS_COMMENT}" = "" ]; then log "Please enter metrics comment:" read -p "> " METRICS_COMMENT fi } write_config_file() { cat >${1} <