[Mew-dist 07880] imget fsync() error with Perl5.005_54
Keni Matsuda
kmatsuda at example.com
1999年 3月 4日 (木) 08:08:23 JST
こんにちは、松田(健一)と申します。
Perl 5.005_54 + 990302(IM109) の組合わせで imget が fsync()
システムコールの検索に失敗する問題に遭遇しました。
(今まで)
Debian GNU/Linux 2.0 に kernel 2.2.1 をインストールした環境で、
990302(IM109) と Mew 1.94b12 を今まで快適に使用していました。Perl のバー
ジョンは Perl 5.004.04 です。
(問題)
昨日何気なく Perl 5.005_54 をインストールしたところ、imls と imget が
以下のエラーを出して動かなくなってしまいました。(以下は適当に改行をい
れています)
(1) imls
Can't locate IM/Config.pm in @INC (@INC contains:
/usr/lib/perl5/5.00554/i586-linux /usr/lib/perl5/5.00554
/usr/lib/perl5/site_perl/5.00554/i586-linux
/usr/lib/perl5/site_perl/5.00554 .) at /usr/local/bin/imls line 23.
BEGIN failed--compilation aborted at /usr/local/bin/imls line 23.
(2) imget
imget: Getting new messages from local mailbox into +inbox....
imget: ERROR: Can't find a way to fsync(). Set NoSync=yes in your
Config file and be careful on file system overflow if your mail
folders are on NFS.
(再確認したこと)
Perl 5.005_54 インストール後に IM109 を再ンストールしましたが、
症状は変わりません。
~/.im/Config の NoSync=no のラインはデフォルトのコメントアウト
されたままの状態です。
Perl 5.005_54 は、ほとんど何も考えずに、デフォルトのまま sh Configure,
make, make test, make install しただけなので、@INC が通常とは少々変わっ
た内容になっています。
<問題の解決策>
(1) は、IM ディレクトリの場所がデフォルトの @INC に含まれていないだけの
問題だったので自分でフィックスしました。(正しい場所を指す IM という名
前のシンボリックリンクを /usr/lib/perl5/site_perl/5.00554 に入れただけ
です。)
(問題点)
少々問題かな、と思ったのが (2) です。
IM/MsgStore.pm line 297 に fsync() の実体があります。
fsync() は最終的に syscall($sys_fsync, $fno) を実行するだけなのですが、
そのほとんどのロジックをプラットフォーム依存の fsync システムコールの
番号を動的に探すのに費しています。
Perl 5.004.04 では、/usr/lib/perl5/i386-linux/5.004/sys/syscall.ph
中から SYS_fsync を検索するのに成功するのですが、私の Perl 5.005_54
環境ではこれは失敗します。
fsync() はさらに /usr/include/sys/syscall.h を直接オープンして
SYS_fsync を検索しようとするのですが、これも失敗します。もし
/usr/include/sys/syscall.h を C preprocessor にかけてから検索すれば、
SYS_fsync の検索に成功するはずですが、直接ファイルをオープンしている
ため、失敗してしまいます。
結局私はインストールした IM/MsgStore.pm に直接 fsync システムコールの
番号 118 を埋め込んで一時的にこの問題を回避してしまいましたが、根本的
な解決には至っていません。
(改善案)
そもそも、この fsync システムコールの番号は一度プラットフォームが決まっ
てしまえば動的に変わるわけではありませんから、IM の configure 時に番号
を調べて MsgStore.pm に埋め込んでしまえばいいと思うのですが ...
以上です。
----
Keni
=========================================================================
KENICHI MATSUDA E-MAIL: kmatsuda at example.com (Japan)
kmatsuda at example.com (U.S.)
PHONE: 603-897-3260
FAX: 603-897-3317
ORACLE NEW ENGLAND DEVELOPMENT CENTER
ONE ORACLE DRIVE
NASHUA, NH 03062
=========================================================================
Mew-dist メーリングリストの案内