FreeBSD QandA 2000年5月24日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 872 (新規) 更新履歴
Q. FreeBSD(98) で、拡張RS232Cボード 緑Hayes ESP98 は使えますか?

A. 2.2.8R-Rev02 までと 3.0R では、高橋@工学院大さんが公開しているシリアル
   ドライバのパッチを当てると使用できます。

     <URL:http://home.jp.FreeBSD.org/~nyan/sio.html>
     [管理番号 249] 参照

   その後このパッチが本家の CVS にマージされたので、3.1R 以降のバージョン
   と 2.2.8R-Rev03 では標準で対応しています。

   ただし、ボード付属の Windows3.1 または Windows95 用設定ツールを用いて、
   あらかじめ ESP98 を 16550A 互換モードに設定し、不揮発メモリに書き込ん
   でおく必要があります。購入したばかりの状態 (エンハンスモード) では使え
   ませんので注意してください。 


管理番号 466 (更新) 更新履歴
Q. FreeWnn (Wnn4) または Wnn6 をインストールしたのですが、漢字変換がで
   きません。何を確認すれば良いでしょうか。

A. まず、jserver が「jserver を動かしたいマシン上で」起動していること
   を確認してください。

     ps -ax などで jserver が存在すれば、jserver は起動しています。動いて
   いない場合は、Wnn のマニュアルにしたがって jserver を起動してください。
   ports&packages からインストールした場合は起動 script が
     /usr/local/etc/rc.d
   にインストールされているはずです。

     jserver の動作が確認できたら、client の環境設定が正しいかどうか調べ
   ましょう。

     Wnn の client と jserver の通信がうまくゆかず、変換出来ない場合によ
   く見られる間違いに、jserver の動いている host を指定していないというも
   のがあります。
     ほとんどの Wnn client は default では jserver という名の host で動い
   ている jserver daemon と通信しようとします。ここで、実際に jserver が
   動いている host が jserver という名でなければ通信に失敗してしまい、変
   換が行なえません。解決法は以下のいずれかになるでしょう:
    (a) jserver が動いている host に jserver という別名をつける。
    (b) client を起動する時に jserver が動いている host を教える。
    (c) client が default で接続しに行く host の名前を変える。

     他の原因も考えられますが、ソフトウェアによってかわってきますので、一
   概にはいえません。あなたが入力を行ないたいと思っている環境について 
   ドキュメント、QandA、メーリングリスト、その他を検索して調べ、分からな
   い場合はメーリングリスト、netnews 等で質問して下さい。
     kinput2 と kterm の組合せについては [管理番号 356] も御覧下さい。

     Jserver と通信出来ない場合の解決法として示されることが最も多いのは 
   (b) ですが、あなたが管理者で、ユーザーにそれを徹底させるのが大変な場合
   は (a) または (c) が有効かもしれません。

   (a) jserver が動いている host に jserver という別名をつける。

     DNS や /etc/hosts 等で jserver という host を設定します。

   (b) client を起動する時に jserver が動いている host を教える。

     Wnn client には主なもので emacsen で動く たまご(egg、emacs 19 以前)、
     eggV4 (emacs 20 相当以降) の他、kinput2、xwnmo、uum、onew 等がありま
     すが、egg V4 以外にに共通して jserver host を指定する方法として
       環境変数  JSERVER
     に jserver の動いている host 名を設定する方法があります。
     ほとんどの wnn client はこの環境変数を参照しているはずです。
     (egg V4 の場合は、特に指定しなければ localhost の jserver に接続するよ
      うです。)

     あなたの環境に応じて、.login、.cshrc、.profile、.xsession、.xinitrc 
     などで環境変数 JSERVER を設定して下さい。
     jserver が localhost で動いている場合は
     csh 系の shell:
          setenv JSERVER localhost
     sh 系の shell:
          JSERVER=localhost; export JSERVER
       または
          export JSERVER=localhost
     jserver が 動いている host が jserverhost.domain であれば
          setenv JSERVER jserverhsot.domain
     と記述します。
     xdm で login する場合は [管理番号 454] もご覧下さい。

     これ以外に client によって異なった方法で jserver host を指定すること
     が出来ます。主な例として、egg と kinput2 について例を挙げておきます。
     詳しくは各 client の説明 (man、info 等) を御覧下さい。

   たまご:
     egg では set-wnn-host-name 関数を用いて .emacs などから設定すること
     ができます。
     localhost で動いている場合:
          (set-wnn-host-name "localhost")
     他の host (この例では jserverhost.domain) で動いている場合:
          (set-wnn-host-name "jserverhost.domain")
     尚、set-wnn-host-name 関数は指定された host名を jserver-list 変数の
     先頭に追加しますので、jserver が動いている host が複数あって、どれに
     接続しても良い場合は set-wnn-host-name を複数回実行します。その際、
     最初に接続したい host は最後に指定するようにして下さい。

     egg V4 については事情が異なりますので、調べてみて下さい。

   kinput2:
     manual に載っているように、jserver が動いている host を
       option: -jserver
       resource: Kinput2*CcWnn.jserver 及び Kinput2*CcWnn.jserver2nd
     で指定する事が出来ます。
     例1:
       % kinput2 -wnn -jserver localhost -ccdef ccdef.kinput2.egg &
     例2:
       .Xdefaults、.Xresources 等に
         Kinput2*CcWnn.jserver:    localhost
       を追加する。

   (c) client が default で接続しに行く host の名前を変える。

     jlib を使用する client は、jserver を指定されなければ、起動時に
       /usr/local/lib/wnn/serverdefs
     ファイルを参照して接続する host を決定します。
     従って、jserver (または他の使用している server) に対応する 2カラム目
     の machine name を jserver からお望みの host名に変更すればよいでしょう。
     但し、eggV4 のように、jlib を使用していない client についてはその 
     client の設定を変更する必要があります。各 client の説明を参照して下
     さい。


管理番号 1121 (新規) 更新履歴

Q. Fast Ethernet カードの 10Mbps or 100Mbps の速度切替はどうやって
   指定すればいいのでしょうか? 

A. おそらく正解への早道は、使用なさっているドライバの man ページに書か
   れていると思います。de ドライバなら de(4)、fxp ドライバなら fxp(4) 
   という具合です。

   FreeBSD 2.2.2R までは ifconfig(8) のオプションの link? や -link? を
   組み合わせて指定していました。

   FreeBSD 2.2.5R 以降は ifconfig(8) の media というオプションで指定
   できます。一般的にデフォルトでは 10Mbps/100Mbps を自動認識する 
   autoselect モードに設定されていますが、de ドライバでは次の様にすれ
   ば、明示的に通信速度を固定できます。

     # ifconfig de0 media 10baseT/UTP とやると 10Base-T
     # ifconfig de0 media 100baseTX とやると 100Base-TX

   などに切り替えられます。

   また、Full duplex モードと Half duplex モードは、mediaopt という
   オプションで切り換えできます。

     # ifconfig de0 media 100baseTX mediaopt full-duplex

   とやると 100base-TX の全二重 (Full duplex) に切り替えられます。


管理番号 1122 (新規) 更新履歴
Q. IDE コントローラ (wdc?) を利用する PC カードを使いたいのですが、
   どのように設定すればいいですか? 

A. PAO-FAQ の 530 番を読んでみてください。
     <URL:http://home.jp.FreeBSD.org/~toshi/PAO3/PAO-FAQ.jp.html#530>


管理番号 1138 (新規) 更新履歴
Q. nVIDIA RIVA128 を使った AGP グラフィックカードを使用していますが
   XFree86 3.3.2 のインストールができません。

   具体的には
     1) VGA16サーバで基本設定を行う
     2) 基本設定をもとにXサーバ(Riva128ならSVGAサーバ)を立ち上げ直す
   1 -> 2に移る時、すなわちサーバの切り替え時にOSごとfreezeしてしまいます。

A. RIVA128 には XFree86 3.3.2 より対応していますが、以下に記述したような
   問題がありますので、3.3.3 以降の出来るだけ新しいバージョンを使うよう
   にしてください。この QandA 更新時の最新版は 3.3.6 です。

   3.3.2 では RIVA128 のカードが他の device と IRQ sharing をしている場合、
   正常に起動できないという問題がありますので、
     % dmesg | grep irq
   などとして、他の device と IRQ が衝突していないか確認し、
   もしぶつかっているようならカードの設定を変更しましょう。

   具体的にどう IRQ を変更するかは:
     ・BIOSの設定をいろいろと変更してみる
     ・カードの刺さっているスロットの位置を変更してみる
     ・カードの位置を変更して、さらにBIOSで持っている情報をresetしてみる
     ・使っていないdeviceのIRQを解放してみる
     ・RIVA128のビデオカードにIRQを割り当てないようにしてみる
   などとしてみるとよいと思います。


