docs/static/install.sh (2999B)
1 #!/bin/sh
2 # sqzass 설치 스크립트 — 이 머신에 맞는 최신 릴리스 바이너리를 받아 설치한다.
3 # curl -fsSL https://sqzass.sqzer.com/install.sh | sh
4 #
5 # 하는 일 전부: 플랫폼 판별 → 최신 태그 조회 → 타르볼과 .sha256 다운로드 →
6 # 체크섬 검증 → /usr/local/bin에 설치(SQZASS_INSTALL_DIR로 변경 가능).
7 # 그 밖의 일은 하지 않는다 — 셸 설정도, PATH도 건드리지 않는다.
8 set -eu
9
10 repo="debuman/sqzass"
11
12 # 리눅스 ARM은 커널이 `aarch64`로 답하지만, 32비트 유저스페이스를 얹은 이미지 등
13 # 일부는 `arm64`로 답한다. 둘 다 같은 아티팩트다.
14 case "$(uname -s)-$(uname -m)" in
15 Linux-x86_64) target="x86_64-unknown-linux-musl" ;;
16 Linux-aarch64 | Linux-arm64) target="aarch64-unknown-linux-musl" ;;
17 Darwin-arm64) target="aarch64-apple-darwin" ;;
18 *)
19 echo "지원하지 않는 플랫폼입니다: $(uname -s) $(uname -m)" >&2
20 echo "소스에서 빌드하세요: https://sqzass.sqzer.com/start/installation/" >&2
21 exit 1
22 ;;
23 esac
24
25 # API가 아니라 releases/latest의 리다이렉트에서 태그를 읽는다 — API는
26 # 미인증 요청에 레이트리밋이 있어 공유 IP(프록시·CI)에서 403이 난다.
27 tag="$(curl -fsSLI -o /dev/null -w '%{url_effective}' \
28 "https://github.com/$repo/releases/latest")"
29 tag="${tag##*/}"
30 case "$tag" in
31 v*) ;;
32 *) echo "최신 릴리스를 찾지 못했습니다." >&2; exit 1 ;;
33 esac
34
35 name="sqzass-$tag-$target"
36 url="https://github.com/$repo/releases/download/$tag/$name.tar.gz"
37
38 tmp="$(mktemp -d)"
39 trap 'rm -rf "$tmp"' EXIT
40
41 # 릴리스에 이 타깃이 없을 수 있다 — 타깃이 나중에 추가되면 그 이전 릴리스에는
42 # 없다. 여기서 잡지 않으면 curl의 한 줄짜리 실패만 보이고, 무엇이 없는 건지
43 # 알 수 없다.
44 if ! curl -fsLI -o /dev/null "$url" 2>/dev/null; then
45 echo "$tag 릴리스에는 $target 빌드가 없습니다." >&2
46 echo "소스에서 빌드하세요: https://sqzass.sqzer.com/start/installation/" >&2
47 exit 1
48 fi
49
50 echo "받는 중: $url"
51 curl -fsSL -o "$tmp/$name.tar.gz" "$url"
52 curl -fsSL -o "$tmp/$name.tar.gz.sha256" "$url.sha256"
53
54 # 체크섬은 검증 도구가 있을 때만 건너뛰지 않는다 — 둘 다 없으면 중단이 정직하다.
55 if command -v sha256sum >/dev/null 2>&1; then
56 (cd "$tmp" && sha256sum -c "$name.tar.gz.sha256" >/dev/null)
57 elif command -v shasum >/dev/null 2>&1; then
58 (cd "$tmp" && shasum -a 256 -c "$name.tar.gz.sha256" >/dev/null)
59 else
60 echo "sha256sum도 shasum도 없어 체크섬을 검증할 수 없습니다." >&2
61 exit 1
62 fi
63
64 tar -xzf "$tmp/$name.tar.gz" -C "$tmp"
65
66 dir="${SQZASS_INSTALL_DIR:-/usr/local/bin}"
67 if [ -d "$dir" ] && [ -w "$dir" ]; then
68 install -m 755 "$tmp/$name/sqzass" "$dir/sqzass"
69 else
70 echo "$dir 에 쓰려면 관리자 권한이 필요합니다."
71 sudo install -m 755 "$tmp/$name/sqzass" "$dir/sqzass"
72 fi
73
74 echo "설치했습니다: $dir/sqzass ($("$dir/sqzass" --version))"