BSD-cvs


cvsupで最新の環境にする

cvsupのインストール

# cd /usr/ports/net/cvsup
# make install

CVS-supfile

  • ローカルのクライアントからCVSupサーバへ接続し、ソースを更新するときのsupfileの例は以下の通りです。テンプレートが/usr/share/examples/cvsup/以下にありますのですぐ利用できるでしょう。
#mkdir /usr/local/etc/cvsup
#cp /usr/share/examples/cvsup/*-supfile /usr/local/etc/cvsup
  • ここではports-supfileを編集
*default host=cvsup2.jp.FREEBSD.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
 *default delete use-rel-suffix
#回線に十分に帯域がある場合、以下の行はコメントアウト
#*default compress
#portsを更新する場合
ports-all
  • ここではstable-supfileを編集
*default host=cvsup4.jp.FreeBSD.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs tag=RELENG_5_1
*default delete use-rel-suffix
*default compress

updateの補足

RELENG_4
4.X-Releaseを4.4-Stableにアップデートする
RELENG_4_4
4.4-Releaseにたいして重大なバグ、セキュリティ対策のみを行う

インターネットサーバなど安定重視、セキュリティ対策のみでよい、という場合はRELENG_4_4を指定する.

  • supファイルが準備できたら以下のようにしてcvsupコマンドを実行します。
# cvsup -g -L 2 /usr/local/etc/cvsup/stable-supfile > /var/log/stable.log
# cvsup -g -L 2 /usr/local/etc/cvsup/ports-supfile > /var/log/ports.log
  • これで最新の状態になりました

システムのアップグレード

#cd /usr/src/sys/i386/conf/
#cp GENERIC NEWKERNEL
#vi NEWKWERNEL
#config NEWKERNEL
#cd /usr/obj
#chflags -R noschg *
#rm -rf *
#cd /usr/src
#make -j4 buildworld
#make buildkernel KERNCONF=BURTON
#make installkernel KERNCONF=BURTON
#make installworld
  • 新しいカーネルはルートディレクトリに /kernelという名前でコピーされ, 今までのカーネルは /kernel.old という名前へ変更されます.
#reboot
  • さらに進めると
# cd release/sysinstall
# make all install
(mergemaster -v)
# fastboot
  • /etc/make.confはこのような感じになります。
MASTER_SITE_BACKUP?= \
ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ 
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
SUP_UPDATE= yes
#
SUP= /usr/local/bin/cvsup
SUPFLAGS= -g -L 2
SUPHOST= cvsup.jp.FREEBSD.org
SUPFILE= /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
  • その他
NOGAMES=true#gameは作成しない
USA_RESIDENT=NO# 米国輸出規制暗号に抵触するものはコンパイルしない
SUP_UPDATE= yes#cvsによるソースアップデートを使用する
SUP=/usr/local/bin/cvsup
SUPFLAGS= -g -L 2
SUPHOST=cvsup2.jp.FreeBSD.org
SUPFILE=/usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile
FTP_PROXY=gw.mvs.co.jp:8080
HTTP_PROXY= gw.mvs.co.jp:8080
KERNCONF= MYNAME#カーネル名
  • これで、/usr/srcまたは/usr/portsで"make update"するとソースを更新してくれます。make.confでSUPFILEとPORTSSUPFILEの両方を指定し、/usr/srcで"make update"すると、srcをアップデートした後にportsもアップデートしてくれます。
# cd /usr/src
# make update
--------------------------------------------------------------
>>> Running /usr/local/bin/cvsup
--------------------------------------------------------------
Parsing supfile "/usr/share/examples/cvsup/stable-supfile"
Connecting to cvsup.f-bell.net
  • これでソースが最新のものになりました。make buildworldで全てのコマンド群(userland)、カーネル(kernel)をコンパイルし、最新のFreeBSD環境に整えましょう。
  • 最新バイナリの生成 ソースコードを最新にしたら、バイナリ類のコンパイルとインストールを行います。この作業は/usr/srcディレクトリで行います。
# make clean
# make buildworld
# make buildkernel

