42 MacPorts の Sequoia への migration (結構ドタバタしました)

(ドタバタの記録、になってしまった。しばらく事後報告が続く予定。)


一つ前「MacPorts まとめ (2024年版)」

macOS Sequoia (macOS 15) がリリースされた。

人身御供のMacを選んで、Sonoma からアップグレードする。 これ自体はすんなりできた。

macOS のメジャーバージョンを変えたとき、 次にすべきは MacPorts の更新である (古いのが動かない訳ではないが、ports の更新がまったくできないので)。

そのためには、まずは Xcode の Command Line Tools の更新をする。 これも簡単にすんだ。

macOS のメジャーバージョンが更新されたとき、 これまで MacPorts では、 “migration” とか呼ばれる、実質的に全部インストールし直し、が必要だった。 その手順がかなり面倒だったので、/opt/local の下をバッサり削除して、 新規インストールというのをやっていたりしたのだが、 その手続きが大きく簡略化されたようだ。

「Migrating MacPorts after a major operating system upgrade or from one computer to another ¶」
https://trac.macports.org/wiki/Migration

実質的にターミナルで
sudo port migrate
とするだけ (らしい)。 以前「私は日常的にやっているので慣れているのだけど。 MacPorts 開発チームが簡単化を実現すべきだろうと思っている。」 と書いたけれど、それが実現された?? これは劇的な改善のような気がする。

macOS が新しくなったことより (何かいいことはあるんだろうけど、 どういういいことがあるかは知らない)、 こっちの方が嬉しい。

% sudo port migrate
Migration will first upgrade MacPorts and then reinstall all installed ports. Would you like to continue? [Y/n]: y
Upgrading MacPorts...
--->  Checking for newer releases of MacPorts
MacPorts base version 2.10.1 installed,
MacPorts base version 2.10.1 available.
--->  MacPorts base is outdated, installing new version 2.10.1
--->  Attempting to fetch MacPorts 2.10.1 source code from https://github.com/macports/macports-base/releases/download/v2.10.1/MacPorts-2.10.1.tar.bz2
--->  Extracting MacPorts 2.10.1
--->  Installing new MacPorts release in /opt/local as root:wheel; permissions 0755
--->  Updating the ports tree
Taking a snapshot of the current state...
Following inactive ports will not be a part of this snapshot and won't be installed while restoring:
 aom  @3.9.0_0
 automake  @1.16.5_0
 bash  @5.2.26_0
 cairo  @1.17.6_1 +quartz+x11
(中略)
 xz  @5.4.6_0
 zvbi  @0.2.35_3
Continue? [Y/n]: y
Done: Snapshot '1' : 'snapshot created for migration' created at 2024-09-20 23:16:17
Deactivating all ports...
(中略)
inactive な Ports まではスナップショットに入れないと。 まあ、そりゃそうでしょうね。 Ports の数が多いと、かなり長い時間がかかるけれど、 こちらは時々画面を見てチェックするだけなので、 ストレス・フリーである。

macOS のメジャーバージョンを変えるのは、 MacPorts の更新にそれなりに時間がかかるので億劫だったのだけれど、 それが解消されたようだ。とても嬉しい。


… しかし、まだパッケージ・ファイル (コンパイル済みのファイル一式を収めたもの) が用意されていないことが多いようで、 一々 build しなくちゃいけないのか。 かなりの大物を build しているね。当然時間がかかる。 少し待つのが吉なのかな。 となると、macOS のアップグレードも少し待つものでしょう。


あれ、lv, lha, xpdf, gnuplot, ffmpeg がインストールされないな。 もう lha, xpdf はなくてもいいけど、lv, gnuplot, ffmpeg はないと困るぞ。 gnuplot, ffmpeg についてはインストールされた Mac もあるな。 何かのミスか (やり直して何とかなった)。

lv, lha は他と依存はない小物だけれど、どの Mac でもインストールできてないな。 はてな?

えーと。のぞきに行く。どうやるんだったけ。
#ls -l /opt/local/var/macports/distfiles/lv
sudo port extract lv
sudo port conf lv
#cd `port dir lv`
cd `port work lv`

ああ!!!configure script で int なしの main があるせいか!!! うわあ。つい最近出会した GLSC が cc (LLVM) でコンパイルできない、 というのと同じじゃん。

