超初心者向け、ports の作り方

2005.10.07 Takaya Sakusabe


(0) ports の概要

FreeBSD オリジナルのアプリケーション管理システムが ports です。ports は、オープンに配布されている各種のソフトウェアについて、ソースのダウンロードからビルド、インストール。そしてバージョン管理を行うものです。その基盤は /usr/ports ディレクトリの ports collection です。ここには、ソフトウェア毎のディレクトリが作られ、インストールの為の Makefile や、ソースをどこからダウンロードするか等が書かれたファイルが置かれています。ports システムでは、ソフトのソース自体は直接は管理されていません。だって、全てのソースを保持するにはそれだけで数ギガバイトが必要になってしまいます。

ただ、ports を使ってソースからソフトウェアをインストールをするのが面倒な場合の為に、packages というシステムもあります。これは pkg_ で始まる一連のコマンドを操作し、コンパイル済みの tar.gz (tar.bz2) からインストールします。


(1) cvsup のインストールと実行

ports ディレクトリを最新にたもつ必要があります。そのためのソフトウェアをインストールします。

それが cvsup というコマンドです。cvsup コマンドはデフォルトではインストールされていません。cvsup を ports からビルドするのは時間がかかりますい(依存しているソフトが多い)。なので、これは package システムをつかってインストールします。

- ftp を使ってダウンロードします。

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

とうちます。


(2) ビルド環境

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

として、環境変数を設定します。


(3) ビルド

ports システムでのソフトウェアのインストールは簡単で、ports の下のディレクトリ(実際にはカテゴリ分けされているので、直下ではなく、もう一つ下)に cd して、

- 新規インストールであれば、

host# make install

- 更新(バージョンアップであれば)

host# make && make deinstall && make install

と打つだけです。こうすると、依存するソフトウェアを探して自動的にインストールが完了します。

私が新規のマシンを組み立てたとに使っている ports の一覧を添付しました。これは、コマンドにしてあるので、コピペして実行すればいいと思います。

なお、この一覧のなかの順番には意味があります。なぜなら、依存関係で自動的にビルドされる場合、WITH_ のオプションが設定されません。

これを全部ビルドするには、数十時間かかります。


(4) gcc40

gcc の最新安定版である、GCC 4.0 (lang/gcc40) を使ってみるのもいいと思います。出力されるコードの質は大部違います。ただ、構文チェックが厳しくなっているので、コンパイルが通らないものもあります。ただ、単に構文上だけの問題なので、ソースをチョコっと直せば通ります。

この場合ですが、gcc40 をビルドするなら、一番最初にビルドしないといみがありません。

gcc40 をビルドする場合、CFLAGS は、

host# setenv CFLAGS "-O2 -fPIC"

としてください。

gcc40 を使ってビルドする際には、be.sh の一部のコメントを外してください。


good luck!