普段このサイトを見ていただいている方には関係ないことだが、このサイトを表示しているWebサーバは、私の自宅にあるただのPCである。で、このPC、ネットワーク周りがどうにも調子が悪い。大量のデータを送ると止まったり、データを全く受け付けなくなってしまったりする。そこで、NIC(ネットワークカードのことね)を取り換えることにした。ついでに、サーバを組み立ててから全然アップグレードしていないOSも入れ替えることにした。以下はOS入れ替えのための備忘録である。
このサーバに使用していたOSはFreeBSD 4.5-RELEASEである。確か今年の初めに出たバージョンだが、今年はクラッカーの活躍も目覚ましく、世界中のOSでやたらと脆弱性が見つかった年だった。FreeBSDも例外ではなく、やたらとパッチを連発した揚げ句、次のバージョン(4.6)がリリースできずに、パッチを当てたバージョン(4.6.1)に差し替えになるなど、開発者にとっては災難としか言い様の無い状況だった。そんな状態だったのだが、無精な俺はまともにパッチを当てることなく(やったことといえば、Open SSHをPortsの物に差し替えたくらい)4.5のままで通していた。さすがにそんな状況を続けるのも恐いので、この際一気にバージョンアップさせることにした。
バージョンアップとして、cvsupとmake worldを利用して、一気に4.7-STABLEにするという手法をとることにした。実は、FreeBSDを使い始めてから4年は経つが、make worldをするのは初めてだったりする。今まではさくっとOSを消してから入れ直していたのだ。入れるのもRELEASEばかりだったし。ただ、今回はさすがに常時接続&Webサーバとして運用中であるため、なるべくダウンタイムを少なくしようと上記の手順を取ることにした。
とりあえず、以下に手順を簡単にまとめてみる。さすがにここは日記スペースなので、詳しく書くのは止めて、いずれ別ページにまとめたいと思う。
1,cvsup stable-supfile 接続するcvsサーバは、単純にtracerouteしてホップ数が一番少なかったcvsup2.jp.freebsd.orgにした。
2,UPDATINGを読む。英語なのでさっぱりわからん。
3,/etcを/etc.oldにコピーしてバックアップ。これ重要。
4,/etcと/usr/src/etcを適当に見比べる。特にgroupとmaster.passwdを見て、追加されたグループやアカウントがないかを確認。今回は無かったので一安心。
5,/etc/defaults/make.confを/etc/make.confとしてコピーし、修正。今回はCFLAGSとNOPROFILEのコメントを外した。
6,/usr/srcに移り、make buildworld。
7,/usr/src/sys/i386/confに移動し、GENERICカーネルのコンフィグファイルをコピーし(今回はEPIAという名前にした)、修正。以下のオプションをつけた。
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
options IPDIVERT
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=200
options IPFIREWALL_DEFAULT_TO_ACCEPT
これはPPPoEとファイヤーウォールを有効にするためのオプション。本当はGENERICが正常に動くことを確かめてからカーネルを再構築すべきだが、うちのマシンではこのオプションが動かなくては話にならないので最初からつけた。
8,/usr/srcに移り、make buildkernel。
9,先にカーネルをインストールする。シングルユーザモードにし(shutdown now)、make installkernel。
10,リブートし、シングルユーザモードで起動する。(boot -s)
11,パーティションのマウント。
fsck -p
mount -u /
mount -a -t ufs
swapon -a
(はっきり言って意味はわかっていない。/sbin/mount -aだけでもいい気がする)
12,/usr/srcに移り、make installworld。これでユーザーランドのインストールも完了する。ここからは/etc内のインストール。
13,/usr/sbin/mergemaster -svia これで/etcに新しくできたファイルをインストールする。
14,/usr/sbin/mergemaster -svir ここが正念場。新しいファイルを上書きするか、前のファイルを残すのかを決める。基本的には自分がいじらなかったファイルは上書き。上書きしなかったファイルは、group, master.passwd, rc.conf, hosts, ppp.confなど。特にmaster.passwdを上書きしたりすると確実に死ぬので十分に注意!ちなみにinetd.confは、いったん上書きしたあと手で修正した。
15,リブート。そしてコンソールの前で祈る。無事起動したら拍手。
ここまではWebで調べればいくらでも出てくるので、この後で気になった点。
・dhcpsが起動しない。
LANのために使用していたWide-DHCP-Serverが動かなくなった。Portsから再インストールすると起動するようになった(make clean; make; make install)。ライブラリに変更があったようなので(UPDATINGに書いていた)、それが原因のよう。
・TomcatがJava SDK1.2.2で動くようになった。
このマシンにはJava SDKが、成り行き上1.1.8, 1.2.2, 1.3.1の3種類(正確には、1.2.2と1.3.1はLinux版も入っているので5種類)入っている。アップグレード前は1.3.1で動いていたのだが、アップグレード後は1.2.2で動くようになってしまった(最初のインストール時には1.2.2で動いていた)。これもTomcatとmod_jk(Apacheと連携させるためのツール)をportsから再インストールすることで復活した。ここでの注意点としては、mod_jkを先に入れること、/usr/local/etc/apache/mod_jk.confを修正すること、/usr/local/etc/apache/httpd.confを修正し、mod_jkを呼び出すようにすることの3点。
これくらいかな。覚え書きといいつつ長くなりすぎた。あとはいずれまとめます。日も変わっちゃったしね(これは12/2(月)の夜に書いてます)。