52 MacPorts まとめ (2022年版)

あちこち古いのに飛ぶのも何なんで (修正しにくい)。情報を集約しておく。 Xcode 関係でドタバタしたので、落ち着いた時点でまとめることが必要かもしれない。 macOS の新しいメジャーバージョンが出たときはしばらく静観していて、 Xcode 関係が落ち着いてから MacPorts に手を出すべきものかも。


MacPorts が本家である。

公式ドキュメントは充実している (英語だけど)。 MacPorts Guide (Documentation)

macOS のメジャーバージョンを変えていないときは、簡単にアップデートできる。
ターミナルで次のようにしてアップデートできる
sudo port selfupdate
sudo port upgrade outdated
という感じ。

macOS のアップグレード (メジャーバージョンが上がる) 際には、 全とっかえのような作業が必要である。普段は

Migrating MacPorts after a major operating system upgrade or from one computer to another
に書いてあることに従えば良い (大抵はスムーズに出来た)。

↑上の手順は結構大変なので (慣れていないとケガをしそう)、 古い MacPorts を全部削除して、1からインストールしなおすのもありかも。
古い MacPorts を削除する
sudo port -fp uninstall installed
sudo rm -rf /opt/local /Applications/MacPorts
(/opt/local に他の何かを入れている人は、 そういうのを消さないように注意する (まずは sudo mv /opt/local /opt/local.old とか退避させるのか?)。 /opt/macports とかすればよかったのに。 この辺は Homebrew にも文句を言いたい。)
古いのがなくなったら、MacPorts のインストーラーを https://www.macports.org/install.php から入手して インストールする。それ自体は割と短時間で済む。 MacPorts は、 色々なフリーのソフトウェアを簡単にインストールするためのしかけである。 自分が使うソフトウェアの “ポート” をインストールする。 現象数理学科Macで何をやっているのか私は詳しいことは知らないけれど、 次のようにすれば良いかな。
ターミナルで 4 つのポートをインストール
sudo port -N install netpbm
sudo port -N install gnuplot
sudo port -N install ImageMagick
sudo port -N install ffmpeg
(個々のポートに必要なポートもインストールするので、 割と長い時間がかかる。)


Xcode と Command Line Tools      ところで、MacPorts には、 Xcode と Command Line Tools が必要である。 「Xcode のインストールは必要でない、Command Line Tools だけで十分」 という意見があるが、 残念ながらすべての Ports でそうなっているわけでないみたい。

トラブルを避けたいならば、Xcode をインストール/更新しよう。 それから一度 Xcode を起動して License agreement をしておく (sudo xcodebuild -license というのもある)。 それから CommandLine Tools をインストールする。
xcode-select --install
やり直すには強引だけれど
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install

これで済まない場合もあって、以前書いた 「MacPorts で Command Line Tools のバージョンが分からない、 と言われたら」 が何かの参考になるかも。特に https://developer.apple.com/download/more/?=command%20line%20toolsからパッケージを取って来て手動でインストールするとか。 この Xcode と CommandLine Tools の問題については、 「もういい加減に直してくれ」 と言いたい。

実は今回(Venturaへのアップグレード騒ぎ)も、 パッケージ “Command Line Tools for Xcode 14.1 Release Candidate 2 October 24, 2022” というのを入手する羽目になった。 早速 Candidate 2 ですか。


sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

(一般的説明に戻って) SDK (Software Developpers Kit?) のありかを環境変数に設定する必要がある。
これを bash, zsh の設定ファイルに入れておく
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

さて、私が最近インストールしている port として
sudo port -N install gzip
sudo port -N install gsed
sudo port -N install wget
sudo port -N install lha
sudo port -N install a2ps-j
sudo port -N install nkf
sudo port -N install lv
sudo port -N install jpeg2ps
sudo port -N install gnupg2
sudo port -N install gv
sudo port -N install xpdf-japanese +autoactivate
sudo port -N install kochi-substitute
sudo port -N install netpbm
sudo port -N install gnuplot
sudo port -N install ImageMagick
sudo port -N install ffmpeg +nonfree

