ttt

getttyent

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

2007-07-22 22:04:07 | デジタル・インターネット

昨日、自宅で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のインストールを予定しています。

■ 過去記事