そうか、 “Warning: Configuration logfiles contain indications of -Wimplicit-function-declaration; check that feateures were not accidentaly disabled:” という警告が出ていた意味が分かった。 lv は古いプログラムで、書き方が古いけれど、 MacPorts の port 担当は、 ソース・プログラムに手を入れずに -W某 で済ます、という選択をした。 それで今回、型名を書いてなければ int という暗黙の仮定をする、 の方に引っかかったのか。 configure スクリプトに int 書き足してとりあえず解決。


lha もこの線で何とかなった。 Makefile を探して CFLAGS-Wno-error=implicit-function-declaration -Wno-error=implicit-int を追加して、build をやり直したら通った。

しかしすべての port にこんなことをする訳にはいかないな。 やはり port が更新されるのを待つしかない。 やっちゃった Mac は仕方ないから、必要な物だけでも、何とかするのか。 他の大勢の Mac はしばらく macOS のアップグレードをペンディングする。


教訓    新しいものにすぐ飛びついてはいけません。人身御供はよくよく選びましょう。

(少し夏休み気分が残っていたせいでやってしまった。多分1週間ズレていたら、 やらなかったと思います。)

(2024/9/22) 現時点でも、時間がかかることを置いておけば、 一部の古いものを除いて、多くの port は使えるようになる。 今のところ、Intel Mac で gcc14 のインストールがうまく行かない。 そのせいで、それに依存する ports (scipyとか) がインストールできない。 最近やっている数値計算で gcc は必須なので、ちょっと困っているが、 まあやってしまったものは仕方がない。速いMac≒Apple Silicon Mac ≒実際に大きな計算をするMacでは動くので、大きな問題ではない。 gcc は大物なので、近日中に解決する(してくれる)だろう、と期待している。


(2024/9/25) 認知はされているようだが… 「Bug 116809 - Failure to build GCC on macOS 15 / Xcode 16 for Intel」


私と同じく macOS Sequoia に更新した人(MacPorts利用者)は、色々奮闘していて、 どんな様子かは、

「macOS Sequoia Problems」
で見られる。


(2024/9/27) gcc14 が Intel Mac でもコンパイルできるように更新された。 openblas, py312-numpy もこれまで通り
sudo port install openblas +native
sudo port install py312-numpy +openblas
でインストーできた。py312-scipy を
sudo port install py312-scipy
でインストールしようとしているがうまく行っていない。

この状態は、Intel Mac でも Apple Silicon Mac でも同じみたい。

これは待っていれば良いのかな?

https://trac.macports.org/ticket/70460 によると

In case it's not clear, scipy wants gast 0.5.x which you don't have; MacPorts gast has moved past that version already. scipy needs to be updated to a newer version that will accept our newer gast.
だそうで、待つべきらしい。


(2024/9/29午後) あ、py312-scipy 通った。担当割り当てされていたし、やってくれるかな、 と思っていたら、一晩で解決か。これで普段使っている ports はすべて Sequoia で動くようになった。 ありがとうございます。使わせていただきます。 MacPorts は頑張っているな、という印象。


メモ(がらくた)

/opt/local/var/macprts/sources/rsync.macports.org/macports/release/tarballs/ports/カテゴリー/名前


MacPorts のアンインストール

“Migrating a MacPorts installation” の 2.4. Uninstall によると、
MacPorts をアンインストールする手順
sudo port -fp uninstall installed

sudo rm -rf \
        /opt/local \
        /Applications/DarwinPorts \
        /Applications/MacPorts \
        /Library/LaunchDaemons/org.macports.* \
        /Library/Receipts/DarwinPorts*.pkg \
        /Library/Receipts/MacPorts*.pkg \
        /Library/StartupItems/DarwinPortsStartup \
        /Library/Tcl/darwinports1.0 \
        /Library/Tcl/macports1.0 \
        ~/.macports
(まず ports を削除して、それから MacPorts 自身を削除する。)
としなさい、とのこと。 /opt/local 以外にも、 色々なところにファイルが置かれていることが分かる。 これらのディレクトリィは、つねに存在する訳でもないが、 一応上のコマンドを投入すべきらしい。


(2024/9/23追記) Sequoia について「早まるな。まだインストールするな。」 という WWW サイトが増えてきたような気がする。 そうかもねー。

桂田 祐史