管理番号 1213 (新規) 更新履歴
Q. FreeBSD 2.2 系列の lnc ドライバで NetaTalk が動作しません。

     atalkd: addmulti: Invalid argument
     AppleTalk not up! Child exited with 1.

   というエラーが出て、起動してくれません。

A. lnc ドライバが、multicast 対応としてコンパイルされていない、かつ
   multicast 対応部分にバグがあるためです。

   FreeBSD のアップグレードが無理なら、以下のパッチを当てて、カーネルを
   再構築して下さい。以下からパッチを切り出したら、QandA によるインデン
   トを除去してファイルにセーブし、patch -l < file としてパッチを適用し
   ます。2.2.6R 以外ではいくらか (offset xx lines) などと表示されますが
   問題はないです。 

   なお、[管理番号 706] も参照して下さい。

   --- /sys/i386/isa/if_lnc.c.orig Wed Feb  3 12:36:11 1999
   +++ /sys/i386/isa/if_lnc.c      Wed Feb  3 12:38:10 1999
   @@ -32,8 +32,8 @@
     *
     */
 
   -/*
    #define LNC_MULTICAST
   +/*
    #define DIAGNOSTIC
    #define DEBUG
     *
   @@ -69,6 +69,11 @@
    /* Some defines that should really be in generic locations */
    #define FCS_LEN 4
    #define MULTICAST_FILTER_LEN 8
   +#ifdef LNC_MULTICAST
   +#define LNC_IFF_DEFAULT (IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST)
   +#else
   +#define LNC_IFF_DEFAULT (IFF_BROADCAST | IFF_SIMPLEX)
   +#endif
 
    #include <sys/param.h>
    #include <sys/systm.h>
   @@ -207,19 +212,20 @@
    static inline u_long
    ether_crc(u_char *ether_addr)
    {
   -#define POLYNOMIAL 0x04c11db6
   -       u_long crc = 0xffffffffL;
   -       int i, j, carry;
   +#define POLYNOMIAL 0xEDB88320UL
   +       u_long crc = 0xFFFFFFFFUL;
   +       int i, j;
           u_char b;
   +       u_long m;
 
           for (i = ETHER_ADDR_LEN; --i >= 0;) {
                   b = *ether_addr++;
                   for (j = 8; --j >= 0;) {
   -                       carry  = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01);
   -                       crc <<= 1;
   +                       m = crc;
   +                       crc >>= 1;
   +                       if ((m ^ b) & 1)
   +                               crc ^= POLYNOMIAL;
                           b >>= 1;
   -                       if (carry)
   -                               crc = ((crc ^ POLYNOMIAL) | carry);
                   }
           }
           return crc;
   @@ -1222,7 +1228,7 @@
           sc->arpcom.ac_if.if_name = lncdriver.name;
           sc->arpcom.ac_if.if_unit = unit;
           sc->arpcom.ac_if.if_mtu = ETHERMTU;
   -       sc->arpcom.ac_if.if_flags = IFF_BROADCAST | IFF_SIMPLEX;
   +       sc->arpcom.ac_if.if_flags = LNC_IFF_DEFAULT;
           sc->arpcom.ac_if.if_timer = 0;
           sc->arpcom.ac_if.if_output = ether_output;
           sc->arpcom.ac_if.if_start = lnc_start;
   @@ -1312,7 +1318,7 @@
 
           s = splimp();
           lnc_stop(sc);
   -       sc->arpcom.ac_if.if_flags |= IFF_BROADCAST | IFF_SIMPLEX; /* XXX??? */
   +       sc->arpcom.ac_if.if_flags |= LNC_IFF_DEFAULT; /* XXX??? */
 
           /*
            * This sets up the memory area for the controller. Memory is set up for
   @@ -1833,7 +1839,12 @@
                                           ether_delmulti(ifr, &sc->arpcom);
 
                   if (error == ENETRESET) {
   -                       lnc_setladrf(sc);
   +                       /*
   +                        * Multicast list has changed; set the logical address
   +                        * filter accordingly. 
   +                        * (not only initialisation block, but also the LANCE)
   +                        */
   +                       lnc_init(sc);
                           error = 0;
                   }
                   break;


管理番号 1238 (新規) 更新履歴
Q. FreeBSD 3.x で互換ライブラリ (compat* 配布ファイルに含まれます) も 
   install してあるはずなのに、以下のようなメッセージが出て、昔のバイナリ
   が実行できません。

     ld.so failed: Can't find shared library "libc.so.2.1"

A. a.out 形式の互換ライブラリは /usr/lib/compat/aout/ に存在しないと
   いけないはずですが、バグのため一部は /usr/lib/compat/lib*.so.*.* として
   インストールされてしまいます。これは 3.3-RELEASE で修正されていますが、 
   それより前のリリースをお使いなら次の様に対処してください。

     # mv /usr/lib/compat/lib*.so.*.* /usr/lib/compat/aout/
     # ldconfig -aout -R

   このとき rc.conf(5) で変数 ldconfig_paths_aout に /usr/lib/compat/aout 
   が含まれている事を確認してください。もし抜けていたら適切に修正して、
   リブートするか ldconfig(8) の -m オプションを使ってください。


管理番号 1247 (新規) 更新履歴
Q. Linux(x86) 版の MATLAB を FreeBSD で使えますか?
   (keyword: MATLAB, Linux, emulation)

