[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 メーリングリストの案内