3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Homebrew が去り MacPorts が帰ってこない Intel Mac で eMudhra 中間証明書秘密鍵漏洩へ対策したパッケージマネージャーを bootstrap で組み上げる

3
Last updated at Posted at 2026-10-30

注意: この記事は macOS Tahoe 26 が Apple からサポートされセキュリティアップデートが提供される期間内における使用環境の充実を目的としています。Apple が macOS Tahoe 26 のサポートを終了した以降には安全性を担保できません。

初出: 2026年10月30日

2026年10月は歴史的転換点となる情報セキュリティ事故多発の裏側で Intel Mac にも転換点が

世間で Mac と言えば Apple Silicon、高速演算とバッテリー持ちの良さに皆が夢中です。

しかし Intel Mac がどうしても必要という技術者も少数残っています。x86_64 Linux VM を動かす必要があるとか。

この記事を書いている2026年10月は情報セキュリティ事故が多発し歴史的転換点となりました。対策は、兎にも角にも、OS からアプリケーションまで安全なバージョンへの更新。

しかし、ここに来て Intel Mac には逆風が吹き始めました。ついに、と言うべきですが。

じゃあ、どうする?

ということで、2026年10月末に利用できる資源で Intel Mac において eMudhra 中間証明書秘密鍵漏洩へ対策したパッケージマネージャーを bootstrap で組み上げました。その段取りを記します。前提として OS バージョンを macOS Tahoe 26.7.2 とします。

昨年に Qiita に大嘘を書き(恥ずかしくて、悔しくて、リンクは書けません)信用されない身です。さて、今回はどうか。再現できるよう記します。

Intel Mac にパッケージマネージャーを構築

Xcode 用コマンドラインツールパッケージをダウンロードしてインストール

環境を組み上げる途中でコンパイラと git コマンドが必要になります。それは Apple 純正のXcode 用コマンドラインツールパッケージをダウンロードしてインストールします。Apple 純正 dmg 形式ですから署名されており eMudhra 中間証明書秘密鍵漏洩から影響を受けません。macOS Tahoe 対応の範囲にバージョンを抑える必要があり、現在は Command Line Tools 26.6 Universal を選択します。

git コマンドが古いことは避けられません。後で対策を打ちます。

go コンパイラを pkg 形式でダウンロードしてインストール

後で asdf を使用できるよう、go コンパイラをインストールします。go 1.27.3 は eMudhra 中間証明書秘密鍵漏洩にランタイムで対策済みです。pkg 形式をダウンロードすれば署名されており eMudhra 中間証明書秘密鍵漏洩から影響を受けません。

環境変数 GOPATH を固定値で設定

一般的な go コンパイラインストールでは環境変数 GOPATH を go env GOPATH コマンドにより取得しますが、ここでは固定値で設定します。go コマンドを実行しなくても値が確定していることが重要です。

~/.zshrc に次の設定を追記します。

export GOPATH=$HOME/go
export PATH="$PATH:$GOPATH/bin"

.zshrc 修正を反映させます。

$ exec $SHELL -l

ルート証明書ストアファイル /etc/ssl/cert.pem にワークアラウンドを実施

「どうせ、やると思った」という声が聞こえてきそうです。古い git コマンドを使用する以上、仕方ありません。

asdf を go コマンドでインストール

macOS に asdf をインストールする際には Homebrew を使用するのが一般的ですが、素の go コンパイラを使用してもインストールできます。go 1.27.3 をインストールしているので eMudhra 中間証明書秘密鍵漏洩にランタイムで対策済みです。

asdf が依存するのは次のコマンドです。参照: Dependencies | asdf

  • Bash version 3.2.48
  • Git version 1.7.7.2

Xcode 用コマンドラインツールパッケージをインストールした macOS Tahoe 26.7.2 は条件を満たすと分かります。

your_account@yyy ~ % /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin25)
Copyright (C) 2007 Free Software Foundation, Inc.
your_account@Yyyy ~ % /usr/bin/git --version
git version 2.50.1 (Apple Git-155)

asdf をインストールする go コマンドは以下です。

$ go install github.com/asdf-vm/asdf/cmd/asdf@v0.20.2

~/.zshrc に次の設定を追記します。

export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"

.zshrc 修正を反映させます。

$ exec $SHELL -l

Python を asdf 経由でインストール

