作成開始 : 平成22年12月05日(日) 最終更新 : 平成22年12月18日(土)
Portsの管理 (FreeBSD 8.1 RELEASE)
FreeBSD ハンドブック を参照するとよいです。
FreeBSDには、コンパイル済みのアプリケーションを利用する「packages」と、ソースから使用しているマシンの環境に合わせてコンパイルする「ports」を利用する二つの方法があります。
それぞれ長所・短所があるので環境に応じて利用するとよいでしょう。
私のこの非力なPCだと、例えば ports からコンパイルすると膨大な時間がかかりそうなもの(XorgとかGnomeとか)は、「packages」でインストールした方がいいです。
ApacheとかSambaとかネットワーク系のツールは頻繁にセキュリティ更新とかありますので、それの最新バージョンを導入したりまた、コンパイル時にパラメータを渡して希望にあったオプションを導入したい時は
「Ports」を利用すればいいと思います。
ただ、CF-IDE変換アダプタとCFカードの実験で使った環境では、OSインストール時に「Ports」を導入しましたが、Xorgとgnomeを導入したためディスク容量が非常に少なくなってしまいました。
/usr の使用率が 97% となりこのままでは ports は使えません。
ports colection はディフォルトインストールで約417MBあるらしいです。
作業領域とかも指定することにします。
ディフォルトの場所(/usr/ports)を変更して ports を利用する方法が見つかったので
検証で使った 2G の CFカードをCF-IDE変換アダプタの slave 側にさして活用することにします。
1.CFカード(slave)に領域作成
まずは、認識できているか確認してみます。
ssh でログインし /usr/sbin/sysinstall です。
↑
Main Menu から 「Configure」を選択します。
↑
FreeBSD Configuration Menu から「Fdisk」を選択します。
↑
Select Drive(s) で ad1 で認識していました。
↑
「A」でディスク全体を使用するようにして、「Q」で終了します。
↑
ブートマネージャはいらないので「None」を選択します。
Select Drive(s) に戻るので「Cancel」で抜けます。FreeBSD Configuration Menuに戻ります。
↑
「Label」を選択します。
↑
Select Drive(s) で ad1 を選択します。
↑
次のようにしてみます。
640MBをWebコンテンツ用(/usr3)
残りをports用にしてみます。(/usr2)
「C」で新規にパーティションを作成し、「W」で書き込み「Q」で終了します。
↑
Select Drive(s) に戻るので「Cancel」で抜けます。FreeBSD Configuration Menuに戻ります。
「Exit」を選択します。Main Menuに戻ります。
↑
「Exit Install」を選択して終了です。
この時点で /etc/fstab を見ると /usr2, /usr3 が書かれていませんでした。
もしかしたら、OS再起動してもマウントできていないかも・・・・
OSを再起動してみます。
やっぱりマウントできませんでした。なので、もう一度パーティションを作成し直し(マウトポイント指定)、/etc/fstab を次のようにしてOSを再起動したらOKでした。
2.Ports Colection の移動
FreeBSD 日本語マニュアルによると、次の環境変数が /etc/make.conf で設定できるようです。
PORTSDIR port ツリーの場所を指定します。
これは、FreeBSD と OpenBSD では、/usr/ports で、NetBSD では、/usr/pkgsrc です。
WRKDIRPREFIX 一時ファイルを作成する場所(作業領域)です。PORTSDIR が読み込み専用の場合 (おそらく CD-ROM をマウントした場合) 有用です。
DISTDIR distfile を探す場所であり、取得した distfile を置く場所で す。通常は、PORTSDIR の下の distfiles/ です。
/usr/ports を /usr2 の下に移動して使用してみます。以下のコマンドで移動します。
fmv645# mv /usr/ports /usr2
↑
こんなんなりました。
そして、/etc/make.conf に以下を追加する。
PORTSDIR=/usr2/ports
WRKDIRPREFIX=/usr2/ports/tmp ・・・・・・これは tmp を mkdir で作ります。
DISTDIR=/usr2/ports/distfiles
3.Portsの更新
Portsを管理するには、csup
を使う方法とportsnap
を使う方法があります。
ここでは、csup
を使う方法で管理してみたいと思います。
csup
はcvsup
の機能を一部置き換えるようなもので,最近の FreeBSD には標準で含まれているとのことです。
/usr/local/etc/csup に設定ファイルを置いて作業してみましょう。
fmv645# mkdir -p /usr/local/etc/csup
fmv645# cd /usr/local/etc/csup
fmv645#cp /usr/share/examples/cvsup/ports-supfile .
次は、コピーした ports-supfile を編集します。
*default host=CHANGE_THIS.FreeBSD.org
↓
*default host=cvsup.jp.FreeBSD.org
CVS サーバーを指定します。近くのサーバーを指定しましょう。
国内の他の CVS サーバーは他にcvsup2からcvsup6まで存在します.相手先の負荷の状況によって適切に選択します。
*default base=/var/db
↓
*default base=/usr2/db
mkdir /usr2/db で作成しました。
“base” ディレクトリと呼ばれる場所に、ある status ファイルを維持しています。すでに受け取った更新情報を追従し続けることで、 これらのファイルは CVSup がより効果的に動作することを支援します。
package に関するすべての情報は /var/db/pkg ディレクトリ以下に置かれています。 このディレクトリの下にあるファイルの中に、インストールされたファイルの一覧やインストールされた各 package についての説明が含まれています。
*default prefix=/usr
↓
*default prefix=/usr2/src
cvsup に受け取ったファイルをどこに置くかを伝えます。
これも、/usrではなくPorts用に確保した /usr2 に mkdir /usr2/src として作成しました。
*default compress
↓
#*default compress (コメントアウトします)
圧縮データの転送を無効化する場合は コメントアウトします.
利用している計算機のネットワーク回線の帯域が十分に広く,圧縮を行うことが相手先の CVS サーバーへの負荷になると思われる場合,圧縮を無効化した方が良いでしょう。
次に, ports ツリーの内のいくつかの更新を行わない場合は /var/db/sup/refuse という設定ファイルを利用します.例えば,以下の内容を記述することで日本語以外の多国語対応の ports の更新を抑制できます。
この環境では、/usr2/db/sup/refuse になります。
ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/hungarian
ports/korean
ports/polish
ports/portuguese
ports/russian
ports/ukrainian
ports/vietnamese
/etc/make.confに以下の記述を追加します。
SUP_UPDATE = yes
SUP = /usr/bin/csup
SUPFLAGS = -g -L 2
SUPHOST = cvsup.jp.freebsd.org
PORTSSUPFILE = /usr/local/etc/csup/ports-supfile
この記述を追加し,以下のようにすることでportsを最新版に更新できます。
fmv645# cd /usr2/ports fmv645# make update
・・・と思って実行したら以下のメッセージで止まってしまった。
/usr2: create/symlink failed, no inodes free
Updater failed: Cannot create directories leading to "/usr2/src/ports/devel/cvsgraph/files/patch-cvsgraph.c": No space left on device
*** Error code 1
↑
なんてこったい、i-nodeを使い切ってしまったよ。
inode密度 ディフォルト値 : 2048 (最小値 : 1024 -> これで newfs してみよう)
※iノード数は「ファイルシステムサイズ(バイト) ÷ iノード密度= iノード数」という計算式で決定されるため、iノードを増やしたい場合は「iノード密度」の値を小さくしていきます。
全てのディレクトリとファイルを一旦退避します。(ファイルシステムの再構成を行うため)
fmv645# newfs -i 1024 /dev/ad1s1e
※/や/varといったシステム領域は、OSが起動している状態では再構築できません。
OSのCD/DVD-ROMからいったん起動させてから作業を行ってください。・・・とのことです。
あれ?
newfs: /dev/ad1s1e: failed to open disk for writing ・・・だって!
コマンドでは、どうしてもうまくいかなかったので、以下の方法をしました。
・/etc/fstab で /usr2, /usr3 の記述を外し OS リブート
・/usr/sbin/sysinstall の Label で /dev/ad1s1d は /usr3 へマウント、/dev/ad0s1e を一旦 Delete そして /usr2 として Create して Newfs Option に -i 1024 をセットし Write しました。
・/usr/sbin/sysinstall を終了し df -i で確認すると iノード数が増えていました。
・/etc/fstab に /usr2, /usr3 の記述を追加し OSリブートしました。
その時の状態は下記のとおりです。
気を取り直して続きをします。
退避していたデータを戻します。
そして、以下のコマンド実行します。
fmv645# cd /usr2/ports
fmv645# make update
今度はうまくいったようです。約30分かかりました。実施後のディスク情報です。
↑
ありゃー /usr2 の使用率が 96% で残り 40MB になっちゃった。やっぱり CFカード購入した方がよかったかな?
やっぱり ports から samba3 をインストールしようとして /usr2 が一杯になってしまいました。
なので、手持ちのUSBメモリを挿入してマウントし /usr4 としてそこに /usr2/ports, /usr2/db, /usr2/src を移動しました。
それに伴って上記の各設定を変更しました。
【戻る】