FreeBSD QandA 2000年3月4日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 852 (新規) 更新履歴
Q. FreeBSD では ATAPI (EIDE) の DMA 転送はサポートされていますか。

A. FreeBSD 2.2.x ではサポートされていません。

   FreeBSD 3.x ではサポートされています。
   wd ドライバの flags を指定することにより、DMA 転送が可能になります。
   マニュアル wd(4) を御覧下さい。
   ただし、サポートされている ATAPI chipset は Intel PIIX のみのようで、
   他の chipset で有効かどうかは不明です。(src/sys/i386/isa/wdreg.h 参照)

   尚、FreeBSD 4.0 以降では wd ドライバは ata ドライバにとって代わられ
   ています。そちらについては別途マニュアルおよび LINT を参照して下さい。

   2.2.x で ATAPI の DMA 転送を行ないたい場合は、RELENG_3 branch から
   DMA 転送をサポートするドライバをもってくる必要があるでしょう。
     <URL:http://smoke.marlboro.vt.us/pub/cgull/starBSD/sff8038/>
   を参照して下さい。


管理番号 1080 (新規) 更新履歴
Q. xdm から login するようにしています。xterm -ls を用いると wtmp や 
   lastlog に記録が残りますが、kterm を使った場合は-ls オプシンを付けても 
   記録されません。どうすればよいでしょうか。

A. sessreg(1) を利用すれば記録することが出来ます。
   xdm(1) のマニュアルに記載されている STARTUP PROGRAM、RESET PROGRAM の
   項にあるスクリプト Xstartup、Xreset を作成して実行権を与え、
   /usr/X11R6/lib/X11/xdm/xdm-config を編集してそれらを利用するようにすれ
   ばよいでしょう。

   なお、どうしても kterm の -ls オプションでログを取りたいのであれば
    [管理番号 127] が参考にはなるでしょう。


管理番号 678 (更新) 更新履歴
Q. FreeBSD 2.2.1-RELEASE に付属の ppp(8) コマンドを使用しています。こ
   の ppp を auto モードや ddial モードで起動したときに使用できるようにな
   る制御ポート (3000/tcp) への Internet などの接続相手側からのアクセスを
   拒否したいのですがどうすればいいのでしょうか?

A. ppp の ifilter を設定してください。ifilter を設定することで相手側か
   らのパケットの受信の許可、および拒否を指定できます。今回の場合は ppp 
   の制御ポートに対して ifilter を設定することになります。次のようなエン
   トリを ppp.conf の適当な場所に追加、あるいは telnet コマンドを利用して
   制御ポートから設定してください。
 
   o ppp.conf に書く場合の設定例:
       ifilter 0 deny tcp dst eq 3000

   o telnet localhost 3000 として制御ポートから設定する場合の例
       set ifilter 0 deny tcp dst eq 3000
    # localhost は適宜変更する場合があります
 
   設定例の意味は順に
       (1) ifilter であることを宣言。
       (2) 0 番目の定義であることを宣言。この 0 は場合によっては 20 まで
           の任意の値になることがあります。
       (3) 拒否 (deny) することを宣言。
       (4) dst 相手側からのパケットであることを宣言。
       (5) eq 3000 として 3000 番ポートに対する設定であることを宣言。

   この ifilter を使用することで security level の向上などを図ることな
   ども可能です。詳しくは ppp(8) のマニュアルを参考にしてください。

   尚、2.2.1-RELEASE の ppp については、filter 周りに bug が存在するこ
   とが報告されています。


管理番号 1136 (新規) 更新履歴
Q. X Windowを使っていて、netscape と xv の様に多くの色を使うアプリケーショ
   ンを複数立ち上げると、後から立ち上げた方の色が変になることがあります。
   X server が扱える色数が少ない為だと思いますが、何かうまい方法はありま
   せんか。

