FreeBSDでアプリケーションをインストールする方法はいくつかありますが、主に使われているのがports、packageです。
portsはアプリケーションのインストールの際に、アプリケーションのソースコードを取得しFreeBSD用にパッチを当て、それをコンパイルしてインストールするとった一連の作業を自動的に行ってくれるシステムで、portsによって作られたアプリケーションのバイナリファイルをpackageと言います。
portsは/usr/portsにあるPorts Collectionとして用意されており、その中にある全てのアプリケーションがインストール可能となっています。(一部メンテナンスされておらず、動かないものもありますが…)
portsは日々更新されているものなので、最新であればあるほど新しいアプリケーションをインストールできたり、同じバージョンのアプリケーションでも不具合が少ない状態でインストールできます。
Portsを最新にするにはcvsupというソフトを用います。
FreeBSDをインストールしたら最初にcvsupをインストールし、portsを最新にしましょう。
FreeBSDでportsを使う際にはコンパイラを使ってソースコードをコンパイルすることになります。
以下の設定は必ず必要なものではないのですが、各PCで適切な設定をすることでコンパイル時間を高速化することが可能です。
portsを使ってアプリケーションをインストールする前に設定を行っておくと良いでしょう。
コンパイルする際に参照される設定ファイルは/etc/make.confで、これにPCのCPUやコンパイルオプションを明示的に指定してコンパイラを最適化しましょう。
make.confに設定できる項目は /usr/src/share/examples/etc/make.conf に書いてあり、項目もたくさんありますが、ここではCPUTYPEとコンパイルオプションである CFLAGS、COPTFLAGS、NOPROFILE を設定しましょう。
一般的ですと
> su
# vi /etc/make.conf
CPUTYPE=i686
CFLAGS= -O -pipe
COPTFLAGS= -O -pipe
NOPROFILE=true
のように記述します。
-0はコンパイラの最適化オプションでありコンパイラが高速化を試みます。
-pipeはコンパイル時のデータの受け渡しにテンポラリではなくパイプを利用するのでファイルを作らない分高速になりますが、代償としてメモリを使います。
なお、CPUTYPEについては /var/run/dmesg.boot を参照すると良いでしょう。
make.confのサンプルファイルには以下のように書いてあります。
Intel x86 architecture:
(AMD CPUs) athlon-mp athlon-xp athlon-4 athlon-tbird athlon k6-3 k6-2 k6 k5
(Intel CPUs) p4 p3 p2 i686 i586/mmx i586 i486 i386
Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
Intel ia64 architecture: itanium
例えばPentium4であればp4、AthlonXPであればathlon-xpといった形になります。
わたしはPnetiumMを使っていますがPentiumMは未サポートですので一番近いp3を選択しています。
自分のCPUがよく分からない場合はi686を選択すれば良いでしょう。
cvsupはportsあるいはpackageからインストールします。
初心者にはpackageからインストールするのが分かりやすいと思いますが、一応両方説明します。
なお、私はcvsupのみはpackageでインストールし、それ以外は全てportsからインストールするようにしています。
これはcvsupをコンパイルする際に依存するportsが最新でないかもしれないからです。
packageからインストールする場合はrootになってsysinstall menuからインストールします。
> su
# /stand/sysinstall
packageをインストールするには『Configure』-『Packages』-『FTP』を選択し、packageを取りにいくサーバーを選択します。なるべく近くて空いてるサーバーを選ぶのがベストですが、日本のサーバーを選べばそこそこ速いのではないかと思います。
サーバーを選択したら「ネットワークの設定はできているか?」とメッセージが表示されるので、Yesを選択しサーバーに接続します。
サーバーに接続するとpackageのリストを取得します。少し時間がかかるかもしれませんが終わるとpackageの一覧が表示されます。
一覧はカテゴリごとに分かれています。目的のcvsupはnetの中にありますのでnetを選択してください。
cvsupにはコンソール専用版であるcvsup-without-guiと、コンソールではCUIでX-Window上でGUIで動作するcvsupがあります。
cvsupはコンソールのみで十分ですので、cvsup-without-gui-16.1h(バージョンは異なる場合があります)をスペースキーで選択しOKを選択します。するとカテゴリの画面に戻りますので左右のカーソルキーを叩きInstallを選択します。
「cvsup-without-gui-16.1をインストールしますか?」とメッセージが出ますので、OKを押してインストールを開始してください。
インストールが終わるとsysinstall menuに戻りますのでsysinstallを終了させコンソールに戻ってください。
packageによるインストールはこれで終了です。
portsでインストールする場合は、cvsup-without-guiは/usr/ports/net/cvsup-without-guiにあります。
インストールするには、そのディレクトリに移動しrootになってmake install cleanコマンドを叩きます。
> cd /usr/ports/net/cvsup-without-gui
> su
# make install clean
これでpotsによるインストールは完了です。
cvsupのインストールは終わりましたが、インストールしただけではアプリケーションがシェルに認識されませんので、コマンドが通りません。
rehashコマンドを使ってコマンドが通るようにしてください。
# rehash
cvsupコマンドが使えるかどうかは、コンソール上でcvsupを実行して確かめることができます。
# cvsup
オプションの一覧が出てきたらcvsupが実行されている証拠です。
cvsupのインストールが終わったら、cvsupの設定ファイルであるsupfileを作成します。
supfileは/usr/share/examples/cvsupの中に基本となるファイルがありまので、これを適当な所へコピーして中身を書き換えます。
# cd /usr/share/examples/cvsup
# ls
としてやると、*-supfileという名前のファイルがいくつか現れると思います。
今回はPortsを同期させたいので ports-supfile を使います。
直接ファイルを編集すると、後で困る場合があったり、新しいファイルによって上書きされてしまう場合があるので、適当な場所へコピーし、編集することにします。
また、例では編集するためのエディタとしてviを使っています。viの使い方については別の記事を参考にしてください。
# cp /usr/share/examples/cvsup/ports-supfile /etc (この場合は/etcにコピー)
# chmod 644 /etc/ports-supfile (コピーしたports-supfileは読み取り専用なので解除)
# vi /etc/ports-supfile
portsには様々なカテゴリがあり、中には中国向けや韓国向けなど日本人には明らかに必要ないカテゴリもあります。
cvsupでは必要なカテゴリのみを同期することも可能ですが、portsはカテゴリが増えることもありますのでports-supfileでは全てを取得する設定にしておき、取得を拒否したいものをファイル(/usr/sup/refuse)に記述するのが安全です。
refuseについては後で述べますので、まずはports-supfileを設定します。
まず、 *default host=CHANGE_THIS.FreeBSD.org の部分を、cvsupサーバー一覧から、自分に最も近いサーバーに書き換えます。(例:*default host=cvsup.jp.freebsd.org など)
ここに書いてあるサーバーから、Portsの最新版を同期させることになります。
次に取得したいカテゴリを選択していくのですが、前述の通り全てのカテゴリを取得する設定にしたいので、残りはデフォルトの設定でかまいません。
これらの設定を完了したら、保存してviを終了してください。
なお、取得したいカテゴリのみを選択したい場合は ports-all(全てのports) と書いてある所を #ports-all のようにコメントアウトします。
#ports-all
次に、各カテゴリの頭にあるコメントアウトを外したり、残したりしていきます。
ports-base
ports-archivers
#ports-astro
#ports-audio
私の場合はports-supfileを以下のようにしました。変更したのはサーバーの部分のみです。
特殊なことをしない限りこれで問題ないと思います。
*default host=cvsup3.jp.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
ports-all
以下全てコメントアウト
ports-supfileが設定できたら、早速portsを更新したいと思います。
私の場合はports-supfileを/etcに置いたので、以下のようになります。
# cvsup -g -L2 /etc/ports-supfile
これを実行すると、サーバーへ接続してPortsの更新が開始されます。
初回は結構時間がかかると思いますが、2回目以降は差分を取るだけなのでそんなにかからないと思います。
cvsupを定期的に実行してやることによって、Portsを常に最新に保つことができます。
なお、cvsupを行うと/usr/portsに最新のportsが同期されます。
cvsupで詳細なログが必要ない場合はL2オプションを外し
# cvsup -g /etc/ports-supfile
としてください。
上記設定ですと、全てのportsをサーバーから同期してしまいます。
前述したようにportsのカテゴリの中には特定言語(中国語など)向けのカテゴリもあり、不要なカテゴリが存在します。
そのような場合はrefuseというファイルを作って /usr/sup/refuse に置いてあげます。
refuseファイルの中には同期したくないファイルやディレクトリを記述してください。
例えばchineseのportsカテゴリを取得したくない場合は
# vi /usr/sup/refuse
ports/chinese
のように記述して保存します。
refuseに記述してあれば、どんな設定でcvsupしても記述したファイル、ディレクトリは同期しなくなります。
私の場合は日本以外の他言語向けのportsのみを同意拒否しています。
ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/hungarian
ports/korean
ports/polish
ports/portuguese
ports/russian
ports/ukrainian
ports/vietnamese