このサーバのバージョンアップ

タグ: FreeBSD

さて、私が専有して私物として使っているこのサーバですが、ここ1,2年あまりあまり活用していませんでした。っていうのは、恥ずかしながらOSのバージョンが未だにFreeBSD 4.11で、もうすでにportsのメンテナンス対象からも外れてしまっていると。しかしいかんせんデータセンターに置いてある物なので、これをメジャーバージョンアップするのは大変で、忙しさにかまけて放置しているうちにどうしようもない状態になってしまったのであります。

これではいかんと一念発起して、このサーバを再度使い倒してやるつもりです。

ついでなのですが、メールシステムがqmail+vpopmailなので、backscatterもすごいしspam対策も手段が限られているしでいいことがない。qmailの哲学はよく分かるのだけれどももはや2008年に使うに適したメールサーバソフトではないな、ということでこれも新しくするつもり。

てなわけで、まずは現在のFreeBSD 6.3-RELEASEにソースアップグレードするには、一旦FreeBSD 5.3-RELEASEにアップデートする必要があるわけですが、これを検証してみました。最近は仮想化ソフトがあるのでこのあたりの検証は楽ですね。MacBookのParallelsに、古いFreeBSD 4.11のCD-ROMからシステムをインストールして、FreeBSD 5.3のアップグレードガイドに基づき、「リモートからsshでログインした状態だけでアップグレードできるか」を検証してみました。

すると5.3のカーネルとブートローダ、そしてdevice.hintsだけを更新した状態で再起動する手順のところで、不正なAPIを使用したということで、起動中にシングルユーザモードに落ちてしまいました。これではダメです。FreeBSD 4.Xは5.Xと分岐してから長い時間が経ちすぎているので、やはりソースレベルでのスムーズなアップグレードには無理があるようです。なにしろ、標準ファイルシステムもUFSからUFS2に変わっているくらいですから、無理もない話です。

ということで、あっさりとあきらめ、データセンターに連絡してシステムの初期化再インストールをしてもらうことにしました。これ、数年に一回はやった方がいいかもね。さて、この場合にインストールされるのはFreeBSD 6.2-RELEASEになります。プロバイダの方には最小構成でインストールすることを頼んでいますが、Xを入れられてしまうとX.orgのバージョンが6.2-RELEASEではまだ6.9.0のはずで、ディスクレイアウトも変わってしまうなど色々と難儀なことに。 まあ、入れていないことを期待&入っていたらアンインストールすればいいやということで。

Webサーバはこの際にApache 2.0系列から2.2系列に上げるつもり。メールサーバはPostfix+Dovecotでやってみることに。とりあえずこれだけやった。

  • コンテンツのバックアップ
  • ホームディレクトリのバックアップ
  • /etcのバックアップ
  • /usr/local/etcのバックアップ
  • qmail設定のバックアップ
  • /var/serviceのバックアップ
  • crontabのバックアップ

で、6.2-RELEASEから6.3-RELEASEへのリモートからのバージョンアップ検証。これはもちろんOK。

で、システムが止まる前に、これをやります。

  • 最後のメール取り込み
  • qmailの停止
  • メールスプールのバックアップ

15:00:13。予定通り落ちる。某データセンター、時間にきっちりしてますね。

15:41。pingレベルでは復活していますね。まだ設定済みの連絡はなし。

% ping fromto.cc
PING fromto.cc (210.188.204.134): 56 data bytes
64 bytes from 210.188.204.134: icmp_seq=0 ttl=52 time=26.994 ms
64 bytes from 210.188.204.134: icmp_seq=1 ttl=52 time=27.244 ms
^C
--- fromto.cc ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 26.994/27.119/27.244/0.125 ms 

16:17。クリーンインストール完了。

パスワード変更、ホームディレクトリリストア、ssh関連設定変更。telnet, ftp停止。

# portsnap fetch
# portsnap extract

初期状態で入っているportsはこれだけ。Xが入っていなくてよかった。

# pkg_version -v
3dm-2.04.00.018,1 < needs updating (port has 2.04.00.035_1,1)
perl-5.8.8_1 = up-to-date with port
tw_cli-9.4.0.1 < needs updating (port has 9.4.1.2) 

ports/net/rsyncをインストールして、rsyncでコンテンツの転送開始(でかいのでこれを先にやる)。うち、未だにADSLなので(もうすぐやっと光になる)、こういうアップロードには泣きそうなほど遅い。明日までアップロードにかかるかも。まあ、rsyncだから途中で再起動かけても大丈夫だけどね。

ports/ports-mgmt/portupgrade をインストール。同時に RELENG_6_3ブランチのcsup開始。 portupgradeがインストールできたらportupgrade -a。小物をmakeする (ports/japanese/less, ports/misc/lv, ports/japanese/nkf 等)。

17:23。csupが終わったので、buildworld buildkernelする。

# cd /usr/src
# mergemaster -p
# make buildworld buildkernel

やっぱりParallelsと違って実マシンは速い…。

18:11。サーバソフトの主役さんたちをインストール (ports/www/apache22, ports/mail/postfix, ports/mail/dovecot 等)。

/etc/rc.conf で sendmail を disable する。

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO" 

vpopmail の Maildir を owner を変更して各ユーザのホームディレクトリに移動。

19:40。OSアップグレード最終段階。

# make installkernel
# make installworld 
# mergemaster

/etc/periodic.confに追加。

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO" 

19:53。再起動! ドキドキ。

# shutdown -r now

19:54。よし、入れた。バージョンアップ完了!

# uname -a
FreeBSD n0.fromto.cc 6.3-RELEASE FreeBSD 6.3-RELEASE #0: Mon Feb 4 19:20:27 JST 2008 
hosokawa@n0.fromto.cc:/usr/obj/usr/src/sys/GENERIC i386 

21:00。namedを設定。とりあえず旧zoneファイルを移して動作をテスト。その後、open recursion を禁止などの処理を加えてとりあえず完了。

22:28。とりあえずpostfixを立ち上げて受信はできるようになった模様。まだPOP/IMAPのアクセスは不可能。

22:49。dovecotでpop3s, imapsを設定。メールの取り込みができることを確認。やった。やあ、めでたい。メールも出せた。めでたしめでたし。

このあと、SpampdとSpamassasinをインストール。/etc/rc.confの設定。

spamd_enable="YES"
spampd_enable="YES"
spampd_flags="--user=spamd --group=spamd --host 127.0.0.1:10025 --relayhost=127.0.0.1:10026 --dose --tagall" 

/usr/local/etc/postfix/master.cfの設定。

smtp inet n - n - - smtpd
  -o content_filter=smtp:127.0.0.1:10025
127.0.0.1:10026 inet n - n - 10 smtpd
  -o content_filter=
  -o myhostname=mail-int.FromTo.Cc
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8

てなことで終了、でした。細かいことは色々省いているけどね。 やっぱり最新システムになると気持ちいいね。