sqzass.git

sqzass

~ A static site generator written in Rust
git clone https://github.com/debuman/sqzass.git

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))"