A. 使えます。もちろんライセンスの問題はこれとは別に解決する必要があります。
   FreeBSD 2.2.8-STABLE での例を紹介します。これ以外方法や、他の動作環境
   での実績があれば QandA に報告して追加・修正して下さい。

   [概略]

   適当な Linux マシンに Linux(x86) 用の MATLAB をインストールし、その
   ディレクトリを FreeBSD マシンが NFS マウントします。FreeBSD では、linux
   エミュレーション機能によってこのディレクトリ中の MATLAB を実行します。
   (試した環境は、FreeBSD が 2.2.8-STABLE、MATLAB が 5.2.1 で Linux
   (Debian 2.2) マシンにインストールされ、ネットワークフローティングの
   ライセンスは Solaris 2.6 が管理しているという環境です)

   [手順]

   Step 0.(適当なマシンに MATLAB をインストールし NFS export する)
      ・NFS サーバとなる Linux マシンに、Linux(x86) 版のバイナリを含めて
        MATLAB をインストールし、少なくともそのマシンで使えるようにします。
      ・MATLAB をインストールしたディレクトリ (例えば /usr/local/matlab と
        します) を、FreeBSD マシンに対して NFS export します。

   Step 1.(FreeBSD マシンで linux エミュレーション機能を有効にする)
      ・linux_lib-2.6.1 を packages/ports からインストールします。ただし、
        FreeBSD 3.3-RELEASE から linux_lib は linux_base に置き換えられた
        ため、この QandA の手順では動作しないかもしれません。
      ・linux(8) エミュレータ・カーネルモジュールをロードします。また、
        rc.conf(5) で linux_enable=YES とすればブート時に自動的に実行します。

   Step 2.(MATLAB の linux(x86) 版のあるディレクトリをマウントする)
      ・上記の例に従って、mount -t nfs server:/usr/local/matlab /matlab 
        とし、ls /matlab で bin や etc 等中身が見えるようにします。server 
        は Linux マシンのホスト名、/matlab は予め mkdir しておきます。また、
        fstab(5) に書いておくか amd(8) などを併用すれば便利でしょう。

   Step 3.(FreeBSD マシンに必要な linux のライブラリを追加する)
      ・MATLAB の動作に不足している linux のライブラリを、/compat/linux/lib
        に追加します。/compat/linux/usr/bin/ldd /matlab/bin/* などと実行し、
        見付からないライブラリを MATLAB をインストールした Linux 側の /lib 
        からコピーすれば良いでしょう。
        (ld-linux* は特に重要そうなのだが、取捨選択が私には難しい。そこで
         Linux 側の /lib を全部コピーした。linux_lib が上書きされるし、必要
         以上にコピーするので乱暴かも知れないが、私の場合はこれで動作した。
         現状は[付録]のようになっている)
      ・ライブラリを追加したら /compat/linux/sbin/ldconfig を実行します。

   Step 4.(MATLAB を実行する)
      ・例えば、/matlab/bin/matlab -lnx86 によって、MATLAB を使用できます。
        更にライブラリが不足しているようなら Step 3.を繰り返します。

   [使用感]

   少なくとも DEMO は全て実行できます。
   音も出ます。(sb なサウンドドライバで確認)

   [付録]

   % ls -il /compat/linux/lib
   total 6031
      749 -rwxr-xr-x  1 root  wheel    45017 Feb 21 14:37 ld-2.0.7.so*
      747 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 ld-linux.so.1@ -> ld-linux.so.1.9.10
      124 -rwxr-xr-x  1 root  wheel    21367 Oct 26  1996 ld-linux.so.1.7.14*
      773 -rwxr-xr-x  1 root  wheel    24396 Jan 14 12:23 ld-linux.so.1.9.10*
      141 lrwxrwxrwx  1 root  wheel       11 Mar  9 19:10 ld-linux.so.2@ -> ld-2.0.7.so
      736 -rwxr-xr-x  2 root  wheel    99488 Jan 14 12:23 ld.so*
      125 -rwxr-xr-x  1 root  wheel    24580 Oct 26  1996 ld.so.1.7.14*
      736 -rwxr-xr-x  2 root  wheel    99488 Jan 14 12:23 ld.so.1.9.10*
      750 -rw-r--r--  1 root  wheel     2768 Feb 21 14:37 libBrokenLocale-2.0.7.so
      142 lrwxrwxrwx  1 root  wheel       24 Mar  9 19:10 libBrokenLocale.so.1@ -> libBrokenLocale-2.0.7.so
      751 -rw-r--r--  1 root  wheel   651436 Feb 21 14:37 libc-2.0.7.so
      134 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libc.so.5@ -> libc.so.5.4.46
      128 -rwxr-xr-x  1 root  wheel   705995 Oct 26  1996 libc.so.5.3.12*
      139 -rwxr-xr-x  1 root  wheel  1861963 Apr 11  1997 libc.so.5.4.23*
      819 -rw-r--r--  1 root  wheel   586732 Mar  9 11:46 libc.so.5.4.46
      143 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libc.so.6@ -> libc-2.0.7.so
      724 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libcom_err.so.2@ -> libcom_err.so.2.0
      117 -rw-r--r--  1 root  wheel     4100 Feb 11 08:13 libcom_err.so.2.0
      752 -rw-r--r--  1 root  wheel   150380 Feb 21 14:37 libcrypt-2.0.7.so
      144 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libcrypt.so.1@ -> libcrypt-2.0.7.so
      753 -rw-r--r--  1 root  wheel    55588 Feb 21 14:37 libdb-2.0.7.so
      145 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libdb.so.2@ -> libdb-2.0.7.so
      754 -rw-r--r--  1 root  wheel     6612 Feb 21 14:37 libdl-2.0.7.so
      126 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libdl.so@ -> libdl.so.1.7.14
      135 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:10 libdl.so.1@ -> libdl.so.1.9.10
      127 -rwxr-xr-x  1 root  wheel     6983 Oct 26  1996 libdl.so.1.7.14*
      816 -rwxr-xr-x  1 root  wheel     5660 Jan 14 12:23 libdl.so.1.9.10*
      146 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libdl.so.2@ -> libdl-2.0.7.so
      735 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libe2p.so.2@ -> libe2p.so.2.3
      733 -rw-r--r--  1 root  wheel     8820 Feb 11 08:13 libe2p.so.2.3
      732 lrwxrwxrwx  1 root  wheel       16 Mar  9 19:10 libext2fs.so.2@ -> libext2fs.so.2.4
      728 -rw-r--r--  1 root  wheel    68524 Feb 11 08:13 libext2fs.so.2.4
      136 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libfbm.so@ -> libfbm.so.1.0.0
      132 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:09 libfbm.so.1@ -> libfbm.so.1.0.0
      130 -rwxr-xr-x  1 root  wheel    72053 Oct 26  1996 libfbm.so.1.0.0*
      755 -rw-r--r--  1 root  wheel   104192 Feb 21 14:37 libm-2.0.7.so
      133 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:09 libm.so.5@ -> libm.so.5.0.8
      129 -rwxr-xr-x  1 root  wheel    36084 Oct 26  1996 libm.so.5.0.6*
      138 -rwxr-xr-x  1 root  wheel    76697 Apr 11  1997 libm.so.5.0.8*
      157 lrwxrwxrwx  1 root  wheel       13 Mar  9 19:10 libm.so.6@ -> libm-2.0.7.so
      746 -rw-r--r--  1 root  wheel   242644 Oct 30 22:57 libncurses.so.3.4
      741 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libncurses.so.4@ -> libncurses.so.4.2
      738 -rw-r--r--  1 root  wheel   240572 Dec  4 00:28 libncurses.so.4.2
      756 -rw-r--r--  1 root  wheel    19044 Feb 21 14:37 libnsl-2.0.7.so
      158 lrwxrwxrwx  1 root  wheel       15 Mar  9 19:10 libnsl.so.1@ -> libnsl-2.0.7.so
      757 -rw-r--r--  1 root  wheel    24660 Feb 21 14:37 libnss_compat-2.0.7.so
      159 lrwxrwxrwx  1 root  wheel       22 Mar  9 19:10 libnss_compat.so.1@ -> libnss_compat-2.0.7.so
      758 -rw-r--r--  1 root  wheel    18096 Feb 21 14:37 libnss_db-2.0.7.so
      160 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libnss_db.so.1@ -> libnss_db-2.0.7.so
      759 -rw-r--r--  1 root  wheel     9976 Feb 21 14:37 libnss_dns-2.0.7.so
      161 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libnss_dns.so.1@ -> libnss_dns-2.0.7.so
      760 -rw-r--r--  1 root  wheel    30204 Feb 21 14:37 libnss_files-2.0.7.so
      162 lrwxrwxrwx  1 root  wheel       21 Mar  9 19:10 libnss_files.so.1@ -> libnss_files-2.0.7.so
      761 -rw-r--r--  1 root  wheel    32092 Feb 21 14:37 libnss_nis-2.0.7.so
      163 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libnss_nis.so.1@ -> libnss_nis-2.0.7.so
      830 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libpam.so.0@ -> libpam.so.0.66
      766 -rw-r--r--  1 root  wheel    96472 Feb 25 04:28 libpam.so.0.66
      826 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:10 libpam_misc.so.0@ -> libpam_misc.so.0.66
      814 -rw-r--r--  1 root  wheel     5516 Feb 25 04:28 libpam_misc.so.0.66
      748 -rw-r--r--  1 root  wheel    31708 Feb 10 12:38 libproc.so.1.9.0
      764 -rw-r--r--  1 root  wheel    49524 Feb 21 14:37 libpthread-0.7.so
      164 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libpthread.so.0@ -> libpthread-0.7.so
      743 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libreadline.so.2@ -> libreadline.so.2.1
      742 -rw-r--r--  1 root  wheel   176320 Feb 17 17:56 libreadline.so.2.1
      762 -rw-r--r--  1 root  wheel    45104 Feb 21 14:37 libresolv-2.0.7.so
      165 lrwxrwxrwx  1 root  wheel       18 Mar  9 19:10 libresolv.so.2@ -> libresolv-2.0.7.so
      745 lrwxrwxrwx  1 root  wheel       17 Mar  9 19:10 libslang.so.1@ -> libslang.so.1.2.2
      744 -rw-r--r--  1 root  wheel   226916 Oct 16 16:58 libslang.so.1.2.2
      727 lrwxrwxrwx  1 root  wheel       12 Mar  9 19:10 libss.so.2@ -> libss.so.2.0
      726 -rw-r--r--  1 root  wheel    13972 Feb 11 08:13 libss.so.2.0
      131 lrwxrwxrwx  1 root  wheel       19 Mar  9 19:09 libtermcap.so.2@ -> libtermcap.so.2.0.8
      137 -rwxr-xr-x  1 root  wheel    11925 Oct 26  1996 libtermcap.so.2.0.8*
      763 -rw-r--r--  1 root  wheel     6692 Feb 21 14:37 libutil-2.0.7.so
      140 lrwxrwxrwx  1 root  wheel       16 Mar  9 19:10 libutil.so.1@ -> libutil-2.0.7.so
      737 lrwxrwxrwx  1 root  wheel       14 Mar  9 19:10 libuuid.so.1@ -> libuuid.so.1.2
      833 -rw-r--r--  1 root  wheel     5700 Feb 11 08:13 libuuid.so.1.2
   484567 drwxr-xr-x  2 root  wheel     1024 Mar  8 14:24 security/


管理番号 1299 (新規) 更新履歴
Q. kinput2 が起動しているとき、Xクライアントの mule を使っていて間違って
   SHIFT+SPACE を押すと、kinput2 の入力ウィンドウがポップアップして
   しまいます。mule では、たまご (Wnn)、かんな、SKK 等を使用しているので、
   kinput2 の XIM が使われないようにしたいのですが。

   確認環境: 3.1-RELEASE とその ports/packages
             ja-mule-wnn[46]-2.3
             ja-kinput2-wnn[46]-2.0.4

A. kinput2(1) 及び mule(1) が X11 R6.3 で取り入れられた XIM (X Input
   Method Protocol) に対応しているため、仮名漢字変換用の入力ウィンドウが
   オープンされます。これを抑制するには以下のようにいくつかの方法があり
   ます。

   1. kinput2 を -xim オプション付きで起動するように変更します。しかし、
      この方法では mule 以外でも XIM による漢字入力は出来なくなります。
      それでも良ければ、kinput2 を起動している ~/.xinitrc や ~/.xsession 
      等を修正します。

        % kinput2 -xim &

   2. mule を起動するときに、環境変数 LC_CTYPE や LANG を ja_JP.EUC 等に
      せず、何も指定しないか、C などにしておく。

        % env LC_CTYPE=C mule &

   3. mule を起動するときに、環境変数 XMODIFIERS を @im=none (none は、
      実在しないもの) にしておく。

        % env XMODIFIERS=@im=none mule &

   この 2.と 3. の方法はそれ以外のアプリケーションには影響しませんので、
   他で XIM を使った入力が使いたい場合でも問題ありません。または、逆に
   デフォルトの設定をこのようにしておいて、XIM が必要なものだけ env(1) 
   を使う方法もあります。また Window Manager のメニュー設定も同様な変更
   で良いでしょう。

   4. ports を使って mule をコンパイルするとき、make patch の後、
      work/emacs-19.34/src/xfns.c で #define X_I18N_INHIBITED に変更して
      コンパイルし直します。なお、3.2-RELEASE の ports では既に同様の
      変更が適用済みです。

   *補足*

   FreeBSD 固有の問題ではありません。
   Xサーバは、上記環境のとおりで、mule を Xクライアントとして
   Solaris 機から起動した場合も、ja 環境で起動すれば同様の現象が
   起きます。

   確認はとっていませんが、2.2.5R ベースのシステムでは上記現象は
   体験せず。emacs-19.28 ベースではおこらず、emacs-19.34 ベースで
   起きます。


管理番号 1308 (新規) 更新履歴
Q. NIS/YP で + や - を含む行をもつ map を make しようとすると、
   以下のメッセージが出て、その行は無視されてしまいます。

     yp_mkdb: bad character at start of line: ...

A. FreeBSD 3.2-RELEASE 以前の yp_mkdb(8) では、マップのキーかデータの先頭に
   `+' や `-' を使うと、警告メッセージを出してこの行を無視するようになって
   います。それに対して、3.3-RELEASE 以降ではこのチェックは -f オプション
   を指定したときだけ行われ、デフォルトではチェックは行わなくなりました。
   しかし、これらの文字が passwd(5)group(5) で特別な意味を持つことには
   変わりませんので、これらのマップの処理だけ Makefile.yp で -f オプション
   が追加されるようになっています。

   3.2-RELEASE 以前を使っていて、どうしてもこのチェックを外したければ、
   /usr/src/usr.sbin/yp_mkdb/yp_mkdb.c の /* Check for silliness. */
   というコメントがついている if 文のブロックを削ってコンパイルしなおせば、
   一応使えるようにはなります。

        /* Check for silliness. */
        if  (*keybuf == '+' || *keybuf == '-' ||
             *datbuf == '+' || *datbuf == '-') {
                warnx("bad character at start of line: %s", buf);
                continue;
        }


