2007年7月23日月曜日

玄箱でIMAPメールサーバを構築 ~ imap-uwのインストール

昨日、自宅で24時間運用しているFreeBSDサーバをメンテしてて思ったんですが、本当に、常時動かしておく必要があるのか・・・?



このFreeBSDでやってる仕事は



  • imap-uw (IMAP)


  • SpamAssassin (迷惑メールフィルタ)


  • apache httpd + WebDAV


  • samba


  • vtund


  • NFS server


などなど。



とりあえず、ハードディスクの代わりに、CF(コンパクトフラッシュ)にしてもいいのではないかと思ってたのですが(実際に、以前、CFで動かしていたときもあった)、必要なファイルの容量と、書き換え頻度などの点で、ちょっと不安な点もあります。



そこでふと思い出したのが、買って、しばらく遊んで、すぐ飽きて、すっかり忘れていた、玄箱



こいつで、IMAPサーバなどが動けば、けっこういいんじゃないかな?と。



今日、半日くらいいろいろやってて、結論としては、一応、IMAPサーバは動きました。





■ imap-uwのコンパイル



IMAPサーバは何種類かありますが、今まで使っていたのは、imap-uwというものだったので、これをインストールすることにしました。

http://www.washington.edu/imap/



ファイルを展開



# tar zxvf /usr/ports/distfiles/imap-2004g.tar.Z



# cd imap-2004g/



makeを実行(きっとRedHat Linuxに似てるだろう、ということでlrhを指定)



# make lrh



しばらくすると、コンパイルエラーが発生。



