インストール時に、ports コレクションを入れるか、 と聞かれますが入れておくと便利です。 /usr に 100MB ほど要りますが、 多数のアプリケーションが make コマンドを一発打てば インストールできるようになります。 package にはなってないが、ports にはなっているという アプリケーションもあるそうです。
用意するもの
package に慣れた人は ports を見て、 「あれ?本体は?」と思うかも知れません。 ports はアプリケーションのうち、 Makefile を主とする「指令部」だけで、 実体は ftp 経由で拾って来ることになります。 それを手元でコンパイルすることにより、 実行ファイルを作成ならびにインストールします。
インストール時に入れておけばそれでいいですが、 後から思い立った人は、 日本の FreeBSD サイトの ports のページ にいって「全てのxxxx個の ports を tar でまとめて gzip したもの」を 拾って来るか、直接 FTP サイトからダウンロードします。 それを適当な場所(普通は /usr/ports です)に展開します。
# cd /usr
# mv /somewhere/ports.tar.gz .
# tar zxf ports.tar.gz
例えば、kterm を ports でインストールするとしましょう。 /usr/ports の下の下のどこかに kterm というディレクトリが あるのですが、それはどこでしょう? いくつか探し方を挙げておきます。 番号が大きくなる程、時間がかかります(たぶん)。
- whereis で探す
たとえば、kterm を探すとと出ます。最後が ports でのありかです。
% whereis kterm
kterm: /usr/X11R6/bin/kterm /usr/X11R6/man/man1/kterm.1.gz /usr/ports/japanese/kterm
- /usr/ports/INDEX で探す
% cd /usr/ports
% grep 'kterm' INDEX
ja-kterm-6.2.0|/usr/ports/japanese/kterm|......
ja-kterm16c-6.2.0|/usr/ports/japanese/kterm16c|.....- ports のページ で探す。このページには検索機能があるので、 それで探せます
- 全部の ports の名前順一覧表 で探す。 見つけたら、 「詳しい説明」を見て確認します。 一番上の大きい文字で /usr/ports/ 以下の場所が書いてあります。
- find で探す
% cd /usr/ports
% find . -type d -name '*kterm*' -ls
307819 2 drwxr-xr-x 5 root wheel 512 Nov 14 08:15 ./japanese/kterm
238723 2 drwxr-xr-x 5 root wheel 512 Aug 25 1999 ./japanese/kterm16c
例えば、kterm をインストールする時は、 kterm のディレクトリ (/usr/ports/japanese/kterm) に cd して make install と打つだけです。
# cd /usr/ports/japanese/kterm
# make install
すると、/usr/ports/japanese/kterm にある Makefile の指令により、
という一連の作業を勝手にやってくれます。楽チン楽チン。
- /usr/ports/disfiles およびその下を見て、 ja-kterm-6.2.0.tar.gz (distfile) がなければ ftp 経由で拾って来る
- md5で ファイルに改変がなされてないかチェックする
- tar して gz されたファイルを展開する
- 必要ならパッチを当てる
- コンパイルする
- インストールする
上の例では make のターゲットとして install を選びましたが、 これをいろいろ変えると、いろんな段階で作業をストップさせられます。make package までは、それより前の段階まですべてを実行します。
make のターゲット 段階 make fetch filename.tar.gz ファイルを /usr/ports/distfiles に持って来る make extract filename.tar.gz ファイルを展開する make patch 展開したソースファイルにパッチを当てる make configure プログラムの設定を行う make プログラムを作る(コンパイルする) make install プログラムをインストールする make deinstall プログラムをアンインストールする make package プログラムのパッケージを作る make clean 作業ディレクトリ /usr/ports/xxx/yyy/work を掃除する make makesum CHECKSUM を作る (管理者用)
/usr/ports で make をする際、デフォルトのオプションを このファイルで決められます。distfile を拾ってくるサイトの指定
/usr/ports/distfiles に目的の distfile (.tar.gz 形式のファイル) がない場合、ネットワーク経由で拾って来ることになります。 この場合、相手先はという順番で選ばれます(1.でダメなら 2. を試す)。
- Makefile 中、MASTER_SITES= で指定されたサイト
- ftp.FreeBSD.org
しかし、MASTER_SITES よりもネットワーク的に近い ミラーサイトがある場合には、そちらから拾った方が快適です。 また、MASTER_SITES でダメなときも、 ftp.FreeBSD.org よりも日本の公式ミラーサイト ftp.jp.FreeBSD.org に行った方がよいでしょう。 その他も含めて、日本のミラーサイトは次の通りですので、 ping などで通信が早いところを調べましょう。
調べたら、拾ってくる優先順位を入れ換える設定をしましょう。 いじるファイルは /etc/make.conf です。
- ftp1.jp.freebsd.org (ftp.jp.freebsd.org や ftp.jp.FreeBSD.org と同じ)
- ftp2.jp.freebsd.org
- ftp3.jp.freebsd.org
- ftp4.jp.freebsd.org
- ftp5.jp.freebsd.org
- ftp6.jp.freebsd.org
実際は双方とも、適当なサイトを指定して下さい。
/etc/make.conf MASTER_SITE_BACKUP?= \ ftp://ftp.jp.freebsd.org/pub/FreeBSD/distfiles/ MASTER_SITE_OVERRIDE?= \ ftp://ftp.jp.freebsd.org/pub/FreeBSD/distfiles/この設定により、distfile を取得する試みは次の順番で行われます。
- MASTER_SITE_OVERRIDE で指定されたサイト
- Makefile 中の MASTER_SITES で指定されたサイト
- MASTER_SITE_BACKUP で指定されたサイト
USA 以外のサイトの場合
USA 以外のサイトでは、次の設定をしておくとよいでしょう。
/etc/make.conf
#USA_RESIDENT= YES → USA_RESIDENT= NO例えば、/usr/ports/security/ssh ではアメリカが輸出規制を しているため、アメリカのサイトからは持って来れません。 そこで、環境変数として USA_RESIDENT を NO に設定するのですが、 ここでしておけば環境変数を改めて設定しなくてもOKです。
portupgrade で行います。 まずは、portupgrade 自身を port でインストールします。 3.4R の ports にはありませんが、4.4R にはありました。
# cd /usr/ports/sysutils/portupgrade
# make install clean
使い方は、例えば hogehoge-x.y.z (hogehoge はアプリケーション名、 x.y.z はバージョン番号) をアップデートするには、次の通り。
ーr は関連する ports もアップデートするためのオプションです。
# portupgrade -r hogehoge-x.y.z
ports でインストールに失敗したとなると、大体原因は 次のようなものでしょうか。それぞれの対処法です。
- fetch (ファイルを持って来るの)に失敗した
- CHECKSUM が違った
- コンパイルに失敗した
1.fetch (ファイルを持って来るの)に失敗した
単に、自動的に拾って来るのに失敗しただけですから そう恐れることはありません。 goo なり何なりで 目的の filename.tar.gz のありかを探し、 その後に ftp などして持ってくればよいのです。 持って来た filename.tar.gz を /usr/ports/disfiles に移してから、 改めて /usr/ports/xxx/yyy にいって make install します。2.CHECKSUM が違った
要は、ファイルが本来あるべき姿から改変されていないか どうかをチェックしているのですが ( md5 参照 )、 それにひっかかってしまったのです。 これは重要な問題をはらんでいます。 つまり、悪意のある誰かがファイルにトロイの木馬を仕掛け、 拾って来た人のマシンを自らの手で壊させてやろうと 企んでいる可能性があるからです。 この場合は、あやしいファイルを /usr/ports/distfiles から消してから、 信頼のおけるサイトから拾い直して、 /usr/ports/distfiles に置いておけば大丈夫です。3.コンパイルに失敗した
うーん、これはちょっと。場合場合でしょうから、 エラーメッセージを見て対処するしかありません。4.一度やったオプションの指定を忘れてくれない (5.x)
ports の中には、手動でオプションを指定するものがありますが、 一度指定してしまうとそれを忘れてくれないことがあります。 そのせいで、コンパイルがうまくいかないオプションを 外せず悶々としてしまいます。そんなときは、/var/db/ports/(プログラムの名前)/options を見てみましょう。 ここにオプション情報が格納されていますので、消してしまえば初期化できます。
ところで、手動でオプションを要求されるのはとても面倒です。 コンパイルに時間がかかるものをいっぱい入れたいとき、 ずっと計算機の前に居ないといけないからです。 まだやってませんが、/var/db/ports/xxxx/options に適当な記述をしておけば オプション要求を避けられるのではないかと思います。(未確認)
ports を使おうとしているホストがプライベートネットワークの中にあり、 じかにインターネットと繋がっていない場合は、proxy サーバを経由して ports を使います。proxy サーバには HTTP_PROXY サーバ、FTP_PROXY サーバ などがありますが、HTTP_PROXY サーバを指定するといいようです。 HTTP_PROXY サーバは各ネットの管理者に聞いて下さい。 仮に、ここでは proxy.in.your.net で、ポート番号が 8080 としておきましょう。 やることは、環境変数 HTTP_PROXY を設定するだけです。
# setenv HTTP_PXORY proxy.in.your.net:8080
これさえやれば、あとはインターネットにじかつなぎされているように make; make install で OK です。
注意としては、環境変数 FTP_PROXY サーバは設定しない方がよいみたいです。 HTTP_PROXY サーバが設定してあって、FTP_PROXY サーバが設定してない場合は、 前者が後者にもなりますので問題ありません。