OSのアップグレード


FreeBSD

FreeBSD は、フリーの OS であるため、ソースが簡単に入手できます。そのソースを コンパイルして簡単にバイナリを作成できます。FreeBSD では、簡単にソースを 入手してコンパイルし、OS をアップグレードする仕組みが用意されています。

CVSup

FreeBSD では、CVS(Concurrent Versions System)を用いてソースファイルを 管理しています。CVS上では、計算機上にリポジトリ(貯蔵所)を作り、管理したい ファイルの全情報を格納しています。ユーザは、このリポジトリから必要なファイルを 取り出し(check out)、変更後、リポジトリへ戻します(check in)。
CVSリポジトリ自体を手元に持って来るのに、CVSup というツールを使用します。 CVSサーバには、cvsupd というプログラムが動作しています。

CVSup は FreeBSD の標準配布物には含まれていないので、別途インストールします。 CVSup は Module-3 によって書かれているため、CVSup を make するには、同時に Module-3 もインストールする必要があります。これらは非常に面倒なので、 ここでは、ports/packages を用いてインストールを行います。

ports/packages により CVSup をインストールしたら、次は設定を行います。 設定は /usr/local/etc/supfile で行います。FreeBSD では /usr/share/examples/cvsup ディレクトリにサンプルファイルがあるので、 これを利用します。ここでは standard-supfile を用います。同ファイルを /usr/local/etc/supfile としてコピーし、編集します。
# cp /usr/share/examples/cvsup/standard-supfile /usr/local/etc/supfile
# vi /usr/local/etc/supfile
このファイルで必要な部分だけを抜き出すと、以下のようになります。
*default host=CHANGE_THIS.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress

src-all

#src-base
#src-bin
#src-contrib
#src-etc
#src-games
...
以上を踏まえて、目的に応じて supfile を編集します。
supfile が完成したら、cvsup を起動します。起動は、以下のように 引数に supfile のパスを与えます。
# cvsup /usr/local/etc/supfile
X上で起動すると、ウィンドウが現れるので、左下にある緑の三角ボタンを押して cvsup を開始します。無事終了すると、最下段のメッセージ領域に "Finished successfully"と表示されます。

CVSup を CHECKOUT モードで実行した場合は、ソースファイルはすでに展開されて いますが、CVSモードで実行した場合には、目的のソースを取り出します。 以下のように行います。
# cd /usr
# mv src src.bak
# cvs -d リポジトリ checkout src
以上により、-current の最新版のソースが /usr/src ディレクトリ以下に展開 されます。-d オプションでリポジトリが置かれているディレクトリ (/usr/local/etc/supfile の prefix で指定したディレクトリ)を指定します。
また、-current ではなく、例えば 3.4-Release のソースを展開したい場合には、
cvs -d リポジトリ -r RELENG_3_4_0_RELEASE checkout src
というように -r オプションでタグを指定します。

make world

目的のソースが取り出せたら、make の準備をします。失敗して大事なファイルが 消えたりすると大変なので、必ずバックアップをとっておきます。
バックアップには、いろいろな方法があります。rdist,rsync によるバックアッップは ここを、磁気テープ(DAT)による dump,rdump による バックアップはここを御覧下さい。
バックアップ終了後、/usr/src/etc/make.conf を /etc ディレクトリにコピーし、 編集します。
# cp /usr/src/etc/make.conf /etc/
# vi /etc/make.conf
このファイルは、FreeBSD をコンパイル/リンクする際の一般設定用のファイルです。 デフォルトでは、全ての行がコメントアウトされていますので、適宣、"#"を外して 有効にしていきます。
ここでは、以下の項目を有効にします。 /etc/make.conf の編集が終わったら、/etc/group と /usr/src/etc/group を 比較し、後者に新しいエントリがある場合は、前者に反映しておきます。

make をする場合は、オブジェクトファイルは、/usr/obj 以下に置かれます。 同じディレクトリが存在し、残骸が残っている場合は、別の名前に変更するか、 バッサリと消去してしまいます。消去する際、schg フラグが立っていて、 root権限でも削除できない場合は、以下のようにして schg フラグを解除します。
# chflags -R noschg /usr/obj
# rm -rf /usr/obj
以上で準備が出来たので、make を行います。make のターゲットには、 以下のようなものがあります。
buildworld     すべてを構築します
installworld   buildworld で構築されたものをインストールします
world          buildworld + installworld
update         最新のソースに更新します
most           ユーザコマンドのみ作成します
installmost    ユーザコマンドのみインストールします
make を実行する時には、ログを残しておくようにします。 例えば、以下のように実行します。
# make -j 4 buildworld > world.log 2>&1 &
# make installworld > install.log 2>&1 &
ここで「make -j 数値」は、複数のタスクを同時に行う指定です。
以上で make は終了です。

make後の作業

make が終了したら、その他の仕上げを行います。
「make installworld」では、 /bin、/sbin、/usr/bin、/usr/sbin、/usr/lib、/usr/share 以下のファイルが 更新されますが、/etc 以下は更新されません。同ディレクトリは各システムごとに カスタマイズされていることが多いためです。
まずは、/etc ディレクトリのバックアップを取っておきます。
# cp -pR /etc /etc.bak
次に、適当なディレクトリを用意し、そこへ /usr/src/etc のインストールを 行います。ここでは、/tmp/root というディレクトリをルートディレクトリに 見立てて、そこへインストールします。
# mkdir /tmp/root
# cd /usr/src/etc
# make DESTDIR=/tmp/root distrib-dirs distribution
あとは、現在 /etc にあるファイルと、/tmp/root/etc にあるファイルを比較しながら 更新作業を行います。

次に、デバイスファイルも更新します。前述の /etc の更新時に /tmp/root を ルートディレクトリに見立てましたが、このとき /tmp/root/dev ディレクトリの 中にデバイスファイルが作成されています。このデバイスファイルを /dev 以下に コピーします。
# mv /dev /dev.bak
# cp -pR /tmp/root/dev /dev
または、/tmp/root/dev/MAKEDEV を /dev にコピーし、そこでデバイスファイルを 作成します。
# cp /tmp/root/dev/MAKEDEV /dev
# cd /dev
# ./MAKEDEV all
次に、/stand ディレクトリの更新を行います。各設定を /stand/sysinstall によって行う場合には、必ず /stand ディレクトリを更新しておきます。 更新は以下のようにして行います。
# cd /usr/src/release/sysinstall
# make all install
最後に、カーネルを再構築してから、リブートをします。 カーネルの再構築に関しては、ここを御覧ください。
リブート後のメッセージが新しいバージョンに変わっていることを確認します。

Linux


戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Wed Jun 14 16:47:31 JST 2000