A.なるほど, あなたはきっとコンピュータの背面についている シリアルポートのことだと思ってしまったのでしょう. あるバージョンの Unixから別のバージョンの Unix へとプログラムを 移殖することを `porting' というのですが, ここで我たちは `porting' の結果 という意味で `port' を使っています. (コンピュータに関わる人々の悪しき習慣として, ひとつの同じ言葉を複数の まったく違う意味として使うことがあるのです.)
A. そのとおり. 通常は packages が最も手早くて簡単な方法です.
A. いくつかの理由があります:-
A. パッチとは, あるバージョンから他のバージョンへどのように変更するかを 示す, (通常は) 小さなファイルです. 「23 行目を削除」, 「468 行目の後に これらの 2 行を追加」, または「197 行目をこのように変更」というような 内容を含んでいます. これは, `diff' という名前のプログラムで生成されます.
A. .tar または .tar.gz という拡張子を持つファイルです. (.tar.Z のようなバリエーションも ありますし, DOS のファイルシステム用に .tgz と短縮される場合もあります.)
これは基本的に, 一つのファイルに固めた (.tar) ディレクトリツリーです. 圧縮されている (.gz) 場合もあります. これは元々 Tape ARchives (訳注: テープアーカイブ) (このため `tar' という名前なのです) で使われていたものなのですが, インターネット上でプログラムのソースコードを配布するために 広く使われている方法です.
これらのファイルの中身を見たり, 展開したりすることもできます. FreeBSD の基本システムに付属する Unix 標準の tar コマンドを使ってみると 次のようになります:-
tar tvzf foobar.tar.gz # foobar.tar.gz の内容を見る tar xzvf foobar.tar.gz # カレントディレクトリに内容を展開する tar tvf foobar.tar # foobar.tar の内容を見る tar xvf foobar.tar # カレントディレクトリに内容を展開する
A. これは, チェックしたいファイル中のすべてのデータを加えて生成した 数値です. 何か文字が書き換わっていたら, チェックサムが一致しなくなります. そのため, 単純な比較だけで違いを見つけることができるのです. (実際には, 文字の位置が入れ替わるなどの, 単純な加算ではわからない問題も 見つけることができる複雑な方法で計算されています.)
# make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.なぜ cku190.tar.gz が見つからないのでしょうか? 不良品の CD-ROM を買ってしまったのでしょうか?
A. Kermit の権利を持つチームは, 私たちの CDROM に kermit の tarball を 入れることを許可しませんでした. 申し分けありませんが, 手動でファイルを 入手してください. このようなエラーメッセージが出たのは, あなたがそのときインターネットに 接続していなかったためです. あらかじめ上記のサイトのいずれかからファイルを ダウンロードしておけば, プロセスを再開することができます. (ダウンロードの際には, あなたに最も近いサイトを選ぶようにしてください. そうすれば, 時間とインターネットの帯域の節約になります)
A. ports のしくみは /usr/ports/distfiles から tarball を探します. しかし, これは read-only の CD-ROM へのシンボリックリンクなので, ここにファイルを置くことはできません. 次のようにすれば, 他の場所を探すよう ports に指示することができます.
DISTDIR=/where/you/put/it make install
A. PORTSDIR 変数と PREFIX 変数を変更することで, 違うディレクトリを 使用することができます. 例えば,
make PORTSDIR=/u/people/guests/wurzburger/ports install
とすると, ports は /u/people/guests/wurzburger/ports でコンパイルされ, すべて /usr/local 以下にインストールされます.
make PREFIX=/u/people/guests/wurzburger/local install
この場合, コンパイルは /usr/ports でおこない, /u/people/guests/wurzburger/local にインストールします. もちろん, 以下のように両者を組み合わせることも可能です.
make PORTSDIR=.../ports PREFIX=.../local install
(省略せずに記述したら, このページに収めるには長すぎるのですが, 考え方は理解していただけたと思います)
もし ports をインストールするたびに, これらを毎回タイプするのが 気に入らないのであれば, (正直に言って, 誰もそう思わないでしょう) これらを環境変数にセットしてしまうという手があります.
A. ports コレクション全体の tarball を持ってくるには, 次のようにしてください.
# cd /usr/ports # make fetch
ports の下のディレクトリひとつの tarball を持ってくるには, 次のように してください.
# cd /usr/ports/directory # make fetch
ports をひとつだけ持ってくる方法は, きっと既にご存知だと思います.
A. もちろんあります. 例えば ftp.FreeBSD.ORG が MASTER_SITES に書かれている サイトより近いとしたら, 以下のようにしてください.
# cd /usr/ports/directory # make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/ fetch
A. 'make fetch-list' とすると, ports に必要なファイルの一覧を表示できます.
A. 'make extract' を実行すると, ファイル転送とソースコードの展開まで おこなったところで停止します.
A. あります. 'make patch' があなたのお望みのものです. おそらく PATCH_DEBUG オプションも同様に お役に立つことでしょう. ところで, あなたの努力に感謝いたします!!
A. 本当です. gcc の バージョン 2.6.3 (FreeBSDの 2.1.0 と 2.1.5 に付属している バージョン) では, -O2 オプションを -fno-strength-reduce オプションなしで 使うと, バグのあるコードを出力します (ほとんどの ports は -O2 オプションを 使いません). コンバイラオプションは次のように定義 すべき です.
make CFLAGS='-O2 -fno-strength-reduce' install
これを /etc/make.conf に書いておくこともできますが, 残念なことに すべての ports がこの指定を尊重してくれる 訳ではありません. もっとも確実なのは 'make configure' を実行し, ソースディレクトリの Makefile を見て手で修整することですが, ソースが 多くのサブディレクトリにわかれていて, 各々に Makefile がある場合は 大変な仕事になります.
A. /usr/ports の中にある INDEX ファイルを見てみましょう. あるキーワードで ports コレクションを検索したければ, それも可能です. たとえば, 以下のようにすればプログラミング言語 LISP に関連した ports を 見つけることができます:
cd /usr/ports make search key=lisp
A. 'foo' ports が, 'bar' ports の提供する何らかの機能を必要としているからです. 例えば 'foo' が画像を使うとすると, 'bar' は画像処理に必要な ライブラリを持っている, などです. または, 'bar' は 'foo' をコンパイルするのに必要なツールなのかもしれません.
A. 大丈夫, 次のようにしてください.
pkg_delete grizzle-6.5
A. そんなことはありません. バージョン番号は次のようにすればわかります.
pkg_info -a | grep grizzle
そうすると次のように表示されます:-
Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
A. はい. インストールが首尾よく終わり, もうソースコードが必要でないと思うなら, それらを残しておく理由はないでしょう. 一番よい方法は, 次の通りです.
# cd /usr/ports # make clean
これは, すべての ports のサブディレクトリを調べ, 各 ports のスケルトン以外の削除をおこないます.
A. はい. それを使った作業が終わったのであれば, 削除してしまっても大丈夫です.
A. 次のようにしてください.
# cd /usr/ports # make install
A. これは ports の中には私たちの決められないこと (例えば, あなたが A4 の 用紙に印刷したいのか, US レターサイズの用紙に印刷したいのかなど) について 質問してくるものがあるからです. それらの質問には手動で答える必要があります.
A. では, あなたが寝に / 仕事に / 公園にいく前に以下を実行してください:-
# cd /usr/ports # make -DBATCH install
これでユーザの入力を要求しないすべての ports をインストールします. そして, 戻ってきてから, 次のように実行してください.
# cd /usr/ports # make -DIS_INTERACTIVE install
そして, 残りの作業を実行してください.
A. もちろんあります. 変更点をパッチにする方法は知っていますよね:-
# cd /usr/ports/somewhere/frobble # make extract # cd work/frobble-2.8 [あなたのパッチを当ててください] # cd ../.. # make package
A. 秘密は一切ありません. Makefiles ディレクトリ にある bsd.ports.mk と bsd.ports.subdir.mk ファイルを見るだけです. (注: 複雑なシェルスクリプトを嫌う読者は, このリンクを追いかけないほうが よいでしょう.)