FreeBSD オリジナルのアプリケーション管理システムが ports です。ports は、オープンに配布されている各種のソフトウェアについて、ソースのダウンロードからビルド、インストール。そしてバージョン管理を行うものです。その基盤は /usr/ports
ディレクトリの ports collection です。ここには、ソフトウェア毎のディレクトリが作られ、インストールの為の Makefile
や、ソースをどこからダウンロードするか等が書かれたファイルが置かれています。ports システムでは、ソフトのソース自体は直接は管理されていません。だって、全てのソースを保持するにはそれだけで数ギガバイトが必要になってしまいます。
ただ、ports を使ってソースからソフトウェアをインストールをするのが面倒な場合の為に、packages というシステムもあります。これは pkg_
で始まる一連のコマンドを操作し、コンパイル済みの tar.gz (tar.bz2)
からインストールします。
ports ディレクトリを最新にたもつ必要があります。そのためのソフトウェアをインストールします。
それが cvsup
というコマンドです。cvsup
コマンドはデフォルトではインストールされていません。cvsup
を ports からビルドするのは時間がかかりますい(依存しているソフトが多い)。なので、これは package システムをつかってインストールします。
host# ftp -a ftp.jp.freebsd.org ... ftp> cd /pub/FreeBSD/ports/amd64/packages-5.4-release/net ... ftp> get cvsup-without-gui-16.1h_2.tbz ...
host# pkg_add cvsup-without-gui-16.1h_2.tbz
tcsh (csh)
の場合、実行可能なファイルのパスをキャッシュしているので、インストール直後の実行ファイルはキャッシュされておらず、such no file or directory
をくらいます。なので、キャッシュ(hash)を更新します。
host# rehash
/usr/share/examples/cvsup/ports-supfile
をホーム(多分 /root
の)にコピーし、
*default host=CHANGE_THIS.FreeBSD.org
の行を
*default host=cvsup.jp.freebsd.org
に変更します。
host# cvsup -g -L 2 ports-supfile
最初の実行は結構時間がかかるはずです。何しろ、FreeBSD 5.4 がリリースされてから既に半年が経過しましたから
オープンソースソフトウェアは凄い勢いで開発が進んでいます。ですので、頻繁にバージョンをチェックする必要があります。
現在、インストールされているソフトと、ports に登録されている情報の比較は
host# pkg_version -l '<' -v
でわかります。ports 自体をアップデートしないと実際には意味がないので、普段は
host# cvsup -g -L 2 ports-supfile && pkg_version -l '<' -v
とうちます。
be.sh
といいうビルド環境設定スクリプトを作ってください。/root に置くのがいいでしょう。
#- setenv CC gcc40 #- setenv CXX g++40 #- setenv USE_GCC '4.0' setenv CFLAGS '-O2 -msse -msse2' #- setenv HTTP_PROXY 'http://proxy:8080' #- setenv FTP_PROXY 'http://proxy:8080' setenv WRKDIRPREFIX '/var/ports-work'
これは、私が普段使っているものです。皆さんとは環境が違うので、一部をコメント・アウトしてあります。
私は、アプリケーションを最適化してビルドしたいので、コンパイラはデフォルトで入っている gcc (3.4)
ではなく ports の lang/gcc40
を使っています。
私のメイン機はプライベートネットワークに設置してあるので、proxy の設定が入っています。
最後の(コメントアウトしてない)行ですが、これは、ビルド終了後のファイルの掃除を簡単にするための工夫です。これはやってください。対応するディレクトリを作っておいてください。
host# mkdir /var/ports-work
こうしておくと、ソフトウェアのビルド終了後、make clean
で消すより速く掃除ができます。
host# rm -r /var/ports-work/usr
話を戻しますが、ports をビルドする前には、
host# source /root/be.sh
として、環境変数を設定します。
ports システムでのソフトウェアのインストールは簡単で、ports の下のディレクトリ(実際にはカテゴリ分けされているので、直下ではなく、もう一つ下)に cd
して、
host# make install
host# make && make deinstall && make install
と打つだけです。こうすると、依存するソフトウェアを探して自動的にインストールが完了します。
私が新規のマシンを組み立てたとに使っている ports の一覧を添付しました。これは、コマンドにしてあるので、コピペして実行すればいいと思います。
なお、この一覧のなかの順番には意味があります。なぜなら、依存関係で自動的にビルドされる場合、WITH_
のオプションが設定されません。
これを全部ビルドするには、数十時間かかります。
gcc の最新安定版である、GCC 4.0 (lang/gcc40
) を使ってみるのもいいと思います。出力されるコードの質は大部違います。ただ、構文チェックが厳しくなっているので、コンパイルが通らないものもあります。ただ、単に構文上だけの問題なので、ソースをチョコっと直せば通ります。
この場合ですが、gcc40 をビルドするなら、一番最初にビルドしないといみがありません。
gcc40 をビルドする場合、CFLAGS は、
host# setenv CFLAGS "-O2 -fPIC"
としてください。
gcc40 を使ってビルドする際には、be.sh の一部のコメントを外してください。