せっかくMac miniもサーバ機を新調したし、MacPortsがVer 2.0系にバージョンアップしたようなので、たまったゴミを整理する意味でも再インストールを行ってみることにしました。Ver1系とバイナリパッケージの共有方法が変わったのでメモ。
Ver 2系ではファイル構成というか使い方が変わっており、今までmacports.confをいじって/opt/local/var/macports/packagesを共有していればコンパイル済みのパッケージを共有できていましたが、同じ手が使えなくなっているようです。これではサーバでコンパイルしてAirではバイナリだけのインストールなどということが出来ません。
そこでちょっとつついてみると、
- 2.0からはパッケージのアーカイブはデフォルトで行われる
- アーカイブは/opt/local/var/macports/software以下に置かれる
- バイナリインストール時はまず上のアーカイブのディレクトリを探す
- 次にpackages.macports.orgからバイナリをダウンロードを試す
が、少し古いバイナリしかサーバにはないので今のところ失敗する - macports.confに
archive_site_local http://hogehoge/foobar
等と書いて"port -bv install <PACKAGE>"とするとまず自前アーカイブを探す
試したところ転送はcurlを使っているのにhttpは動作したがfile:///がなぜかうまく動作せず - コンパイル済みのパッケージはファイルに署名が必要
署名の準備
mv privkey.pem privkey.pem.orig
openssl rsa -in privkey.pem.org -out privkey.pem
openssl rsa -in privkey.pem -pubout -out pubkey.pem
クライアントでも同じ記述を追加
バイナリパッケージへの署名
cd /opt/local/var/macports/software
for f in */*.tbz2; do
[ $f.rmd160 -nt $f ] || { echo $f; sudo openssl dgst -ripemd160 -sign /opt/local/share/macports/privkey.pem -out $f.rmd160 $f; }
done
バイナリファイルの配布
サーバでコンパイルした結果をクライアント側のopt/local/var/macports/software/にコピーすればOKなのですが、 このディレクトリ内のファイルはport uninstallで消されてしまいます。そこで以下のような対策が必要かと。
方法1) 専用のリポジトリとhttpサーバを用意してそこにrsync等で追加していき"-b"でインスールするのが一番いいかと。
一番楽なのは/opt/local/var/macports/softwareをDropbox内のリポジトリへのリンクにすることですが、port uninstall対策に一旦Dropbox内のリポジトリに先のportsign.shの最後にでもrsyncとか。普通にrsyncした方がいいような。
- アップルメニューから[システム環境設定]->[共有]でWeb共有を有効に
- ln -s /opt/local/var/macports/software ~/Sites/
- クライアントでは/opt/local/etc/macports/macports.confに以下の一行を追記
archive_site_local http://<server>.local/~<user>/software - サーバでportsをインストールしたら忘れずに署名
バイナリを無事受け取れたら、