管理番号 1406 (新規) 更新履歴
Q. 下記の環境で、apm -z (zzz) がうまく動作しません。

       M/B: ASUS P5A ACPI BIOS Revision 1006
       OS: FreeBSD 2.2.8R + PAO(PAO-19990405.tar.gz)

   apm -z を実行すると、ピッピッピッピッと(ピッが4回)音がして、
   画面が一瞬真っ黒になった後、元の状態に戻ってしまいます。
   その時、/var/log/messages には、次のようなログが残されます。

   Jul 26 00:48:16 choota /kernel: resumed from suspended mode (slept 00:00:01)

A. apm -z[ENTER] というコマンドを実行する時、key press によって suspend
   状態に入り、key release event で resume してしまっている可能性がありま
   す。これが原因なら、[ENTER] の入力から apm -z 起動のタイミングを少し遅
   らしてやると (とりあえず) 動作します。具体的には、下記のように apm(8) 
   コマンド実行前に sleep(1) コマンドをはさんでやります。

     % sleep 1; apm -z

   ただし、PAO3 (3.x 系 の PAO) 及び 3.3R 以降では、カーネルが上記に相当
   する処理を行なうようになっていますので、この対処は意味がありません。
   なお、この待ち時間は sysctl(8) を使って確認/変更できます。

   a) 現在の待ち時間の表示
     % sysctl machdep.apm_suspend_delay

   b) 待ち時間を 3 秒に設定
     # sysctl -w machdep.apm_suspend_delay=3


管理番号 1470 (新規) 更新履歴
Q. FreeBSD から、Windows NT 4.0 に接続されたプリンタへの印刷。

A. 以下のような2つの方法があります。

   1. WinNT に lpd(8) サービスを導入して印刷。
      まず FreeBSD 側の設定です。

      a) /etc/printcap に実際のプリント用と Ghostscript のフィルタ用の二つの
       エントリを追加します。なお、リモートホスト名を BLESS、リモートプリンタ
       名を LP-1500 と仮定します。書式についての詳細は printcap(5) を読んで
       ください。

        remote:\
           :lp=/dev/null:sh:mx#0:lf=/var/log/lpd-errs:\
           :sd=/var/spool/output/remote:\
           :if=/usr/local/libexec/LP-1500.sh:

        remote-help:\
           :lp=/dev/null:sh:mx#0:lf=/var/log/lpd-errs:\
           :rm=BLESS:rp=LP-1500:\
           :sd=/var/spool/output/remote-help:

      b) 上記で追加したエントリ用のスプールディレクトリを作成します。

        # mkdir /var/spool/output/remote
        # mkdir /var/spool/output/remote-help

      c) 以下の様なフィルタ /usr/local/libexec/LP-1500.sh を作成し、chmod +x 
       しておきます。使用するプリンタにより設定は異るでしょう。

        #!/bin/sh
        exec /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=epag \
            -sOutputFile=- - | lpr -l -Premote-help

      d) WinNT で lpd の service を稼働させるには、
        サービス -----> TCP/IP Print Server です。

      e) 印刷方法は、
        % lpr -Premote tiger.ps です。

      森さんよりの貴重なアドバイスについては、[FreeBSD-beginners-jp 6561]
      前後を見てください。


   2. lpd を使わずに smbclient(1) の print コマンドで印刷する。

      /etc/printcap は使いません。スクリプトによる自動化では
      [FreeBSD-users-jp 38229] を参考にしました。

      a) /usr/local/bin/gsf として以下の内容のスクリプトを作成します。

        #!/bin/sh
        OF=/var/tmp/gsf.$$.LP-1500
        trap "rm -f $OF; exit 1" 2 15
        touch $OF
        chmod 600 $OF
        { echo showpage ; echo quit ; } | \
          /usr/local/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=epag \
            -sPAPERSIZE=a4 -sOutputFile=$OF $1 > /dev/null 2>&1
        /usr/local/bin/smbclient '\\BLESS\lp-1500' \
            himitu -U user1 -P -N -c "print $OF"
        rm -f $OF
        exit 0

      b) スクリプトのパーミッションを設定します。特に smbclient へのパスワー
       ドとユーザ名については、一般ユーザに読めないようにする必要があるかも
       しれません。

        # chown root.wheel /usr/local/bin/gsf
        # chmod 711 /usr/local/bin/gsf

      c) そして印刷は、

        % gsf tiger.ps

       です。ただし、一時ファイル /var/tmp/gsf.$$.LP-1500 を印刷実行中に変更
       しないこと!

      ここでも森さんにお世話になりました。[FreeBSD-beginners-jp 6586] 前後を
      見てください。


