2008/05/21(水)ML115 G1/Ubuntu 8.04 LTS Serverセットアップメモ

2008/04/01(火)FreeBSD で pop-before-smtp

ports の mail/popa3d-before-sendmail を make install して、sendmail.mc に

HACK(popauth)

と書けば終わり……なのですが、popa3dではなくdovecotをインストールした時の pop-before-smtp の設定メモ。

pop-before-smtp.pl

色々なメールソフトに対応した pop-before-smtp ツールです。ports の mail/pop-before-smtp からインストールできます。設定ファイルは Perl スクリプトになっていて /usr/local/etc/mail/pop-before-smtp-conf.pl にあります。dovecot と sendmail それぞれの該当部を有効にします。次に示した行を有効にし、=cut は削除します。

# Set the log file we will watch for pop3d/imapd records.
$file_tail{'name'} = '/var/log/maillog';

# For Dovecot POP3/IMAP when using syslog.
$pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
$out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
    'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';

=cut #------------------------- Sendmail SMTP -------------------------START-
# If you comment-out (or remove) the two surrounding =cut lines, we'll
(中略)
=cut #------------------------- Sendmail SMTP ---------------------------END-

続いて Sendmail の設定に必要なファイルをコピーします。なぜか doc/ 以下にあります。

# cd /usr/share/sendmail/cf
# cp /usr/local/share/doc/pop-before-smtp/popauth.m4 ./

続いて /etc/mail 移動して sendmail.mc(ホスト名.mc)に次を書き加え、そのディレクトリで make して sendmail.cf(ホスト名.cf)を生成します。