バイナリの生成か完了したら、以下のようにしてバイナリをインストールします。

# make installworld
# make installkernel
  • GENERICカーネルではなくカスタマイズしたカーネルを使用しているサイトでは、上記のように/etc/make.confのKERNCONFにconfigファイル名を指定しておくことで、カスタムカーネルがコンパイル、インストールされます。
  • 設定ファイルの更新

/usr/srcでのmake作業では/etcディレクトリにある各種設定ファイル、rcスクリプトは自動的には更新されません。これは、これらファイルはサイトの運用状況に応じてシステム管理者が変更、修正している場合が多く、一括した更新が難しいためです。このため/etcディレクトリ以下の設定ファイルは以下の方法で更新します。

/usr/etc/と/etc/のファイルを見比べて管理者が手動で更新する 
/us/sbin/mergemasterスクリプトをつかう 
/usr/src/etc/でmake distributionと実行する 

1.の方法がもっとも確実な方法です。rcスクリプトを大幅に修正しているなど、コマンド任せにできない場合はこの方法をとります。

2. のmergemasterスクリプトを使う方法は/usr/src/etc/と/etc/ディレクトリ内のファイルをdiffし、差分を/etc/に適用する方法です。設定ファイルなどの変更点が少ない場合はうまく更新されますが、管理者の変更内容によっては正しく更新されない場合もあります。注意して使用してください。

3. この方法では/etcの内容を新規インストール時と同じ状態にします。passwdファイルを含めて初期化されますので、注意が必要です。設定項目が少なく、sysinstallなどで新規に設定をし直しした方が早い場合はこの方法を使います。

  • あとmergemasterは関係ないホストで練習しましょう

4系列カーネル再構築

  • cd /usr/src/sys/i386/conf
  • cp GENERIC [自分でこれから作るカーネルの名前]
  • 編集が終わったら
config [カーネルの名前] 
cd ../../compile/ [カーネルの名前] 
make depend ; make
make install
  • でおしまいです。
  • 古いカーネルは/kernel.oldとして残っていますので、新しいカーネルでうまく起動しない場合は、起動時のBoot:と表示されたときにkernel.oldとすれば古いカーネルで起動します。

make world

stableにする前に ソースの同期ができたら、いよいよstableにします。 stableなどにシステムを更新する一連の作業を「make world」する、とも呼びます。 ここでstableする前に注意すべき点がいくつかあります。

まず、ディスクの残り容量です。 stableのソースをコンパイルすると/usr/objに300MB程度コンパイル済みのシステムが保存されます。 残り容量は大丈夫だとは思いますが、万が一のこともあるので、ちゃんと確認してから行ってください。

ディスクの残り容量は

> df -k

で確認することができます。

次に、make worldは今回のような4.4-RELEASEから4-STABLEにするのは特に問題なくできると思いますが、3.xから4-STABLEにする場合には、きちんとした知識が要求されるので、メジャーバージョンを超えたmake worldはやらない方が無難です。 このような場合には4.x-RELEASEをインストールしてから、4-STABLEにするのが一般的なやり方です。

あと、sendmailの代わりにqmailを使っている方は、make worldすると/usr/sbin/sendmailが本物のsendmailで置き換えられてしまうので、/var/qmail/bin/sendmailを忘れずにバックアップするようにしましょう。

  • また、/etcはmake worldでは更新されないので安心してください。
  • ソースのコンパイル(make buildworld) 問題ない場合は、stableのソースをコンパイルします。 ソースをコンパイルするには、make buildworldというコマンドを使います。 これを行うと、kernelを除く全てのコンパイルを行います。
> su
# cd /usr/src
# make buildworld 

としてやると、コンパイルが始まります。 Celeron 500MHzで大体2〜3時間ぐらいかかります。

また、

# make -j4 buildworld

のようにスレッドをいくつか作ってコンパイルしてやると、早く終わるようです。 kernelのコンパイル(make buildkernel) ソースがコンパイルできたら、次はkernelをコンパイルします。 kernelをコンパイルするには、make buildkernelというコマンドを使います。 make buildworldと同様に/usr/srcで