管理番号 189 (更新) 更新履歴
Q. resolv.conf 対応版の WIDE-DHCP を ports / packages でインストールしたの
   ですが、/etc/resolv.conf を書き換えてくれません。

A. まず注意として、3.2-RELEASE 以降では OS 標準で dhclient(8) をサポートし
   ているため、ifconfig_<interface>="DHCP" と設定しただけでは、dhclient が
   使われます。

   それでもなんらかの理由で WIDE 版を使いたい人は、/etc/rc.conf で以下の樣
   に指定します。ポイントは dhcpc(8) のオプション -r ですが、もちろん、変数 
   network_interfaces も適切に設定する必要があります。ここでは例として ed0 
   を使用しますが、実際には使用するネットワークインタフェースに読み換えてく
   ださい。

     ifconfig_ed0="DHCP"
     dhcp_program="/usr/local/sbin/dhcpc"
     dhcp_flags="-r"

   また、PC カードを使う場合は
     <URL:http://home.jp.FreeBSD.org/~toshi/PAO3/PAO-FAQ.jp.html#604>
   も参照してください。なお、以前の PAO では dhcp_program は不要でした。

   それより古いリリースをお使いの場合では、/etc/start_if.ed0 に
     /usr/local/sbin/dhcpc -r ed0
   の様に記述すれば良いでしょう。その際、/etc/rc.conf から ifconfig_ed0
   などの余計なものは削除します。 


管理番号 1549 (新規) 更新履歴
Q. 既存の FreeBSD 領域の前 (HDD の中に存在するスライスの順番でいう前) に
   FreeBSD 領域を作ったら起動しなくなった。

A. FreeBSD 2.2 系のブートブロックは、HDD のスライステーブル (PC/AT 用語で
   言う fdisk(8) パーティション) から、最初に見つけた FreeBSD 領域から
   /kernel を読み込もうとするため、同一の HDD の既存の FreeBSD 領域の前に
   新たな FreeBSD 領域を作成すると、間違えて新規に作った領域から /kernel 
   を読み込もうとして FreeBSD が起動できなくなります。

   逆に言うと、後ろにスライスを作成する分には問題になりませんし、新しく作っ
   た領域に / (ルート)パーティション (BSD パーティション) を移動すれば動
   作します。または、3.1R 以降ならこの問題は修正されていますので、可能な
   ら 3.4R 以降へのアップグレードをお薦めします。

   どうしても新領域にルートパーティションを入れずに解決したい場合、ブート
   ブロックに新しい領域を FreeBSD 以外のスライスと思い込ませておくことに
   より、この領域をスキップして FreeBSD が既存領域から立ち上がるようにで
   きます。一旦システムが起動してしまえば、マウントして使用する事には影響
   しません。この発展形として [管理番号 797] があります。

   <解決法の一例>

   1) root 権限で /stand/sysinstall を起動します。

   2) メニューから「設定」->「パーティション」(Configure -> Partition) を
    選び、目的のディスクを選択して新規スライスを作成します。

    開始位置     大きさ   終了位置     名称 タイプ       種別 副タイプ   フラグ
           0         63         62        -      6     unused        0
          63    2459457    2459519    wd0s2      2        fat        6
     2459520    1024128    3483647    wd0s3      3    freebsd      165    C  <----
     3483648    2661120    6144767    wd0s4      3    freebsd      165
     6144768     201600    6346367    wd0s1      1    unknown      132
     6346368       8064    6354431        -      6     unused        0

    矢印のように領域を作成したら「Q」でこの画面を終了します。

   3) 続いて「ディスクラベル」(Label) をメニューから選択します。ディスク
    ラベルを書き込み、ファイルシステムを作ります。 

    「C」で新たな FreeBSD のパーティションを作成します。最初にパーティショ 
    ンのサイズを聞かれますが、デフォルトで使用可能な全ブロックサイズが指定
    されますから、ディスク全体を一つのパーティションで使用する場合はこのま
    まで良いでしょう。次にパーティションのタイプを聞かれますから、ファイル
    システムを選択します。さらにそのパーティションをマウントする位置を聞か
    れます。/mnt などのパスを指定します。このとき、指定したディレクトリが
    なければ、自動的に作成されます。

    ディスク: wd0   区画名: wd0s3   空き領域: 0 ブロック (0MB)
    ディスク: wd0   区画名: wd0s4   空き領域: 0 ブロック (0MB)

    区画    マウント位置     容量 Newfs   区画    マウント位置     容量 Newfs
    ----    ------------     ---- -----   ----    ------------     ---- -----
    wd0s2   <none>         1200MB DOS
    wd0s3e  /mnt            500MB UFS Y     <---------
    wd0s4a  <none>           32MB *
    wd0s4b  swap            199MB SWAP
    wd0s4e  <none>           30MB *
    wd0s4f  <none>         1037MB *

    「W」で書き込むと disklabel(8), newfs(8), mount(8) まで行なわれますの
    で、「Q」でこの画面を終了し、一旦 sysinstall を終了します。

   4) df で調べると無事 newfs が済み、/dev/wd0s3e がマウントされています
    ので、umount /mnt でディスクを切り離しておきます。 

   5) 再度 /stand/sysinstall を起動して、「設定」->「パーティション」
    (Configure -> Partition) を選んで、スライス情報を書き変えます。  

    ディスク名:     wd0                                FDISK パーティションエディタ
    ジオメトリ: 788 シリンダ/128 ヘッド/63 セクタ (計 6354432 セクタ)

      開始位置     大きさ   終了位置     名称 タイプ       種別 副タイプ   フラグ

             0         63         62        -      6     unused        0
            63    2459457    2459519    wd0s2      2        fat        6
       2459520    1024128    3483647    wd0s3      1 OpenBSD FFS      166 <------
       3483648    2661120    6144767    wd0s4      3    freebsd      165    C
       6144768     201600    6346367    wd0s1      1    unknown      132
       6346368       8064    6354431        -      6     unused        0

    上記のようにスライス種別 (Desc) を 'freebsd' 以外の ID (ここでは 166 
    を利用します) に変更して、「W」で書き込みます。この ID は 165 以外な
    らなんでも良いですが、6 (FAT) や 132 (ハイバネーション用) など特定の
    目的にリザーブされたものは避けてください。スライス種別を変更したら、
    それ以外の値をいじらないようにして「Q」でこの画面を抜けて sysinstall
    を終了します。

   6) 起動時に自動的にマウントさせるには、以下の行を /etc/fstab に追加
    します。

     /dev/wd0s3e     /mnt    ufs     rw    1 2

   動作確認に使用した version: FreeBSD 2.2.6-RELEASE


管理番号 1553 (新規) 更新履歴
Q. AOpen の DVD-RAM DVD-520S を使用したいのですが、どのようにすれば良いで
   しょうか?

A. 以下で説明するのは FreeBSD 3.3-RELEASE での方法ですが、おそらく 3.4R 
   でも同じ手順で問題無いはずです。しかし 4.0R では現状ではダメですので、
   別の手段を取らなければならないでしょう。

   まず、3.3R 用の od ドライバをインストールします。
    ftp://daemon.jp.FreeBSD.org/pub/FreeBSD-jp/OD/od-driver-3.3R.tar.gz
   を取ってきて、適当な場所で

    % tar zxvf od-driver-3.3R.tar.gz

   として展開後、パッケージに含まれる README.od-J を読んで、そこに書かれ
   ている通りに作業します。また、関連情報が [管理番号 22] にもあります。

   次にカーネルを再構築する前に、/usr/src/sys/cam/scsi/scsi_od.c に以下の
   patch を当てて下さい。ただし、QandA からの Cut&Paste では Tab やスペー
   スが置き換わっているため、素直に patch(1) コマンドが動かないかもしれま
   せんが、その場合は行頭に '+' 記号の付いている行を od_quirk_table[] に
   エディタで追加してください。なお '+' 記号自身は削除してください。

   *** scsi_od.c.bak    Tue Feb 22 20:13:00 2000
   --- scsi_od.c        Tue Feb 22 20:15:45 2000
   ***************
   *** 144,149 ****
   --- 144,153 ----
                /* quirks */ OD_Q_NONE
        },
        {
   +            { T_CDROM, SIP_MEDIA_REMOVABLE, "AOpen", "PD-2*", "*" },
   +            /* quirks */ OD_Q_NONE
   +    },
   +    {
                { T_CDROM, SIP_MEDIA_REMOVABLE, "TOSHIBA", "SD-W1101*", "*" },
                /* quirks */ OD_Q_NO_6_BYTE
        },

   これでカーネルを再構築、インストール、再起動すれば od デバイスとして認
   識されるはずです。なお、次期リリース版の od-driver パッケージからは、
   このデータが追加される予定です。


