FreeBSD QandA 1999年7月2日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 859 (新規) 更新履歴
Q. FreeBSD で RADIUS サーバを立てようと思っているのですが、参考になる
   Web サイトはありますか?

A. iij-ppp や pppd を使うんなら
     <URL:http://www.kyoto-wave.or.jp/shain/radius/>

   radiusdについては
     <URL:http://www.dtc.co.jp/Radius/>
     <URL:http://www.dtc.co.jp/Radius2.0/>

   Ascend版なら
     <URL:http://www.ascend.co.jp/product/>

   RADIUS関連linkなら
     <URL:http://www.happysize.co.jp/techie/>


管理番号 921 (新規) 更新履歴
Q. mnews の MH モードで、pop サーバからメールを取り込むことができませ
   ん。どうすればよいのでしょうか。

A. POP3 サーバ、あるいは APOP サーバからメールを取得しようとしていま
   せんか?  その場合、「ユーザの入力が不要な inc」が実行できるように 
   .netrc などに設定を加える必要があります。具体的には次のようにします。 

   1.  mnews の設定ファイル ${HOME}/.mnews_setup ファイルに以下を追加します:

       mh_mode: on
       msgchk_rule: 2

   2.  POP3 サーバからメールを取得する場合は、MH の設定ファイル
   ${HOME}/.mh_profile に以下を追加します:

       inc: -norpop -noapop -host pop-hostname -user pop-account
       msgchk: -norpop -noapop -host pop-hostnam -user pop-account

   APOP サーバからなら、次のようにします:

       inc: -apop -host pop-hostname -user pop-account
       msgchk: -apop -host pop-hostname -user pop-account

   ここで pop-hostname には POP3/APOP サーバ名、pop-account には POP3/APOP
   アカウント名を記述します。

   3.  MH の inc, msgchk コマンドを問い合わせなしで実行するため、
   ${HOME}/.netrc ファイルを作成し、以下の記述を加えます。

       machine	pop-hostname
       login	pop-account
       password	pop-password

   pop-hostname には POP3/APOP サーバ名、pop-account には POP3/APOP アカ
   ウント名、pop-password には POP3/APOP パスワードを記述します。

   上記のように、$HOME/.netrc ファイルには生のパスワードが記述さ
   れるため、その取り扱いには細心の注意を払って下さい。他のユーザーに読ま
   れないように、ファイルのモードは 600 にしておきます。

       % chmod 600 $HOME/.netrc

   以上の設定でメールを取り込んで読むことができるようになるでしょう。

   なお、mnews 1.21 は環境変数 MH による設定ファイル (.mh_profile) 切り替えには
   対応していません。対応させるには、たとえばこんな patch を適用して mnews を
   作り直す必要があります:

   ----patch start----

   --- src/mh.c.dist	Fri Sep  4 11:28:45 1998
   +++ src/mh.c	Fri Sep  4 12:07:05 1998
   @@ -416,7 +416,36 @@
      if (!mh_mode) {
        return(0);
      }
   -  sprintf(init_file, "%s%c%s", home_dir, SLASH_CHAR, MH_INIT_FILE);
   +  {
   +    char *mymh;
   +
   +    if ((mymh = getenv("MH")) != NULL) {
   +      /* set alternate MH profile path */
   +      if (*mymh == SLASH_CHAR) {		/* absolute path */
   +	if (PATH_BUFF < (strlen(mymh) + 1)) {
   +	  fprintf(stderr, "init_file buffer is not enough: current = %d\n", PATH_BUFF);
   +	  exit(1);
   +	}
   +        sprintf(init_file, "%s", mymh);
   +      } else {
   +        char *p;
   +	
   +	if ((p = getcwd(NULL, PATH_BUFF)) == NULL) {
   +	  perror("getcwd");
   +	  exit(1);
   +	}
   +	if (PATH_BUFF < (strlen(p) + 1 + strlen(mymh) + 1)) {
   +	  fprintf(stderr, "init_file buffer is not enough: current = %d\n", PATH_BUFF);
   +	  exit(1);
   +	}
   +        sprintf(init_file, "%s%c%s", p, SLASH_CHAR, mymh);
   +	free(p);
   +      }
   +    } else {
   +      /* set standard MH profile path */
   +      sprintf(init_file, "%s%c%s", home_dir, SLASH_CHAR, MH_INIT_FILE);
   +    }
   +  }
      buff1[0] = buff2[0] = '0';
      init_field[0].field_buff = &buff1[1];
      init_field[1].field_buff = &buff2[1];
   ----patch end----

   この patch を適用した mnews であれば、

     % env MH=/other/place/other_mh_profile mnews args...

   として、標準とは異なる MH 設定ファイルを利用できます。

   なお、/usr/local/share/doc/mnews/ ディレクトリ内に mnews 関連ドキュメ
   ントがありますので、こちらも随時参照して下さい。


