(この章については Slackware : 3.0 で確認した内容です。 slackware 3.1, 3.2 で、ロックについて seyon が修正されているか どうかに関してはわかりません。ご存知の方は是非お知らせ下さい)
ロックファイルとは何か?ということについては、JF の Serial HOWTO の 後の方に書いてあるのでご参照下さい。
seyon は、結構古いアプリケーションなので、伝統的なディレクトリ /usr(var)/spool/uucp にある LCK..cua* といったロックファイルを使います。
最近の Linux の FSSTND (File System Standard) 仕様では、BSD (POSIX ?) と同様のロックディレクトリ/var/lock(s) が標準のロックファイルのディレク トリになっています。
最近の ppp, mgetty などは、新しいロックディレクトリ /var/lock(s) を 見ますから、これらと併用すると、ロックディレクトリや、ロックファイル の不一致により、色々な不都合が生じます。たとえば、mgetty との併用で うまく発信できない、他人がシリアルポートを使っているのに、Seyon が起 動できてしまう、などといった問題です。
オリジナルの Seyon を FSSTND 仕様に合せるためには、seyon のソースを 修正してコンパイルし直す必要があります。たとえば、slackware 3.0 など に収録されているバイナリはこの問題が修正されていません。 下記のパッチを当てて、コンパイルしなおしてください。作業手順は、
slackware 3.0 のソースディレクトリ(たとえば /cdrom/SLACK300/source/xap/seyon) にある Seyon-2.14c.tar.gz を適当 な作業用ディレクトリで解凍します。
tar zvxf /cdrom/SLACK300/source/xap/seyon/Seyon-2.14c.tar.gz |
ディレクトリ seyon に移動してから下記パッチリストの内容を当てる。
cd seyon patch -p1 < PATCHFILE |
コンパイル、インストール。
make ; su ; make install |
下記のパッチが素直に当たらない場合は、パッチを参考にして手作業でソー スを修正してください。
ちなみに、このロックディレクトリ/ロックファイルは、シリアルポートを 用いる全てのアプリケーションで整合している必要があります。
Seyon のように、オリジナル状態で FSSTND 仕様を満たしておらず、修正が 必要なものとしては、たとえば、Linux に移植されている iij-ppp0.94beta2 などがあります。
一方、FSSTND 仕様に対応済みのものは 2.2.0f 以降の ppp や mgetty 1.0.0、 kermit 5A(190) などがあります。mgetty の場合は、ロックファイルについ ては policy.h の変更により種々のカスタマイズが可能です。kermit 5A(190) には FSSTND 仕様でコンパイルするためのスイッチがあります。
なお、下記のパッチでは、ついでに、kermit 5A(190) や、ppp-2.2.0f、デ フォルトの mgetty-1.0.0 などと同じように ASCII_PID の lock file を用 いるようにしてあります。
diff -ur seyon/SePort.c seyon-linux-ffstnd/SePort.c --- seyon/SePort.c Wed Apr 21 22:38:31 1993 +++ seyon-linux-ffstnd/SePort.c Tue May 13 12:36:44 1997 @@ -1031,7 +1031,7 @@ } #if LF_USE_ASCII_PID - sprintf(pidstr, "%10d\n", pid); + sprintf(pidstr, "%010d\n", pid); /* Just like kermit, ppp */ write(lfd, pidstr, 11); #else write(lfd, (char*)&pid, sizeof(pid)); diff -ur seyon/config.h seyon-linux-ffstnd/config.h --- seyon/config.h Wed Apr 21 21:47:48 1993 +++ seyon-linux-ffstnd/config.h Tue May 13 12:29:43 1997 @@ -292,8 +292,12 @@ * HDB uucp does) rather than in binary form as other uucp prgrams do */ #ifndef LF_USE_ASCII_PID +#ifdef linux +#define LF_USE_ASCII_PID YES /* Just like kermit, ppp, default mgetty.. */ +#else #define LF_USE_ASCII_PID NO #endif +#endif /* * Wether you want lock files to be in the form LK.inode.major.minor @@ -309,7 +313,11 @@ */ #ifndef LF_PATH +#ifdef linux +#define LF_PATH "/var/lock" /* Linux FSSTND spec. */ +#else #define LF_PATH "/usr/spool/uucp" +#endif #endif /* |
#ifdef linux はもっと前のほうに書く場所があったような…。ま、いいか。
strings `which seyon` | grep ^/ |
とでもすれば、どこにロックが書かれるかわかります。