macOS Mojave で MacPorts をつかう方法

macOS の最新版 Mojave に合わせて MacPorts を更新したので,手順をメモします

概要

MacPortsインストール済みの macOS を Mojave にアップグレードすると以下のようなエラーメッセージがでて MacPorts は動作しなくなります

Error: Current platform "darwin 18" does not match expected platform "darwin 17"
Error: If you upgraded your OS, please follow the migration instructions: https://trac.macports.org/wiki/Migration
OS platform mismatch
    while executing
"mportinit ui_options global_options global_variations"
Error: /opt/local/bin/port: Failed to initialize MacPorts, OS platform mismatch

理由はメッセージの通りで,対処するには Mojave つまり darwin 18用に /opt/local/bin/port コマンドなどを更新する作業が必要になります.

更新作業は以下の順に進めます

  1. Xcode Developer Tools をinstall
  2. port コマンドのinstall
  3. パッケージの更新

以下,順に説明します

Xcode Developer Toolsのインストール

コマンドラインで作業します

$ xcode-select --install

これでGUIのアプリが起動して,ダウンロード&インストールが自動で処理されます

インストールが終わったら,念のため Developer バージョンを選択しておきます

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

port コマンドのインストール

現時点(2018/10/02) ではまだ公式のバイナリが公開されていません

そこで以下の手順で自分でビルドします

作業ディレクトリに移動してソースコードをダウンロードします.以下の例では /tmp で作業しました

$ cd /tmp
$ wget https://distfiles.macports.org/MacPorts/MacPorts-2.5.3.tar.bz2

configure して install します.

$ tar xfj MacPorts-2.5.3.tar.bz2
$ cd MacPorts-2.5.3
$ ./configure
$ make -j4
$ sudo make install

これで /opt/local 以下に Mojave 用のport環境がインストールされます

一度,パッケージのメタ情報を更新しておきます

$ sudo port -v selfupdate

念のため古いビルド情報を破棄します.

$ sudo rm -rf /opt/local/var/macports/build/*

パッケージの更新

通常通り

$ sudo port upgrade -u outdated

などを実行すればOKです

インストール済みパッケージを自力でリビルドする方法

どうしても自前でバイナリをリビルドしたい人むけに,リビルド用のスクリプトが用意されています

$ wget https://github.com/macports/macports-contrib/raw/master/restore_ports/restore_ports.tcl
$ chmod +x restore_ports.tcl

使用方法は以下の通り.

まずインストール済みのパッケージ一覧のリストを作ります

$ port -qv installed > list.txt 

一度全パッケージをアンインストールします

$ sudo port -f uninstall installed

全パッケージをリビルド&インストールします

$ ./restore_ports.tcl  list.txt

これだけですが,全パッケージをリビルドするのでかなり時間が掛かります.