管理番号 1079 (新規) 更新履歴
Q. FreeBSD 以外のマシンと talk ができません。

A. talk(1) にも書かれているとおり、FreeBSD で使用している 4.3BSD
   由来の talk(1) のプロトコルは、 4.2BSD 由来のものとは互換性が
   ありません。例えば SunOS などは 4.2BSD から別れているので、古い
   talk プロトコルを使用しています。なお 4.3BSD 由来の talk は ntalk
   と呼ばれており、ポート番号も異なるものを使っています
   (grep talk /etc/services してください)。

   ですから、古い talk を使っている OS と FreeBSD や NetBSD などの
   間で talk を行なおうとすると、
       [Checking for invitation on caller's machine]
   と出てしまい、実際に talk することができません。

   これを解決するには現在のところ 2 つの方法があります。

   まず一つ目は古い talk を使っている OS に ntalk をインストールする
   方法です。日本だと
     <URL:ftp://ftp.uoeh-u.ac.jp/pub/net/ntalk.tar.gz>
   から取得可能です。これをコンパイルしてインストールします。これ
   以降、FreeBSD からは通常に talk を、ntalk をインストールした側
   では、talk の代わりに ntalk を使えば互いに talk できるように
   なります。なお FreeBSD 上で古い talk を動かすようにするプログラムは
   今のところ存在しないようです。

   二つ目は ytalk を使う方法です。ytalk は接続する時に ntalk が使え
   れば ntalk プロトコルで、ntalk が使えなければ古い talk プロトコル
   で接続を試みます。ですから相手の OS がわからず、talk と ntalk
   どちらを使えばいいのかわからないという場合でも迷わず ytalk を使えば
   ytalk が判断して適切なプロトコルで繋いでくれます。ただし ytalk には
   talk daemon はついていないので、相手側にも ytalk をインストールして、
   相手も ytalk を使うようにしないとやはりプロトコルの相違の問題が
   起きてしまいます
     (仲立ちをするのは既存の talkd なので、tty 上には 
       respond with:talk user@hostname
      としか表示されませんが、そのとおりに答えると冒頭で述べた問題が
      やはり起きてしまいます。ytalk user@hostname としなければならない
      ことをあらかじめメールなどで確認しあっておく必要があります)

   なお ytalk は複数人での同時 talk や X の窓を使った talk もできる
   ように作られています。

   そこまで苦労するのなら、いっそのこと phone や IRC を使った方が
   いいのかもしれませんが、ytalk にはインストールに root 権限が要ら
   ない、新規 daemon の起動が要らない、という利点があります。


   最後に図にまとめてみます。

     FreeBSD                         BSD4.2
     x talk  X <---          <---    o talk          どちらも通信できない
     o ntalk    --->          ---> X x ntalk

     (1)
     FreeBSD                         BSD4.2
     x talk  X <---           <---   o talk          BSD4.2 側で ntalk
     o ntalk   <--->          <--->  o ntalk         を使えば通信できる

     (2)
     FreeBSD                         BSD4.2
     x talk          +--->     --->  o talk          ytalk が自動的に
     o ntalk   <---  +   <---+       x ntalk         相手のプロトコル
       ytalk --------+       +------   ytalk         を判断して通信する

     (3)
     FreeBSD                         BSD4.2
       phone   <--->          <--->   phone          phone を入れてしまえば
                                                     煩わしさはなくなる


   [付録]
   Solaris 2.x で gcc を使って ytalk をコンパイルする、あまり
   よろしくない方法。

   (1) FreeBSD の配布サイトの distfiles ディレクトリから 
       ytalk-v3pl2.tar.gz を入手する

   (2) 伸長・展開する。
       % gunzip ytalk-v3pl2.tar.gz
       % tar xvf ytalk-v3pl2.tar
       (GNU tar なら tar zxvf ytalk-v3pl2.tar.gz も可)

   (3) imake がうまく動かないので X 上で動かすのをあきらめる

   (4) Makefile を書き換えて、SLIBS = -lnsl -lsocket を有効にし、
       CC=gcc の行を加える
       % vi Makefile
       -#SLIBS = -lnsl -lsocket
       +SLIBS = -lnsl -lsocket
       +CC=gcc

   (5) 普通に make する
       % make
       Undefined                       first referenced
        symbol                             in file
       sigmask                             fd.o
       sigsetmask                          fd.o
       sigblock                            fd.o
       ld: fatal: Symbol referencing errors. No output written to ytalk
       と失敗する。

   (6) UCB 互換ライブラリを使うようにして fd.o を作り直す。
       (UCB 互換ライブラリがインストールされてない場合は、SUNWscpu 
       を追加インストールする)
       % rm fd.o
       % setenv LD_LIBRARY_PATH /usr/ucblib
       % setenv LD_RUN_PATH /usr/ucblib
       % make CFLAGS=-I/usr/ucbinclude LDFLAGS=-lucb

   (7) できた ytalk を適当なところへほうりこむ
       % cp ytalk ~/bin
       % rehash


管理番号 67 (更新) 更新履歴
Q. RFC の和訳はありませんか?

A. RFC ならびに Internet Draft の日本語化文書集積/提供のページが
     <URL:http://www.barrier-free.co.jp/homes/RFCJ/>
   にあります。また、以下の Web Page も参照するとよいでしょう。
     <URL:http://www.imasy.or.jp/~yotti/#rfc>


管理番号 1353 (新規) 更新履歴
Q. POP/APOP 認証だけ行ってメールを受信しないようにするにはどういった方法
   がありますか。POP before SMTP採用サイト(SPAM対策のために、メールを
   送信する直前に POP/APOP 認証が必要なサイト)を使う際に必要なのです。

A. 以下のとおりいくつかの方法があります。

   1. fetchmail -c を実行する

   2. MH の msgchk を pop/apop で実行する (man msgchk を参照してください)

   3. 手動で認証を行う。
      % telnet POPSERVER 110
      USER USERNAME
      PASS PASSWORD
      QUIT

   4.認証だけ行うクライアントを作る。
     1) シェルスクリプトを使う。
       #!/bin/sh
       (
         sleep 1;
         echo USER USERNAME;
         sleep 1;
         echo PASS PASSWORD;
         sleep 1;
         echo QUIT
       ) | telnet POPSERVER 110

     2) perl5 と p5-Net を使う。
       #!/usr/local/bin/perl
       use Net::POP3;
       $pop = Net::POP3->new('POPSERVER');
       $pop->user("USERNAME");
       $pop->pass("PASSWORD");
       $pop->quit();


