#!/bin/sh set -eu REPO="${REPO:-telemt/telemt}" BIN_NAME="${BIN_NAME:-telemt}" VERSION="${1:-${VERSION:-latest}}" INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}" say() { printf '%s\n' "$*" } die() { printf 'Error: %s\n' "$*" >&2 exit 1 } need_cmd() { command -v "$1" >/dev/null 2>&1 || die "required command not found: $1" } detect_os() { os="$(uname -s)" case "$os" in Linux) printf 'linux\n' ;; OpenBSD) printf 'openbsd\n' ;; *) printf '%s\n' "$os" ;; esac } detect_arch() { arch="$(uname -m)" case "$arch" in x86_64|amd64) printf 'x86_64\n' ;; aarch64|arm64) printf 'aarch64\n' ;; *) die "unsupported architecture: $arch" ;; esac } detect_libc() { case "$(ldd --version 2>&1 || true)" in *musl*) printf 'musl\n' ;; *) printf 'gnu\n' ;; esac } fetch_to_stdout() { url="$1" if command -v curl >/dev/null 2>&1; then curl -fsSL "$url" elif command -v wget >/dev/null 2>&1; then wget -qO- "$url" else die "neither curl nor wget is installed" fi } install_binary() { src="$1" dst="$2" if [ -w "$INSTALL_DIR" ] || { [ ! -e "$INSTALL_DIR" ] && [ -w "$(dirname "$INSTALL_DIR")" ]; }; then mkdir -p "$INSTALL_DIR" install -m 0755 "$src" "$dst" elif command -v sudo >/dev/null 2>&1; then sudo mkdir -p "$INSTALL_DIR" sudo install -m 0755 "$src" "$dst" else die "cannot write to $INSTALL_DIR and sudo is not available" fi } need_cmd uname need_cmd tar need_cmd mktemp need_cmd grep need_cmd install ARCH="$(detect_arch)" OS="$(detect_os)" if [ "$OS" != "linux" ]; then case "$OS" in openbsd) die "install.sh installs only Linux release artifacts. On OpenBSD, build from source (see docs/OPENBSD.en.md)." ;; *) die "unsupported operating system for install.sh: $OS" ;; esac fi LIBC="$(detect_libc)" case "$VERSION" in latest) URL="https://github.com/$REPO/releases/latest/download/${BIN_NAME}-${ARCH}-linux-${LIBC}.tar.gz" ;; *) URL="https://github.com/$REPO/releases/download/${VERSION}/${BIN_NAME}-${ARCH}-linux-${LIBC}.tar.gz" ;; esac TMPDIR="$(mktemp -d)" trap 'rm -rf "$TMPDIR"' EXIT INT TERM say "Installing $BIN_NAME ($VERSION) for $ARCH-linux-$LIBC..." fetch_to_stdout "$URL" | tar -xzf - -C "$TMPDIR" [ -f "$TMPDIR/$BIN_NAME" ] || die "archive did not contain $BIN_NAME" install_binary "$TMPDIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME" say "Installed: $INSTALL_DIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME" --version 2>/dev/null || true