FreeBSD/アップグレード の変更点


*''&size(15){FreeBSD OSアップグレード};'' [#cf149240]

[[dokuwiki.fl8.jp転載済>http://dokuwiki.fl8.jp/doku.php/02_freebsd/99_%E3%81%9D%E3%81%AE%E4%BB%96/%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89]]

#contents

まずは、CVSupでソースを最新にする必要があります。~
今回はFreeBSD 5.4 ⇒ FreeBSD 6.0 へ

**''CVSupをインストール'' [#v5e6eadc]
※Portsを最新版にするは [[こちら>FreeBSD/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を用意'' [#vc29c736]
 # cp /usr/share/examples/cvsup/stable-supfile /etc/stable-supfile
 # chmod 644 /etc/stable-supfile 

**''/etc/stable-supfileを修正'' [#c928f378]
 # 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」と言った感じに変更します。

**''実行してみる(ソースの同期)'' [#p1bf3e76]
▼やり方はPortsの場合とほぼ同じです。
 # cvsup -g -L 2 /etc/stable-supfile
 ---------------------------------
 .
 .
 .
 .
 .
 .

**''自動設定'' [#z1a485f7]
 # crontab -e
 ---------------------------------
 00 6 * * * root /usr/local/bin/cvsup -g -L 2 /etc/stable-supfile

**''ソースのコンパイル(make buildworld)'' [#obb73ef1]
ソースの同期が完了したら、同期したソースをコンパイルします。~
ソースをコンパイルするには、make buildworldというコマンドを使います。~
これを行うと、kernelを除くFreeBSDのベースシステム全てがコンパイルされます。~
※すっごく時間がかかります。(うちのCeleron 600MzのPCだと6時間くらい)
 # cd /usr/src
 # make buildworld

このようにして、放置しておくとbuildworld.logにログを残してくれます。
 # /usr/bin/nohup time make buildworld >buildworld.log &
-[[nohup>Unixコマンド/nohup]]
-[[time>Unixコマンド/time]]

**''kernelのコンパイル(make buildkernel)'' [#q694e2a1]
ソースがコンパイルできたら、次は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を作成してくれます。

**シングルユーザモードで起動 [#fd61fe27]
デーモンくんの表示されている個所で、シングルユーザモードを選択肢する。
 # fsck -p         (ファイルシステムのチェック)
 # mount -u /      (/を読み書き可能にして再マウント)
 # mount -a -t ufs (/etc/fstabに指定されているその他のUFSを全てマウント)
 # swapon -a       (スワップを有効にする)

**''コンパイル済みのシステムのインストール(make installworld)'' [#q2209593]
 # cd /usr/src
 # make installworld

**''/etcファイルの更新'' [#t69e2ed1]

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

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

***''/etcのバックアップを取っておく'' [#k500214c]
 # cd /
 # cp -Rp etc etc.OLD

***''mergemaster'' [#wfb1be39]
mergemaster -siva 後、mergemaster -sivr すると楽に作業が行えます。~
siva により、現在環境にないファイルをコピーしますので、変更のあるファイルのみを -sivr で適用することになりますので、単に mergemaster する場合よりも格段に作業量が減ります。
 # mergemaster -siva
 # mergemaster -sivr

**古いライブラリの削除 [#e83d96c8]
&color(red){※ただし、古いライブラリを削除した場合、それに依存していたports等が起動できなくなる場合もあるかも知れない。};
 # make delete-old
 # make delete-old-libs

***古いライブラリを削除して、portsが起動できなくなった場合 [#paae12a8]
-/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


**ソースのバージョン確認 [#ya258000]
 /usr/src/sys/conf/newvers.sh
中に記載。間違っていると時間の大幅なロスになるため、必ず確認する。