FrontPage | changes | index | create | search | preferences |

makeworld

Last-Modified: Thu Jan 31 01:20; by KM
edit | copy | diff | rlog | raw
  1. make world
    1. ソースの同期
    2. コンパイル前の準備
    3. コンパイル
    4. シングルユーザモードでの起動
  2. FreeBSD 5.4→6.0移行メモ
    1. 準備
    2. 構築
    3. シングルユーザモード
    4. 古いライブラリやそれに依存しているportsを削除
  3. FreeBSD 6.0→6.1移行メモ
  4. FreeBSD 6.1→6.2移行メモ
  5. 関連情報

FreeBSDのベースシステム全体をソースコードから再構築することをmake worldと言います。

make world

ソースの同期

ソースを同期するために、cvsup*1というコマンドを使います。

csupの設定は、/etc/make.conf*2に、

 SUP_UPDATE=     yes
 SUP=            /usr/bin/csup
 SUPFLAGS=       -L 2
 SUPHOST=        cvsup.jp.FreeBSD.org
 SUPFILE=        /usr/share/examples/cvsup/standard-supfile

のように書いておくと良い*3でしょう。こうすると、

 # cd /usr/src/
 # make update

を実行するだけで、/etc/make.conf内に記述した設定で、csupが実行されます。

/usr/src/UPDATINGに更新があった場合、注意深く読み、その指示に従う事がトラブルを未然に防ぐ最善の策です。

*1FreeBSD 6.2-RELEASE以降、従来のcvsupというコマンドに代わってベースシステムに取り入れられた。通常、標準で用意されています。もし、ない場合には、net/csupのportpackageから導入できます。その場合は、インストールされる場所が違うので、上記SUPでのPATHの記述に注意して下さい。

*2もし、なければ、/usr/share/examples/etc/make.conf(4.xの場合は/etc/defaults/make.conf)を/etcにコピーする。

*3ただ、SUPHOSTを固定してしまうと、一時的にそのcvsupサーバが込んでいる場合などが原因で無駄に時間がかかることがあります。そういう場合、「fastest_cvsup」というコマンドがportsにあるので利用を検討してみるのも良いでしょう。これは数あるcvsupサーバの中から一番速いものを報告してくれるというものです。「make update」とも組み合わせて使用することが出来ます。詳しくはfastest_cvsupの利用例を参照。

コンパイル前の準備

 必要があれば、/etcにあるファイルをバックアップしておきます。

 # touch /var/tmp/backup-etc.tar.gz
 # chmod 600 /var/tmp/backup-etc.tar.gz
 # tar zcf /var/tmp/backup-etc.tar.gz /etc

 次に、ビルドに必要な環境が整っているか確認するため、

 # mergemaster -p

を実行し、master.passwdやgroupファイル、make.confの内容をチェックします*4。同期した/usr/srcに大幅な変更が加えられない限り、普通、問題ないと思いますが、もし問題があれば、ビルドやインストールに失敗する可能性があるので、適宜、修正しておいて下さい。

*4詳細は、mergemaster(8)参照。

コンパイル

 コンパイルは、念のため、ログをとりながら*5行うことにします。

 # cd /usr/src
 # ( date && make buildworld; date ) |& tee buildworld.log
 # ( date && make KERNCONF=MYKERNEL buildkernel; date ) |& tee buildkernel.log
 # ( date && make KERNCONF=MYKERNEL installkernel; date ) |& tee installkernel.log

ここで、KERNCONFに渡している引数MYKERNELは、/usr/src/sys/i386/conf/に置いた、カーネルのコンフィギュレーションファイルのファイル名です。毎回、コマンドラインから渡すのが面倒であれば、あらかじめ、/etc/make.confに

 KERNCONF=MYKERNEL

などと記述しておくと良いでしょう。

 次に、シングルユーザモードで起動して、installworldを行います。 いったん再起動しましょう。

 # shutdown -r now

*5ここでは、cshを使用しているので、他のシェルではリダイレクトの扱いが異なる場合があります。

シングルユーザモードでの起動

FreeBSD 5.x以降の場合は、起動時のメニューから「4」を押せばシングルユーザーモードに入ります。

FreeBSD 4.xの場合、起動時、バトンがくるくる回りながら、kernelを10秒後にロードするという箇所が現れます。そこで、Enter以外のキーを押すと、ブロンプトが出てブート・オプションを選べます。 シングルユーザーモードで起動しますので、

 boot -s

と入力します(後は、5.xと同じ)。

まず最初に、シェルを選択するのですが、ここでは、shを選択します。

シェルを選択した後、以下を呪文のように実行します*6

 # fsck -p
 # mount -u /
 # mount -a -t ufs
 # swapon -a
 # adjkerntz -i

続いて、ソースのあるディレクトリに入り、installworldを行うのですが、前回と同じ様にログを取りながら実行することにします。 ただし、今回はシェル*7が、shであるので、パイプの取扱いが違うことに注意しましょう。

 # cd /usr/src
 # ( date && make installworld ; date 2>&1 ) | tee installworld.log