make[2]: Entering directory `/mnt/share/200707/imap-2004g/mtest'
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS`   -c -o mtest.o mtest.c
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS` -o mtest mtest.o ../c-client/c-client.a `cat ../c-client/LDFLAGS`
/usr/powerpc-hardhat-linux/bin/ld: cannot find -lpam
collect2: ld returned 1 exit status
make[2]: *** [mtest] Error 1
make[2]: Leaving directory `/mnt/share/200707/imap-2004g/mtest'
make[1]: *** [bundled] Error 2
make[1]: Leaving directory `/mnt/share/200707/imap-2004g'
make: *** [lrh] Error 2



原因は、「libpam.so」がないということらしく、ファイル名が微妙に違うためのようです。



root@KURO-BOX:/mnt/share/200707/imap-2004g# ls /lib/libpam*
/lib/libpam.so.0     /lib/libpam_misc.so.0     /lib/libpamc.so.0
/lib/libpam.so.0.72  /lib/libpam_misc.so.0.72  /lib/libpamc.so.0.72



とりあえず、ってことで、ファイル名を強制的に指定しちゃいます。



上記の実行コマンドを見ると、c-client/LDFLAGSというファイルで指定されているようなので、そのファイルをムリヤリ書き換え。



root@KURO-BOX:/mnt/share/200707/imap-2004g# vi c-client/LDFLAGS



-lpam -ldl
-L/usr/lib -lssl -lcrypto



となっているので、以下のように書き換え。



/lib/libpam.so.0 -ldl
-L/usr/lib -lssl -lcrypto



これでいいかと思いきや、またエラー。



cd mtest;make
make[2]: Entering directory `/mnt/share/200707/imap-2004g/mtest'
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS` -o mtest mtest.o ../c-client/c-client.a `cat ../c-client/LDFLAGS`
/usr/powerpc-hardhat-linux/bin/ld: cannot find -lssl
collect2: ld returned 1 exit status
make[2]: *** [mtest] Error 1
make[2]: Leaving directory `/mnt/share/200707/imap-2004g/mtest'
make[1]: *** [bundled] Error 2
make[1]: Leaving directory `/mnt/share/200707/imap-2004g'
make: *** [lrh] Error 2



今度は、opensslがインストールされていない、ってことらしいです。なぜかopensslのヘッダファイルだけはインストールされていたのですが、肝心のライブラリがありません。



玄箱のCD-ROMに入ってたバイナリを展開します。なぜか、opensslは2つはいってます。



% ls -l openssl*
-rwxrwxrwx  1 99  99  1682667  2  9  2004 openssl-0.9.6e.tar.gz*
-rwxrwxrwx  1 99  99  1682600  3 18  2004 openssl.tar.gz*



どっちがいいのかわかりませんが、タイムスタンプの新しいopenssl.tar.gzを展開してみました。
バージョンを見ると



root@KURO-BOX:/# openssl version
OpenSSL 0.9.6e 30 Jul 2002



どっちも同じ?



これで、imap-uwはコンパイルできるようになりました。



できあがったimapd。



root@KURO-BOX:/mnt/share/200707/imap-2004g# ls -l imapd/imapd
-rwxr-xr-x    1 root     root      1636598 Jul 22 14:21 imapd/imapd



root@KURO-BOX:/mnt/share/200707/imap-2004g# ldd imapd/imapd
        libpam.so.0 => /lib/libpam.so.0 (0x0ffd7000)
        libdl.so.2 => /lib/libdl.so.2 (0x0ffb4000)
        libssl.so.0.9.6 => /usr/lib/libssl.so.0.9.6 (0x0ff61000)
        libcrypto.so.0.9.6 => /usr/lib/libcrypto.so.0.9.6 (0x0fe57000)
        libc.so.6 => /lib/libc.so.6 (0x0fd07000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x0fcba000)
        /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)



POPデーモンなどもコンパイルされますが、個人的な好みで、



IMAP以外使う気にはなれない!



ため、imapdだけ/usr/sbin/imapdとして、インストールします。



root@KURO-BOX:/mnt/share/200707/imap-2004g# cp imapd/imapd /usr/sbin/







■ imapdが起動できるようにするための設定



imapdは、inetdから起動されます。



まずは、/etc/servicesに、imapがあるか確認。



root@KURO-BOX:/mnt/share/200707/imap-2004g# grep imap /etc/services
imap2           143/tcp         imap            # Interim Mail Access Proto v2
imap2           143/udp         imap
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
imaps           993/tcp                         # IMAP over SSL
imaps           993/udp                         # IMAP over SSL



ポート番号143が「imap」でいけそうなので、大丈夫そうです。



/etc/inetd.confを編集して、imapとimapsを追加。



root@KURO-BOX:/mnt/share/200707/imap-2004g# vi /etc/inetd.conf



# Pop et al
#
# pop2  stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop2d
# pop3  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/popper -s
#
# Imapd - Interactive Mail Access Protocol server
# Attention:  This service is very insecure
# imap2 stream  tcp     nowait  root    /usr/sbin/tcpd  imapd
#
imap    stream  tcp     nowait  root    /usr/sbin/imapd imapd
imaps   stream  tcp     nowait  root    /usr/sbin/imapd imapd
#



inetdにシグナルをおくって、編集後のinetd.confを反映させます。



root@KURO-BOX:/# kill -HUP `cat /var/run/inetd.pid `



動作確認。telnetコマンドを使って、ポート番号143にアクセスして、imapdにアクセスできるかを試してみます。



% telnet kuro-box imap
Trying 192.168.0.41...
Connected to kuro-box.local.
Escape character is '^]'.
* OK [CAPABILITY IMAP4REV1 LITERAL+ SASL-IR LOGIN-REFERRALS STARTTLS LOGINDISABLED] KURO-BOX IMAP4rev1 2004.357 at Sun, 22 Jul 2007 14:46:00 +0900 (JST)



大丈夫そうです。



終了するには、Escape character is '^]'.と表示されているように、controlキーを押しながら「 ] 」を押すと、telnet>というプロンプトがでるので、そこでcloseと入力します。




■ 玄箱にユーザーアカウントを作成



パスワードファイルを編集します。



root@KURO-BOX:/# vi /etc/passwd



nhh:*:2001:2001:Nyo Ho Ho:/home/nhh:/bin/bash



というような行を追加します。



パスワードを設定します。



root@KURO-BOX:/# passwd nhh
Enter new UNIX password: パスワードを入力
Retype new UNIX password: もう一度入力
passwd: password updated successfully



確認。



root@KURO-BOX:/# grep nhh /etc/passwd
nhh:ハッシュされたパスワード:2001:2001:Nyo Ho Ho:/home/nhh:/bin/bash



/etc/groupファイルを編集して、グループを登録します。こんな感じ。



root@KURO-BOX:/# grep nhh /etc/group
nhh:*:2001:



ホームディレクトリを作成。



root@KURO-BOX:/# mkdir /home/nhh
root@KURO-BOX:/# chown nhh:nhh /home/nhh
root@KURO-BOX:/# ls -l /home
total 4
drwxr-xr-x    2 nhh      nhh          4096 Jul 22 14:42 nhh



一応、ログインできるか確認してみます。



% telnet -l nhh kuro
Trying 192.168.0.41...
Connected to kuro-box.local.
Escape character is '^]'.
Password: パスワード
Linux (none) 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc unknown
nhh@KURO-BOX:~$


■ imap-uw用のパスワードファイルを作成



CRAM-MD5という認証が使えるようにするため、/etc/cram-md5.pwdというファイルを作成します。ユーザー名(nhh)、タブ、パスワードと、1行で書きます。



こんなかんじです。



root@KURO-BOX:/# cat /etc/cram-md5.pwd
# CRAM-MD5 authentication database
# Entries are in form <user><tab><password>
# Lines starting with "#" are comments



nhh    パスワード



パスワードが書かれたファイルなので、一般ユーザーに見られないように、ファイルのパーミッションを適切に設定します。



root@KURO-BOX:/# chmod 400 /etc/cram-md5.pwd
root@KURO-BOX:/# ls -l /etc/cram-md5.pwd
-r--------    1 root     root           53 Jul 22 17:43 /etc/cram-md5.pwd


■ IMAPフォルダのファイルが$HOME/Mail以下に作成されるようにする“おまじない”



デフォルトでは、IMAPフォルダのファイルが、ホームディレクトリ($HOME)直下に作られてしまいます。個人的には、それは好きではないので、$HOME/Mail以下になるようにしています。



なんだか謎のおまじないですが、/etc/c-client.cfに、以下のようなことを書いておいてから・・・



root@KURO-BOX:/# cat /etc/c-client.cf
I accept the risk
set allow-user-config 1



ユーザーのホームディレクトリ以下に「.imaprc」というファイルを作成し、そこにもおまじないを書き込んでおきます。



root@KURO-BOX:/# cat /home/nhh/.imaprc
I accept the risk
set mail-subdirectory Mail



これで、Mozilla ThunderbirdなどのメールソフトのほうでHogeというフォルダを作成すると、それに対応する、$HOME/Mail/Hogeというファイルができるはずです。


つづく・・・



明日は、fetchmailのインストールを予定しています。



■ 過去記事





0 件のコメント:

コメントを投稿