A. 8bpp (256色) (や 4bpp) に設定されている場合、多くの色を使うアプリケー
   ションを使用していると、色が足りなくなってそのような状態になります。
   解決法としては、
    1. 扱える色数を増やす為に pixel 辺りの bit 数を増やす。
       (color depth を大きくする)。[管理番号 450] を参照して下さい。
       このためには、VRAM の容量が十分なければなりません。

    2. それが出来ない場合は、アプリケーションごとに Colormap を替える。
       色を多く使うアプリケーションは、独自の colormap を使うオプションを
       用意していることがあります。
       この場合、そのアプリケーションの window 内にマウスカーソルを移動す
       ると colormap が切り替わって、そのアプリケーションはきれいに表示さ
       れますが、それ以外の部分はおかしな表示になります。

       Xnest、netscape、xli、xlock といったアプリケーションには -install 
       オプションが用意されており、これを指定すると独自の colormap を利用
       します。各アプリケーションのマニュアルを参照して下さい。
       netscape の場合は、-ncols オプションもあります。(netscape --help 
       を参照のこと)。
       tgif では、共有 colormap / 独自 colormap の切替えは自動で行なわれ
       ます。tgif(1) の `COLORS AND COLORMAPS' section を参照して下さい。


管理番号 76 (更新) 更新履歴
Q. ダウンロードしてきた package がうまくインストールできなかったり、アー
   カイヴファイル (.gz、.tgz、.bz2 .lzh .zip など) がうまく展開できません。
   また、その為か ports/packages のインストールに失敗することがあります。

   例えば、以下のようなエラーが出ます。

     gzip: test.tar.gz: invalid compressed data--format violated

     bunzip2: test.tar.bz2: data integrity (CRC) error in data
     You can use the `bzip2recover' program to attempt to recover
     data from undamaged sections of corrupted files.

     gzip: stdin: invalid compressed data--format violated
     tar: Unexpected EOF on archive file
     tar: child returned status 1

     ports の場合だと、
     >> Checksum mismatch for xxx.tar.gz.
     というエラーで止まってしまうことがあります。

A. 転送時にファイルが壊れた可能性があります。
   ・ブラウザなどを使ってファイルを get した場合、ファイルの転送がうまく
     いかないことがあるようです。
     バイナリデータをきちんと転送できるようにして再度 get し直してみるか、
     (WWW ブラウザではなく) FTP client でファイルを転送してみて下さい。
   ・FTPクライアントを用いた場合、転送モードが ASCII モードになっていると
     ファイルの中の 0x0d が 0x0d、0x0a に置き換えられてしまい正常に展開で
     きません。転送モードをバイナリモードにして下さい。

   リモートのファイルサイズが表示される場合は、転送後のファイルサイズと等
   しいか比較して確認できます。(ただし、kb オーダーで表示されていたりする
   と正しく比較できないこともあります)。

   ports の場合は、転送はうまくいったものの、配布ファイルが変更されていて
   MD5 チェックサムが変わってしまった為、チェックにひっかかっている可能性
   もあります。
   配布ファイルが名前を変更せずに更新されていた場合は、MD5 のチェックを無
   視するようにしてもよいですが、第三者の手によって好ましくない変更が加え
   られている可能性もあるので、きちんと確認すべきでしょう。

   尚、DOS 用の tar には -a オプションを有するものがあり、これを指定して
   展開しようとするとうまく行かないという報告があります。


管理番号 325 (更新) 更新履歴
Q. 使っている FreeBSD をバージョンアップしたいのですが、今ある環境を破
   壊せずにバージョンアップ出来ませんか?