もし、キーボードの配列がおかしくなってる場合、kbdmapと入力することによって、 変更できます。

最後に、mergemasterを実行し、/etc内のファイルと/usr/src/etc内のファイルを比較して、更新箇所があれば、適宜、修正します。

 # mergemaster

以上、問題が無いようであれば、再起動します。

*6ccd(4)を利用してソフトウェアRAIDを組んでいる場合は、「fsck -p」を実行する前に、「ccdconfig -C」を実行。

*7前回と同じ様に、/etc/passwdに登録してあるシェル(通常、/bin/csh)に切替えたければ、ここで「su -」を実行。

FreeBSD 5.4→6.0移行メモ

以下は、既にFreeBSD 5.4をインストールしてある環境を、ソースコードから、FreeBSD 6.0にアップグレードした際のメモです。

 # uname -r
 5.4-RELEASE-p8

準備

ソースを同期した際、/usr/src内にあるCVSタグが打たれているファイルは、リモートのものより古いバージョンであれば、ファイルが上書きされます。/usr/src/sys/i386/conf/GENERIC等は、古いバージョンであっても、以前作成したカーネルのコンフィギュレーションファイルを使いまわそうとする場合、参照できた方が便利なので、必要に応じて、別の場所に退避させておきます。

 # cp -p /sys/i386/conf/GENERIC /var/tmp/GENERIC-5

mergemaster(8)を実行しない限り、/etc内のファイル群には変更は加えられませんが、念のために、ここで、/etc内にあるものをバックアップしておきます。

 # touch /var/tmp/backup-etc.tar.gz
 # chmod 600 /var/tmp/backup-etc.tar.gz
 # tar zcf /var/tmp/backup-etc.tar.gz /etc

さて、cvsupを使いソースツリーを同期させます。事前にSUPFILE内のtagの箇所を、RELENG_6_0に変更していることが前提です。

 # cd /usr/src
 # make update |& tee update.log

次に、ビルド前の準備として、「mergemaster -p」を実行してユーザやグループに変更を加えます。

 # mergemaster -p

通常、マージを選択し、既存のユーザやグループを新しいファイルの方に反映させてインストールし、データベースを更新します。ちなみに、マージの際、既存のファイルは画面の左、新しいものは画面の右側に表示されます。

この過程で、/etc/make.confと/usr/src/share/examples/etc/make.confの内容が比較されて終了します。現在使用しているmake.confを新しい様式にあわせる方法を採っても良いですが、ここでは、現在のmake.confをバックアップして、新しいものをソースからコピーして、それに修正を加えることにします*8

 # cd /etc
 # mv make.conf make.conf.bak
 # cp /usr/src/share/examples/etc/make.conf .

*8バックアップしたものを参考にして、新しい/etc/make.confを修正。主な変更点は、CPU名とNOPROFILE→NO_PROFILEぐらい。その他、KERNCONFやportsのperlで追加された箇所等があれば、見落とさないように。

構築

ソースツリーに入り、ビルドを行います。新しいカーネルをビルドする環境を整えるため、最初に行うのは「buildworld」です。

 # cd /usr/src
 # make buildworld |& tee buildworld.log
 # make buildkernel |& tee buildkernel.log
 # make installkernel |& tee installkernel.log

構築したカーネルで起動できるかテストするため、再起動します。

 # shutdown -r now

シングルユーザモード

起動時のブートメニューで「4」を押し、シングルユーザモードに入ります。シェルに「/bin/sh」を選択し、

 # fsck -p
 # mount -u /
 # mount -a -t ufs
 # swapon -a
 # adjkerntz -i

を実行。続いて、ソースツリーに入り、installworldを行います。

 # cd /usr/src
 # make installworld 2>&1 | tee installworld.log

数が多いので大変ですが、/etcの内容を更新します。

 # mergemaster

古いライブラリやそれに依存しているportsを削除

共有ライブラリのバージョンが変わっているので、既にインストールされているportsを全て削除します*9

 # cd /var/db/pkg
 # ls > /var/tmp/pkg.list
 # find . -type d | xargs pkg_delete

続いて、古いライブラリや、6.0ではインストールされなかったファイル等を削除して、掃除します。

 # cd / && sh removal-6.0.sh
  • removal-6.0.sh - とりあえず、古いのを列挙しただけ。参考までに。

ここまでで大体出来上がり。

 # uname -r 
 6.0-RELEASE

再起動し、その後、新しい環境下で以前のバージョンのライブラリに依存しないportsを新しく構築し直します。

*9先に古いライブラリを削除してしまうと、アンインストールする際の処理に失敗してしまうportsもあるので注意。

FreeBSD 6.0→6.1移行メモ

FreeBSD 6.1→6.2移行メモ

以下を参照して下さい。

なお、FreeBSD 6.2→6.3への移行も手順は同じです。

関連情報


  • FreeBSD - このWikiフォーラム内におけるFreeBSDに関係するものの目次です。 ...