123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #!/bin/sh
- set -e
- set -o noglob
- github_version() {
- set +e
- curl -s https://api.github.com/repos/mudler/edgevpn/releases/latest | \
- grep tag_name | \
- awk '{ print $2 }' | \
- sed -e 's/\"//g' -e 's/,//g' || echo "v0.8.5"
- set -e
- }
- DOWNLOADER=${DOWNLOADER:-curl}
- VERSION=${VERSION:-$(github_version)}
- 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
|