Berkeley DB library configured to support only DB_PRIVATE environments
id:hiro-ueda:20080628:1214632306 の ERROR: can't create DB environment: Inappropriate ioctl for device (dbdir: /var/spool/postfix/postgrey uid/gid: 101,101) エラーの件、何とかしたくて postgrey のコードを少しずつ改変しながらチェックしてみました。こういうとき、オープンソースって素晴らしいなぁ、と思いますよね :)。
[root@bpr sbin]# diff -u postgrey postgrey.modified --- postgrey 2008-09-16 22:29:56.000000000 +0900 +++ postgrey.modified 2008-09-16 22:30:49.000000000 +0900 @@ -665,6 +665,8 @@ -Home => $self->{server}{dbdir}, -Flags => DB_CREATE|DB_RECOVER|DB_INIT_TXN|DB_INIT_MPOOL|DB_INIT_LOG, -SetFlags => $setflags, + -ErrFile => '/tmp/error_bdb.log', + -Verbose => 1, ) or die "ERROR: can't create DB environment: $! (" . "dbdir: ".$self->{server}{dbdir}." uid/gid: $<,$>)\n";
ここ を見て見つけた -ErrFile、-Verbose オプションを付加して起動したところ、以下のようなエラーが記録されました。
Berkeley DB library configured to support only DB_PRIVATE environments
一歩、進展しました。これでググッたところ http://billboebel.typepad.com/blog/2007/03/berkeley_db_cen.html を発見 :)。
I am trying to get a CentOS 4.4 image running on Amazon EC2, and hit a helluva bug. A time consuming bug at least... CentOS comes with Berkeley db4 compiled with '--enable-posixmutexes'. But this doesn't work under Xen. When installing the perl BerleleyDB package I get a bunch of this:
Berkeley DB library configured to support only DB_PRIVATE environments
The BerkeleyDB README mentions this Red Hat bug. So I compiled my own copy of db-4.4.20 with '--disable-posixmutexes' and installed it to /usr/local/BerkeleyDB.4.4 and linked it from /usr/local/BerkeleyDB. Then while installing perl BerkeleyDB, I started getting a bunch of this crap:
http://billboebel.typepad.com/blog/2007/03/berkeley_db_cen.html
うわー、Xen 環境だからダメだったのか orz。どうりで VMware 上の CentOS 4 や実機上の CentOS 5 では大丈夫だったわけだ。
ということで http://www.oracle.com/technology/software/products/berkeley-db/db/index.html から db-4.2.52.tar.gz を入手し、ブログの手順に従って作業しました。
# tar xvfz db-4.2.52.tar.gz # cd db-4.2.52/build_unix/ # ../dist/configure --disable-posixmutexes # make # make install # cd /usr/local # ln -s BerkeleyDB.4.2 BerkeleyDB # echo "/usr/local/BerkeleyDB/lib" > /etc/ld.so.conf.d/BerkeleyDB.conf # /sbin/ldconfig
さて、いよいよ postgrey の起動です。
# /usr/sbin/postgrey --inet=54321 2008/09/16-22:39:59 postgrey (type Net::Server::Multiplex) starting! pid(30618) Binding to TCP port 54321 on host localhost Setting gid to "101 101" Setting uid to "101" (Ctrl+c) 2008/09/16-22:40:02 Server closing!
無事に動きました :)。いやー、頑張って見るものです! ただし、この方法だと BerkeleyDB が rpm 版と tar ball 版の 2つ入った状態になります。大丈夫かどうかは私も良く分かりませんので、Xen 環境で postgrey が動かなくて困っている人は自己責任で追試してください m(__)m。