sudo port -N install openblas +native
sudo port -N install py310-numpy +openblas
sudo port -N install py310-scipy +openblas
sudo port -N install py310-matplotlib
sudo port -N install py310-ipython
sudo port -N install py310-jupyter
sudo port -N install pandoc

sudo port select --set python python310
sudo port select --set python3 python310
sudo port select --set ipython py310-ipython
sudo port select --set ipython3 py310-ipython
sudo port select --set cython cython310
sudo port select --set pygments py310-pygments

sudo port -N install openjdk11

sudo port install gcc12
sudo port select --set gcc mp-gcc12

(2022/10/30追記) gcc12 のインストールでこけた。 Command Line Tools for Xcode 14.1 Release Candidate 2 (October 24, 2022) を取って来てからやり直してうまく行った。 それにしても連発しているね (beta, beta3, Release Candidate に続いての登場) せっかくのお休みが Xcode に侵食される… Fortran コンパイラが要るんだよ…

(2022/10/31追記) Command Line Tools for Xcode 14.1 がリリースされた。 またインストールし直し。

(2022/11/1追記) 昨日インストールしたのは 14.0 だった。 一体どういうことなのか?? Candidate は Candidate で正式な推奨対象ではない、ということか。 結局 14.1 Release Candidate 2 に戻す。 macOS がアップデート対象としてある意味で (MacPorts と一緒に使って警告がでない、という意味で) 不適切なものを提示する、 ということは知っておくと良いだろう (ちゃんと詳細表示させてバージョンを確認して、 納得できてからアップデートすること)。 これを理解してかなりスッキリした (少なくともここまでバージョンに関する警告を貰ってない)。

Command Line Tools のバージョンの確認
pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
これで確認すると
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
となることもある。
version: 14.1.0.0.1.1666437224
volume: /
location: /
install-time: 1667280332
groups: com.apple.FindSystemFiles.pkg-group
となっていれば順調。


以下、port コマンドの使い方の説明。

どの port がインストールされているかリストを表示する
port installed

名前を頼りに port を検索する
port search キーワード
例えば port search gcc として、gcc12 というのが最新か、 とか分かる。

そのポートでインストールしてあるバージョンを表示
port installed ポートの名前
例えば port installed gcc12 として、 gcc12 @12.2.0_0+stdlib_flaggcc12 というのを インストールしてあることが分かる。 複数インストールしてあって、そのうちのどれがactiveになっているか、 というようなことも分かる。

active なものを切り替える
sudo port activate ポートの名前@バージョン
(時々ある、新しいのをインストールしたら何かが動かなくなった、 というときに「時よ戻れ」とすることが出来る。)

その port にはどういうバリアントがあるか
port variants ポートの名前
例えば port variants openblas とか

例えば openblas ならば
% port variants openblas
OpenBLAS has the variants:
   g95: Build using the g95 Fortran compiler
     * conflicts with gcc10 gcc11 gcc12 gccdevel
   gcc10: Build using the MacPorts gcc 10 compiler
     * conflicts with g95 g95 gcc11 gcc12 gccdevel
   gcc11: Build using the MacPorts gcc 11 compiler
     * conflicts with g95 g95 gcc10 gcc12 gccdevel
[+]gcc12: Build using the MacPorts gcc 12 compiler
     * conflicts with g95 g95 gcc10 gcc11 gccdevel
   gccdevel: Build using the MacPorts gcc devel compiler
     * conflicts with g95 g95 gcc10 gcc11 gcc12
[+]lapack: Add Lapack/CLapack support to the library
   native: Force compilation on machine to get fully optimized library
   universal: Build for multiple architectures

port をバリアントを指定してインストールする
sudo port install ポートの名前 [+バリアント]

以下は未整理。

sudo port -uf uninstall leaves
sudo port -p uninstall inactive
sudo port -p clean --all all

export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"

port select python
sudo port select --set python python39
sudo port select --set python3 python39

% port select --list gcc
Available versions for gcc:
	mp-gcc-devel
	none (active)
% sudo port select --set gcc mp-gcc-devel

sudo port install gcc6
sudo port select --set gcc mp-gcc6
sudo port install openmpi-gcc6
sudo port select --set mpi openmpi-gcc6-fortran

「(portの内容を)修正してみたい」

「MacPorts で古い port をインストールする」

桂田 祐史