$hrs: config/freebsd-4to8.txt,v 1.3 2014/05/29 05:27:41 hrs Exp $ * FreeBSD/{amd64,i386} 4.9->8.1 アップグレード手順書 (SSH リモートアクセスのみ編) 1.0 4.9R で起動 1.1 RELENG_5_5 を cvs co して、make buildworld && make buildkernel 1.2 SSH 経由でログイン、su で root になる (or root でログインする) - device.hints の追加: install -o root -g wheel -m 444 /usr/src/sys/i386/conf/GENERIC.hints /boot/device.hints - カーネルのインストール make installkernel - /etc/pam.d を削除 rmdir /etc/pam.d [注意] install{kernel,world} を実行すると mtree が /etc/pam.d をつくる。 このディレクトリがあると /etc/pam.conf よりも /etc/pam.d/other を 読みに行く。sudo などが動かなくなり、SSH 経由のログインも できなくなるので注意。/etc/pam.d を消せば良い。 - ローダの更新 cd /usr/src/sys/boot/i386 && make STRIP= install disklabel -B ad0s1 - /boot/loader.conf の要らないエントリを削除 - 念のため、古いカーネルの名前を変えておく chflags noschg /kernel mv /kernel /kernel.old - /etc/fstab から procfs を削除 - /etc/rc.conf の中で起動しているデーモンをなるべく減らす。 sshd_enable="YES" を忘れずに追加。 [注意] portmap->rpcbind の変更があるので、 RPC 関連は特に、起動しないように注意。 - mergemaster -p をしてユーザ・グループを追加しておく: proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin _pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin proxy:*:62: authpf:*:63: _pflogd:*:64: - ここで sshd を再起動させ、ログインできることを再度確認。 接続に使っているプロセスを落さないように注意。 1.3. 再起動 (ここからは 5.5R のカーネルで動作) mount syscall 関連の警告がたくさん出るが、起動は問題ない。 procfs のマウントには失敗するので、fstab から抜くのを忘れないこと。 前述のとおり /etc/pam.d が空で作成されると PAM のエラーが出るので、 ログインしたら、root になっておくのが無難。 1.4 ユーザランドを更新 - make installworld - /etc/rc* を更新 (mergemaster など)。必ずやること。 - /etc/pam.d/* をインストールした後は、/etc/pam.conf を削除する。 2.1 5.5R で起動 2.2 RELENG_6_4 で cvs co して make buildworld && make buildkernel 2.3 ユーザランドの更新前作業 - mergemaster -p をしてユーザ・グループを追加しておく: _dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin _dhcp:*:65: audit:*:77: - mergemaster は cap_mkdb と pwd_mkdb でこけるので、 次のようにバイナリを更新しておくと良い。5.5R のカーネルで 問題なく動作する。 install -o root -g wheel -m 444 /usr/obj/usr/src/lib/libc/libc.so.6 /lib /usr/src/usr.bin/cap_mkdb/ && make install /usr/src/usr.sbin/pwd_mkdb/ && make install - 設定ファイルの更新 mergemaster 2.4 カーネルとユーザランドのインストール make installkernel && make installworld 2.5 再起動 3.1 6.4R で起動。 3.2 RELENG_7_3 で cvs co して make buildworld && make buildkernel 3.3 ユーザランドの更新前作業 - make installkernel で使われる kldxref バイナリの更新 install -o root -g wheel -m 444 /usr/obj/usr/src/lib/libc/libc.so.7 /lib /usr/src/usr.sbin/kldxref && make install - share/mk/*.mk の更新 (これをやらないと make distribution がこける) /usr/src/share/mk && make install - 設定ファイルの更新 mergemaster 3.4 カーネル・ユーザランドのインストール make installkernel ここで kldxref のエラーが出ていないことを確認。出ていたら、 kldxref バイナリを更新し忘れている可能性が高いので、 更新して再度 make installkernel make installworld 3.5 再起動 4.1 7.3R で起動。 4.2 RELENG_8_1 で cvs co して make buildworld && make buildkernel 4.3 ユーザランドの更新前作業 - 設定ファイルの更新 mergemaster - ln(1) の保存(念のため) install -o root -g wheel -m 555 /rescue/ln /bin/ln.7 4.4 カーネル・ユーザランドのインストール make installkernel make installworld やる前に注意: 特に amd64 の場合、installworld すると「Bad system call」が たくさん出ることがある。 最悪の場合は sudo などのユーティリティが動かなくなるので、 installworld は、root になってからやるほうが良い。 4.5 シリアルインタフェースを使っている場合 シリアルコンソールや、シリアル通信を使うアプリケーションを 使っている場合は、デバイス名が sio から uart に変わっているので 注意すること。 特に、シリアルコンソールを使っている場合は、/boot/device.hints が make installkernel で更新されていることと、 /etc/ttys のシリアルコンソールの行に注意。 7.X までは、device.hints が hint.sio.0.at="isa" hint.sio.0.port="0x3F8" hint.sio.0.flags="0x10" hint.sio.0.irq="4" hint.sio.1.at="isa" hint.sio.1.port="0x2F8" hint.sio.1.irq="3" となっていたものが、 hint.uart.0.at="isa" hint.uart.0.port="0x3F8" hint.uart.0.flags="0x10" hint.uart.0.irq="4" hint.uart.1.at="isa" hint.uart.1.port="0x2F8" hint.uart.1.irq="3" に置き換えられている。0x10 のフラグが付いているインタフェースが シリアルコンソールの出力デバイスになるため、アップグレード後も ちゃんとシリアルコンソールは使えるが、 「8.X のカーネルで起動してから、やっぱり 7 に戻そう」と ローダから 7 のカーネルを起動しようとすると、 device.hints には sio のエントリがないので、0x10 のフラグが sio0 に付かないで起動してしまう。 また、/etc/ttys は sio->uart の変更で、ttyd0 が ttyu0 に変わっている。 これらの変更を再起動前に反映させないと、再起動後にシリアルコンソールでの 操作が不能になってしまうので、十分に注意。(ただし、上記手順にしたがっている 限り SSH でのアクセスは失われないはず) 7<->8 間を行ったり来たりしたければ、どちらのファイルも両方のエントリを 追加しておくと良い。 4.6 再起動 5.1 8.1R で起動。 これでおしまい。 FreeBSD 8.X から 9.2 へのアップグレード $hrs: config/freebsd-4to8.txt,v 1.3 2014/05/29 05:27:41 hrs Exp $ 1. 準備 - devel/subversion をインストールし、 stable/9 をチェックアウトする。 % svn co svn://svn.FreeBSD.org/base/stable/9 /usr/src - インストールされているパッケージのリストを保存しておく % pkg_info > ~/pkglist.txt - /boot/loader.conf に次の行を追加 kern.geom.part.check_integrity=0 9.X 系列はディスクパーティション情報のチェックが 厳しくなっているため、8.X で動いていたものが動かなくなることがある。 この設定は、その厳しいチェックを無効にするもの。 2. 構築 % cd /usr/src % make buildworld && make buildkernel しばらく待つ。 3. インストール前の準備(1) 万一のために、古いカーネルを保存しておく。 # cp -R /boot/kernel /boot/kernel.8 アップグレード中に操作できなくならないよう、 /rescue にある基本コマンドを保存しておく。 # mv /rescue /rescue.8 また、/rescue.8 を使うように PATH を変更しておくと良い。 # setenv PATH /rescue.8:$PATH 4. インストール前の準備(2) /etc/fstab を書き換える。ad0 を ada0 にする (ad1, ad2, ... も同様)。 da0 は変えなくて良い。 /etc/rc.conf を書き換える。基本的には古い書き方でも動作するが、 [*] のネットワークの設定の変更点に従うこと。 [*] http://www.freebsd.org/releases/9.0R/relnotes-detailed.html#UPGRADE 5. インストール # cd /usr/src # make installkernel # make installworld 6. /etc の更新 # mergemaster -U -i シリアルコンソールを使っている場合は /boot/device.hints をチェックすること。