diff --git a/spn/tools/install.sh b/spn/tools/install.sh index 77a5ec2c..aab11ede 100755 --- a/spn/tools/install.sh +++ b/spn/tools/install.sh @@ -14,7 +14,7 @@ set -e ARCH= INSTALLDIR= -SPNBINARY= +PMSTART= ENABLENOW= INSTALLSYSTEMD= SYSTEMDINSTALLPATH= @@ -22,7 +22,7 @@ SYSTEMDINSTALLPATH= apply_defaults() { ARCH=${ARCH:-amd64} INSTALLDIR=${INSTALLDIR:-/opt/safing/spn} - SPNBINARY=${SPNBINARY:-https://updates.safing.io/latest/linux_${ARCH}/hub/spn-hub} + PMSTART=${PMSTART:-https://updates.safing.io/latest/linux_${ARCH}/start/portmaster-start} SYSTEMDINSTALLPATH=${SYSTEMDINSTALLPATH:-/etc/systemd/system/spn.service} if command_exists systemctl; then @@ -98,26 +98,31 @@ ensure_install_dir() { mkdir -p ${INSTALLDIR} } -download_spnbinary() { - log "Downloading SPN binary ..." - local dest="${INSTALLDIR}/hub" +download_pmstart() { + log "Downloading portmaster-start ..." + local dest="${INSTALLDIR}/portmaster-start" if [ -f "${dest}" ]; then - warn "Overwriting existing hub at ${dest}" + warn "Overwriting existing portmaster-start at ${dest}" fi - download_file ${SPNBINARY} ${dest} + 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}/hub" + echo "${INSTALLDIR}/portmaster-start --data ${INSTALLDIR} hub" echo "" return fi @@ -141,7 +146,7 @@ LimitNOFILE=infinity Environment=LOGLEVEL=warning Environment=SPN_ARGS= EnvironmentFile=-/etc/default/spn -ExecStart=${INSTALLDIR}/hub --log \$LOGLEVEL \$SPN_ARGS +ExecStart=${INSTALLDIR}/portmaster-start --data ${INSTALLDIR} hub -- --log \$LOGLEVEL \$SPN_ARGS [Install] WantedBy=multi-user.target @@ -205,7 +210,7 @@ confirm_config() { log "Installation configuration:" echo "" echo " Architecture: ${BOLD}${ARCH}${RESET}" - echo " Download-URL: ${BOLD}${SPNBINARY}${RESET}" + echo " Download-URL: ${BOLD}${PMSTART}${RESET}" echo " Target Dir: ${BOLD}${INSTALLDIR}${RESET}" echo "Install systemd: ${BOLD}${INSTALLSYSTEMD}${RESET}" echo " Unit path: ${BOLD}${SYSTEMDINSTALLPATH}${RESET}" @@ -242,7 +247,7 @@ ${BOLD}Options:${RESET} ${GREEN}-t, --target PATH${RESET} Configure the installation directory. ${GREEN}-h, --help${RESET} Display this help text ${GREEN}-a, --arch${RESET} Configure the binary architecture. - ${GREEN}-u, --url URL${RESET} Set download URL for spn-hub. + ${GREEN}-u, --url URL${RESET} Set download URL for portmaster start. ${GREEN}-S, --no-systemd${RESET} Do not install systemd service unit. ${GREEN}-s, --service-path PATH${RESET} Location for the systemd unit file. EOT @@ -273,7 +278,7 @@ main() { shift ;; --url | -u) - SPNBINARY=$2 + PMSTART=$2 shift ;; --no-systemd | -S) @@ -310,11 +315,12 @@ EOT # Setup hub ensure_install_dir - download_spnbinary + download_pmstart + download_updates write_config_file "${INSTALLDIR}/config.json" # setup systemd setup_systemd } -main "$@" +main "$@" \ No newline at end of file diff --git a/spn/tools/install.v2.sh b/spn/tools/install.v2.sh new file mode 100644 index 00000000..5034b5ee --- /dev/null +++ b/spn/tools/install.v2.sh @@ -0,0 +1,320 @@ +#!/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= +SPNBINARY= +ENABLENOW= +INSTALLSYSTEMD= +SYSTEMDINSTALLPATH= + +apply_defaults() { + ARCH=${ARCH:-amd64} + INSTALLDIR=${INSTALLDIR:-/opt/safing/spn} + SPNBINARY=${SPNBINARY:-https://updates.safing.io/latest/linux_${ARCH}/hub/spn-hub} + 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_spnbinary() { + log "Downloading SPN binary ..." + local dest="${INSTALLDIR}/hub" + if [ -f "${dest}" ]; then + warn "Overwriting existing hub at ${dest}" + fi + + download_file ${SPNBINARY} ${dest} + + log "Changing permissions" + chmod a+x ${dest} +} + +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}/hub --data-dir ${INSTALLDIR}" + 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} <