管理番号 1556 (新規) 更新履歴
Q. Plug & Play の内蔵モデムを使いたい。

A. まず、そのモデムが (いわゆる) WinModem で "ない" ことを確認してください。
   WinModem は FreeBSD で動作させるのは今のところ不可能です ([管理番号 832]
   参照)。

   内蔵モデムの一般的な使用法は [管理番号 574] を参照してください。ここでは 
   Plug & Play (以下PnP) の内蔵モデムについての特記事項のみ示します。

   実は FreeBSD FAQ にそのものズバリの説明が記載されていますので、まずは
   こちらを参照してください。

    http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/FAQ/hardware.html#AEN979

   この URL の内容を簡潔にまとめると次の説明のように、カーネル再構築を最大
   で2回行う必要があります。

   1. カーネルの PnP サポートを有効にするため、カーネルコンフィギュレーショ
      ンファイルに以下の行を加えてカーネルを再構築します。

       controller      pnp0

   2. 再構築したカーネルをインストール、再起動すると PnP サポートが有効に
      なるので、再起動時に PnP モデムが次の例のように認識されます (dmesg 
      コマンドで確認できます)。重要なのは、PnP ID (例では 0x0302aa1a) と
      ベンダー ID (例では FUJ0203) です。

       CSN 2 Vendor ID: FUJ0203 [0x0302aa1a] Serial 0x08001a17 Comp ID: @@@0000 [0x00000000]
       sio1: type 16550A

   3. /sys/i386/isa/sio.c の 2777 行目 (FreeBSD のバージョンにより異りま
      す) 付近の siopnp_ids[] に、上記で調べた PnP ID とベンダー ID を書 
      き加えます (/*...*/ 部分はコメントですので書かなくても OK です)。

       static pnpid_t siopnp_ids[] = {
               { 0x5015f435, "MOT1550"},
               { 0x8113b04e, "Supra1381"},
               { 0x9012b04e, "Supra1290"},
               { 0x7121b04e, "SupraExpress 56i Sp"},
               { 0x11007256, "USR0011"},
               { 0x30207256, "USR2030"},
               { 0x31307256, "USR3031"},
               { 0x90307256, "USR3090"},
               { 0x0100440e, "Cardinal MVP288IV"},
               { 0x0302aa1a, "FUJ0203"}, /* 追加部分 */
               { 0 }
       };

   4. ふたたびカーネル再構築、インストール、再起動して以下のような起動時
      メッセージが出てくれば成功です。下記例ではモデムが sio0 に認識され 
      ています。

       CSN 2 Vendor ID: FUJ0203 [0x0302aa1a] Serial 0x08001a17 Comp ID: @@@0000 [0x00000000]
       sio1: type 16550A
       sio1 (siopnp <FUJ0203> sn 0x08001a17) at 0x3e8-0x3ef irq 9 on isa

   5. 可能ならばこれらの情報を、パッチを付けて send-pr(1) してください。
      上手くすれば次の FreeBSD のリリースでは、何もしないで使えるようにな
      るかもしれません。なお、send-pr については [管理番号 19] を参照して
      ください。


管理番号 83 (更新) 更新履歴
Q. FreeBSD を FTP proxy 経由でインストールしたいのですが、
   どうすれば良いのでしょうか?

A. FTP のプロキシサーバには大きく分けて二種類あり、プロキシとクライアント
   との通信で FTP を使うものと HTTP を使うものがあります。FreeBSD をイン
   ストールする際は、インストーラ (sysinstall) がクライアントとなりますが、
   HTTP を使うタイプのものは 4.0-RELEASE で初めてサポートされました。これ
   より前にリリースされた 3.4-RELEASE 以前は FTP を使うタイプしかサポート
   していません。

   FTP をサポートしている HTTP proxy では、ftp://host[:port]/path 形式の 
   URL を受け付けて
                 HTTP (ftp URL)             FTP
        client <================> proxy <=========> remote_server

   という形で動作します。(ブラウザの proxy 設定で HTTP と FTP について同
   じ host/port を指定するのはこのタイプです。例えば、squid や wwwoffle、
   また、delegete も設定によってはこのモードで動作します)

   このタイプは 3.4R 以前の installer では対応できません。事前に wget や 
   Web ブラウザを使うなどして、必要とされる FreeBSD 配布ファイルを入手し
   ておかなければなりません。一旦手元に配布ファイルを取り寄せてしまえば、
   後は local mirror server を立てるなり、DOS パーティションにコピーする
   などインストール方法は任意です。

   一方で FTP proxy は
                   FTP               FTP
        client <=========> proxy <=========> remote_server

   という動作をします。こちらはプロキシの実装にいくつかの種類がありますが 
   大抵 installer から直接扱えます。(例は delegate のマニュアル、ncftp3 
   の firewall 関連の設定マニュアルなどを参照してください)

   プロキシが "ユーザ名: 誰々@どこそこ.co.jp" でアクセスするタイプの場合、
   普通の FTP インストールと違うのは、インストーラの Options メニューから 
   FTP username を選んで、

       ユーザ名に anonymous@ftpサーバのFQDN
       パスワードに自分のメールアドレス

   を入力しておく事と、Media -> FTP -> URL と選んで

       ftp://proxy_host[:port]/pub/FreeBSD/releases/

   としておくことです。なお、proxy_host はホスト名または IP アドレスで
   指定し、必要ならポート番号を ":" に続けて記述します。

   また、delegate では以下のような URL を指定する方法も使えます。

       ftp://proxy_host[:port]///ftp.FreeBSD.org/pub/FreeBSD/releases/

   プロキシのホスト名のあとの "/" 3 本がみそです。
   URL 記述では host 名は '/' までで、それ以降が directory path として
   扱われるので、host///dir の形では host の //dir を参照することになり、
   結果としてプロキシに接続した後でインストーラが

       cd //ftp.FreeBSD.org/pub/FreeBSD/releases/

   を実行することになります。

   [求む!その他のproxyでの方法]


管理番号 1582 (新規) 更新履歴
Q. LAN に FreeBSD と Windows98 をつないでいるのですが、FreeBSD から
   Windows98 への方向のデータ転送が、その逆に比べて圧倒的に遅く
   なります。どうにかする方法はありませんか? ちなみに Windows 同士だと
   このような現象は起りません。