asdf を使用できるようになり Python をインストールできます。Python 3.14.10 は eMudhra 中間証明書秘密鍵漏洩にランタイムで対策済みです。

$ asdf plugin add python
$ asdf install python 3.14.10
$ asdf set -u python 3.14.10

Spack をインストール

僕は Spack というパッケージマネージャーがあることを初めて知りました。知らない人が多いと推測します。スパコン向け計算プログラムを開発する研究者をメインターゲットとして管理されており、開発に必要なコマンド、例えば curl、git、openssh などは一通り揃っています。私たちに嬉しいのは Intel Mac サポートを継続していることです。

インストールに python3 しかも新しい版を要求します。先に asdf 経由で Python 3.14.10 をインストール済みですから、インストール可能です。

インストール手順を詳しく説明してくださった遺伝研に感謝いたします。参照: spack 自体のインストール手順
ただし git clone のみ GitHub にある README.md より借りました。参照: https://github.com/spack/spack

次のコマンドを実行します。

$ cd $HOME
$ git clone --depth=2 https://github.com/spack/spack.git

~/.zshrc に次の設定を追記します。

export SPACK_ROOT=/Users/your_account/spack
source $SPACK_ROOT/share/spack/setup-env.sh

.zshrc 修正を反映させます。

$ exec $SHELL -l

pkg 形式でインストールした go コンパイラをアンインストールし、go コンパイラを Spack 経由でインストール

Go という言語が持つ特徴は、Unix プラットフォーム向け実行バイナリを動的リンクライブラリに依存しないモノシリックな構造で出力することです。先ほどインストールした asdf 実行ファイルは macOS 標準以外の動的リンクライブラリに依存しません。ですから生みの親である go コンパイラをアンインストールしても asdf コマンドは動作します。

your_account@Yyyy ~ % otool -L /Users/your_account/go/bin/asdf
/Users/your_account/go/bin/asdf:
	/usr/lib/libSystem.B.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libresolv.9.dylib (compatibility version 0.0.0, current version 0.0.0)

かつ Spack は go コンパイラをバージョン管理可能です。

この二つから、pkg 形式でインストールした go コンパイラをアンインストールし、go コンパイラを Spack 経由でインストールすると go コンパイラがパッケージマネージャー管理下に置かれます。なおかつ環境変数 GOPATH を固定値で設定しましたから go コンパイラの実行バイナリを入れ替えた前後で asdf など go がインストールするコマンドのパスが変わりません。

pkg 形式でインストールした go コンパイラをアンインストール

// Source - https://stackoverflow.com/a/57634196
// Posted by arcseldon, modified by community. See post 'Timeline' for change history
// Retrieved 2026-10-29, License - CC BY-SA 4.0

$ sudo rm -rf /usr/local/go
$ sudo rm /etc/paths.d/go

go コンパイラを Spack 経由でインストール

$ spack install go@1.27.3

Spack の特徴として管理下のコマンドは spack load コマンドで指定しないと PATH に現れません。常に使用できるよう .zshrc に次の設定を追記します。

spack load go

.zshrc 修正を反映させます。

$ exec $SHELL -l

ここまでの作業により依存関係が円環を形成しました。そして総じて CUI コマンドにより更新可能です。ですから全てがパッケージマネージャーの管理下に置かれスクリプトによる更新が可能となったのです。

asdf <---+
 |       |
 v       |
python3  |
 |       |
 v       |
spack    |
 |       |      
 v       |
go ------+

英語のことわざで "pull oneself up by one's bootstraps" とは「自分のブーツの取っ手を引っ張って自分を持ち上げる」という不可能を意味しますが、pkg 形式でインストールした go コンパイラから遊離して自分達だけで上昇していける環境が整ったのです。現実に。

Nodejs を asdf 経由でインストール

asdf をインストールしたのですから Node.js をインストールできます。円環に加わることない枝となります。

$ asdf plugin add nodejs
$ asdf install nodejs 24.22.2
$ asdf set -u nodejs 24.22.2

ここまでくると asdf + pip + npm + Spack により、Intel Mac 上に開発環境を管理するパッケージマネージャーを構築できました。

残課題

/etc/ssl/cert.pem のワークアラウンドを取り消すか

これは各自のリスク管理で違いが出ます。

例えば curl は2026年10月30日現在で最新リリースが2026年10月14日と eMudhra 中間証明書秘密鍵漏洩より以前ですから対策は入っていません。参照: curl releases

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?