define(`POP_B4_SMTP_TAG', `')dnl
HACK(popauth)

起動と設定

まず rc.conf に次を書き加えて、pop-before-smtp.pl を起動するように設定します。

pop_before_smtp_enable=YES

最後に sendmail の再起動と、pop_before_smtp.pl を起動を行います。

# /etc/rc.d/sendmail restart
# /usr/local/etc/rc.d/pop-before-smtp start

補足

ログファイルからIPを探知するので、dovecot側の設定は不要。

2008/02/22(金)UNIXのコンソールメーラー mutt の設定メモ

出先などでメールを確認したいとき、今までは mail コマンドで行っていたのですが、さすがに何百通もあるSPAMの中にまぎれたメールを探すのは大変です。

コンソールメーラーといえば mnews だったのですが、危険なのか今は使われなくなっている様子(FreeBSDのPortsやLinuxのパッケージに存在しない)。

検索しても代わりになるようなメーラーの情報がほとんどみつからず*1、ほとほと困っていたところ mutt というメーラーを教えてもらいました。

*1 : X上のメーラーばかりみつかる

muttの設定(Ver1.5.6系)

日本語版のパッケージをインストールしました(FreeBSDではjapanese/mutt)。特にインストール時に設定する必要はありません。

インストール後、自分は次のように設定ファイル ~/.muttrc を書きました。

# 日本語環境設定(日本語サイト参照)
set send_charset="us-ascii:iso-2022-jp"
set strict_mime=no
set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
set thorough_search=yes
set sanitize_ja_chars=yes
set rfc2047_parameters=yes
set edit_headers=yes

# メールアドレスホスト名
set hostname="xxx.yy"
# 送信メールのbccを書かない
set write_bcc=no
# 終了時に、常に mbox 等にメールを移動しない
set move=no
# bccのデフォルトに自分のアドレス
my_hdr Bcc: my-address@xxx.yy

標準動作で /var/mail等(Maildirも対応している) にあるメールをそのまま表示します。終了時に指定しなければ、mboxに移動されることもありません。画面操作は直感的で悩むこともありませんでした。

メールを読むのが楽になり、間違えてメールをmboxに移動することもなくなったため(重要*2)、とても助かりました。

*2 : あとでPCでメールを受信できなくなるので困る

muttの設定(Ver1.5.1x系)

UbuntuのUTF-8環境で、メールタイトルなどが文字化けするなあと思ったのですが、パッチを充ててソースから入れた mutt Ver1.5.6 を使っていたのが原因でした。

それを消した後で、普通に apt-get で Mutt 1.5.17+ が入ったらうまく動きました。

以下、その時のMaildir環境での設定メモ。

# cat /etc/Muttrc
# 日本語環境設定
set send_charset="us-ascii:iso-2022-jp"
set file_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8"
set thorough_search=yes
set rfc2047_parameters=yes
set edit_headers=yes

# Maildir
set mbox_type=Maildir
set folder=~/Maildir
set spoolfile=+
set tmpdir=+tmp
# 送信メールのbccを書かない
set write_bcc=no
# 終了時に、常に mbox 等にメールを移動しない
set move=no
# メールアドレスホスト名
set hostname="xxx.yyy"

"+"は folder に設定した値が展開されます。

使用Version

# mutt -v
Mutt 1.5.17+20080114 (2008-01-14)
Copyright (C) 1996-2007 Michael R. Elkins and others.
Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.
Mutt is free software, and you are welcome to redistribute it
under certain conditions; type `mutt -vv' for details.

System: Linux 2.6.24.3 (x86_64)
ncurses: ncurses 5.6.20071124 (compiled with 5.6)
libidn: 1.1 (compiled with 1.1)
hcache backend: GDBM version 1.8.3. 10/15/2002 (built Jun 15 2006 21:27:32)
コンパイル時オプション:
-DOMAIN
+DEBUG
-HOMESPOOL  +USE_SETGID  +USE_DOTLOCK  +DL_STANDALONE
+USE_FCNTL  -USE_FLOCK
+USE_POP  +USE_IMAP  +USE_SMTP  -USE_GSS  -USE_SSL_OPENSSL  +USE_SSL_GNUTLS  +USE_SASL  +HAVE_GETADDRINFO
+HAVE_REGCOMP  -USE_GNU_REGEX
+HAVE_COLOR  +HAVE_START_COLOR  +HAVE_TYPEAHEAD  +HAVE_BKGDSET
+HAVE_CURS_SET  +HAVE_META  +HAVE_RESIZETERM
+CRYPT_BACKEND_CLASSIC_PGP  +CRYPT_BACKEND_CLASSIC_SMIME  -CRYPT_BACKEND_GPGME
-EXACT_ADDRESS  -SUN_ATTACHMENT
+ENABLE_NLS  -LOCALES_HACK  +COMPRESSED  +HAVE_WC_FUNCS  +HAVE_LANGINFO_CODESET  +HAVE_LANGINFO_YESEXPR
+HAVE_ICONV  -ICONV_NONTRANS  +HAVE_LIBIDN  +HAVE_GETSID  +USE_HCACHE
-ISPELL
SENDMAIL="/usr/sbin/sendmail"
MAILPATH="/var/mail"
PKGDATADIR="/usr/share/mutt"
SYSCONFDIR="/etc"
EXECSHELL="/bin/sh"
MIXMASTER="mixmaster"
開発者(本家)に連絡をとるには <mutt-dev@mutt.org> へメールせよ。
バグをレポートするには http://bugs.mutt.org/ を参照のこと。
日本語版のバグレポートおよび連絡は mutt-j-users ML へ。

patch-1.5.13.cd.ifdef.2
patch-1.5.13.cd.purge_message.3.4
patch-1.5.13.nt+ab.xtitles.4
patch-1.5.4.vk.pgp_verbose_mime
patch-1.5.6.dw.maildir-mtime.1
patch-1.5.8.hr.sensible_browser_position.3

2008/02/14(木)Linux の badblocks コマンド

Linuxでディスクエラーをチェックするコマンドbadblocksについて。

fsck

man。ファイルシステムのエラーをチェックするプログラム。ディスクの物理エラーを調べてはくれない。

# fsck /dev/hda1

badblocks

デバイスそのもののエラーをチェックする。

# badblocks -s -v /dev/hda	読み出しテスト
# badblocks -s -v -n /dev/hda	非破壊読み書きテスト
# badblocks -s -v -w /dev/hda	破壊読み書きテスト

HDDの区画ではなくHDD全体を与えるのがミソ。破壊テストでは「0xaa, 0x55, 0xff, 0x00」を書き込み読み出してテストします。"-s -v"は進捗などを表示する指定。

一度にテストするサイズは -b(ブロックサイズ)と -c(ブロック数)で指定します。

# badblocks -s -v -b 1024 -c 256 /dev/hda	1024*256

マウントされているディスクでは読み出しテストしかできません。シングルユーザーモードでは読み書きテストができるみたいですが。

非破壊読み書き検査について

非破壊読み書き検査は次の手順で行われます。

  1. ディスクから現在のデータを読み出す
  2. ディスクにテストパターンを書き込む
  3. バッファをフラッシュする
  4. ディスクから読み込み書き込んだテストパターンと比較する
  5. 最初に読み込んだデータを書き戻す

Linuxカーネルで「O_DIRECT」というフラグが使えれば、2と4では O_DIRECT 用いてディスクと直接やりとりをします(ディスクキャッシュを抑制します)。これは比較的最近のカーネルでないとまともに使えないようです。

CTRL-Cなどで止めると大変なことになるので、プログラム側でCTRL-Cで落ちないように抑制されています。(上に書いたとおりですので、この検査をkillとかで止めると大変なことになります。)

非破壊テストは破壊テスト並のチェックができますが、単純な破壊テストよりもメモリと時間が食います。