目次
D945GCLFサーバ作成
ハードウェア
- マザーボード
- Intel D945GCLF
- CPU ATOM 230D 1.6GHz HT
- チップセット Intel 945
- メモリ
- DDR2 667 2GB
- HDD
- WD5000AASC SATA 500GB HDD (2008-11-15 熱によりクラッシュ)
- Hitachi HDP72505 SATA 500GB HDD (2008-11-15リプレイス)
ATOM 230Dを搭載したMiniITXマザーボード、D945GCLFをベースとしたサーバを構築する。我が家では、mobioNX1)に始まり、EPIA M6000E2)、EPIA M80003)とサーバ性能を少しずつ増強してきたが、C3 800MHzである、現行のparpikaサーバの性能は、実用ギリギリをわずかに下回るように思う。
このため、クロック周波数で倍速、メモリバスも高速化され、HTをサポートしたATOM 230D 1.6GHzで、一気にサーバの性能を三倍速くしようという目論見である。
当初は、paprikaのHDDをそのまま移植する予定であったが、HDDの寿命も勘案し、HDDも静音型のSATAドライブで置き換えることとした。
が、この時点で買い物に不足があったことが発覚した。
- SATA電源変換ケーブル
- P4 用 4pin 12Vコネクタ変換ケーブル
これらがないと、BIOSすら起動させることはできない。現在、paprikaを駆動しているケースにはP4用コネクタがあるはずなので不要だが、インストール用に掘り出した電源にはコレがなかった。SATA電源は全くぬかっていた。マザーボードの箱に、「SATAケーブル」とかいてあったのでてっきり、電源も入っていると思ったのだ。が、実際は入っていなかった。
とりあえず、Vine Linux 4.2のインストール用CDを作成して、続きは部材を調達してからすることにする。
Intel 945チップセットの発熱
D945GCLF/D945GCLF2はCPUには小さな剣山、そして945チップセットに巨大なファン付のヒートシンクを搭載している。いささか、異常な構成のようにも思えるが、それ程の熱を発生するということである。
が、この、チップセットクーラーに搭載されているファンは、非常に粗悪なものである。実際、我が家では、わずか四ヶ月で、全く回らなくなった。手でも回せないくらいに、固く固着しており、この結果、十分に排熱出来なくなったチップセットの熱は、HDDを焼き殺すに至った。
従って、このファンは、積極的に、良品に置き換えて運用すべきであると考える。4cm角のファンが使えるので、運用開始前に置き換えるべきだろう。
ソフトウェア
- OS: Vine Linux 4.2
- autofs問題
何故か、Vine Linuxの auto.netには問題がある。具体的には、sortが、古い呼び出し方を使っているので、正しく機能しないのだ。
45: $SHOWMOUNT | LC_ALL=C sort +0 | \
となっているものを、
45: $SHOWMOUNT | LC_ALL=C sort -k1 | \
のように修正しないと、/net 経由でのNFSマウントが利用できない。
サーバ環境の設定
追加したパッケージ:
- clamav
- net-snmp
- net-snmp-utils
- net-snmp-perl
- net-snmp-devel
- mrtg4)
- gd-devel
- gd
- spamassassin
- spamassassin-tools
- perl-Mail-SpamAssassin
- vnc
- vnc-server
- PostgreSQL
- postgresql-ruby
これはソースパッケージを取り寄せて再構築する必要がある。
# apt-get source postgresql-ruby # rpm -i postgresql-ruby-0.7.1-0vl2.src.rpm
SPECファイルの8行目のCoyright: という表記は古いものなので、License: に書き換えてから、リビルドする。この際 ruby-develへの依存があるので、インストールされていないならインストールしておく。
# rpm --clean -ba /usr/src/vine/SPECS/postgresql-ruby.spec
できあがったパッケージをインストールする。
- MySQL
- php
- php5
- fml
- fetchmail
- courier-imap
- courier-imap-authlib
- courier-imap-authlib-devel
- thread
- expect
- squid
- squirrelmail-ja5)
- postfix追加
- postfix-pcre
- postfix-ldap
- cyrus-sasl-md5
- cyrus-sasl-plain
- cyrus-sasl-devel
- ntp
CPANの設定作業
apache2の設定
- apache2/conf/httpd.conf
管理者
ServerAdmin webmaster@wildtree.jp
タイムアウト(デフォルトは120で、MTを運用するには短すぎる)
Timeout 300
ユーザ用public_htmlの有効化
UserDir public_html
- mod_ssl
オレオレ認証
サーバーキーの作成
# cd /usr/share/ssl/certs # make server.key umask 77 ; \ /usr/bin/openssl genrsa -des3 1024 > server.key Generating RSA private key, 1024 bit long modulus .....................++++++ ............++++++ e is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase:
毎回パスフレーズを聞かれないようにする。
# openssl rsa -in server.key -out server.key Enter pass phrase for server.key: writing RSA key
サーバー用公開鍵を作る
# make server.csr umask 77 ; \ /usr/bin/openssl req -new -key server.key -out server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kanagawa Locality Name (eg, city) []:Yokohama Organization Name (eg, company) [Internet Widgits Pty Ltd]:WildTree Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:chive.wildtree.jp Email Address []:root@wildtree.jp Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
サーバ用証明書の作成
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650 Signature ok subject=/C=JP/ST=Kanagawa/L=Yokohama/O=WildTree/CN=chive.wildtree.jp/emailAddres s=root@wildtree.jp Getting Private key
apache2/conf.d/ssl.confの修正
SSLCertificateFile /usr/share/ssl/certs/server.pem SSLCertificateKeyFile /usr/share/ssl/certs/server.key
Virtual Host 設定
Apache2になって、メインホストの概念が消滅した。このため、VirtualHostを使うのであれば、必ず、メインであるホストについても、VirtualHostの定義をする必要がある。
NameVirtualHost *:80 ←必ずポートも指定する。 <VirtualHost *:80> ServerName www.wildtree.jp:80 </VirtualHost> <VirtualHost *:80> ServerName wildwood.ddo.jp:80 DocumentRoot /var/www/wildwood ErrorLog logs/wildwood_error_log TransferLog logs/wildwood_access_log </VirtualHost>
というような感じにする。
freshreader
パッケージを取り寄せる。
# wget http://www.freshreader.com/ver2/archive/sffr20unix_ja.tar.gz
apache2ならば /var/www の下あたりに展開。
# tar -zxf sffr20unix_ja.tar.gz -C /var/www
apache2/conf.d/freshreader.conf を作り、設定を書く。
Alias /freshreader /var/www/freshreader <Location /freshreader> ... (適当に設定をしてください。) </Location>
/etc/cron.hourly/freshreader.cron を作り以下の内容を。
#!/bin/sh sudo -u apache /usr/bin/php -f /var/www/freshreader/crawler.php
PHP5を利用している場合には更に、/etc/php5/php.ini に次の内容を追加。
[freshreader] zend_extension = /var/www/freshreader/ioncube/ioncube_loader_lin_5.2.so
sshd
PasswordAuthenticationは、必要なキーを作成次第、'no'にする。なお、いきなりコレをしてしまうと、telnetdが動いていないので、リモートログイン出来なくなってしまう。まず、鍵の作成を行い、外からその鍵で入れることを確認してから、作業する。
MySQLデータの移行
正攻法は、mysqladmin –all-databases を使うというモノだろうが、MySQLの厄介なところは日本語の扱いが、データベースごとにまちまちだったりすることだ。
移行元と移行先の、アーキテクチャもMySQLのバージョンも同じなら、データをディレクトリごとごっそりコピーしてしまうのが簡単だ。
# cd /var/lib # tar -cf MySQL.tar mysql
移行先で、アーカイブをほどく。事前に念のため、空っぽのはずのmysqlはリネームしておこう。
# cd /var/lib # mv mysql mysql.old # tar -xf MySQL.tar
なお、文字コードの扱いが変態的というか、何も考えられていない、MySQLを使うために、/etc/my.cnf に様々な細工を施していた場合には、それも移行する。
[client] ... default-character-set = ujis ... [mysqld] ... default-character-set = ujis skip-character-set-client-handshake ... [mysql] ... default-character-set = ujis ....
など。特に肝心なのは、mysqld セクションの skip-character-set-client-handshakeの様だ。MySQL5からは、とってつけたように、文字コードの扱いを、クライアントサーバ間で調整するようにしてみたりしているが、MySQL4以前からのデータを引き継いできていて、まちまちな文字コードが住んでいると、はっきり言って破綻してしまう。なので、余計なことをするな、と一言言い置くことが肝心なのだ。
なお、XOOPSだのOpenPNEだの、MySQLをWEB経由で利用している場合には、php.iniなどの設定をいじらないと、化け化けの文字のページに遭遇するかもしれない。
PostgreSQLデータの移行
PostgreSQLは何も考える必要もなく、pg_dumpall でダンプしたモノを取り込むだけでイイ。
# su - postgres $ pg_dumpall > pg.sql
このとき、すべてのデータベースにアクセスするので、DBのスーパーユーザ6)にて作業する。
# su - postgres $ psql -f pg.sql template1
移行先でも、スーパーユーザで作業。template1 はぶっちゃけ何でもイイ。
Squirrelmail-ja
とりあえず、/usr/share/squirrelmail-ja/conf.pl で、IMAPサーバの設定を、courier-imapにしておく。'D'[ret] → 'courier'[ret] → 's'[ret] でよい。
syslogd の設定
メインサーバでは、ルータからのログ出力を受け取り、logwatchで解析しレポートするようにしている。このため、設定を変更して、リモートからのログを受け入れるようにしなければならない。
/etc/sysconfig/syslog を次のように修正する。
SYSLOGD_OPTIONS="-m 0"
なのを
SYSLOGD_OPTIONS="-m 0 -r"
のように、'-r'オプションを追加する。あとはsyslogdを再起動すれば完了。
オレオレ認証局の作成
/usr/share/ssl/misc/CA
@@ -32,13 +32,13 @@ if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi -DAYS="-days 365" +DAYS="-days 3650" REQ="$OPENSSL req $SSLEAY_CONFIG" CA="$OPENSSL ca $SSLEAY_CONFIG" VERIFY="$OPENSSL verify" X509="$OPENSSL x509" -CATOP=./demoCA +CATOP=./selfCA ←別にどこでもいい。demoCAのままでもいい。 CAKEY=./cakey.pem CACERT=./cacert.pem
/usr/share/ssl/oepnssl.cnf
[ user_cert ] # These extensions are added when 'ca' signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:TRUE ← CA:FALSEのままだと署名できないらしい。
以上の変更をしたら、
# ./CA -newca
OpenSSL SMTP-Auth(TLS)のための認証
鍵と、申請書を同時に生成する。別に同時じゃなくてもいいけれど分ける必要もないだろう。
openssl req -new -nodes -keyout smtp.key -out smtp.csr -days 3650 Generating a 1024 bit RSA private key ....++++++ ............................++++++ writing new private key to 'smtp.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [JP]: ←この辺のデフォルトは openssl.cnfにある State or Province Name (full name) [Kanagawa]: Locality Name (eg, city) [Yokohama]: Organization Name (eg, company) [WildTree]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:smtp.wildtree.jp Email Address []:postmaster@wildtree.jp Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: #
smtp.csrを、オレオレ認証局のディレクトリに持って行って、
# openssl ca -out smtp.crt -infiles smtp.csr ... Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated #
これでおしまい。
ホスト名
Vine Linuxの場合、ホスト名は /etc/sysconfig/network に記載されている。 デフォルトでは、
NETWORKING=yes HOSTNAME=chive.wildtree.jp DOMAINNAME=wildtree.jp DNS1=192.168.x.x
とかいった感じになっていると思う。これを次のようにする。
NETWORKING=yes HOSTNAME=chive DOMAINNAME=wildtree.jp DOMAIN=wildtree.jp DNS1=192.168.x.x DNS2=x.x.x.x DNS3=x.x.x.x DHCPCDARGS=-N
HOSTNAMEがFDQNになっている方が好みであれば元のままでもよい。わたしゃキライなので、速攻で変える。こうすると、/bin/hostnameの返す値が、短くなる。ただし、hostname -fや dnsdomainname に依存する何かがあると、具合が悪いかもしれない。今のところそういうものに遭遇したことはないけれど。
DHCPCDARGS=-Nがないと、/etc/ntp.confが強制的に上書きされてしまうので、家庭内にNTPサービスをしている場合には、これがないと、ntpdが正しく機能しなくなってしまい、ひいては家庭内の時刻がひっちゃかめっちゃかになる危険性もある。
サーバはDHCP管理から外せばいいと言う考え方もあるんだけれど、あくまでも、うちではこうしているという話。
webalizer
ウェブのアクセス解析に利用している。apache2にしたついでに、DNS逆引きをやめたので、webalizerに解析前の逆引きをさせる必要性が発生。
しかし、Vineのパッケージは、逆引きをしないようになっている。SPECファイルを書き換えて、configureに、–enable-dnsを足したが、'Serial'について、「旧来の形式」と、rebuildを門前払いしてくる。
単純に、Serialを削ると、aptが、既存の webalizerの方が新しいと見なして、上書きをしかけてくるので、コレではダメ。
ちょっと、ググって見たが、rpmが 4になったときに、Serialが使えなくなったとか、何に変わった、とか、そういうことは見つけられなかったのだが、Vine 4.x用のSPECファイルを端から読んで、どうやら解決方法らしきものを発見。
- SerialはEpochで置き換える
CopyrightがLicenseに変わったのと、同様に、SerialはEpochで置き換えれば期待通りの動作をしてくれる。
- 結局
Vineで配布しているパッケージ 2.10の期待しているライブラリの中に DBがあるのだが、1.85互換という、恐ろしく古い互換性を要求するので、–enable-dnsしても、逆引きは有効にならない。
諦めて、2.20-01を持ってきて、リビルドした。一応日本語もサポートされているので、入れ替えてしまって良いかと思う。
cpan2rpm
CPANのライブラリに対する依存度は高まる一方だが、他方でrpm化されたパッケージが提供されることは少なくなってきているような気がする。それはそれでいいのだが、たまに、rpmパッケージの依存関係の都合上、rpm化されたものが必要になることもある。
そんなときに活躍するのが cpan2rpm。見たまま、CPANのライブラリをrpm化してくれる便利なツール。
$ wget ftp://arix.com/cpan2rpm-2.028-1.src.rpm $ su ... # rpm --rebuild cpan2rpm-2.028-1.src.rpm ... # rpm -ivh /usr/src/vine/RPMS/noarch/cpan2rpm-2.028-1.noarch.rpm ... #
と、こんな手順でインストールする。リビルド中に、CPANに何かを取りに行くので、CPANの設定が済んでいないと失敗する。更に、多分、super userでないと失敗する。