1. portsnap
portsnap コマンドを使用して、portsの状態を最新にします。
以前のバージョンでは、portsnap 自体を ports でインストールする必要がありましたが、FreeBSD 8.0-RELEASE以降、デフォルトでインストールされています。
portsnap のコンフィグレーションファイルは /etc/portsnap.conf です。これを編集します。
# REFUSE arabic chinese french german hebrew hungarian japanese
# REFUSE korean polish portuguese russian ukrainian vietnamese
ports の更新をかけないグループを指定するもので、日本語以外の他言語を使用しないのであれば、上記より japanese を削除して先頭のコメント定義である # を削除します。
fetchオプションで最新のスナップショットを取得します。
> portsnap fetch
fetch が終了したら、システムインストール後はじめての portsnap の場合は
> portsnap extract
というオプションを使用します。
これ以降は本来、一度 extract を行った後は fetch の後は
> portsnap update
というオプションを使用できるのですが、いったん ports をメンテナンスするための ports(portupgrade) をインストールします。
2. portupgrade
portupgrade を make する前に make のコンフィグレーションファイルを /usr/share/examples/etc/make.conf から /etc/make.conf へコピーして編集します。
WITHOUT_X11=yes ↓ここから
WITHOUT_GUI=yes
NO_X=true
OPTIONS_UNSET=X11 ↑ここまでは X11 を使用しない設定です。使用する場合は記述しません
WITH_MBSTRING=yes ← PHP をインストールする際、日本語を使う場合は必須です
PHP をインストールしないのであれば、不要です
NO_WARNING_PKG_INSTALL_EOL=yes ← 注1
WITH_PKGNG=yes ← 2014年9月1日以降は必須のオプションとなります
注1
2014年9月1日に旧式の package データベースのサポートが終わるという WARNING が ports のインストールのたびに出力されるので、その WARNING メッセージを抑止するための設定です。2014年9月1日以降はこのオプションが不要になるのか、まだ当分それ以降も必要なのかは現在、不明です。
/etc/make.conf を編集したら、portupgrade をインストールします。
/usr/ports/ports-mgmt/portupgrade
インストールが終わったら、rehash して、プログラムを有効化し、いったん fetch して extract した ports を再度、fetch、extrace します。
> rehash
> portsnap fetch
> portsnap extract
ここまで終わっていれば、これ以降、ports の更新は
> portsnap fetch
> portsnap update
となります。
packege データベースの更新は
> portsdb -Fu
で行います。
3. package データベースの更新
20014年9月1日以降、古い形式の package データベースは使用できなくなるそうですので、package データベースを更新します。
まず、現状を見るには
> pkg info
はじめてこのコマンドを使用した場合、パッケージ管理ツールのインストールを求められます。(逆にインストールを求められない場合は、パッケージ管理ツールがインストール済であり、その管理によって動作しているということになりますので、この節の以下の手順は不要です)
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y ← ここで [y] を入力すればインストールが始まります
Bootstrapping pkg please wait
_http._tcp.pkg.FreeBSD.org
Installing pkg-1.2.7_3... done
If you are upgrading from the old package format, first run:
# pkg2ng
pkg: PACKAGESITE in pkg.conf is deprecated. Please create a repository configuration file
pkg-1.2.7_3 Package manager
これ以前に、インストール済の ports のパッケージデータベースを更新します。
> pkg2ng
pkg: PACKAGESITE in pkg.conf is deprecated. Please create a repository configuration file
Converting packages from /var/db/pkg
Converting dialog4ports-0.1.5_2...
Installing dialog4ports-0.1.5_2... done
以下、データベース更新中のメッセージが表示されます
この pkg2ng は、元に戻せない操作になりますので、作業の前に一度、データベースのバックアップをとっておいたほうがいいでしょう。
また、この作業はシステムで1度きりの作業になります。
ここで気になるのが
pkg: PACKAGESITE in pkg.conf is deprecated. Please create a repository configuration file
という出力。/usr/local/etc/pkg.conf というファイルが自動で作成されているのですが、これが既に古いので「使えませんよ」というメッセージだそうで、よい記述に書き換えたいのですが、とりあえずは、コメントアウトしておきます。(pkg.conf の適切な記述法はいずれ記述します)
4. ports の状態を参照する
データベースの状態を参照するには
> portversion -v
とします。
結果として以下のような表示になります。(あくまでも一例です)
[Rebuilding the pkgdb <format:bdb_btree> in /var/db/pkg ... - 17 packages found (-0 +17) ................. done]
autoconf-2.68 = up-to-date with port
autoconf-wrapper-20101119 = up-to-date with port
automake-1.11.1 = up-to-date with port
automake-wrapper-20101119 = up-to-date with port
db41-4.1.25_4 = up-to-date with port
gettext-0.18.1.1 = up-to-date with port
gmake-3.81_4 < needs updating (port has 3.82)
help2man-1.38.4 < needs updating (port has 1.40.4)
ja-freebsd-doc-20110110 < needs updating (port has 20110828)
libiconv-1.13.1_1 = up-to-date with port
libtool-2.2.10 < needs updating (port has 2.4)
m4-1.4.15,1 < needs updating (port has 1.4.16,1)
p5-Locale-gettext-1.05_3 = up-to-date with port
perl-5.10.1_3 < needs updating (port has 5.10.1_4)
portupgrade-2.4.8_1,2 < needs updating (port has 2.4.9.3,2)
ruby-1.8.7.302,1 < needs updating (port has 1.8.7.352_2,1)
ruby18-bdb-0.6.5_1 < needs updating (port has 0.6.6)
「=」マークがついていれば、最新版がインストールされている
「<」マークがついていれば、ports に新しい版が存在する(更新すべきかも)
ということになります。
ここまでの一連の動作を、crontab に記述して定期的に ports を更新する方法もありますが、バックグラウンドでやってしまうと見落とすことがありますので、例えば適当なディレクトリに下記のような Makefile を作成しておいて、明示的に make する方法もあります。
ports :
portsnap fetch
portsnap update
portsdb -Fu
portversion -v
5. ports のアップグレード
portversion で新しい版が出ている ports を更新するには、
portupgrade "ports名"
というコマンドを使用します。
-R というオプションをつければ対象の ports が依存している ports を同時に更新します。
-r というオプションをつければ対象の ports に依存している ports を同時に更新します。