10. ロックファイルの問題について

(この章については 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 など に収録されているバイナリはこの問題が修正されていません。 下記のパッチを当てて、コンパイルしなおしてください。作業手順は、

  1. 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

  2. ディレクトリ seyon に移動してから下記パッチリストの内容を当てる。

       cd seyon
       patch -p1 < PATCHFILE

  3. コンパイル、インストール。

       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 ^/

とでもすれば、どこにロックが書かれるかわかります。