====== FreeBSD - アップグレード ======
まずは、CVSupでソースを最新にする必要があります。\\
今回はFreeBSD 5.4 ⇒ FreeBSD 6.0 へ
===== CVSupをインストール =====
※Portsを最新版にするは [[02_freebsd:01_net:cvsup|こちら]]
# cd /usr/ports/net/cvsup-without-gui
# make clean
===> Cleaning for libiconv-1.9.2_1
===> Cleaning for gettext-0.14.5
===> Cleaning for gmake-3.80_2
===> Cleaning for libtool-1.5.20
===> Cleaning for ezm3-1.2
===> Cleaning for cvsup-without-gui-16.1h_2
# make install
===== /etc/stable-supfileを用意 =====
# cp /usr/share/examples/cvsup/stable-supfile /etc/stable-supfile
# chmod 644 /etc/stable-supfile
===== /etc/stable-supfileを修正 =====
# vi /etc/stable-supfile
---------------------------------
*default host=CHANGE_THIS.FreeBSD.org
↓
*default host=cvsup.jp.FreeBSD.org
*default release=cvs tag=RELENG_5
↓
*default release=cvs tag=RELENG_6
RELENG_6というのは、6-STABLE(FreeBSD 6.xの開発版)を指しています。\\
5.2.1-RELEASEを更新するのが目的ならば、RELEASE版のFreeBSDのツリーは例えば5.1-RELEASEであれば「RELENG_5_1」、5.2-RELEASEや5.2.1-RELEASEであれば「RELENG_5_2」と言った感じに変更します。
===== 実行してみる(ソースの同期) =====
▼やり方はPortsの場合とほぼ同じです。
# cvsup -g -L 2 /etc/stable-supfile
---------------------------------
.
.
.
.
.
.
===== 自動設定 =====
# crontab -e
---------------------------------
00 6 * * * root /usr/local/bin/cvsup -g -L 2 /etc/stable-supfile
===== ソースのコンパイル(make buildworld) =====
ソースの同期が完了したら、同期したソースをコンパイルします。\\
ソースをコンパイルするには、make buildworldというコマンドを使います。\\
これを行うと、kernelを除くFreeBSDのベースシステム全てがコンパイルされます。\\
※すっごく時間がかかります。(うちのCeleron 600MzのPCだと6時間くらい)
# cd /usr/src
# make buildworld
このようにして、放置しておくとbuildworld.logにログを残してくれます。
# /usr/bin/nohup time make buildworld >buildworld.log &
===== kernelのコンパイル(make buildkernel) =====
ソースがコンパイルできたら、次はkernelをコンパイルします。\\
kernelをコンパイルするには、make buildkernelというコマンドを使います。\\
make buildworldと同様に/usr/srcで
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
# reboot
また、KERNCONF=MYKERNELを/etc/make.confに記述しておくと、make buildkernelとやれば自動的に指定したコンフィグファイルを参照してkernelを作成してくれます。
===== シングルユーザモードで起動 =====
デーモンくんの表示されている個所で、シングルユーザモードを選択肢する。
# fsck -p (ファイルシステムのチェック)
# mount -u / (/を読み書き可能にして再マウント)
# mount -a -t ufs (/etc/fstabに指定されているその他のUFSを全てマウント)
# swapon -a (スワップを有効にする)
===== コンパイル済みのシステムのインストール(make installworld) =====
# cd /usr/src
# make installworld
===== /etcファイルの更新 =====
mergemasterの主な使い方は、よく文章を読めば理解できるとは思うのですが、\\
まずmergemasterは仮のルートを作って、そこへ新しい/etcを置きます。\\
そこから、/etcへコピーするか、/etcにあるものを保持するかを選択できるんですが、主な操作方法は3つです。
新しいファイルに更新する場合は"i"
/etc にあるものをそのまま使う時は"d"
マージする時は"m"
==== /etcのバックアップを取っておく ====
# cd /
# cp -Rp etc etc.OLD
==== mergemaster ====
mergemaster -siva 後、mergemaster -sivr すると楽に作業が行えます。\\
siva により、現在環境にないファイルをコピーしますので、変更のあるファイルのみを -sivr で適用することになりますので、\\
単に mergemaster する場合よりも格段に作業量が減ります。
# mergemaster -siva
# mergemaster -sivr
===== 古いライブラリの削除 =====
※ただし、古いライブラリを削除した場合、それに依存していたports等が起動できなくなる場合もあるかも知れない。
# make delete-old
# make delete-old-libs
==== 古いライブラリを削除して、portsが起動できなくなった場合 ====
-/var/log/mail.logにこんなエラーが出てました。
deferral: /libexec/ld-elf.so.1:_Shared_object_"libz.so.2"_not_found,_required_by_"vdelivermail"/
delivery 4: deferral: /libexec/ld-elf.so.1:_Shared_object_"libcrypt.so.2"_not_found,_required_by_"vdelivermail"/
-対処:シンボリックリンクを貼ってやると、とりあえず動くみたいです。
# ln -s /lib/libz.so.3 /lib/libz.so.2
# ln -s /lib/libcrypt.so.3 /lib/libcrypt.so.2
==== ソースのバージョン確認 ====
/usr/src/sys/conf/newvers.sh
中に記載。間違っていると時間の大幅なロスになるため、必ず確認する。