ports memo
id:footnote:20080315:1205574241でgitsさんがportsについてのコメントをくださった。ありがとうございます。
まず、自分が何をしたいのかよく分っていないという点が問題なのだが、僕がしたいことは、
- Aというマシンにインストールをしたportsに対して、同じものを依存性を考慮してBというマシンに、インストールする
ということだと思う。portsが依存性を解決してくれるので、Aで動いていると仮定すればBでも動くはずということになる。
出来れば、
- 依存性を考えて最小限のインストールをする。(不必要なインストールをしない)
- 依存性を考えて必要なものをすべてインストールする。
が、ほしいとこだ。
と考えてみて、gitsさんのアドバイスをみると、最初のものはインストールされたパッケージの全てのpackageをつくってしまうということだと思う。これは、魅力的な考えで、packageを自分用にインストールした形で作っておけば、次のマシンでのインストール作業はものすごく楽になるだろう。しかし、すでにインストールされてしまったportsの、すべてのpackageを作るのは、ちょっと手間な気がする。あと、gitsさんが書いてくださった通り、CPUアーキテクチャが異なるとpackageは使えない。
"pkg_info -aoq"の出力を使う方法は、間違っているかもしれないが、順番が依存性と関係なく並ぶと思うので、依存性によって、すでにインストールされているportsを何度もインストールしようと試みることになるのじゃないかと思う。すでにインストールされているよってことで、次に進んで、最後には正しく終了すると思うのだが、量が多いとちょっと無駄かなぁと思う。
pkg_sort
それで、少し調べて見たところ、ports-mgmt/portupgradeでついてくるpkg_sortが使えるんじゃないかと思った。
% pkg_info | cut -d' ' -f 1 | pkg_sort
とすると、インストールされたパッケージが、依存性にしたがって順番に並んでくれるようなので、この順番でportinstallの引数に与えればいいんじゃないかと思う。が、たぶん、これはportsツリーが同一であることが大前提。"pkg_info -o" の形式で並べてくれないかなぁと思ったが、ダメだった。
今の僕の状況を鑑みると、7.0-RELEASEをインストールして、sysinstall から packageをftpでおとしつつインストールしたのち、必要に応じて、portsツリーを更新してインストールしたりしてると、ちょっと悲しいどころではない。(portupgradeしろって話はあるが、それは別の話ということで)
pkg_tree
portsの依存関係って面白いなぁっておもって、もう少し視覚的にわかりやすいのはないかと思ったら、ports-mgmt/pkg_treeっていうのがあった。これは、インストールされているportsの依存関係をツリーにして出してくれるらしい。これはやってみようと思って、
% pkg_tree -v > /tmp/ports-tree.txt
ってやったら、ものすごいファイルが出来上がった。あまりに壮観なので、ちょっとだけ。
GraphicsMagick-1.1.10 |\__ xextproto-7.0.2 |\__ kbproto-1.0.3 |\__ inputproto-1.4.2.1 |\__ gsfonts-8.11_4 |\__ png-1.2.22 |\__ libfpx-1.2.0.12_1 |\__ lcms-1.17,1 |\__ jpeg-6b_4 |\__ tiff-3.8.2_1 | \__ jpeg-6b_4 |\__ jbigkit-1.6 |\__ jasper-1.900.1_6 | \__ jpeg-6b_4 |\__ pkg-config-0.22_1 |\__ xtrans-1.0.4 | \__ pkg-config-0.22_1 |\__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libICE-1.0.4,1 | |\__ pkg-config-0.22_1 | |\__ xtrans-1.0.4 | | \__ pkg-config-0.22_1 | \__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libSM-1.0.3,1 | |\__ pkg-config-0.22_1 | |\__ xproto-7.0.10_1 | | \__ pkg-config-0.22_1 | |\__ xtrans-1.0.4 | | \__ pkg-config-0.22_1 | \__ libICE-1.0.4,1 | |\__ pkg-config-0.22_1 | |\__ xtrans-1.0.4 | | \__ pkg-config-0.22_1 | \__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libXdmcp-1.0.2 | |\__ pkg-config-0.22_1 | \__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libXau-1.0.3_2 | |\__ pkg-config-0.22_1 | \__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libX11-1.1.3,1 | |\__ kbproto-1.0.3 | |\__ inputproto-1.4.2.1 | |\__ pkg-config-0.22_1 | |\__ xtrans-1.0.4 | | \__ pkg-config-0.22_1 | |\__ xproto-7.0.10_1 | | \__ pkg-config-0.22_1 | |\__ libXdmcp-1.0.2 | | |\__ pkg-config-0.22_1 | | \__ xproto-7.0.10_1 | | \__ pkg-config-0.22_1 | \__ libXau-1.0.3_2 | |\__ pkg-config-0.22_1 | \__ xproto-7.0.10_1 | \__ pkg-config-0.22_1 |\__ libXt-1.0.5 | |\__ kbproto-1.0.3 | |\__ inputproto-1.4.2.1 | |\__ pkg-config-0.22_1 | |\__ xproto-7.0.10_1 | | \__ pkg-config-0.22_1 | |\__ libXau-1.0.3_2 | | |\__ pkg-config-0.22_1
以下、GraphicsMagick-1.1.10だけで、延々と続く。。。たぶん、インストールされているパッケージすべてにたいして、この様なツリーを書いてくれる。らしい。。。(全部チェックなんて出来ないよ!)
まとめ
何にも解決してないのだが、無理やりまとめると、
- 誰からも依存されていないパッケージだけを知りたい!
ようするに、僕が知りたいことはこれなのだ。つまり、x11/xorg-7.3 は何か他のportsが依存しているので、インストールされている訳ではない。それは、まさしく僕が使いたいからインストールされている訳だ。他のパッケージの依存性からインストールされているパッケージはどうでもいいのだ(正しくインストールされている限りだけど)。
結局のところ僕が知りたいのは、僕が使いたいパッケージで、かつ他のパッケージからは依存性でインストールされないものだ。pkg_treeでいうと、他のpackageのツリーに現れないpackageだ。portsが依存性を正しく管理してくれているならば、それは、誰からも依存されていないpackageということになる。それを知りたい。ということが分った。これが分ってないことが問題だった。で、それを知る方法を調べようと思う。
そんなの自分で覚えておけよっていう、当然の反応があってしかるべきなのだが、だんだん使っていくと、そういうのを記憶で管理するのは難しいよねってお話でした。