Skip to content

zigの最新バイナリをインストールする

Published:

2024/02/13現在、zigはバージョン0.11までリリースされているが開発中の最新版を使いたい。開発中の最新版はパッケージマネージャ経由でインストールすることはできないので、これまでは Zigの公式サイトからmasterのバイナリをダウンロードして手動でセットアップしていた。この作業をスクリプト化したのでメモ。

前提

 jq --version
jq-1.6
 cat ~/.bashrc | grep zig
export PATH=$PATH:$HOME/.zig

セットアップスクリプト

#!/bin/bash
set -euxo pipefail

tmpdir="/var/tmp"

# uname の出力に基づいて platform 変数を設定
# Windowsは持っていないので考慮しない
case "$(uname -s)" in
    Linux*)
        case "$(uname -m)" in
            x86_64)
                platform="x86_64-linux"
                ;;
            aarch64)
                platform="aarch64-linux"
                ;;
            *)
                echo "Unsupported Linux architecture"
                exit 1
                ;;
        esac
        ;;
    Darwin*)
        case "$(uname -m)" in
            x86_64)
                platform="x86_64-macos"
                ;;
            arm64)
                platform="aarch64-macos"
                ;;
            *)
                echo "Unsupported macOS architecture"
                exit 1
                ;;
        esac
        ;;
    *)
        echo "Unsupported platform"
        exit 1
        ;;
esac


# Zigの最新バージョンのURL・ファイル名を取得
url=$(curl -s https://ziglang.org/download/index.json | \
    jq -r --arg platform "$platform" '.["master"][$platform]["tarball"]')
filename=$(basename "${url}")

# ファイルをダウンロードして展開
mkdir -p "${tmpdir}"
cd "${tmpdir}"
curl -o "${filename}" "${url}"
tar Jxf "${filename}"

rm -rf ~/.zig_bak
if [ -d "${HOME}/.zig" ]; then
    mv "${HOME}/.zig" "${HOME}/.zig_bak"
fi

# 新しい.zigディレクトリを移動
base=$(basename "${filename}" .tar.xz)
mv "${base}" "${HOME}/.zig"

# ダウンロードしたアーカイブを削除
rm "${filename}"

zig version

実行ログ

 ./setup_master_zig.sh
+ tmpdir=/var/tmp
+ case "$(uname -s)" in
++ uname -s
+ case "$(uname -m)" in
++ uname -m
+ platform=x86_64-linux
++ curl -s https://ziglang.org/download/index.json
++ jq -r --arg platform x86_64-linux '.["master"][$platform]["tarball"]'
+ url=https://ziglang.org/builds/zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
++ basename https://ziglang.org/builds/zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
+ filename=zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
+ mkdir -p /var/tmp
+ cd /var/tmp
+ curl -o zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz https://ziglang.org/builds/zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 45.9M  100 45.9M    0     0  10.1M      0  0:00:04  0:00:04 --:--:-- 10.5M
+ tar Jxf zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
+ rm -rf /home/hiro/.zig_bak
+ '[' -d /home/hiro/.zig ']'
+ mv /home/hiro/.zig /home/hiro/.zig_bak
++ basename zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz .tar.xz
+ base=zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99
+ mv zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99 /home/hiro/.zig
+ rm zig-linux-x86_64-0.12.0-dev.2727+fad5e7a99.tar.xz
+ zig version
0.12.0-dev.2727+fad5e7a99