#!/bin/bash # ============================================================ # 安装 Javy(JS→WASM 编译工具)到服务器 # ------------------------------------------------------------ # 用法:bash deploy/install_javy.sh # 作用:从 GitHub 官方 Releases 下载 Javy(约 14MB 单文件), # 校验 SHA256 后安装到 /usr/local/bin/javy # 幂等:已安装且版本一致时直接跳过,可重复执行 # 体积说明:下载包约 14MB,解压后约 40MB,仅占磁盘少量空间 # ============================================================ set -eu JAVY_VERSION="${JAVY_VERSION:-9.1.0}" JAVY_BIN="/usr/local/bin/javy" URL="https://github.com/bytecodealliance/javy/releases/download/v${JAVY_VERSION}/javy-x86_64-linux-v${JAVY_VERSION}.gz" SHA_URL="${URL}.sha256" # 已安装且版本匹配 -> 跳过(避免重复下载) if [ -x "$JAVY_BIN" ] && "$JAVY_BIN" --version 2>/dev/null | grep -q "$JAVY_VERSION"; then echo "Javy ${JAVY_VERSION} 已安装,跳过下载:$($JAVY_BIN --version)" exit 0 fi echo "== 下载 Javy ${JAVY_VERSION}(约 14MB)==" TMP=$(mktemp -d) trap 'rm -rf "$TMP"' EXIT curl -fL -sS -o "$TMP/javy.gz" "$URL" curl -fL -sS -o "$TMP/javy.gz.sha256" "$SHA_URL" echo "== 校验 SHA256 ==" EXPECT=$(awk '{print $1}' "$TMP/javy.gz.sha256") ACTUAL=$(sha256sum "$TMP/javy.gz" | awk '{print $1}') if [ "$EXPECT" != "$ACTUAL" ]; then echo "校验失败:期望 $EXPECT,实际 $ACTUAL" >&2 exit 1 fi echo "校验通过" gunzip -f "$TMP/javy.gz" install -m 0755 "$TMP/javy" "$JAVY_BIN" echo "安装完成:$("$JAVY_BIN" --version)" echo "路径:$JAVY_BIN"