A. 一般的な解は、一般的な要因に依存するため、何とも判りませんが、次
   のような場合が Winsock2 の場合にあり得ることは判っています。

   一部の NIC では、NIC のせいなのか NIC Driver のせいなのかは不明で
   すが、Windows で使った場合に、時々 packet の取りこぼしが発生します。
   これは、NIC が用意している Recieve Buffer の大きさが、Winsock2 の
   Recieve Buffer よりも小さい場合、Winsock2 が NIC から packet を
   吸い出す前に NIC の Recieve Buffer が溢れてしまうために起るのでは
   ないか、と推測されます。

   Winsock2 の挙動を tcpdump などで見ると判るのですが、Windows 同士の
   通信において、Winsock は送信において次のようなルールに従っているよ
   うに見えます(これは、そう「見える」と言っているだけであって、そう
   「なっている」という意味で言っているのではありません。Winsock2 の
   実装がどうなっているのかは、そのソースコードを見ることができない以
   上、全く不明です)。

     I) 2つのマシン A,B があって、A->B というデータ転送しかない場合、
        A というマシンは
        Send, Send, Ack 待ち
        というパターンを忠実に守っているように見える。

    II) 2つのマシン A,B があって、双方向に転送すべきデータがある場合、
        A というマシンは

        Send(これには直前の Send に対する Ack を含んでいる),
        Data 待ち(これには直前の Send に対する Ack が含まれている)

        を繰り返す、というパターンを忠実に守っているように見える。

   III) I と II を切り替える際には 0.1 sec の wait が入る。


   もし、Windows 側の NIC のせいでこの現象が起っている場合は、
   Windows->FreeBSD 方向の通信には、この障害は出ていないはずです。
   (別の障害は出ているかも知れませんが :)


   さて、問題の解決方法ですが、ようするに上記の動きを FreeBSD 側で真
   似てやれば問題は解決します。具体的には TCP/IP の Send Buffer Size
   をどうにかして「IP Packet 2つ分」まで減らしてやれば、問題は解決す
   るはずなのです。そうすれば Winsock2 がそれを全て取り込み、Ack を返
   してくるまで先には進めません。

   「IP Packet 2つ分」が何バイトなのかを知るには、基本的には tcpdump
   を使うのが手だと思います。tcpdump は root であれば FreeBSD で使う
   ことができますし、
     WinDump <URL:http://netgroup-serv.polito.it/windump/>
   を使えば Windows 側で tcpdump を取ることもできます。これらを使って、
   mss の値を獲得します。これが「IP Packet 1つ分」の大きさだと思って
   ください。これを2倍すれば目的の値になります。

   あるいは、ethernet を使っている場合は、mss は大抵、536byte か 
   1460byte のどちらかです。ですので、その丁度2倍 1072byte かあるいは
   2920byte が「IP Packet 2つ分だ」という事ができます。ですので、
   2920 を使ってみて、駄目だったら 1072 を使ってみる、という手もあり
   ます。


   で、ここから先は FreeBSD の管理戦略にかなり依存します。


   1) システム全体を特定の Windows マシンに合わせる、という場合:

      この場合、 sysctl コマンドを使うと良いでしょう。root になって

        $ sysctl -w net.inet.tcp.sendspace=xxxx

      (xxxx は上記の「IP Packet 2つ分」の大きさ) を設定してみましょう。
      多分これでパフォーマンスは向上するはずです。

      ちなみに、
        $ sysctl -w net.inet.tcp.delayed_ack=0
      を設定すると Windows -> FreeBSD 方向の通信も改善される場合がある、
      という話があるそうです。


   2) Windows マシン毎に設定を変える場合:

      残念ながらマシン毎に FreeBSD の設定を変える場合、1 の場合のような
      汎用的戦略はありません。各アプリケーションが、それぞれ、自分が通信
      している相手を認識し、その適切な値をどこかのテーブルから lookup し
      なくてはいけませんが、そのようなサポートのないソフトもあるからです。

      もし、Samba に関して、というのであれば、smb.conf の中の
      [global] section の最後に

        include = /usr/local/etc/smb.conf.global.%m

      のような1行を加えておき、

        /usr/local/etc/smb.conf.global.<その問題の Windows マシン名>

      というファイル中で

        socket options = SO_SNDBUF=xxxx TCP_NODELAY
        (xxxx は上記の「IP Packet 2つ分」の大きさ) 

      を設定するとよいでしょう。上記の include 文は失敗しても smbd の
      起動に影響はありません。従って、特に特別な設定をする必要がない
      target に対しては

        /usr/local/etc/smb.conf.global.<その問題の Windows マシン名>

      というファイルを作成する必要はありません。このあたりは
        <URL:http://www.samba.gr.jp/doc/contrib/tuning.html>
      を参考にして下さい。

      この方法は Winsock2 についてしかチェックできていません。従って、
      Winsock1.1 の場合、あるいは将来できるであろう、Winsock2.1 (あるいは
      Winsock3) でうまく行くのかどうかは判りません。

      もし、現在すでにある程度パフォーマンスが良い場合、SO_SNDBUF の値を
      mss の整数倍にすることで、効率が向上する可能性があります。ですので、
      パフォーマンスを重視するマシンに対しては、そのマシン専用の

        /usr/local/etc/smb.conf.global.<その問題の Windows マシン名>

      ファイルを作った方がいいかも知れません。

      smb.conf には %a(Architecture) というオプションがあります。マルチ
      ブートマシンがある場合は smb.conf を

        include = /usr/local/etc/smb.conf.global.%m
        include = /usr/local/etc/smb.conf.global.%a.%M

      のように変更して、%a と %M で Client OS と Machine Name を指定して
      やると各 OS ごとの設定も可能になります。


管理番号 1598 (新規) 更新履歴
Q. あるマシンを 2.2.6-RELEASE から 3.4-RELEASE に upgrade したんですが、
   who や finger, w, last 等の出力がおかしくなる現象が起きています。

A. 3.0R からユーザ名の最大長が 16 文字に拡張されたため、utmp(5) のファイル
   形式が変更されました。そのため kterm や ssh など、utmp を扱う binary に 
   2.2.x 以前のものが残っていると、utmp や wtmp を壊してしまいます。  

   対策としては、まずこれらの binary を 3.x 以降のものに入れかえてください。
   また、一旦壊れた utmp は勝手には修復されないので、次の様にしてクリアして
   おくのが良いでしょう。

     # cp /dev/null /var/run/utmp

   wtmp は periodic(8) monthly により最長一ヶ月待てば問題はなくなるはずです
   が、年中無休のマシン以外では手動で実行しておいた方が良いかもしれません。 

     # periodic monthly
   または、
     # /etc/periodic/monthly/200.accounting


管理番号 563 (更新) 更新履歴
Q. 現在、日本で手に入れることのできる FreeBSD の CD-ROM パッケージには
   どのようなものがありますか?

A. このような情報を集めているプロジェクトがあります。Web ページは以下の 
   URL で参照できます。また、新情報にもとても素早く対応されています。

     <URL:http://www.jp.FreeBSD.org/CD-list/>


管理番号 1601 (新規) 更新履歴
Q. TDK LAK-CD021BX のように fe driver で動く PC Card ether device が
   FreeBSD 4.0-RELEASE で使えません。何故でしょうか。

A. FreeBSD 4.0-RELEASE では PC Card 周りが newbus 化されているのですが、
   fe driver はまだ newbus 化されていませんので、PC Card では利用できません。

   fe が newbus 化されるのをお待ち下さい。(または fe driver を newbus 化
   して下さい)。


管理番号 1609 (新規) 更新履歴
Q. C のソースをコンパイルすると、
      ... undefined reference to `sin'
      ... undefined reference to `XOpenDisplay'
   などというエラーになります。

