最終更新:
先輩からDellの法人向けパンフをもらう。どうせサーバっつってもうちの会社じゃDimension3100Cか5100Cかなぁ。ふーん、サーバ専用マシンもあるんだ・・・。
Dimension3100の見積もりしてみる。見積もりはタダだしな。この頃の予算はできるだけ安く、だった。
しばらくブランクがあったが、その間にどこかで気になったサーバ用マシンSC430も見積もりしてみる。先輩との打ち合わせで予算はモニタ込みで10万で設定。5100も同じように見積もった。
かなりSC430が気になってきたので、上司へ見積もり提示する前に大慌てで情報収集にあたる。5100なら普通のWindowsが動くのは当然だから大丈夫だが、SC430はWinXPとFreeBSDサポート外なのよね。
主要スペック | 対応状況 | |
---|---|---|
チップセット | Intel E7230 | XPは付属CDのドライバで騙すかメーカー純正ドライバで対応、FreeBSDではamd64で対応 |
CPU | PentiumD 820 (EM64T) | XP対応、FreeBSDではamd64で対応。 |
ネットワーク | Broadcom BCM5721 ギガビット | FreeBSD対応、XPは付属CDのドライバで騙すかメーカー純正ドライバで対応。 |
グラフィック | オンボード XGI Volari Z7 | XPは付属CDのドライバで騙すかメーカー純正ドライバで対応、FreeBSDではX11使わないから問題ない(笑)。 |
サウンド | 無し | 使わないから問題ない(笑)。 |
HDDとかメモリ | SATA/DDR-333→400 | 多分大丈夫でしょう(笑)。メモリは値段の高さから推測すると高耐久タイプと勝手に期待。 |
FreeBSDは何事もなくインストール実績を確認、WinXPも2000からのアップデートか、SP2なら問題なくインストールできるらしい。
見積もり提示前に先輩と打ち合わせ。第1候補としてSC430を勧める事に。「サーバ用のパーツ使ってますからそこらのマシンとは違います」が売り文句。(ほんとかいな(笑))
上司からゴーサインが出た。余計なものを付けるよりもシンプルで安定したマシン構成、がわかってもらえたらしい。
先輩と発注。あれ?・・・メモリをDDR-333からDDR-400に変えても値段が一緒だったと思ったが・・・、変えちゃえ。それとモニタは2台で共用するので、モニタ有りとモニタ無しで注文した。
なかなか来ねーな。。。進捗情報確認では2週間ぐらいかかると。
着いたけど・・・モニタ有りが先に来て、2日後にモニタ無しが着いたのはちょっとどうか?と・・・。
先輩から「記念だからおまえが箱を開けろや。」とな(笑)。お神酒と榊を捧げ祝詞をあげて・・・(心の中での話だが(笑))・・・開梱する。思ったより結構でかい感じがするかも。とりあえずネットワーク以外の接続する。
まずマニュアルに目を通す。基本でしょう。えっ俺だけだって?
ん?セットアップCDでセットアップしろって?なんだこりゃ?とりあえず電源入れてみるか。おお!グラフィカルな画面が登場。でもやはりセットアップCDを入れて再起動しろってことらしいが、意味がようわからん。結局セットアップCDを入れて再起動したがやはり意味がようわからんので無視。
一旦WindowsのCDを入れて気がついたのだが、セットアップCDで起動した・しないに関わらず、あらかじめ数メガのプライマリパーティーションが作られている。中身はMSDOSチックなのだがたいした大きさでもないし、確かたいした物も入ってなかったはず。最終的にはいらないと判断し、後の作業で全てまっさらにすることに。
いらないデバイスは不使用にしておこう。起動順もHDD→CDに。
BIOSと同じような起動方法でメンテナンスプログラムが動くので、先にHDDのチェックを行った。メモリも・・・と思ったがかなり時間がかかりそうだったので短い奴だけに。
さて、FreeBSD6.1-RELEASE/amd64のCDを入れて起動。・・・ブートメディアが見つからない。なんでCDが認識しないの?・・・と思ったら。そうか、CD-ROMドライブはSATAじゃなくてATAだからデバイス未使用にしちゃだめだった(←馬鹿)。
何事もなかったようにCDブートし、FreeBSDのインストール。最小ディストリビューションで必要なものを付け加えた。ソースも全てインストール。パッケージは後に入れるPHPとMySQLとSambaに必要なものとPOPデーモンとsudoかな。気になるのがパッケージインストール作業中にXMLあたりで失敗したのかどうなのかよくわからないがメッセージが出たことかな。管理者パスワードとタイムゾーンとネットワークの設定を済ませておく。ここまでは小一時間で済んだ。
運用前だからいろいろ弄るのは今のうち。ということでカーネルの再構築をしてみる。説明どおりにカーネル設定ファイルをコピーして編集する。いらないデバイスを削るためだ。SCSI・RAID・FIREWIRE・未搭載のNICなどなど。あとプリンタや外部USB機器(プリンタ・スキャナ・フラッシュオーディオ等)も削った。次にmake.confの編集。CPUに合わせた最適化オプションをつける。そして
% make buildkernel
あれ?
「noconaってcpuは何?」ってエラーだった。てっきりカーネル設定ファイルのcpu項目ってのはnocona
とすると思ったのだが、試行錯誤や調査の結果、やはり最初のままHAMMER
でいいみたい。
最適化オプションでMMXやらSSE3やら設定したのだが、途中でそれを無視するオプションが実際に使われていることに気がついた。なぜ?と思っていろいろオプションを変えてみることに時間を費やしていたが、開発者情報によるとあえてカーネル構築ではそのタイプの最適化を行わないことになっているそうな。意味がわからんのだが仕方が無いのでそうしておく。
それでもmake
中にエラーで止まる。デフォルトのカーネル設定だと最後までいくのに。仕方がないので(旧Macのトラブルシューティングで有名な)消去法で試行錯誤してみた。するとSCSIカード積んでいないのに
device scbus # SCSI bus (required for SCSI)
を外すのをやめたらエラーが出なくなった。なんじゃそりゃ。
何事もなくmake installkernel
も済んだ。でも再起動してみるとなんか見慣れない起動画面だ。ブートメニューの後、ログインまで黙ってしまうのだ。止まっているわけではないのだが、認識したデバイスとかが表示されていたのが表示されない。なんとも気持ち悪いので試行錯誤した結果、
device splash # Splash screen and screen saver support
を外すのをやめたら表示されるようになった。起動時のタイトル画面とスクリーンセーバって書いてあると思ったのに、そんな意味もあるのか。
再起動してみると今度はデバイスが表示されるようになったので確認をしてみた。ちゃんと新しいカーネルの名前がCOLONEL
(←カーネルサンダースのカーネル:笑)になっている。でもなんかおかしいな、あれ?2つ目のCPUはどこへ行った?。確か以前の起動時には2つ目のCPUも有効になったようなメッセージがあったはずだが。どうにか調べてみたら
options SMP # Symmetric MultiProcessor Kernel
の行をつけ足す必要があったらしい。なるほどね。
上司から「新しいサーバはまだか?」と言われてしまった。「今、最新のCPUに合わせてチューニング中です」と答えておいた。えっ笑うところ?
カーネル再構築がうまくいったので(昔はうまくいった例がなかった)、調子に乗ってシステムの再構築もやってみることに。make buildworld
とやってみたが、途中でエラーで止まる。原因もさっぱりだったしこれ以上時間をかけるのはさすがにちょっとまずいかも?と思い、このまま断念することにした。
いろいろごちゃごちゃいじってきたので、一旦ハードディスクをまっさらにして今までの事を正しいやり方でやり直すことに。この時どうせならと思い、設定ファイルを保存して殆どの作業をシェルスクリプトにした。そしてネットワークケーブルの接続。
DNS,NFS,POP3,SMTP,NTP・・・この辺もすでに経験済みだったので自作シェルスクリプトにて自動で設定ファイルをコピーして完了。
そーいや利用者にユーザアカウントを新しいサーバで登録し直してもらわなきゃな。とか思っていたのだが、実はお引越しできるんじゃん?と思って調査してみたら・・・あった。古い/etc/master.passwd
の内容を必ずvipw
で新しいmaster.passwd
に追加編集、/etc/gruop
も同様に追加編集して、ユーザのホームディレクトリを手動で作ればOK。当然ディレクトリのオーナー情報・パーミッションの再設定も忘れずに。
apache2とMySQLとPHP5とSamba、それに依存するものをまとめてコンパイル&インストール。この辺もすでに経験済みだったので自作シェルスクリプトにて自動でやってしまった。
#!/bin/sh
#### (compile option enviroments)
export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"
export CXX=gcc
export CXXFLAGS="-O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse -felide-constructors -fno-exceptions -fno-rtti"
#### apache2 build
cd /usr/src
tar xvf /cdrom/dist/httpd-2.0.59.tar.gz
cd httpd*
./configure \
--enable-auth-digest \
--enable-dav \
--enable-dav-fs \
--enable-expires \
--enable-mime-magic \
--enable-so \
--enable-vhost-alias \
--with-mpm=prefork \
--enable-suexec \
--with-suexec-caller=www \
--with-suexec-docroot=/home/export/www \
--with-suexec-uidmin=100 \
--with-suexec-gidmin=100 \
--with-suexec-userdir=public_html \
--enable-static-support \
--enable-static-rotatelogs
make
make install
make clean
% sh apache.build.sh
#!/bin/sh
#### (compile option enviroments)
export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"
export CXX=gcc
export CXXFLAGS="-O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse -felide-constructors -fno-exceptions -fno-rtti"
#### MySQL5 build
mkdir /home/export/mysql
cd /usr/src
tar xvf /cdrom/dist/mysql-5.0.27.tar.gz
cd mysql*
./configure \
--prefix=/usr/local/mysql \
--localstatedir=/home/export/mysql \
--with-unix-socket-path=/tmp/mysql.sock \
--with-mysqld-user=mysql \
--with-charset=ujis \
--with-extra-charsets=ujis,sjis,utf8,binary \
--enable-assembler \
--enable-local-infile \
--enable-thread-safe-client \
--disable-shared \
--with-mysqld-ldflags=-all-static \
--with-pic \
--with-named-z-libs=not-used
make
make install
make clean
% sh mysql.build.sh
#!/bin/sh
#### (compile option enviroments)
export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"
export CXX=gcc
export CXXFLAGS="-O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse -felide-constructors -fno-exceptions -fno-rtti"
#### PHP5 build
cd /usr/src
tar xvf /cdrom/dist/php-5.2.0.tar.bz2
cd php-5*
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-scan-dir=/usr/local/etc \
--with-zlib \
--disable-cgi \
--enable-bcmath \
--enable-calendar \
--enable-ctype \
--enable-exif \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr/local \
--with-tiff-dir=/usr/local \
--with-ttf \
--with-freetype-dir=/usr/local \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--with-mime-magic \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--enable-sockets \
--enable-memory-limit \
--enable-zend-multibyte
make
make install
make clean
% sh php.build.sh
#!/bin/sh
#### (compile option enviroments)
export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"
export CXX=gcc
export CXXFLAGS="-O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse -felide-constructors -fno-exceptions -fno-rtti"
#### Samba3
cd /usr/src
tar xvf /cdrom/dist/samba-3.0.23c.tar.gz
cd samba*
cd source
./configure \
--disable-cups \
--with-i18n-swat
make
make install
make clean
% sh samba.build.sh
再起動してサーバ接続・・・全てOKですな。apache確認ページ、phpinfo()
も出たし、MySQLもとりあえず接続OK。
で・・・MySQLのユーザってどうやって作るんだっけ?参考書をひっくり返してユーザ作成。あれ?PHPからアクセスできないじゃん。あ、localhostとかでの設定の考え方が微妙に間違えてた。最終的にはこれまたスクリプト・・・mysqlに渡すSQLをファイルにして自動処理。おけ。
本来の目的のひとつであるPHPによるWebアプリケーションを移行する。まぁ殆どスクリプトやデータファイルのコピーとアドレスの変更とかそんなんだけど。で、データの移行作業が完了してシステムを動かしてみた・・・。
もっ・・文字化けがっ!
あれーーっ!設定間違えたかなー?エンコーディングは?スクリプトは?・・・。フォームから入力した日本語が??だらけに。おそらくシフトJISのHTTP入力(POST/GET)でマルチバイト検出か翻訳変換(transrate)に失敗してLatinとかで変換しているのではなかろうか?。単純なテストスクリプトではうまく動作しているが、肝心なスクリプトだと先頭でチェックしても化けている。しまいには特定のスクリプトで返事が返ってこない。httpdの子プロセス?がCPUを50%以上削ってるし・・・(デュアルコアなので実際には片方のCPUが100%近く)。もしかしてリリースされたばかりの最新版PHPだからバグか?と思って一つ前のバージョンのPHPを再ビルドしてみたがやっぱりダメ。バグ情報も出ていないようだし・・・。マルチバイト関係の設定を旧サーバから上書きしてもダメ。結局PHP5をあきらめてPHP4の最新版をインストールしてみたら・・・動いた。(泣)
軽い放心状態で先輩に「PHP5はあきらめました。XREAがPHP4を続行する気持ちがなんとなくわかったような気がします・・・」と報告。この時点ではPHP5で導入されたoniguruma
とかいうライブラリが原因ではないかと思っていた。またXREAがPHP5を導入しないという話を聞いていたが、今ではPHP5も導入されている。
図面データを引越しするので設計の人に作業をとめてもらうよう頼む。CADマシンをnfsマウントしてからデータディレクトリを丸ごとコピー。方法は
mount -t nfs コピー元ホストアドレス/コピー元ディレクトリ /mnt
cp -R -p /mnt /home/コピー先ディレクトリ
umount /mnt
GhostScript
を入れておくとPDFも変換できるようなので、インストーラCDからパッケージインストールしておいた。んでImageMagick
のソースを拾ってきてインストール。
#!/bin/sh
#### (compile option enviroments for ImageMagick)
export CFLAGS="-DHAVE_BROKEN_REALPATH -O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse"
export CXX=gcc
export CXXFLAGS="-O3 -march=nocona -mtune=nocona -mmmx -msse -msse2 -msse3 -mfpmath=sse -felide-constructors -fno-rtti"
#### ImageMagick
cd /usr/src
tar xvf /dist/ImageMagick-6.3.4-4.tar.bz2
cd ImageMagick*
./configure \
--enable-lzw=yes \
--with-quantum-depth=8
make
make install
make clean
% sh imagemagick.build.sh
下調べをしていればあまり問題はなかったな。環境設定は使いまわし。GhostScriptも中でコマンド呼び出ししているみたいだし。
システムのカスタマイズのカーネルの再構築の話で
device scbus # SCSI bus (required for SCSI)
を外すのをやめたらエラーが出なくなったという事があったのだが、よーく見返してみると
device umass # Disks/Mass storage - Requires scbus and da
あ゛・・・ちゃんとscbus
が必要だと書いてあるじゃん・・・。
さらに、make buildworld
で失敗したのはもしかしたら-O3
が原因だったかも・・・。過度な最適化オプションはバイナリの動作だけでなくコンパイルにも影響するような気が。