portsは非常に便利なシステムですが、アプリケーションのアップグレードに関しては弱い部分があります。
それを補ってくれるのがportupgradeです。
portupgradeはportsを管理することが可能で、どのアプリケーションが新しくなっているかを調べたりアプリケーションをアップグレードできます。
また、portsのインストールをより簡単に行うことが可能です。
portupgradeのインストールはportsから行います。
> cd /usr/ports/sysutils/portupgrade
> su
# make install clean
これでインストールは完了です。
このときOpenSSLのバージョンがFreeBSDのベースシステムとportsで異なる場合に(多くはportsの方が新しい)「OpenSSLをアップグレードするかどちらのOpenSSLを使うか明示してください」というエラーメッセージが表示されます。
この場合はシステムを更新(最新のreleaseに更新する)するか、portsを選択(make WITH_OPENSSL_PORT=yes install clean)をしてください。
portupgradeをインストールすることによって、portsdb、pkgdb、portinstall、portupgrade、pkg_deinstall、portversion、portsclean、portcvsweb が使用可能になります。
詳細は以下を参照してもらえば良いですが、具体的な使い方としてはcvsupでportsを最新にした後にportsdb、その後portversionで新しくなっているpackageをリストアップしportupgradeでアップグレード、最後にportcleanで掃除するといった流れです。
# cvsup -g /etc/ports-supfile
# portsdb -Uu
# portversion -v
とし、アップグレードしたいものを
# portupgrade -r hogehoge
とすれば良いでしょう。
インストールが完了しコマンドを使えるようにしたら、最初にportsdbを実行します。
portsdbはportupgradeで使うportsのINDEXファイルを更新したり、そのINDEXを元にバイナリデータベースを作成、更新するツールです。
# portsdb -Uu
実行すると-UでINDEXを更新、-uでINDEX.dbとINDEX.rboというデータベースを更新します。
初回のportsdbはかなり時間がかかりますので、お茶の用意をお勧めします。
portupgradeのコマンドはportsdbで作成した情報を元に行われますので、cvsupでportsを最新にしたときに portsdb -Uu も実行するようにしてください。
portinstallはportsをより楽にインストールするためのツールです。
通常portsからアプリケーションをインストールする際には、
# cd /usr/ports/japanese/ne
# make install clean
などとする必要がありますが、portinstallはこの作業を
# portinstall japanese/ne
あるいは
# portinstall ja-ne
と簡略化することが可能です。
またpackageが手元に存在する場合は、packageが/usr/ports/packages/Allに置いてあれば
# portinstall -P japanese/ne
のように-Pオプションを付けることによってpackageが存在すればpackageから、無ければportsからインストールしてくれます。
また-PPオプションを指定すると、packageが見つからない場合に何もしないようになります。
portinstallの詳細を表示させるには-v、ログファイルに記録するには-Lオプションを使います。
# portinstall -vL /var/log/ports japanese/ne
とすると詳細を表示し、/var/log/portsに記録されます。
pkg_deinstallはアプリケーションを削除するためのツールです。
似たようなコマンドにインストール済みのpackageを削除するpkg_deleteがありますが、pkg_deinstallはこれの高機能版でワイルドカード指定や依存関係を解決してくれるといった機能をもっています。
目的のpackageを削除するには
# pkg_deinstall ja-ne
のようにします。
また、削除したいpackageに依存するものも全て削除したい場合は
# pkg_deinstall -r ja-Canna
portupgradeはportsをアップグレードするためのツールです。
対象のports単体をアップグレードすることも可能ですが、対象のportsに依存しているports、対象のportsが依存しているportsもオプションを指定することによってアップグレードすることが可能です。
また同じアプリケーションで違うバージョンが2つインストールされていたりといった不整合も修正してくれます。
portupgradeの一番単純な使い方は、
# portupgrade jvim3
のようにアップグレードしたいportsを指定することです。
このとき、-mオプションを指定するとmake時のオプションを指定することができます。
# portupgrade jvim3 -m '-DWITHOUT_X11'
portupgradeはports間の依存関係も解決してアップグレードできます。
例えばXFree86に依存している全てのpackageをアップグレードしたい場合
# portupgrade -r XFree86
のように-rオプションを指定します。
逆にXFree86が依存している全てのpackageをアップグレードしたい場合は
# portupgrade -R XFree86
と-Rオプションを指定します。
アップグレードを行うときに自動で行わず、実施前に問い合わせるようにするには
# portupgrade -i XFree86
のように-iオプションを指定します。
また、-pオプションを指定するとアップグレードと同時にpackageも作成してくれます。
バージョンが同じでも強制的にインストールし直すことも可能です。
# portupgrade -f XFree86
上記のように-fオプションを指定することによってバージョンが同じでもビルドし直されます。
アップグレードさせるときに、指定したpackageをアップグレード対象から外すことも可能です。
その場合-xオプションを指定し、対象から外したいpackageを指定します。
# portupgrade -rx XFree86 kterm
例ではXFree86に依存する全てのpackageをアップグレードするが、ktermはアップグレード対象から外すという意味になります。
全てのpackageを一気にアップグレードすることも可能です。
# portupgrade -a
portupgradeはportinstallと同様に、ログ(-L)や詳細表示(-v)も可能です。
# portupgrade -vL /var/log/ports XFree86
その他にもpackageの置き換えや、アップグレードに必要なファイルのみをダウンロードすると言った様々なオプションがあります。詳しくはマニュアルを参照してください。
portversionはpkg_versionの高機能版です。
portversionはportsdbで作成されたデータベースを元にアップグレード可能なpackageをリストアップします。
# portversion -v
とすると、packageごとに「=」「<」「>」のようにインストールしてあるpackageと最新のportsのバージョンを比べてくれます。
現在インストールされているpackageを基準にすると、「=」が同じ、「<」が古い(アップグレード対象)、「>」が新しい(通常は出ない)のような感じです。
これだけだと高速な以外はpkg_versionと大差ないのですが、オプションに-cを指定することによって古いバージョンをリストアップし、その結果をportupgradeすることが可能です。
# portversion -v
portcleanはportsを使ってインストールしたときに消し忘れたゴミを削除するためのツールです。
# portclean -C
を実行すると、portsのmake時に使われる作業ディレクトリ(/usr/ports/*/*/work/)を全て削除してくれます。
また古いバージョンのportsのソースコードなどを消したい時は、
# portclean -D
としてやると、/usr/ports/distfiles/の中で最新のportsでは使われないファイルを全て削除します。
また/usr/ports/packages/にある旧バージョンのpackageを削除したい場合は
# portclean -P
を実行します。