02:30 頃 mrtg から snmpd のデータが取得できないというエラーがメールにバンバン届き、サーバに接続しても ping も通らないので AT-Link に連絡。
その間にりぼんさんのトップに報告。
10 分ほどで AT-Link から連絡があり、再起動手続きにはいるとのこと。でも待てど暮らせど立ち上がらない、10000 回打っている ping はずーっと Request time out. の文字が羅列される。30 分ほどしてメール着信と同時に電話がかかってくる。夜中の 3 時。起きているけど電話対応する物なのでしょうか?まあ、私は部屋に電話があるからいいけど、個人契約のサーバは少し考慮した方がいいと思います。しかし、電話で伝える必要がある緊急性ではありました。すなわち、一台のハードディスクがクラッシュして、立ち上げ時にカーネルパニックで立ち上がらないとのこと。多分、ソフトウエア RAID なのでその領域に不整合が出て立ち上がらないので、/dev/md0 のマウントを /dev/hdb2 などに変えてくれたら、立ち上がると思うけどどうせ不安定なまま立ち上げるなら OS をクリーンインストールしてくれると言ってくれているので、お願いすることにしました。6.2 から 7.3 になり、HDD が 20GB から 40GB になりました。ただ納得いかないのは後でステータスを見ると SEAGATE 製のドライブだったことですね。今までは両方とも QUANTUM すなわち MAXTOR だったのですけど。個人的に何度も書いていますが、QUANTUM 派ですから。
実は私が一番気になっていたのが、DB のことで私は posgresql の data をバックアプすれば他のサーバで動くと思っていたのですが、同じバージョンの同じインストールをした postgres に入れても、全文認識されず昔作られた物しか認識されませんでした。どうやら pg_dump でダンプを撮らないとダメなんですね。ものすごい経験になりましたが、DB は復活できるのか必死になって考えていました。てか、冷や汗だらだらで体臭がきつかったです。いくら頑張って色々コマンドを試しても、DB に接続できる物のデータを吸い取ってくれません。本気でバイナリーを直接読み出すプログラムを書こうと思っていました。この時点で頭の中は、DB が壊れていないか、新しいサーバで読み出せるかでいっぱいでした。
OS 再インストールと、/home など指定した位置のデータ吸い上げは全て AT-LINK が無償でやってくれるって事なので、お願いして寝るとする。この次点で 06:00 を少し回っていました。だいたい 2,3 時間で終わると言うことなので、08:20 に一旦死にながら起きあがり会社に電話して休み、そしてもう一度 11 時まで爆睡。歳のせいか本当に徹夜が出来なくなりました。寝ている間にメールが 10 通ほど届いており、まだ出来ませんというお詫びのメールでした。結構律儀。
結局引き渡されたのは昼少し前で、それから必死にインストール作業。どうやら最新の rpm は全て当ててくれてあったので、だいたい次のようなのをインストール。基本的にソースから。
openssl http://www.openssl.org/source/openssl-0.9.7d.tar.gz
automake http://ftp.gnu.org/gnu/automake/automake-1.8.3.tar.gz
autoconf http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz
lynx http://lynx.isc.org/release/lynx2.8.5.tar.gz
wget http://ftp.gnu.org/pub/gnu/wget/wget-1.8.2.tar.gz
cvs http://ccvs.cvshome.org/servlets/ProjectDownloadList?action=download&dlID=351
libtool http://ftp.gnu.org/gnu/libtool/libtool-1.5.2.tar.gz
less http://ftp.gnu.org/gnu/less/less-382.tar.gz
rsync ftp://ftp.samba.org/pub/rsync/rsync-2.6.0.tar.gz
make http://ftp.gnu.org/gnu/make/make-3.80.tar.gz
glibc http://ftp.gnu.org/gnu/glibc/
bzip2 ftp://sources.redhat.com/pub/bzip2/v102/bzip2-1.0.2.tar.gz
nmap http://download.insecure.org/nmap/dist/nmap-3.50.tgz
tcpdump http://www.tcpdump.org/release/tcpdump-3.8.3.tar.gz
libpcap http://www.tcpdump.org/release/libpcap-0.8.3.tar.gz
openssh
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-3.5p1-1.i386.rpm
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-askpass-3.5p1-1.i386.rpm
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-askpass-gnome-3.5p1-1.i386.rpm
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-clients-3.5p1-1.i386.rpm
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/rpm/RH73/openssh-server-3.5p1-1.i386.rpm
gc http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.2.tar.gz
w3m http://prdownloads.sourceforge.net/w3m/w3m-0.5.tar.gz?download
libpng http://prdownloads.sourceforge.net/png-mng/libpng-1.2.5.tar.gz?use_mirror=keihanna
gd http://www.boutell.com/gd/http/gd-1.8.4.tar.gz
wget http://updates.redhat.com/7.3/en/os/i386/glibc-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/glibc-common-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/glibc-devel-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/glibc-profile-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/glibc-utils-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/nscd-2.2.5-44.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/xinetd-2.3.11-1.7x.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/wget-1.8.2-4.73.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/wu-ftpd-2.6.2-11.73.1.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/zlib-1.1.4-8.7x.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/zlib-devel-1.1.4-8.7x.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/up2date-2.8.40-3.7.3.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/tar-1.13.25-4.7.1.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-c++-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-chill-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-g77-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-java-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gcc-objc-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gdb-5.2-2.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/gdm-2.2.3.1-23.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/file-3.39-8.7x.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/cpp-2.96-113.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/ark-3.0.5a-0.73.0.i386.rpm
wget http://updates.redhat.com/7.3/en/os/i386/arpwatch-2.1a11-17.7.3.2.i386.rpm
それから xntpd と BIND と snmpd をインスコ。言語系は ruby 。あとは pear と CPAN で php と perl のモジュールを引っ張って来ました。pear や CPAN は基本的に最後の最後。というのも、入っていないと入らないモジュールが多いためで、データベース系などはインストールされていないと弾かれますからね。
HTTP::Date
Bundle::CPAN
HTML::TokeParser
HTML::Template
XML::Parser
XML::RSS
Digest::MD5
CPAN
DBI
DBD
export PGLIB=/usr/local/pgsql/lib
export PGUSER=postgres
DBD::Pg
DBD::JDBC
DBD::SQLite
CGI
CGI::Carp
Net::HTTP
Net::SMTP
LWP
pear はちなみに
pear install Archive_Tar
pear install PHPUnit
pear install bz2
pear install MP3_ID
pear install Crypt_RC4
pear install Net_IPv4
pear install Net_URL
pear install SQLite
pear install HTML_Crypt
pear install HTML_Form
pear install HTML_Javascript
pear install HTML_Template_PHPLIB
pear install HTML_TreeMenu
pear install HTTP_Request
pear install XML_HTMLSax
pear install XML_Transformer
pear install XML_Parser
pear install XML_Tree
pear install XML_Util
pear install XML_RPC
pear install XML_CSSML
pear install XML_RSS
pear install XML_SVG
これぐらい。メール系は無料サーバなので入れていません。
それから apache + php をいれて、mod_gzip を入れて、proftpd を入れてって感じで、大きなアプリケーションのインストール。
あとは、cron の設定。で、ここらへんまでは自分の中でマニュアルを持っているので 2,3 時間で終わり。主にコンパイル時間かな。呪文だけでインストールが出来るのは自動で全部やるスクリプトを書いてありますから、あっという間ですわ。
それから古いデータベースを祈るように稼働させると、なんとか読み出せた。なので早速新しいサーバへ移動させるためにデータをダンプ、コマンドは pg_dump -d DBNAME > output.sql。これを ftp で渡して新しいサーバで psql -d NEWDB -f output.sql ってやって読み込み。が、エラー。**** のデータは壊れているよ〜って出て読み込まれない。出来たデータを見ても、確かに 4 件ぐらい。ギャー。本気で死ぬかと思いました。
でもここで諦めてはいけません。データベースをバックアップできないようなデータベースシステムはないはずですから、pg_dump のオプションを調べると、-D という明示的に INSERT 文を作って出力するってのがありました。それで出力すると、EUC で保存された部分は \222\232 などエスケープコードとして表示されて、全文テキストで出力されますのでエラーもわかりやすくなります。
そして、気を取り直してインサート。出るわでるわ、エラーが。20000 件ほどユーザがいるわけですが、 60 件ほどエラーが出ました。これは初めの頃 EUC の変換を完璧にしていなかったのが原因なのと、あとは半角カナ及び機種依存文字、絵文字が書かれている場合に NON EUC として弾かれました。バージョンが上がって、チェックが厳しくなっているようですね。試しに旧サーバで使っていた CGI をそのまま使って、依存文字で書くと DB に弾かれました。だいぶんバージョンアップしているんだ。そんなわけで、サインアップ関連の CGI にて EUC の確からしさを正しく判断するようにしました。これで、次回の統合時にはエラーが出なくなるはずです。エラーが出たデータは、その部分を切り取って、変更しました。
あと、なぜか quota が動いていなかったので、設定して再起動。quota なんてのは絶対に必要な物なんだから、デフォで入れておいてほしい物です。さすがに最近のカーネルはデフォで入っているのでカーネル再コンパイルなんてことは必要なく、/etc/fstab を書き換えて quota.user を作って再起動で済みますが、再起動はリモートでは極力やりたくありませんからね。
ここで一旦 www サーバの再起動。
これから各種設定のチューニングを行いました。一旦先に www だけ復活させたのは、あまりにも落ちているのはダメだと思ったからですわ。ftp はセキュリティの確保を確かめきるまでは開けられませんしね。
そんなのをして 27 時に FTP サーバの allow host を開放。
なんとか最低限復活しました。
本日の気分:blue さんが変:0 時間( 計 0 時間 ),明日のラッキーアイテム:サーバダウン
|