« AirVideoの再生で問題のあるタイトル名が!? | メイン | MacPorts2のEmacs-app(23.3)にimeパッチを当ててみたメモ »

MacOSX Lion対応のMacPorts 2.X系でコンパイル済みのパッケージを共有する方法メモ

せっかく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:///がなぜかうまく動作せず
  • コンパイル済みのパッケージはファイルに署名が必要
という感じで、署名付きでバイナリ配布を行うための仕様変更ですね。現状サーバから落とせないのはまあ置いておいて、最低でも自前でコンパイルしたものの共有はしたいですよね。というわけで、なんとかしてみたメモ。 

署名の準備

ほぼファイル/opt/local/etc/macports/pubkeys.confに書いてある通りですが...
 
openssl genrsa -des3 -out privkey.pem 2048
mv privkey.pem privkey.pem.orig
openssl rsa -in privkey.pem.org -out privkey.pem
openssl rsa -in privkey.pem -pubout -out pubkey.pem
 
私はpubkey, privkeyともに/opt/local/share/macportに配置しました。 
クライアントとなるマシンにもpubkey.pemをコピーして同じ場所に配置。
 
次に/opt/local/etc/macports/pubkeys.confに公開キーの位置を追記
 
/opt/local/share/macports/pubkey.pem 

クライアントでも同じ記述を追加 

以上で準備終わり。 
 

バイナリパッケージへの署名

サーバ機でportのインストールを行ったら以下の以下のようなスクリプトを走らせる
 
File: portsign.sh
 
#!/bin/bash
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"でインスールするのが一番いいかと。 

方法2) クライアントからpull。 
rsync -auv Server:/opt/local/var/macports/software/ /opt/local/var/macports/software/
 
方法3)  Dropbox等で共有する。
一番楽なのは/opt/local/var/macports/softwareをDropbox内のリポジトリへのリンクにすることですが、port uninstall対策に一旦Dropbox内のリポジトリに先のportsign.shの最後にでもrsyncとか。普通にrsyncした方がいいような。
 
追記)
サーバでのuninstallを気にしないでいいなら手っ取り早いのはWeb共有
  • アップルメニューから[システム環境設定]->[共有]でWeb共有を有効に
  •  ln -s  /opt/local/var/macports/software ~/Sites/
  • クライアントでは/opt/local/etc/macports/macports.confに以下の一行を追記
    archive_site_local    http://<server>.local/~<user>/software
  • サーバでportsをインストールしたら忘れずに署名 
以上でインストール時にサーバからバイナリファイルをダウンロードしてくれます。
 

クライアント側でのportのインストール 

バイナリを無事受け取れたら、 

port -bvu install <file>
 
-bオプションはなくてもバイナリからインストールされますが不用意にコンパイルを始めないようにおまじない的に。
 
 

最後に

サーバでのコンパイル後と、クライアントでのファイル更新に一手間あるのでまだまだ改善の余地がありますね。folder actionを使うとか、色々すれば改善できそうですが、まずはとりあえず。近々改良してみます。
 
portsは管理が面倒ですぐゴミが溜まったりするし、HomeBrewに乗り換えようかとも思ったのですが、こちらは/usr/localを使用するので野良ビルドしたソフトとかぶるんですよね。その辺の管理が面倒そうな予感がしてまだ移行していません。
 
MacPortsもメジャーバージョンアップ後なので最初はバグや混乱もあるだろうし、バイナリ配布にも時間がかかるのでまだなのだろう。などと好意的に判断してもう少し使ってみることに。特にバイナリ配布が安定しだすと、今までと比べて圧倒的に使いやすくなると思いますしね。

トラックバック

このエントリーのトラックバックURL:
http://blog.browncat.org/cgi-bin/mt/mt-tb-abc.cgi/932


コメントを投稿

(お書きになったコメントはすぐには表示されません。ご了承ください。)


About

2011年08月03日 01:29に投稿されたエントリーのページです。

ひとつ前の投稿は「AirVideoの再生で問題のあるタイトル名が!?」です。

次の投稿は「MacPorts2のEmacs-app(23.3)にimeパッチを当ててみたメモ」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

           

カテゴリー

Powered by
Movable Type 3.36

Twitter


最近のエントリー

デル株式会社ads

注目エントリー