管理番号 39 (更新) 更新履歴
Q. マニュアルが英語なんですが 日本語のマニュアルはありませんか。

A. マニュアルと言っても、いろいろあります。
     o FreeBSD自体のマニュアル (/usr/share/man 以下にあるもの)
     o X Window Systemのマニュアル (/usr/X11R6/man 以下にあるもの)
     o ports/packages でインストールしたプログラムのマニュアル
       (/usr/local/man 以下にあるもの)


   FreeBSD自体のマニュアル

     FreeBSD自体の翻訳は jpman プロジェクトが行なっています。
        <URL:http://www.jp.freebsd.org/man-jp/>
     1999年6月現在、セクション1、5、6、7、8の日本語マニュアルが
     用意されています。今後、他のセクションも翻訳されていくでしょう。

     ja-man と ja-man-doc を ports/packages からインストールしてください。
        (2.2.8-RELEASE や 3.0-RELEASE 以降をお使いで、なおかつ OSインストールの
         際に "manpages" カテゴリをインストールしているなら、日本語マニュアル
         ページも自動的にインストールされていますので、ja-man をインストール
         するだけでよいです)

     インストールし終わったら
         % setenv LANG ja_JP.EUC
         % setenv PAGER jless
         % jman ls
     で日本語マニュアルが出るはずです。LANG を ja_JP.EUC にすると、色々問題が
     出ることがありますので、
         % alias jman env LANG=ja_JP.EUC jman 
     とするのも一つの手です。

     ただし、この方法でインストールされたマニュアルファイルの内容の一部が
     英語マニュアルと一致してない場合があります。この問題の修正方法については、
        <URL:http://www.jp.freebsd.org/man-jp/get.html>
     を参照して下さい。

     また、この日本語マニュアルを web上から見ることもできます。
        <URL:http://www.jp.freebsd.org/man-jp/search.html>


   X Window Systemのマニュアル

     X(1)、xterm(1)、xmodmap(1) など、X Window System関連のマニュアルは
     直接 FreeBSD とは関係ありませんので、上記の jpman には含まれていません。
     こちらは X Japanese Documentation Project が翻訳作業を行っています。
        <URL:http://xjman.dsl.gr.jp/>

     ja-xjman という port/package をインストールして下さい。
        % jman X
     で日本語マニュアルが表示されるはずです。


   ports/packages でインストールしたプログラムのマニュアル

     これについては、日本語マニュアルを扱う仕組みは用意されていません。
     有名なプログラムなら誰かが翻訳している可能性がありますので、探して
     みてください。

     和訳のマニュアルページを見つけたら、/usr/local/man/ja/man? (? には、
     書き込むマニュアルファイルの拡張子の数字を合わせる) にそのファイルを 
     (EUC コードに変換して) コピーを置いて下さい。以後、jman コマンドでそ
     のファイルを見ることができます。例えば、foo.1 というマニュアルファイ
     ルを見つけたら、それを /usr/local/man/ja/man1/foo.1 にコピーすれば
     いいです。


管理番号 1364 (新規) 更新履歴
Q. /var/log/messages に
      last message repeated 2 times 
   というログが残っているんですが、これは何ですか?

A. 直前の行と同じメッセージが、更に2回分出力されたことを意味しています。
   syslogd が関与する記録では、同様な処理が行われます。

   たとえば tail -f /var/log/messages としてログを見ながら、別の kterm 上で
     ・su でわざと間違ったパスワードを入力する。それを3回繰り返す。
     ・su で正しいパスワードを入力して root になる。
   としてみてください。すると、/var/log/messages に
     su: BAD SU username to root on /dev/ttyp0
     last message repeated 2 times
     su: username to root on /dev/ttyp0
   と記録されることがわかると思います。

   これは
     su: BAD SU username to root on /dev/ttyp0
     su: BAD SU username to root on /dev/ttyp0
     su: BAD SU username to root on /dev/ttyp0
     su: username to root on /dev/ttyp0
   と同じ意味ですが、ログの容量を抑え、なおかつログを読みやすくするために
   syslogd が工夫してくれているわけです。


QandA
QandA Project
登録・更新 QandA 一覧