فهرست منبع

:gear: Add install script

Ettore Di Giacinto 3 سال پیش
والد
کامیت
ab66486bf0
1فایلهای تغییر یافته به همراه179 افزوده شده و 0 حذف شده
  1. 179 0
      install.sh

+ 179 - 0
install.sh

@@ -0,0 +1,179 @@
+#!/bin/sh
+set -e
+set -o noglob
+
+DOWNLOADER=${DOWNLOADER:-curl}
+VERSION=${VERSION:-v0.8.5}
+
+info()
+{
+    echo '[INFO] ' "$@"
+}
+
+warn()
+{
+    echo '[WARN] ' "$@" >&2
+}
+
+fatal()
+{
+    echo '[ERROR] ' "$@" >&2
+    exit 1
+}
+
+
+detect_arch() {
+    if [ -z "$ARCH" ]; then
+        ARCH=$(uname -m)
+    fi
+    case $ARCH in
+        i386)
+            ARCH=i386
+            ;;
+        amd64|x86_64)
+            ARCH=x86_64
+            ;;
+        arm64|aarch64)
+            ARCH=arm64
+            ;;
+        arm*)
+            ARCH=armv6
+            ;;
+        *)
+            fatal "Unsupported architecture $ARCH"
+    esac
+}
+
+detect_platform() {
+    if [ -z "$OS" ]; then
+        OS=$(uname -o)
+    fi
+    case $OS in
+        *Linux)
+            OS=Linux
+            ;;
+        *)
+            fatal "Unsupported platform $OS"
+    esac
+}
+
+verify_env() {
+
+    detect_arch
+    detect_platform
+
+    if [ -x /sbin/openrc-run ]; then
+        HAS_OPENRC=true
+    fi
+    if [ -x /bin/systemctl ] || type systemctl > /dev/null 2>&1; then
+        HAS_SYSTEMD=true
+    fi
+
+    SUDO=sudo
+    if [ $(id -u) -eq 0 ]; then
+        SUDO=
+    fi
+
+    if [ -n "${INSTALL_BIN_DIR}" ]; then
+        BIN_DIR=${INSTALL_BIN_DIR}
+    else
+        BIN_DIR=/usr/local/bin
+        if ! $SUDO sh -c "touch ${BIN_DIR}/ro-test && rm -rf ${BIN_DIR}/ro-test"; then
+            if [ -d /opt/bin ]; then
+                BIN_DIR=/opt/bin
+            fi
+        fi
+    fi
+
+}
+
+setup_service() {
+    if [ -n "${INSTALL_SYSTEMD_DIR}" ]; then
+        SYSTEMD_DIR="${INSTALL_SYSTEMD_DIR}"
+    else
+        SYSTEMD_DIR=/etc/systemd/system
+    fi
+
+    if [ "${HAS_SYSTEMD}" = true ]; then
+        FILE_SERVICE=${SYSTEMD_DIR}/[email protected]
+        $SUDO tee $FILE_SERVICE >/dev/null << EOF
+[Unit]
+Description=EdgeVPN Daemon
+After=network.target
+
+[Service]
+EnvironmentFile=/etc/systemd/system.conf.d/edgevpn-%i.env
+LimitNOFILE=49152
+ExecStartPre=-/bin/sh -c "sysctl -w net.core.rmem_max=2500000"
+ExecStart=$BIN_DIR/edgevpn
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+EOF
+    elif [ "${HAS_OPENRC}" = true ]; then
+        $SUDO tee /etc/init.d/edgevpn >/dev/null << EOF
+#!/sbin/openrc-run
+depend() {
+    after network-online
+}
+
+supervisor=supervise-daemon
+name=edgevpn
+command="${BIN_DIR}/edgevpn"
+command_args="$(escape_dq "edgevpn")
+    >>${LOG_FILE} 2>&1"
+output_log=${LOG_FILE}
+error_log=${LOG_FILE}
+pidfile="/var/run/edgevpn.pid"
+respawn_delay=5
+respawn_max=0
+set -o allexport
+if [ -f /etc/environment ]; then source /etc/environment; fi
+if [ -f /etc/edgevpn.env ]; then source /etc/edgevpn.env; fi
+set +o allexport
+EOF
+    fi
+
+}
+
+download() {
+    [ $# -eq 2 ] || fatal 'download needs exactly 2 arguments'
+
+    case $DOWNLOADER in
+        curl)
+            curl -o $1 -sfL $2
+            ;;
+        wget)
+            wget -qO $1 $2
+            ;;
+        *)
+            fatal "Incorrect executable '$DOWNLOADER'"
+            ;;
+    esac
+
+    # Abort if download command failed
+    [ $? -eq 0 ] || fatal 'Download failed'
+}
+
+install() {
+    info "Arch: $ARCH. OS: $OS Version: $VERSION (\$VERSION)"
+
+    TMP_DIR=$(mktemp -d -t edgevpn-install.XXXXXXXXXX)
+
+    download $TMP_DIR/out.tar.gz https://github.com/mudler/edgevpn/releases/download/$VERSION/edgevpn-$VERSION-$OS-$ARCH.tar.gz
+
+    # TODO verify w/ checksum
+    tar xvf $TMP_DIR/out.tar.gz -C $TMP_DIR
+
+    $SUDO cp -rf $TMP_DIR/edgevpn $BIN_DIR/
+
+    # TODO trap
+    rm -rf $TMP_DIR
+
+    # TODO setup env files for a network connection
+}
+
+verify_env
+setup_service
+install