A. コンパイルは成功し、オブジェクトファイル (*.o) が生成されましたが、
   リンク時に sin・XOpenDisplay という関数が見付からなかったという
   エラーです。

   /usr/lib/ や /usr/X11R6/lib、/usr/local/lib/ には lib*.so.* や
   lib*.a というファイルがあります。これらはライブラリと言い、
   コンパイル済の関数群が入っています。

   sin は /usr/lib/libm.so.* に、XOpenDisplay は /usr/X11R6/lib/libX11.so.*
   に含まれていますので、この場所を教えてやればいいのです。


   例えば、sin が見付からないなら
     % cc foo.c -lm
   とします。XOpenDisplay が見付からないなら
     % cc foo.c -lX11 -L /usr/X11R6/lib
   とします。

   -lm というのは、リンカ (/usr/bin/ld) に
     「libm.so.* というライブラリを探しなさい」
   というオプションです。

   同様に -lX11 というのも
     「libX11.so.* というライブラリを探しなさい」
   という意味なのですが、ld はデフォルトでは、/usr/lib からしか
   ライブラリを探しません。そのため、/usr/X11R6/lib や /usr/local/lib
   のライブラリを使う場合は、-L /usr/X11R6/lib などとライブラリの
   置いてある場所を指定しなければなりません。


   ただし、X のプログラムの場合は、インクルードファイルの場所を指定
   しなければいけないので、最終的には、
     % cc foo.c -I /usr/X11R6/include -lX11 -L /usr/X11R6/lib
   などと -I オプションも指定しなければいけないでしょう。ですから、
   Makefile や autoconf などを利用する方が楽です。→[管理番号 509]

   なお、どのライブラリにどの関数が含まれているかを調べるには、
   まずマニュアルを見ましょう。man sin の SEE ALSO に math(3) と
   ありますので、man math を見ると、
     These  functions constitute the C math library, libm.
   とありますので、libm に含まれていることがわかります。

   マニュアルから読み取れなかったら、
     % nm -o /usr/lib/*.so.* /usr/X11R6/lib/*.so.* | grep ' T sin$'
     /usr/lib/libm.so.2:0000b3d8 T sin
     % nm -o /usr/lib/*.so.* /usr/X11R6/lib/*.so.* | grep ' T XOpenDisplay$'
     /usr/X11R6/lib/libX11.so.6:00020adc T XOpenDisplay
   とすればわかります。libm.so.2 なら -lm だし、libX11.so.6 なら
   -lX11 ですね。


管理番号 1524 (更新) 更新履歴
Q. 8GB 超 HDD で使えるブートセレクタを教えて下さい。

A. 以下のブートローダ
      LILO <URL:ftp://tsx-11.mit.edu/pub/linux/packages/lilo/>
      booteasy <URL:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD/tools/srcs/bteasy/>
      OS-BS <URL:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD/tools/osbs135.exe>
   は 8GB 超では使えません。LILO 以外は最終更新日がかなり古いソフトなので、
   今後の対応も余り期待出来ないと思われます。

   HDD の先頭から 8GB 超のパーティション (FreeBSD の用語でいうスライス)
   からのブートに対応しているブートセレクタ (ブートマネージャとも言います)
   に以下のようなものがあります。しかし、変化も著しいのでここに書いてある
   内容を鵜呑みにしないでください。

   XOSL <URL:http://www.xosl.org/>
     GPL でソース配布もされています。GUI オペレーションなのが特徴です。
     インストールには DOS パーティションあるいは独自のパーティションが必要
     ですが、普通の人にとっては使いやすく、高機能なブートマネージャでしょう。
     現在判明している不具合として、一部の環境において、マウスで特定のボタン
     をクリックしたとたんにマウスが凍り付く問題がありますが、キーボードでの
     オペレーションは可能なので致命的ではありません。

   MBM <URL:http://www2s.biglobe.ne.jp/~elm/fsw/mbm/mbm.html>
   Symon <URL:http://symon.da.ru/>
     この二つはバイナリ配布のみのようです (MBM については未確認)。
     Symon は boot0 (FreeBSD の標準ブートマネージャ) 同様複数のディスクを
     使う場合には、それぞれのディスクにインストールする必要があります。
     バージョン 2.05 になってからは特に大きな問題もありません。

   現在お薦めできそうなものは以上の3種類です。いずれも OS-BS 等から考えると
   かなり高機能です。なお XOSL と Symon については、実際に使用して FreeBSD 
   の起動に使えることを確認しています。

   extipl <URL:http://www.tsden.org/takamiti/extipl/> は LBA 対応版の
     ソースが公開されているので、それをコンパイルすれば 8GB 超環境で
     使えますが、512 bytes というサイズの制限から、通常版と比べると
     若干機能が省略されます。

   GNU GRUB <URL:http://www.gnu.org/software/grub/> は標準で 8GB 超に対応して
     いますが、コンパイルはあまり簡単ではなく、binutils の新しいバージョン
     を手に入れる必要があります。しかし安易に最新の binutils を入れるのは
     危険ですので、試してみるだけならコンパイル済みのバイナリを使うのがよい
     でしょう。また、FreeBSD 3.0R 以降の ELF 形式のカーネルを直接指定して
     起動させることも可能ですが、UserConfig 等の設定を生かすことができない
     ため、/boot/loader を起動するようにした方がよいでしょう。 

   Ranish Partition Manager <URL:http://www.users.intercom.com/~ranish/part/> 
     は元々はパーティション再配置ツールですが、独自のブートセレクタを持って
     います。Ver.2.38βで LBA 対応しましたが、残念ながらこの版からシェアウェア
     になってしまいました。

   商用ソフトになりますが、システムコマンダー 2000
      SYSTEM COMMANDER 2000 <URL:http://www.softboat.co.jp/product/sc2k/>
   は 8GB 超問題をクリアしています。また、パーティションコマンダー
      PARTITION COMMANDER   <URL:http://www.softboat.co.jp/product/pc/>
   もあり、これには、SYSTEM COMMANDER Personal が含まれており、これは
   SYSTEM COMMANDER 4 の簡易版です。

   Windows NT/2000 が導入されていれば、Windows NT/2000 の boot loader を
   使用する方法もあります。FreeBSD FAQ や [FreeBSD-users-jp 17043] が参考に
   なるでしょう。
     <URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/FAQ/admin.html>


管理番号 1615 (新規) 更新履歴
Q. Netscape Communicator をインストール後、直接 Netscape Messenger を立ち上げ
   ようとして kterm から 'netscape -mail &' と入力しましたが、起動直後に終了
   してしまいます。あとには Bus error の表示が出ます。

   また、コンソールや dmesg(8) 及び /var/log/messages には、次のようなエラー
   メッセージが記録されてます。
     pid 1111 (communicator-4.6), uid 1001: exited on signal 10

A. /usr/local/lib/netscape/ja_JP.EUC/Netscape というファイルの中の
     *irixSessionManagement:                 True
   という行のコメントをはずしてください。

   なお、テスト環境は
     FreeBSD 3.2-RELEASE,
     Netscape Communicator 4.61 (ja 版 package)
   です。


管理番号 1616 (新規) 更新履歴
Q. system の状態をみるコマンドでつぎのようなエラーが発生してしまう。
     % swapinfo
     swapinfo: undefined symbol: _numvnodes
     % pstat
     pstat: undefined symbol: _numvnodes
     % top
     top: nlist failed

A. FreeBSD の version を 3.X から 4.0 以降に upgradeしましたか?
   3.X では、kernel の symbol table は /etc/rc のなかで kvm_mkdb によって
   /var/db/kvm_kernel.db につくられ、これらコマンドの実行時には参照されて
   いました。

   4.0-RELEASE 以降、/etc/rc で、kvm_mkdb を行わなくなり kernel を読み
   込むのに /boot/loader を使用しないと、symbol table が、参照できないため
   _numvnodes のような kernel 内の static に宣言された変数が参照できなくて、
   このようなエラーとなります。

   /boot.config の中に "kernel" 等と記述していると、直接 kernel をload する
   ことになりますので、上記のような現象が発生します。/boot.configを空とするか、
   消去するなどして、/boot/loader が、kernel を load するようにすることで、
   これらのコマンドが使えるようになります。

   3.X の時に、/boot.config に /kernel などと記述していると 4.0-RELEASE
   以降を upgrade した時に発覚するようです。


管理番号 1617 (新規) 更新履歴
Q. FreeBSD 4.X で IO データ機器製の SCSI アダプタ SC-UPCI を
   利用しようとしています。このアダプタには Symbios の 53C875 が
   使われているのですが、LINT には ncr と sym という二つのドライバが
   存在します。どちらを使えば良いのでしょうか?

A. それぞれの SCSI ドライバは以下のコアチップをサポートしています。
   sym は新たに追加されたドライバで、特に 53C896, 53C895A, 53C1010
   向けに最適化されたものです。

         sym     |     ncr      | SCSI アダプタ
    -------------+--------------+--------------
                 |    53C810    |
        53C810A  |    53C810A   |
                 |    53C815    |
                 |    53C825    |
        53C825A  |    53C825A   |
        53C860   |    53C860    |
        53C875   |    53C875    |   SC-UPCI
                 |    53C875A   |
        53C876   |              |
        53C885   |    53C885    |
        53C895   |    53C895    |
     ◎ 53C895A  |              |
     ◎ 53C896   |    53C896    |
     ◎ 53C1010  |              |
                 |    53C1510D  |

   SC-UPCI は、53C875 を搭載しているため、従来の ncr、
   新しく追加された sym のどちらでも利用可能です。

   ncr と sym は現在、両方がメインテナンスされています。
   確かな予測ではありませんが、ncr の方が設計が古いため、
   将来的に重複する機能は sym へ統合される可能性が考えられます。

   しかし SC-UPCI で sym を利用する場合、起動時に SCSI デバイスを
   スキャンしない場合があるなど、不具合が生じる場合があります。
   これは sym が、SC-UPCI に記録されているユーザ設定情報をうまく
   読み出すことができないことが原因です。
   ncr を利用する場合には、特に不具合は報告されていません。

   SC-UPCI は、販売時期によっていくつかの種類が存在し、
   sym でも不具合なく利用できるものもあるようです。

   もし、sym で動作しない場合には、次のいずれかを行なうことで
   SC-UPCI を利用することが可能です。

   1) ncr を利用する。

      sym と同様 53C875 をサポートしていて、動作実績があります。

   2) firmware をアップデートする。

      SC-UPCI の firmware を最新版にアップデートすることで
      sym が正常に動作する可能性があります。
      アップデートについては、<URL:http://www.iodata.co.jp/> を
      参照してください。

   3) アダプタから設定情報を読み出す機能を無効化する。

      ソースファイルの /usr/src/sys/dev/sym/sym_conf.h に含まれる
        #define SYM_CONF_NVRAM_SUPPORT
      という行をコメントアウトしてカーネルを再構築してください。

   なお、確認した環境は
    o FreeBSD 4.0-STABLE (Sun Apr 23 05:16:42 JST 2000)
    o AOpen AX6BC + SC-UPCI SCSI Adapter
   です。


QandA
QandA Project
登録・更新 QandA 一覧