2007年12月7日金曜日

[Postfix] smtp-auth

んー。あれこれいじくってるうちに前と同じように送信できるようになった。。。

うーん。タチが悪い。

2007年12月6日木曜日

スレッドの話。

(Linuxサーバで) psでみたとき MySQLのプロセスがぶあああああって増えないのはなんで?
といった感じの質問が挙がる。

それは・・・NPTL だからでそ。
ただのサーバ管理者でも知ってるはず。(自分がそう)

ざっと、Linuxでの
ちょっと前までのpthread の実装 -> Linuxthreads
今 -> NPTL

だよね。。NPTLはRedHat 9くらいから出てきたはずなので何年か経ってる。

これを書いている時点の自分は実装がどうだとかはさっぱり知らないけどね。

本物のPOSIXスレッドライブラリ
2002年か。。

glibc-2.4 から NPTL 一本化してる

C10K問題 4. 各スレッドが一つのクライアントを受け付ける
内容がちょびっと古いみたいだけど、まとまっててステキ。

Solaris やら (Linuxthreads をつかっていない)FreeBSD なら ぶああああ (w って見えないんだけどね。。(psで適切なオプションつければ見える。)

で 当時のスラドやら雑誌の記事やらをみてたもんで、
Ulrich Drepper という開発者の名前はすり込まれてた。glibcのエライ人。

どうも、自称オープンソースプログラマな人でもその名前を知らなかったりする模様。
What Every Programmer Should Know About Memory - enbug diary (2007-11-26)
引用
P.S. それよりもっと驚いたのは自称オープンソースプログラマな人がUlrich Drepperの名前も知らないことであった!相当な有名人だと思うんだがな、少なくとも開発者の間では。

サーバ管理者で知ってる、となると数少ないんだろうな・・・。
ほか Rusty Russellとかとか。

まぁ ひとつだけいえることは・・・

「それダレ?知っててなにかおいしいの?」と言われるのがオチか。。

[Postfix] smtp-auth はまり中

これまでつかってた(まだつかってるけど)
某レンタルサーバで手でいれたPostfixだとすんなりSMTP-AUTHできた。
今度はどうもできない・・・・orz....

・設定問題なさげ
・デフォルト chroot してるのが関係?
・じつは smtpd.conf の場所がへん?

うーむ ( -_-)
寝て起きても解決せず。

2007年12月5日水曜日

[FreeBSD] $ make love

skype で make(1) の話題に。

GNU Make
% make love
make: *** No rule to make target `love'. Stop.

FreeBSD の make (6.2-RELEASE)
% make love
make: don't know how to make love. Stop

そう。 don't know how to make 〜〜〜 だよな
と思ってたら、FreeBSD 7.0-BETA3だと。。

% make love
Not war.

おや?
ソースをみてみると・・ (/usr/src/usr.bin/make/job.c)
#if OLD_JOKE
if (strcmp(gn->name,"love") == 0)
(*abortProc)("Not war.");
else
#endif

どうも結構まえからあるみたいで、-CURRENT は
CFLAGSで -DOLD_JOKE が設定されてた模様。知らなかった。

なんで 「Not war.」 なの?と思ったら
Make Love Not War
殺し合うのでなく愛し合おう◆特に1960~70年代に多く使われた反戦運動のスローガン
というのを見つけた。

Not war!

2007年12月2日日曜日

[Postfix][SQLite][dovecot] バーチャルな受信まわり

・Postfix で virtual_mailbox〜〜などを設定した
・配送された
・dovecot, SQLite をいれて
・dovecot に sqlite 使わせて受信してみた


ざっとこんな風。

o main.cf に下記設定 (ここでは example.jp とした)
virtual_mailbox_domains = example.jp
virtual_mailbox_base = /home/vmailbox
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual

uid_maps,gid_mapsはめんどいのでstaticに。値は適当。
ユーザ、グループは存在しない。
/home/vmailbox は umask 027, chown 5000:5000で作っておいた。

・/etc/postfix/{vmailbox,virtual} は以下
- vmailbox
hoge@example.jp example.jp/hoge/Maildir/

- virtual (ほかに転送しないならいらない)
hoge@example.jp hoge@example.jp,fuga@example.com

Maildir 形式をつかうのでケツに/
作ったあとは postmap を忘れずに。

o dovecot いれ
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d

o sqlite いれ
sudo apt-get install sqlite3 sqlite3-doc

o dovecot 設定
みたところ
・PasswordDatabase
・Authentication/PasswordSchemes
・デフォルト設定のdovecot.conf,dovecot-sql.conf

まずdovecot.conf
protocols = pop3 pop3s imaps
(pop3 は手で確認するため用.できたら削除)

passdb sql {
#Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
#Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}

passdb sql, userdb sql の箇所はコメントアウト -> コメントインしただけ。

次dovecot-sql.conf
driver = sqlite
connect = /etc/dovecot/authdb.sqlite
default_pass_scheme = SSHA
password_query = SELECT userid as user, password FROM users WHERE userid = '%u' AND active = 'Y'
user_query = SELECT home, uid, gid FROM users WHERE userid = '%u' AND active = 'Y'

を記述

sqliteをつかうぜ、な設定
connect でデータベースファイル設定.例のまま.
default_pass_scheme は なんとなく SSHAで (Salted SHA1)。SHA256 は 1.1系かららしいので使えず。。
password_query と user_query は書かれていたものほとんどそのまま。

で、dovecot 再起動。

o sqliteで受信用ユーザ設定
パスワードは sqliteにぶちこむので
echo -n 'パスワードの文字列' |sha1sum
をして sha1 した文字列を作成しておく。

dovecotpw で ssha なやつを作成しておく。

/etc/dovecot 以下でごそごそ
# touch authdb.sqlite
# chmod 640 authdb.sqlite
# chgrp mail authdb.sqlite
(sqliteつかう場合、まずtouchするのがフツーなんだろうか?ワカラン。)

# sqlite3 authdb.sqlite

以下sqlite3 のプロンプト

CREATE TABLE users (
userid VARCHAR(128) NOT NULL,
password VARCHAR(64) NOT NULL,
home VARCHAR(255) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
active CHAR(1) DEFAULT 'Y' NOT NULL
);

insert into users values (
'hoge@example.jp',
'ぱすわーどをsalted sha1した文字列',
'/home/vmailbox/example.jp/hoge',
5000,
5000,
'Y'
);

select * from users;
.quit

あとはtelnet で 110 たたいて確認。

telnet localhost 110

user hoge@example.jp
pass ぱすわーど

list なり
retr [数字]なり
dele [数字]なり


SQLite を使ったワケ: 個人用なので MySQL,Postgres をつかうのは大袈裟。SQLite がピッタリ。

2007年12月1日土曜日

tail と tail と tail

FreeBSDの、
tail のバグが直されてた。

わざとディレクトリを tail。
segmentation fault してたのがしなくなった。
(7-BETA3上だけで確認. 6だとしないっぽい)
けどへんな出力はする。

% tail /
....snap@@dev��tmp��usrA@var3
home�����etccdrom�B@dist7�bin��boot7�C@liblibexecD@mnt��proc7���rescue�root7�E@sbin7�
sys.cshrc.profile�� COPYRIGHT��2
compat�media��service

Mac OS Xだと、なにもでない
% tail /usr/local
%

GNU のだと (tail (GNU coreutils) 5.97 )、それディレクトリって言ってくれる。
% tail /usr/local
tail: error reading `/usr/local': Is a directory

GNU coreutils の動作がいいんじゃ・・。

[Mac OS X] CotEditor 0.9.3

前回、展開してダメだったんだけども、dmg2iso でdmg -> isoに変換して、マウントできた。。

変換の時点でエラーになるんじゃないかなーと思ったけど、さくっとできた。

なんなんだ一体。