2009年8月15日土曜日

postfixのインストール

月並みなタイトルだけど、Debian Lenny on Niftyな環境でのSMTPサーバであるpostfixのインストール記録。
今回は、自分のメールアドレス(foo@mail.comとする)に対して、サーバ内のroot及び自分のアカウントに届いたメールを転送する設定をする。したがって、POPやIMAPといったメール受信サービスは提供しない。

インストール
aptで済ます。ただし、exim4を削除して入れる場合にはmailutilsパッケージが削除されてしまうようだ。最小構成の場合にはそもそも入っていなかったようだったので、どちらにしても同時に入れておく必要がある。
# aptitude install postfix mailutils
postfixのインストール中に、用途を聞かれるので「インターネット」とする。

設定
/etc/postfix/main.cfを修正。
smtpd_banner = $myhostname ESMTP
(Postfixであることを隠す)
myhostname = toshia.dip.jp
(自分のサーバのFQDN)
mydestination = toshia.dip.jp, server, localhost.localdomain, , localhost
(このドメイン名宛のメールはこのマシンで受ける。myhostnameを追加しておく)
relayhost = smtp.nifty.com
(外向きメールはこのメールサーバを経由させる。上記はプロバイダがNiftyの場合には絶対必要)
mynetworks = 192.168.1.0/24 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
(リレーを許可するネットワーク。LAN内の全マシンがサーバ経由でエラーを通知できるようにしたいので設定した)
そして、/root/.forwardに自分のユーザ名、~/.forwardにfoo@mail.comと書いておけば、rootと自分のユーザに来たメールがfoo@mail.comに転送されるようになる。ただ、エイリアスファイルを作る方法もあり、それはrootでしか設定できないようになっているし、実在しないユーザ(postmasterとか)に対しても転送がかけられるので、そちらを使う方がベターだ。今回は割愛。

これで、rootで実行しているcronのジョブの結果も届くようになるし、その他何かあれば通知がくるようになる。SSHで誰かがログインする度にその旨をメールしてもいいかもしれない。
また、http://www.aconus.com/~oyaji/security/relay-mail.htmで紹介されているサービスを利用して、外部中継チェックを念のためにかけておく。今回はしなかったが、外部からのメール受信をすべて拒否して、メール送信専用にしてしまってもいいかもしれない。

2009年8月8日土曜日

サーバがまた死んだ

この間の豪雨の際、雷で三回ほど瞬間停電したのだが、どうやらこの間にサーバのデータが壊れていたようで、起動不能になった(起動中にエラーを吐いてランレベル6に移行するのだが、そっちでもエラーを吐いて止まる)。
ちょっと調べても原因がわからなかったので、(この間やったばかりなので覚えているということもあり)Debian Lennyを再設定することにした。

ApacheとSubversionのインストール( + ApacheのWebDAVを使ってSVNを動かす)
必要なパッケージのインストール

# aptitude install subversion libapache2-svn

libapache2-svnをインストールした時に、apacheのdavというモジュールが有効になる(apache2をパッケージで入れた場合、無効になっているだけで既に入っている)。

# mkdir /var/svn
# svnadmin create /var/svn
# chown -R www-data:www-data /var/svn

リポジトリを作成する。ただし、ここでリポジトリの所有者をapacheにしておかなければならない。

以下の内容を/etc/apache2/conf.d/以下に適当な名前(svnなど)で作る。

<Location /svn/miku>
DAV svn
SVNPath /var/svn/miku

Order Deny,Allow
Allow from 192.168.1.0/24
Deny from all

</Location>


Order ~ Deny from allまでは、192.168.1.*しか許可しないという意味になるので、外からのリポジトリへのアクセスを一切拒否している。外からアクセスしなければならない時はSSHでトンネルを張れば良いだけのことなのでこれで十分。なお、ローカルからもトンネル経由でないと許可しない、という設定にする場合は、Allowのところにlocalhostと書いてもいいかもしれない。いずれにしろ、SVNはソースコードなどの重要なデータがインターネット上を流れるので、SSH、VPN、SSL等で暗号化するのが望ましい。

ここまでの設定を確認。ローカル(別のPC。別に同じマシンでも可)にてチェックアウト。
本当はインポートとか使うんだろうけれど、普段やり慣れている方法でやってしまうよね(その方がミスが少ない・・・成長を妨げる要因だ)。