A. 可能です。kernel、ライブラリ、基本コマンドなどを入れ替えることでバー
   ジョンアップできます。基本的に FreeBSD のバイナリは下位互換ですので、
   インストール済の package などは、大部分はそのまま使い続けられます。

   バージョンアップには次の二通りの方法があります。

   1. 新しいバージョンの FreeBSD の配布物一式を入手して、ブートフロッピー
   から起動後、sysinstall のメニューで「アップグレードインストール」を選
   択する。

   2. 新しいバージョンの FreeBSD のソースファイルを入手して、環境を再構築
   する。

   1. の方法ではコンパイル済のバイナリを入手して現状のシステムを上書きし、
   2. では自分のマシンでバイナリを作成して現状のシステムにインストールしま
   す。どちらも結果的には同じ作業を行います。

   2. の方法では、ライブラリ (/usr/lib/*) や基本コマンド (/bin/*)
   も含めて全てコンパイルし直すことになりますので、相応のディスク容量と
   時間が必要です。ディスク容量に関しては特に /usr/src と /usr/obj
   を使いますので、必要なら前もってシンボリックリンクを張るなど
   して対応してください。

   参考) 必要なディスク容量と make world に要する時間
          /usr/src   200MB強
          /usr/obj   120MB - 150MB

          486DX4 100MHz         10 時間
          MMX Pentium 233MHz    2.5 時間

   作業方法は、英語版が以下の URL にあります。

   <URL:http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html>

   この日本語訳は、以下にあります。

   <URL:http://kerberos.math.sci.kobe-u.ac.jp/~maekawa/FreeBSD/mw.html>

   userland のコマンドも入れ替えや仕様変更されている場合があります。
   また、元のコマンドを自分で置き換えている場合にも書き換えられてしま
   うので注意する必要があります。


管理番号 475 (更新) 更新履歴
Q. PDF ファイルを読みたいのですが、どんなソフトを使ったらいいのでしょうか? 
   特に日本語を含むやつについて教えてください。

A. まず日本語を含まない PDF ファイルを読むためには、次の3つの方法があります。

     1. Adobe から Linux 用の Acrobat Reader が出ているので、Linux の
        バイナリを実行できる環境を整えて、これを使う。
     2. xpdf を使って読む。
     3. ghostscript の Ver.3 以降を使って読む。

     注: PDF によっては、xpdf では読めるが、ghostscript では読めない、また
     はその逆という事もあるようです。

   日本語の PDF ファイルですが、acroread-4.0 と ja-acroread-jpnfont-1999.7.20 を
   port/package からインストールして、
      <URL:http://www.adobe.com/prodindex/acrobat/readstep.html>
   からフォントを持ってくることで読めます。

   また ghostscript Ver.5 を使うと日本語を含む PostScript ファイルを PDF 
   ファイルに変換することができます。しかし日本語は画像として表現されてい
   るようです。


管理番号 1497 (新規) 更新履歴
Q. NIS って何ですか? NIS を導入したいのですが、やり方がよくわかりません。

A. 簡単に言うと、複数のホストで /etc/passwd や /etc/hosts などの
   情報を共有する仕組みです。例えば、複数のホストにアカウントを
   持っているユーザがパスワードを変更したいとき、NIS がない場合は
   全てのホストにいちいちログインして、passwd コマンドでパスワードを
   変更しないといけません。

   一方、NIS を導入しておけば、1つのホストでパスワードを変更すれば、
   自動的に他のホストにも新しいパスワードの情報が反映されます。


   NIS の導入時には、以下のページが参考になるでしょう。

      <URL:http://www.si.gunma-u.ac.jp/people/js/s5601026/bsd/nis/>
      <URL:http://surf.ap.seikei.ac.jp/%7Enakano/linux/NIS-j.html>


管理番号 604 (更新) 更新履歴
Q. Linux emulator (エミュレータ)を使って Linux バイナリを実行しようと
   したのですが、うまく動きません。どうしたら良いでしょう?

A. いろいろな原因が考えられます。順に候補を挙げていきますので、
   症状や自分の環境に合わせて、適宜対応して下さい。

     1. can't load library 'libXp.so.6' のようなエラーが出る場合は、
        対応する Linux 用のライブラリを Linux マシン等から入手して、
           /compat/linux/lib/
        の下に置いて下さい。

     2. ./my-linux-elf-binary というバイナリを実行した時に、
          % ./my-linux-elf-binary
          ELF binary type not known
          Abort
        と、表示されるようでしたら、以下のようにして下さい。
          % brandelf -t Linux ./my-linux-elf-binary

     3. Segmentation fault を起こして動作しない場合は、環境変数
        LD_LIBRARY_PATH が設定してないか確かめて下さい。もし
           % echo $LD_LIBRARY_PATH
        で何か表示されるようなら、
           % unsetenv LD_LIBRARY_PATH
        で、環境変数をクリアして下さい。

     4. Acroread4 を使おうとしたけれど、Segmentation Violation Caught.
        というウインドウがでてきて使えない場合は、X のリソース設定
        ファイル (~/.Xresources や ~/.Xdefaults) に、
          AcroRead*inputMethod: none
        という行を追加してください。

        あるいは、以下のような簡単なスクリプトを書き、ラッパとして使用する
        方法もあります。

            #!/bin/sh
            # Wrapper Script for Linux Acrobat Reader
            XMODIFIERS="@im=none"; export XMODIFIERS
            acroread4

     5. Applixware (TurboLinuxPro 3.0 および 4.2) について。
        3.0 の場合:
           メニューを日本語にしたい時は
              % setenv AXLANG 17
           として下さい。

        4.2 の場合:
            一応、動くようです。ただし、日本語の入力ができたという例は、
            FreeBSD-users-jp ではないようです(1999年12月28日現在)。
            詳しくは、[FreeBSD-users-jp 47668] と関連するスレッドを ご覧下さい。

     6. hogehoge: error in loading shared libraries
        :undefined symbol: __register_frame_info
        というエラーが出る場合。

        Linux 用の X server (XFCom_Rage128) などを Linux エミュレータで使用して
        いる場合に出るようです。この場合は、
           <URL:http://www.suse.de/en/support/xsuse/index.html>
        から regframe.rpm を持ってきてインストールします。
           % rpm2cpio regframe.rpm | cpio -ivd
        で展開する事ができるので、できた libregframe.so を 
        /usr/local/lib にコピーして、/etc/ld.so.preload を新しく作り、
           /usr/local/lib/libregframe.so
        と書く事で、実行できるようになります。


管理番号 1501 (新規) 更新履歴
Q. FreeBSD 3.x でカーネルを再構築した後、新カーネルで起動すると起動中に無
   効にしたはずのデバイスに関する以下のようなメッセージが表示されます。な
   にが原因なのでしょうか。

   config> di psm0
   No such device: psm0
   Invalid command or syntax.  Type `?' for help.
   config> di ppc0
   config> di zp0
   No such device: zp0
   Invalid command or syntax.  Type `?' for help.
   config> di ze0
   No such device: ze0
   Invalid command or syntax.  Type `?' for help.

   (上記の例では /sys/i386/conf 以下のカーネル設定ファイルで無効にしたデ
    バイスは psm0、zp0、ze0 です)

A. 最初のインストールのとき、以下の Kernel Configuration Menu が出てきた
   と思いますが、

      Skip kernel configuration and continue wiht installation
      Menu Start kernel configuration in Visual mode
      Startkernel configuration in CLI mode

   のうち、

      Menu Start kernel configuration in Visual mode 
      あるいは Start kernel configuration in CLI mode
   を選んでインストールしませんでしたか?

   3.x ブランチでは、インストール時にこれらのモードを使ってデバイスを非活
   性にするとその情報を /boot/kernel.conf に書き込みます。そして、インス
   トール直後の GENERIC カーネルはそのファイルの情報を元にデバイスを非活
   性にします。([管理番号 1255] 参照)。

   新しいカーネルを作成した場合、たとえば psm0 を削除したカーネルでそのま
   ま起動をかけると /boot/kernel.conf を読み込んで psm0 を非活性にしよう
   としますが、カーネル自体に psm0 のドライバが含まれていないため

      config> di psm0
      No such device: psm0
      Invalid command or syntax.  Type `?' for help.

   となるわけです。

   FreeBSD 3.x において、自分で作った新しいカーネルを使う場合は、カーネル
   構築後、/boot/kernel.conf の内容を消去する
   (方法は色々ありますが、例えば
      cp /boot/kernel.conf /boot/kernel.conf.old
      cp /dev/null /boot/kernel.conf
   ) か、/boot/loader.confの userconfig_script_load="YES" を "NO" あるい
   はコメントアウトするなりして /boot/kernel.conf を起動時に読み込まない
   ようにして下さい。

   また、逆にカーネルに組み込んであるデバイスを臨時に非活性にしたいような
   場合は /boot/kernel.conf を編集すればOKです。たとえば、セカンダリの 
   IDEコントローラを (wd1) を非活性にしたい場合は次のようにします。

      di wdc1
      q


管理番号 800 (更新) 更新履歴
Q. あるポート (port) 番号を使っているプログラムがどれなのかを
   調べる方法はありますか?

A. 以下に示す方法が考えられます。

   A1. FreeBSD 3.1-RELEASE 以降なら sockstat(1) で調べられます。
       なお、このコマンドは perl スクリプトで、やっている事は ほとんど
       A2. の説明そのものです。

   A2. netstat -A コマンドと fstat コマンドを組み合わせれば調べられます。
       netstat -an で使用中のポート番号の一覧が表示されます。さらに -A を
       指定すると、プロトコル制御ブロック (pcb) のアドレスも表示されます。
       どのプログラムが どの socket を使っているかは fstat コマンドで
       調べられますので、この pcb を対応付ければわかります。

       例えば、調べたいポート番号を1234番とすると
          % netstat -anA | fgrep '*.1234'
       の結果の第一フィールドを f074a000 とすれば
          % fstat | grep f074a000
       でわかります。

   A3. port/package を使って sysutils/lsof をインストールしてあれば、
       su で root 権限を得て、
          % lsof -i :1234
       とすることで、ポート番号 1234番を使用しているコマンドを
       調べることができます。


管理番号 158 (更新) 更新履歴
Q. 小さいファイルを連続してディスクに書き込むと、すごく遅いのですが。
   (例えば、ニュースサーバにしたら記事の受け取りが遅い。)

A. FreeBSD のデフォルトでは、ファイルシステムへの i-node の更新が同期
   的に行なわれているからです。これは安全性を考慮した上でのことで、安
   全性や機能を少し犠牲にすれば高速化することができます。そのため目的
   に応じて使い分ける必要があるでしょう。

   1. mount(8) 時に -o async オプションを使用すると、i-node の更新も非
      同期に行います。例えば、/etc/fstab に
        /dev/ccd0c    /a   ufs   rw,async    0  2
      のように書きます。ただし、速くなる代りに信頼性は儀牲にされます。

      jman mount によると
      --------------------------------------------------------------------
        async   指定したファイルシステムのすべての I/O を非同期に行います。
                このオプションを指定することは非常に危険ですので、システ
                ムクラッシュ時にファイルシステムを作り直す用意ができてい
                ないかぎりは使うべきではありません。
      --------------------------------------------------------------------

   2. 用途によっては -o noatime オプションも有効です。これはファイルへ
      のアクセス時に、ファイルの最終アクセス日時を更新しません。ただし、 
      このアクセス日時を利用するようなアプリケーションは上手く動かない
      ので注意が必要です。/etc/fstab には
        /dev/ccd0c    /a   ufs   rw,async,noatime    0  2
      のように書きます。

   3. FreeBSD 3.0-RELEASE からはこれらに加えて Soft Updates という機能
      が加わっています。これは、安全性の犠牲なしにファイル I/O の高速
      化を行おうとするもので、場合によってはかなりの効果が期待できます。
      ただし、まだ実験的な機能ですのでそれなりのリスクは存在します。
      また、標準の GENERIC カーネルには含まれませんので、いくつか準備 
      が必要です。

      まず、LINT を見ると次のような記述があります。

         # Soft updates is technique for improving file system speed and
         # making abrupt shutdown less risky.  It is not enabled by default due
         # to copyright restraints on the code that implement it.
         #
         # Read ../../ufs/ffs/README.softupdates to learn what you need to
         # do to enable this.  ../../contrib/softupdates/README gives
         # more details on how they actually work.
         #
         #options                SOFTUPDATES

      あとはこれらの README に書かれている事を良く読んで作業すれば問題
      ないでしょう。大雑把に手順を示すと、

      a) ソースコードを準備します。

        # cd /usr/src/sys/ufs/ffs
        # ln -s ../../contrib/softupdates/*.[ch] .

      b) カーネルコンフィギュレーションファイルに以下の行を追加して、
         カーネルを再構築します。

        options         SOFTUPDATES

      c) ファイルシステムに対して Soft Updates を有効にします。この時 
         tunefs(8) を使うにはファイルシステムがアンマウントされた状態
         でなければなりません。シングルユーザモードで作業すれば良いで
         しょう。

        # tunefs -n enable /a

      d) この機能を使うとき -o async オプションは無意味です。

         /dev/ccd0c    /a   ufs   rw,noatime    0  2

      また、上手くできたか確認するには mount コマンドをオプションなし
      で実行します。

      /dev/ccd0c on /a (local, noatime, soft-updates, writes: ...

   4. これ以外で高速化の鍵となるものは、PCI IDE コントローラのフラグ設
      定や、newfs(8) 時のオプション指定の最適な組合せ、及び ccd(4) や 
      vinum(8) を使用してディスクをストライピングすることも考慮する価
      値があるでしょう。


管理番号 1515 (更新) 更新履歴
Q. パーティション (partition) って何ですか?

A. 一台の HDD の中を論理的に複数の領域に分けて用いる場合、この各領域を
   パーティションと呼びます。こうして分割して用いることで、各パーティ
   ションごとに別々の OS を入れたり、別々のフォーマットにしたりする
   ことが可能になります。

   それぞれのパーティションには OS 固有の ID 値が書き込まれますので、
   OS がこれを見てそのパーティションのフォーマットを知ることができる
   ようになっています。

   また FreeBSD においては、DISK内を /usr /var などのファイルシステム
   単位で分割したものをパーティションと呼ぶため、ここでいうパーティ
   ションをスライスと呼びます。


管理番号 1252 (更新) 更新履歴
Q. tcsh の日本語マニュアルというものは存在するのでしょうか?

A. tcsh-6.02 のマニュアルだったら、
      <URL:ftp://ftp.iamas.ac.jp/pub1/UNIX/Shell/tcsh602.jman.tar.gz>
   にあります。


管理番号 755 (更新) 更新履歴
Q. notePCの 2.5inch HDD を交換したので、余った方を DeskTopPC に繋ごうと思
   います。2.5inch -> 3.5inch 変換コネクタは入手したのですが、2.5inch HDD 
   を slave に設定するにはどうしたらいいのでしょうか?

A. 2.5inch HDD には

                IDE-Connector      謎のpin
        |………………………………|・・
        |………………………………|・・


   40ピンのIDEコネクタと その横に 2x2 くらいのピンが付いています。この部
   分にピンを繋ぐと slave になるのですが、メーカ各社によって組合わせがま
   ちまちなので注意が必要です。
   ( | の部分は IDEコネクタとのすきまを表します。■と■を jumper で繋ぎます)

   ・IBM Travelstar無印(DHAA-,DVAA-)/LP(DBOA-)/XP(DPRA-)
           …|・■        …|・・        …|・・
           …|・■        …|・・        …|■■
           マスター        スレーブ        ケーブル選択
 
   ・IBM Travelstar 2XP(DCRA-)/3XP(DLGA-)/2LP(DSOA-)/3LP(DMCA-)/
      4LP(DTNA-)/VP(DDLA-)/4GT(DPLA-)/5GS(DTCA-)/3GN(DYKA-)/8GS(DYLA-)
            …|・・        …|・■        …|・・
            …|・・        …|・■        …|■■
            マスター        スレーブ       ケーブル選択

   ・Toshiba
            …|・・        …|■・
            …|・・        …|■・       
            マスター        スレーブ

   ・FUJITSU
            …|・・        …|・・        …|■■
            …|・・        …|■■        …|・・
            マスター        スレーブ        ケーブル選択

   ・Hitachi
            …|・・        …|・■
            …|・・        …|・■
            マスター        スレーブ

   ・Seagate
            …|・・        …|・■        …|・・
            …|・・        …|・■        …|■■
            マスター        スレーブ       ケーブル選択

   ・Maxtor (ただし、一部の厚い HDD は裏の基盤上の jumper pin で設定)
            …|・■        …|■・        …|・・
            …|・■        …|■・        …|■■
            マスター        スレーブ       ケーブル選択

   多くの HDDメーカーの WWW リソースでは jumper の設定が説明されています。
     IBM:  <URL:http://www.storage.ibm.com/storage/techsup/hddtech/table.htm>
     Toshiba: <URL:http://www.toshiba.com/taecdpd/products.shtml>
     Hitachi: <URL:http://www.hitachi.com/storage/products/hdd/hddframe.html>
     Fujitsu: <URL:http://www.fcpa.com/cgi-bin/goFrames.cgi/product/hd/hd_cat.html>
     Quantum: <URL:http://www.quantum.com/support/hdd/hdd_support.htm>
     Seagate: <URL:http://www.seagate.com/products/discsales/index.html>
     Maxtor:  <URL:http://www.maxtor.com/products/index.html>

   comp.arch.storage FAQ-1 の Hard Disk Manufacturers には、上記以外にも 
   HDD メーカーの URL が載っています。
     <URL:http://alumni.caltech.edu/~rdv/comp-arch-storage/FAQ-1.jp.html>
   また以下の URL も参考になるかもしれません。
     SupportSource - Hard Drive Criteria Search
      <URL:http://www.supportsource.com/hdfind/hd.htm>


管理番号 587 (更新) 更新履歴
Q. gccで "long double" を使用して数値計算を行ないましたが、同じ CPU での 
   Linux の結果と比べて計算精度が悪く、計算結果が異なります。

A. FreeBSD の標準カーネルでは浮動小数点の仮数部の精度が (IEEE と異なり)
   53bit に設定されているために起きる現象です。

   long double の仮数部の精度は64bitです。(double の仮数部の精度は 53bit です)

   Intel x86 系の FPU の仮数部の精度は 24/53/64bit に設定可能です。
   FreeBSD では仮数部の精度が 53bit に設定されているために、long double 
   を使用しても仮数部の精度が 53bit しかありません。

   精度を上げて数値計算を行なうには:

   1. 関数 fpsetprec()/fpgetprec() を使用して、FPU の仮数部の精度を 64bit 
      に変更する事が出来ます。fpsetprec(3) を御覧下さい。

   2. GNU Multiple Precision Arithmetic Library (GMP)、PARI 等 FreeBSD 標
      準以外の数値演算ライブラリを利用してもよいでしょう。


   1. fpsetprec()/fpgetprec() について

   FreeBSD users MLの以下のメールから始まるスレッドが参考になるでしょう。
     Subject: [FreeBSD-users-jp 24352] gcc bug
     Subject: [FreeBSD-users-jp 46648] long double
   その他、オンラインマニュアル fpsetround(3)math(3)ieee(3)などが参考
   になります。
   ただし、fpsetprec は double の内部演算も 64bit 精度にしてしまうという
   副作用があるので、その危険が理解できる人だけが使うべきでしょう。

   long double 使用上の注意点:
    * FreeBSD の printf() は long double に対応していないようです。"%Lf" 
      等を使用してもエラーにはなりませんが、double の精度でしか表示されま
      せん。
    * long double 用の算術関数 sqrtl(), sinl() 等が標準で用意されていません。
      ([管理番号 588] 参照)

   プログラム例:
   ----------------------------
   #ifdef __FreeBSD__
   #include <ieeefp.h>
   #endif

      ...

   int main()
   {
     long double tmp1, tmp2;
      ...

   #ifdef __FreeBSD__
     fpsetprec(FP_PE); /* 仮数部の精度を 64bit にする。 */
   #endif
      ...
   }
   ----------------------------

   2. 非標準の数値演算ライブラリについて

   GMP は、標準で install されているので (/usr/include/gmp.h
   /usr/lib/libgmp.{a,so})、使い始める為の手間は少ないでしょう。info が一
   緒に install されていますので、それを参照して下さい (info → gmp)。任
   意多倍長の整数、整数を法とした計算 (modular arithmetic)、有理数、浮動
   小数点数の四則などが出来ます。但し、三角関数、対数関数などの初等的な関
   数もないので、用途が限られるかも知れません (自分で頑張って書けば、勿論
   問題ないですが)。

   PARIは、port の math/pari として収録されています。GMP 同様の数の他、p
   進数や、それぞれの数を係数とした多項式、羃級数、行列やベクトルの計算が
   でき、初等超越関数(三角関数や指数対数関数)の他、これでもかというくら
   い様々な関数が実装されています。本来は、整数論用のライブラリ集 (と、対
   話的に計算するための gp というコマンド (bc の様な感じ)) で、ちょっと
   した用途には大げさかも知れません。

   いずれも C から使うことになるでしょう。(PARIは、Fortran や Pascal から
   も使えるようです)。

   他に参考になるものとしては
     SAL: <URL:http://SAL.linet.gr.jp/index.shtml>
   があります。


