FreeBSD 9.3 RELEASE - OSインストール - ports の環境を整える

クラウディア 
 「FreeBSD」でアプリケーションプログラムをインストールするには、「ports」を使用します。  「Redhat」系の「Linux」を知っている人であれば、「rpm」に相当するものだと思ってよいかと思います。  「ports」は刻々かわりますので、インストール時の最新の「ports」を入手し、必要に応じて更新することになります。  2021年4月以降、「ports」のリポジトリが「Subversion」から「Git」へ移行しました。  それに伴い、「ports」を最新に保つ方法も変わりましたので、詳細は「「メンテナンス・トラブルシュート - pkg・ports - Subversion から Git へ」」をご参照ください。
1. portsnap
2. portupgrade
3. package データベースの更新
4. ports の状態を参照する
5. portsのアップグレード

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 を同時に更新します。
earthcar(アースカー)