FreeBSD Daily Topics

2011年12月22日 独立性の高い軽量ports管理ツール「portmaster」

この記事を読むのに必要な時間:およそ 1 分

ports

Independent ports tool "portmaster"

日本ではPorts Collectionをベースとしたアプリケーション管理にportupgrade (ports-mgmt/portupgrade)が使われることが多いと思います。Ports Collectionベースの管理ではportmaster(ports-mgmt/portmaster)もよく使われます。portmasterの特徴は次のとおりです。

  • ベースシステムの機能とシェルスクリプト(/bin/sh)で開発されており,ほかのライブラリやツールに依存せず独立性が高い
  • 開発が活発に継続されている

なんといってもシェルスクリプトで開発され依存が少ないのが最大のポイントです。portupgradeはRubyで開発されているので,どうしてもRubyをインストールする必要があります。調べてみるとわかると思いますが,portupgradeを使うためだけにrubyがインストールされている環境は少なくないと見られます。このため,ベースシステムにrubyをインストールしたくない場合などはportmasterを選択することになります。インストールされるサードパーティアプリやライブラリを最小限に抑えたい場合などに便利です。

portupgradeとportmasterはデフォルトの動作が少々異なります。portupgradeは自動的に処理を進めますが,portmasterはユーザにインタラクションを求める傾向があります。portupgradeのように自動的に処理を進めるにはオプションを指定する必要があります。もっともよく使われると思われる操作に対して,portupgradeとportmaster双方の操作方法を紹介します。

portsnap fetch updateなどを実施してports treeを更新したら,次のようにインストールされているアプリやライブラリをアップデートします。

portupgrade -a
portmaster -D --no-confirm -a

「-D」はダウンロードしたソースコードを削除しない指定,「--no-confirm」はユーザにインタラクションを求めない指定です。試しにこの2つのオプションを指定しないでportmasterを実行してみるとわかりますが,portmasterはユーザにy/nのアクションを求めるようになります。逆に,インタラクティブに作業したい場合にはこれらオプションを外せば良いということになります。

BATCH=yesを指定してコンフィグ画面を表示せずすべて自動的に処理させるというのもよくやるテクニックです(この場合オプションは/etc/make.confで事前に指定します)。portmasterはこの指定だけではダメで,「-G」も追加する必要があります。ページャがlessなどになっているとそこでインタラクションが発生するものが出てきますので,次のようにすればほぼ自動で処理を進めることができるようになります。

env BATCH=yes portupgrade -a
env BATCH=yes PAGER=cat portmaster -D -G --no-confirm -a

再インストールが必要なケース,依存するライブラリが変更されたため再構築が必要なケースなどではportupgradeでは「-f」を指定しますが,portmasterでは不要です。デフォルトの動作がアップデートが必要か否かに関係なくビルド作業をするようになっています。

portupgrade -f アプリケーション名
portmaster -D --no-confirm アプリケーション名

ライブラリとそのライブラリに依存するアプリケーションなどを再帰的にすべて再構築するには次のように操作します。なお,portmasterでは「-r」を指定すると必ず最初にインタラクションが発生します。

portupgrade -f -r ライブラリ名
portmaster -D --no-confirm -r ライブラリ名

portupgradeには不要なビルドディレクトリ「work」などを削除するためのportscleanといったコマンドが用意されていますが,portmasterにはその機能はありません。同様の作業をしたい場合,次のようにfind(1)コマンドを実行すれば良いでしょう。

find /usr/ports -type d -name work -depth 3 -exec rm -r '{}' ';'

portupgradeを使ってできる操作はだいたいportmasterでもできますので,状況に応じてどちらのツールを採用するか検討できると覚えておくと良いのではないかと思います。

コメント

コメントの記入