管理番号 1541 (新規) 更新履歴
Q. 浮動小数点演算を行なう program が SIGFPE で core dump してしまいます。
   同じ program が他の OS では問題無く動くのに何故でしょうか。

A. FreeBSD の浮動小数点例外の default の扱いが core dump になっている為です。
   詳しくは <URL:http://www.jp.FreeBSD.org/ports-jp/tips.html> を御覧下さい。

   他にも、オンラインマニュアル fpsetmask(3)math(3) や
     [FreeBSD-ports-jp 1993]
     [FreeBSD-users-jp 46652] Re: long double
   が参考になるでしょう。


管理番号 1544 (新規) 更新履歴
Q. man の文書をテキスト化するにはどのようにすれば良いのでしょうか。

A. 単純に
      % man man > man.txt
   として plain text ファイルを作成すると、cat や more、less などで
   見る分にはよいのですが、vi や emacs などのエディタで見ようとすると

      LS(1)          FreeBSD General Commands Manual             LS(1)

      N^HNA^HAM^HME^HE
            l^Hls^Hs - list directory contents

      S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS

   のように、太字や下線の部分がおかしくなってしまいます。これは
   NAME の太字を表現するのに、
      N(^Hで一文字戻る)NA(^Hで一文字戻る)AM(^Hで一文字戻る)ME(^Hで一文字戻る)E
   のように、コントロールコード ^H を使っているからです。同様に
   下線付きの `ABC' は A^H_B^H_C^H_ となります。

   これを plain text にするには、以下のような方法があります。

   (1) colcrt(1) を使用する
         % man man | colcrt > man.txt
       これが一番簡単でしょう。
         % jman jman | colcrt > jman.txt
       jman も OK です。

   (2) col(1) を使用する。
         % man man | col -b > man.txt
       man ならよいのですが、日本語に対応していないため、jman では
       うまくいきません。ただし、FreeBSD(98) の col は日本語が通る
       ようにパッチがあてられています。

   (3) colcrt や col の行なっていることを sed や perl で行なうと
         % jman jman | sed 's/.^H//g; s/.^H//g' > man.txt
         % jman jman | perl -pe 's/..\x08\x08|.\x08//g' > man.txt
       のようになります。なお、^H は Ctrl-v BackSpace や Ctrl-v h として
       入力します。

   (4) emacs (mule) 上で man を見て、ファイルに保存する。
         M-x man [ENTER] マニュアル名 [ENTER] 
       とすると、emacs 上にマニュアルが表示されます。それをファイル名を
       指定して書き出せばいいでしょう。~/.emacs に
         (defvar manual-program "jman")
       としておくと、日本語マニュアルが表示されます。

   おまけ。

   (5) plain text ではありませんが、
         % gzcat /usr/share/man/man1/ls.1.gz | groff -man > ls.ps
       とすると、マニュアルを Postscript 形式に変換できます。日本語マニュアルは
       ja-groff (/usr/local/bin/groff にインストールされる) を使って
         % gzcat /usr/share/man/man1/ls.1.gz | /usr/local/bin/groff -man > ls.ps
       とします。そのまま Postscript プリンタに出力したり、gs コマンド
       (ghostscript に含まれています) で見ることができます。


管理番号 257 (更新) 更新履歴
Q. FAQ.98 を見るとアライドテレシス SIU-98 が動作するように書いてあるので
   すが認識されません。

A. このボードは SIC-98 互換モードというのがありまして、2段重ねになってい
   るボードを外すと互換モードになります。あとはボードの割り込み番号などを
   正しく設定してください。

   SIU-98-D、SIU-98-E については、ボード構造が違うためにこの方法は使えま
   せんが、FreeBSD(98) 3.4R-Rev01 からは SIU-98-D が追加サポートされまし
   た。SIU-98-E についても SIU-98-D として使えることが期待されますが、動
   作報告はまだありません。試した方がいらっしゃいましたら、報告して下さる
   と有難いです。

QandA
QandA Project
登録・更新 QandA 一覧