# make buildkernel 

としてやると、コンパイルが始まります。

最後に以下のように出ていれば成功です。

chmod 444 freebsd.cf

この時に作られるkernelはGENERICと呼ばれる標準kernelですが、既に自分のkernel設定ファイルを作成している場合は、kernel設定ファイルが例えばCELIESという名前だったとすると、

# make KERNCONF=CELIES buildkernel

のようにしてやると、自分のkernel設定ファイルを元にkernelをコンパイルしてくれるので、後でkernelを再構築する必要が無くなります。 また、KERNCONF=CELIESを/etc/make.confに記述しておくと、make buildkernelとやれば自動的に自分の設定ファイルを参照してコンパイルしてくれます。

この他のオプションとしては、NO_SENDMAIL=YESなどがあります。(NO_BIND、NO_OPENSSH、NO_OPENSSLとか)

kernelのインストール(make installkernel) kernelがコンパイルできたら、早速kernelを新しいものにインストールします。 make buildkernelと同様に/usr/srcで

# make installkernel 

としてやると、kernelのインストールが始まります。 エラーが無く、終われば成功です。

kernelのインストールが終わったら、新しいkernelでシステムを起動します。

# sync
# sync
# sync
# shutdown -r now(rebootでも良い) 

で、システムを再起動させます。

コンパイル済みのシステムのインストール(make installworld) 次にコンパイルしたシステムファイルをインストールします。 このとき、よけいなプロセスが走っているとシステムの更新に重大な支障をきたす可能性があるので、FreeBSDをシングルユーザーモードというモードで起動させます。

再起動後、 Booting [kernel] in 10 seconds...

のカウントが始まったところで space を押し、

> boot -s 

と入力し、Enterを押すとシングルユーザーモードでOSが起動されます。

まず最初にshellのパスを要求されるのでパスを入力します。

Enter full pathname of shell or RETURN for [/bin/sh] :

と出るので、例えばtcshの場合「/bin/tcsh」と入力してEnterを押します

% /sbin/mount -a

まず上のようにして、各パーティションをマウントします。 その後、システムをインストールします。

% su
# cd /usr/src
# make installworld 

とすると、buildworldでコンパイルしたシステムが、インストールされます。

etcの更新(mergemaster) システムが更新できたら、次は/etcを更新します。(別にしなくても、OS自体は動きますが、やるにこしたことは無いでしょう) /etcには自分が更新した設定ファイルが入っているはずなので、誤って上書きしないようにバックアップを取っておきます。

# cp -Rp /etc /backup/etc

例では/backup/etc/にバックアップしています。 /etcの更新にはmergemasterというコマンドを使います。 これは、更新されたファイルを自動で検知してくれる便利なツールです。 また、更新、更新しないの他に、マージと言って更新された部分のみ反映する(手動ですが)といったこともできます。

# mergemaster -s -v

と実行すると、mergemasterの画面に移ります。 もし、mergemasterを以前に実行していた場合は、以前のmergemasterで作った仮のルートを消すか?と聞かれますので"d"を入力して消してください。 あと、PAGERがmore以外の場合は、PAGERを指定する必要があるので、指定してください。

mergemasterの主な使い方は、よく読めば理解できるとは思うのですが、まずmergemasterは仮のルートを作って、そこへ新しい/etcを置きます。 そこから、/etcへコピーするか、/etcにあるものを保持するかを選択できるんですが、主な操作方法は3つです。

新しいファイルに更新する場合は"i" /etc にあるものをそのまま使う時は"d" マージする時は"m"

ということですね。

もし、間違えて設定を消してしまっても、バックアップから復元することができるので、安心して挑んでみてください。 最後に、mergemasterを終えて設定ファイルが全て大丈夫なことを確信した後に、バックアップを消すようにしてください。

/standの更新 最後に/standを更新します。

# cd /usr/src/release/sysinstall
# make all install 

で更新することができます。 これらの作業が終わったら、再起動すればシステムが4-STABLEの環境になっています。 お疲れさまでした。