#!/bin/sh # 安装当前发布的 LOCUS。 # curl -fsSL https://locus.casa/releases/install | sh # 把参数交给安装器: # curl -fsSL https://locus.casa/releases/install | sh -s -- install -y # 固定版本: # LOCUS_VERSION=0.1.0 curl -fsSL https://locus.casa/releases/install | sh set -eu BASE="${LOCUS_RELEASE_BASE:-https://locus.casa/releases}" VERSION="${LOCUS_VERSION:-}" fail() { printf '%s\n' "$1" >&2 exit 1 } command -v curl >/dev/null 2>&1 || fail "需要 curl / curl is required" command -v sha256sum >/dev/null 2>&1 || fail "需要 sha256sum / sha256sum is required" if [ -z "$VERSION" ]; then VERSION=$(curl -fsSL "$BASE/latest/version" | tr -d '[:space:]') fi printf '%s' "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(\.[0-9A-Fa-f]+)?$' \ || fail "版本号无效 / invalid version: $VERSION" work=$(mktemp -d) cleanup() { rm -rf "$work"; } trap cleanup EXIT curl -fsSL "$BASE/$VERSION/SHA256SUMS" -o "$work/SHA256SUMS" curl -fsSL "$BASE/$VERSION/linux-install.sh" -o "$work/linux-install.sh" grep ' linux-install.sh$' "$work/SHA256SUMS" >"$work/check" \ || fail "SHA256SUMS 里没有 linux-install.sh / SHA256SUMS has no linux-install.sh" (cd "$work" && sha256sum -c check) || fail "校验失败,请重新下载 / checksum mismatch, download again" chmod 755 "$work/linux-install.sh" # 安装器要从自己的文件里读出内嵌的包,所以必须落在磁盘上再执行。 # 它还会用 sudo 重新执行同一个路径,这里不能在退出时删掉。 trap - EXIT # 从管道执行时没有控制终端,/dev/tty 打不开。有终端才把向导的输入接回去。 if (: <>/dev/tty) >/dev/null 2>&1; then exec bash "$work/linux-install.sh" "$@"