$ svn checkout http://server/svn
$ cp -ra /path/to/original svn/
$ svn add svn/*
$ svn commit

コミットできたら一応成功。

コミットしたら公開

こういうのを何て呼ぶのかは忘れたが、リポジトリのhook scriptを触れば実現できた。
/var/svn/hooks/post-commitに以下のように書く。

#! /bin/sh
/usr/bin/svn export --force file:///var/svn/ /var/www/

post-commitはコミットが成功した後に実行されるコマンドなので、この中にエクスポートするコマンドを書いておけばいいのだ。
これで、コミットの度にファイルが/var/wwwにエクスポートされるようになった。

eRubyを有効にする
RubyをPHPみたいに組み込みっぽく使いたいので(というか我がWebサイトで使っているので)eRubyを導入する。普通のHTMLのように書けるが、の間に書いた文章はRubyスクリプトとして実行される。
このインストール作業が意外と面倒。

# aptitude install euby eruby libapahe2-mod-ruby

まずは普通にインストール。
そして、/etc/apache2/mod-enable/ruby.loadに以下を追記(参考サイトからコピー)。

<IfModule mod_ruby.c>

RubySafeLevel 1

RubyRequire apache/ruby-run

RubyRequire apache/eruby-run

<Files *.rhtml>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance
</Files>

</IfModule>

なお、私の場合はRuby Script内でファイルの最終更新日を調べているが、これはsafe levelが0でなければ動かないらしい。なんだか気味が悪いが、とりあえず0にした。

これだけでは、*.rhtmlをクリックしてもファイルダウンロード画面になってしまう。原因は、Live HTTP Header等で調べれば一目瞭然だが、MIME Typeが「application/x-httpd-eruby」というよくわからないものになっている(通常、text/htmlになっている)。これを正すために、/etc/mime.typesにちょっと手を加える。
以下のような行があるので、その行頭に # (コメント)をつける
application/x-httpd-eruby rhtml
これで完了。なんでも、eRubyがこういう風にmime typeを決め打ちされることを想定していないらしい。

これで私の環境復元は終了したのだが、6月、8月と二度も立て続けにクラッシュしたという事実をみすみす見逃してはいられない。あまりにもばかばかしいことだが、一応まとめると:
  • 停電対策(UPS)がまったくなされていない
  • バックアップサーバ自体のバックアップは取られていない
という問題があった(というか、ある)。
まず、UPSは雷の多い地域なので見当の余地はあるが、お金のかかることなのですぐには手は出ない。
問題は二つ目である。これは絶対にやっておくべき対策で、今すぐにでも手を打つべきだ。いままでやってなかった理由としては、「HDDの空き容量がないよ!」だったのだが、今やサーバにHDDを4台ほど積めるスペースがあり、バックアップ用HDDも搭載しているので、やろうとおもえばすぐにできる。

異常気象とはいえ、組んだばかりのサーバをあまり痛めつけてほしくないものだ。

2009年8月5日水曜日

Ultimate Boot CD


という、ダサすぎる名前のCDを発見した。

「究極の起動ディスク」

・・・実は今回、sda4に残しておいたWindows XPのリカバリパーティションを使おうと思ったのだが、なんとgrubで叩いても起動しない。そこで適当にぐぐっていたらこんなものを発見し、ダメ元で試したらいけたという話。

これを起動すると、

boot:

というプロンプトが表示されるのでエンター。するとメニューが出てくるので、Boot Manager → Smart BootManager 3.7.1と選択。そして、fat32のパーティションを指定すると、なぜか起動できた。理屈はよくわからないが・・・名前に恥じない究極のCDだ。

しかもこれ、パーティションを編集するツールとか、ハードウェアをテストするツールとか、いろいろ入っている。さしあたって必要がなくても、念のため普段からもっておけばいざと言うときに役に立ちそうだ。

※起動しない理由は、パーティションにアクティブフラグとかいうのがついているのが原因らしい。インストールしたらNTFSについてしまい、仕方なくこのCDで起動して使っているが、アクティブって何なのか未だに不明・・・。

VMPlayer + iTunesにご用心

そんな環境でつかっている人、あまりいないと思うけれど。
wineでiTunesがうまく機能しない。
というのは、起動するのだが、あろうことかiPodを認識しないのだ(私はiPhoneだが同じ)。

そこで、当然諦めてVMWare PlayerのWindows XPに逃げるのだが、こちらではあっさり同期もできるし、満足していた。


iPhone OSのアップデートが先日リリースされた。それで、「アップデートも余裕だぜ☆」と、VM上でやってみたのだが、こともあろうにエラーで止まる。しかも中途半端に書き込んだようで、見事に起動しない。何度やっても同じ。
オワタと思ったがこの記事を参照して、「あぁ、仮想マシンだったらダメなんだ」と納得。時々VMWareでもダメなことってあるものなのだ。

そして、紆余曲折を経てWindows XP HOMEをインストールし、iTunesをインストールしてiPhoneをつないだら動き始めた。

その次は仮想マシン(普段同期とかやってるマシン)から復元。見事に元の環境に戻った。

こんなことに7時間もかかった(窓のインストールが主な原因)。滅多にいないと思うが、同じような環境にいる方は気をつけてください。