Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2011年2月27日 日曜日

依存されていない ports の探し方

Filed under: FreeBSD
タグ:, ,
時間:15時30分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

FreeBSD には、ports というパッケージ管理システムがあります。ソースコードのダウンロードし、パッチをあて、コンパイルし、インストールするという手順を簡略化してくれます。package というものもありますが、こちらはコンパイル済みになっています。

昔はコンパイルに時間がかかるために package を利用することが多かったのですが、スペックアップにより余裕ができたため ports に移行しました。必ずしも package で公開されているとは限らないのと、ports のほうが早く公開されるためというのが理由です。

さらに言えば、ports 管理が楽になる portupgrade があるおかげでもあります。このツールによって、毎晩更新のあった ports をメールで通知させることが出来ていますし、更新作業も非常に簡単になりました。

さて、前置きはここまで。

ports で困るのは、依存関係の把握が大変であるということ。数が少ないうちはいいのですが、依存する ports のインストールを繰り返しているうちにどんどん増えてしまいます。昨日の段階では300を超える ports がインストールされていました。

このほとんどは Xorg というGUI環境のための関係。FreeBSD のインストールのときに使うつもりでインストールしてあったのですが、結局使わないまま肥やしとなっていました。依存する ports の把握が出来ないために手をつけられなかったのです。

実は一昨日のメールで Xorg のアップグレードがあり、一気に膨大な ports の更新通知がありました。まとめて更新してしまうことも出来なくはないのですが、ちょうど週末ということもあってよい方法がないか情報収集をしてみることになったのです。

そして、非常にありがたい情報を発見しました。それがこのページ。

pkg_root は、uyota さんが作ったシェルスクリプトの名前。pkg_tree と AWK を使って、どこからも依存されていない ports をリストアップするというもの。スクリプトといっても短いものなので、ワンライナー的な使い方が出来ます。私は次のようにしました。

  1. pkg_tree | awk 'NF == 1{ prog[$1]++ } NF == 2{ prog[$2]-- } END{for(i in prog) if(prog[i] > 0) print i }'

AWK に詳しくないのですが、pkg_tree の実行結果を AWK で受け取り、依存する側の場合はカウントアップし、依存される側の場合はカウントダウン。最終的にカウント数が正のもの(依存されていないもの)だけを表示するという仕組みのようです。

実行結果から必要な ports を取り除くと、1回目は120個以上となりました。これを元に、地道に portupgrade 付属の pkg_deinstall でアンインストールをします。1度終わったら、再び依存されていない ports をリストアップ。依存していた ports が前回の作業でアンインストールされていれば、新たに依存されていない ports が増えます。

これを何度も繰り返し、最終的に必要な ports だけになれば終了です。最終的には100を切るまで減らすことが出来ました。如何に無駄が多かったかということですね。

最後にお決まりの一言。

この記事の内容は無保証です。自己責任で行ってください。

Comments (0)

HTML convert time: 0.081 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo