diaryこの広告は、90日以上更新していないブログに表示しています。2012-11-27MacPortsのバイナリダウンロードはビルドした時と違うファイルになる場合があるっぽいMacMacPortsで入れたgroongaに依存するnodeのnroongaを入れようとしてはまっています。その中でMacPortsのバイナリダウンロードにちょっと問題点がある気がしたのでメモです。159.1.0)試行錯誤の最中だったので、色々とライブラリの有無はあったけど、ある時点においてライブラリ等の環境が同じ状態で、バイナリダウンロードとソースダウンロードで、リンクするライブラリに違いが出ました。詳細な状況や疑問点などMacPortsの仕組みのあまり詳しくないので、色々と推測の域を出ない部分が多いです。msgpack[Snip]まず、インストールしようとしているportはgroongaです。Dependenciesの2種類の依存関係を持っています。groongaを入れても依存しているpkgconfigが入ってなかった。nodesnroongaではまっているうちに、nroongaのRequirementsにpkg-configがある事に気がつきました。MacPortsでも入れてないし、pkg-configコマンドが無かったので、別の方法ででも入ってなかったみたい。Dependenciesでpkgconfigに依存しているのに、入っていません。(ビルドしたgroongaをインストールするため)追加のライブラリを使いたい場合はこれらのツールを用意しておかなければいけません。http://groonga.org/ja/docs/install/others.html#dependenciesgroongaのドキュメントにはこの様に書いてあって、どうやら必須という訳じゃない様子。すると、pkgconfigが依存解決でインストールされないのは、動作としては間違ってない事になります。MacPortsの依存関係が、こういう形を許すものなのかどうか、あまり詳しくない事もあって疑問が残ります。Dependenciesは、MacPortsのドキュメントにこんな説明がありました。Dependenciesバイナリダウンロードとソースダウンロードもし依存関係が必須のものしかないなら、ビルド済みのものをダウンロードしても問題はなさそうです。上で確認した様に、どうも依存関係はインストールしてあれば使うけど無ければ使わないし依存解決で入れたりもしないというのも、あり得る様子。すると、ライブラリのインストール状況によって、生成されるべきバイナリは違うものになるはず。available)[Snip]何度アンインストールとインストールを繰り返してもバイナリダウンロードになるので、試しに-sオプションで、ソースダウンロードを強制してみたところ、冒頭の通り同じライブラリのインストール状況で違うバイナリが生成されました。MacPortsのバイナリダウンロードという仕組みが良くないのか、groongaの必須ではなくあれば使うという依存関係が特殊なせいなのか、どちらなのか分からないけど、はまりそうな動きなので注意が必要です。http://packages.macports.org/groonga[Snip]バイナリダウンロードの場合。http://packages.groonga.org/source/groonga/[Snip]ソースダウンロードの場合。upgradeというコマンドがあります。upgradeはメジャーバージョンを上げるコマンドだと、勘違いしていました。upgradeについて、調べなおしたので書いておきます。upgradeはメジャーバージョンアップ以外にも使う。--obsoletesと同じコマンド。CentOSのデフォルトでは、設定ファイルにobsoletes=1が書いてあるので--obsoletesは付けなくても付けた扱いになる。--obsoletesをつけると、というかCentOSのデフォルトでは、廃止対象のパッケージがあり、廃止処理される。廃止処理は、他の新しいパッケージで置き換えられるという形。fooというパッケージが、単にbarという名前に変わった場合、barパッケージがfooを廃止するという情報を持っているので、barをインストールするタイミングでfooが削除される。upgradeをmanから調べるまず、改めてmanpageを見てみました。--obsoletesと同じみたいです。optionはデフォルト値がtrueなので、常に--obsoletes付いてる扱いになる。直訳すると「yumは廃止されたパッケージを計算に含める」と読めるんだけど、具体的にどうなるのかいまいち分からない。ここは分かりやすく、メジャーバージョンを上げるときに良い的な事が書いてあります。upgradeは実質同じ動きをするであろう事は分かりました。指定されているので、この二つは同じ機能になってたというわけでした。optionは、どうやら/etc/yum.confのobsoletes=1みたい。自分の環境で/etc/yum.confは全然いじってないし、確かにtrueになっている。