FreeBSD QandA 2004年7月12日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 745 (更新) 更新履歴
Q. FreeBSD で音楽 CD の曲データ (CD-DA) を CD-ROM, PD ドライブを用いて
   取り出せますか?

A. ドライブの機種に依存しますが、次の様な方法があります。最近のドライブで
   はほとんど問題ないと思われますが、一部の古いドライブなどでは不具合が報
   告されています。
   また、以下で説明する手順を個別に行なうよりも、最後に触れている abcde
   や ripit のようなツールを使う方が楽でしょう。

   1. ATAPI CD-ROM

    a) FreeBSD 4.3-RELEASE 以降を使っている場合

      もはや特別なソフトウェアは不要です。読み出し時の block size を
      2352 bytes に指定してコピーするだけです。

      4.X-RELEASE 系列では、必要とするトラック番号までのデバイススペシャ
      ルファイルを作っておく必要があります。次の例は 50 トラック (t50) と
      しています。

        # cd /dev; ./MAKEDEV acd0t50

      5.0-RELEASE 以降では、devfs が自動的にデバイススペシャルファイルを
      生成します。

      CD メディアをドライブにセットしたら、OS に目次を読み込ませます。
      ついで、どのトラックを吸い出そうとしているのか確認します。
        % cdcontrol -f /dev/acd0c info

      吸い出したいトラック番号を # とすると、以下のコマンドで raw データ
      がファイル track#.raw に吸い出せます。
        % dd if=/dev/acd0t# of=track#.raw bs=2352

      後は、好きな順番に並び替えて My best CD を cdrecord や burncd で
      焼くも良し、MP3 にエンコードするも良し。
        % gogo -nopsy -offset 0 track#.raw

      WAV 形式で保存するのであれば、適切な 44Byte のヘッダを付けなければなり
      ません。
      ヘッダには、サンプリング周波数,長さその他各種の情報が格納されています。

       AFsp (ports/audio/afsp) を利用した場合の例:
        % CopyAudio -t noheader -F WAVE -P 'integer16, 0, 44100, native, 2, default' track#.raw track#.wav

       sox (ports/audio/sox) を利用した場合の例:
        % sox -s -c 2 -w -r 44100 -t raw track#.raw track#.wav

    b) cdda2wav (ports/sysutils/cdrtools) を使います。
        <URL:http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html>
       ATAPI CD-ROM の場合はオプションで -I cooked_ioctl とすると
      よいでしょう。

    c) dagrab (ports/audio/dagrab) を使います
        <URL:http://web.tiscali.it/marcellou/dagrab.html>

      ただし、一部の CD-ROM ドライブにおいて dagrab を用いて取り出しを行うと、
      出力にノイズが混じるという事例が報告されています。


   2. SCSI CD-ROM

    a) tosha (ports/audio/tosha) を使います。

    b) ATAPI CD-ROM と同様、SCSI CD-ROM でも cdda2wav (ports/sysutils/cdrtools)
       が使えます。


   3. SCSI PD

      松下 LF-1000 では tosha-0.6 に以下のパッチが必要です。

       ---ここから---
       *** tosharc  Wed Jan 13 15:37:42 1999
       --- tosharc  Mon Jan 18 22:24:51 1999
       ***************
       *** 66,71 ****
       --- 66,72 ----

         #   This one was tested with "MATSHITA" "PD-1 LF-1001" "A105":

       + "MATSHITA" "PD-1 LF-1000"  "" 0xd8 0 0x00 0 10 0
         "MATSHITA" "PD-1"     ""     0x28 1 0x00 0 10 0

         #   Someone reported the following setting for his
       ---ここまで ---

   Appendix. 参考情報
     <URL:http://www.kobe1995.net/~kaz/FreeBSD/cd_rip.html>


   またこれら読み出し、及び変換作業を一括して行ってくれるスクリプトとして、
   abcde (ports/audio/abcde) や、ripit (ports/audio/ripit) などがあります。
   ここで説明したことのほか、CDDB からアルバムや曲名を検索してファイル名を
   つける機能などがあります。
   ports では、どちらも読み出しには dagrab を使うようになっていますが、 
   cdda2wav を使うこともできます。


管理番号 475 (更新) 更新履歴
Q. PDF ファイルを読みたいのですが、どのソフトウェアを使ったらよいので
   しょうか?

A. 以下の方法があります。

     1. Linux 用の Acrobat Reader が print/acroread5 として用意されて
        いるので、これを ports/packages からインストールする。

        ただし日本語の PDF を表示するには、追加のファイルをインストール
        する必要があります。まず、
           <URL:http://www.adobe.com/products/acrobat/acrrasianfontpack.html>
        の「Which font pack do you need?」で
           Version  -> 「Adobe Acrobat Reader 5.x」を選択
           Language -> 「Japanese」を選択
           Platform -> 「UNIX」を選択
        と選択し、次ページで個人情報を入力します。すると jpnfont.tar.gz と
        いうファイルをダウンロードできます。次に root になって、

            # mkdir /usr/ports/distfiles/Acrobat5

        とディレクトリを作成します (既にディレクトリが存在する場合は不要)。
        ダウンロードした jpfont.tar.gz を /usr/ports/distfiles/Acrobat5/ に
        置き、

            # cd /usr/ports/japanese/acroread5-jpnfont/ && make install

        とすれば日本語フォントをインストールできます。

     2. xpdf を使って読む。

        xpdf (ver 0.80 以降) を X 上で動かせば日本語を表示できます。フォントは
        代替表示のためか少しずれるようですが、文章を読むには十分という程度です。
        PDF ファイルの種類によりますが、Acrobat Reader よりも xpdf の方が高速に
        表示できる場合が多いようです。

        ただし、xpdf に付属する PostScript への変換ツール、pdftops(1) は、
        (少なくとも ver 0.90 では) 日本語を扱えません。

     3. ghostscript の Ver.3 以降を使って読む。

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

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

     4. java 実行環境(java or jre [1.1.8以降]) と、
        Acrobat Viewer for other Java-enabled platforms
        を使用して、PDF を読み込む方法があります。
        後者は、print/acrobatviewer として ports/packages で提供されています。

        日本語表示可能であり、Linux 用の Acrobat Reader 同様、日本語を画
        像ではなくテキストとして表現しています。
        その一方で、とても重たいアプリケーションなので、処理能力が高く、
        メモリーが十分あるマシンでないとつらいでしょう。


管理番号 2611 (新規) 更新履歴
Q. Java2 SDK 1.3 (jdk13) をインストールする方法を教えてください。

A. 現在 FreeBSD 上で動作し、ports となっている jdk13 の実装は以下の5種類です。
     java/linux-sun-jdk13        (Linux版・バイナリ配布)
     java/linux-ibm-jdk13        (Linux版・バイナリ配布)
     java/linux-blackdown-jdk13  (Linux版・バイナリ配布)
     java/diablo-jdk13           (FreeBSD版・バイナリ配布)
     java/jdk13                  (FreeBSD版・ソースからのビルドが必要)

   linux-sun-jdk13, linux-ibm-jdk13, linux-blackdown-jdk13 は
   Linux版バイナリのため、動作させるには Linux emulation を有効にしなければ
   なりません。

   diablo-jdk13 は The FreeBSD Foundation が Sun からの正式なライセンスを受け
   バイナリ配布している、FreeBSD ネイティブな JDK です。
   ただし、バイナリ互換性の問題により、現在のところ FreeBSD 4.x 上でしか
   動作させることができません。

   java/jdk13 はソースからビルドする、FreeBSD ネイティブな JDK です。
   FreeBSD 5.x 上では diablo-jdk13 は動作しないため、ネイティブな JDK が
   必要な場合はこちらをインストールする必要があります。
   また、diablo-jdk13 では native threads や HotSpot がサポートされていないので、
   これらの機能を使用したい場合にも java/jdk13 をインストールする必要があります。

   java/jdk13 のインストールの流れを簡単にまとめると以下のようになります。
     1. ビルド用の jdk をインストールする。
     2. jdk のソース・FreeBSD 用のパッチを /usr/ports/distfiles/ に置く。
     3. ports の java/jdk13 を make install する。

   以下、個別に解説します。

   1. ビルド用の jdk をインストールする。

      java/jdk13 をビルドするためには、bootstrap となる JDK が
      別途必要となります。
      (一度 java/jdk13 をビルドしてしまえば、bootstrap 用 JDK は
      アンインストールしても構いません。)
      FreeBSD 4.x では java/diablo-jdk13 をインストールしておきます。
      FreeBSD 5.x では Linux emulation を有効にしたうえで、
      java/linux-blackdown-jdk13 をインストールしておきます。

      Linux emulation を有効にする方法は、ハンドブックを参照してください。
         <URL:http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/linuxemu-lbc-install.html>

   2. jdk のソース・FreeBSD 用のパッチを /usr/ports/distfiles/ に置く。

      jdk13 を ports からインストールしようとすると以下のようにエラーと
      なります。

        # cd /usr/ports/java/jdk13
        # make
        ===>  jdk-1.3.1pX_Y :
         Because of licensing restrictions, you must fetch the source distribution
         manually.  Please access http://www.sun.com/software/java2/download.html
         with a web browser and follow the "Download" link for the
         "Java(TM) SDK 1.3.1". You will be required to log in and register,
         but you can create an account on this page.  After registration and
         accepting the Sun Community Source License, select "J2SESDK" and
         download the source file, j2sdk-1_3_1-src.tar.gz.  Please place this
         file in /usr/ports/distfiles.

      つまりライセンスの制限により、Sun のサイトからJDK のソースを手動で
      ダウンロードし、/usr/ports/distfiles/ にファイルを置く必要があると
      いうことです。ソースのダウンロードにはユーザ登録が必要です (上記
      ページで登録可能。ちなみに無料)。

      メッセージに従い、j2sdk-1_3_1-src.tar.gz を /usr/ports/distfiles/
      に置き、再度 make します。

        # cd /usr/ports/java/jdk13
        # make
        ===>  jdk-1.3.1pX_Y :
        The source distribution exists on your system, but due to
        licensing restrictions you still need to download the
        patchset, bsd-jdk131-patches-Z.tar.gz, from
        http://www.eyesbeyond.com/freebsddom/java/jdk13.html.
        Please place the patchset in /usr/ports/distfiles.

      Sun のソースをそのまま FreeBSD でコンパイルすることはできず、
      FreeBSD 用のパッチをあてる必要があります。このパッチもライセンスの
      制限により上記サイトから手動でダウンロードする必要があります。

      ダウンロードした bsd-jdk131-patches-Z.tar.gz を /usr/ports/distfiles/ に
      置き、再度 make します。

   3. java/jdk13 を make install する。

      FreeBSD 5.1〜5.2-RELEASE:

         # cd /usr/ports/java/jdk13
         # make WITH_LINUX_BOOTSTRAP=yes install

         注: 単に make install とすると、以下のエラーが発生します。

               ERROR: Your BOOTDIR environment variable does not point
                      to a valid Java 2 SDK for bootstrapping this build.
                      A Java 2 SDK 1.3.1 build must be bootstrapped against any
                      1.3 build. Please update your ALT_BOOTDIR setting, or
                      just unset it, and start your build again.

             JDK をコンパイルするために bootstrap となる JDK が
             必要となるのですが、WITH_LINUX_BOOTSTRAP=yes とする
             ことで java/linux-blackdown-jdk13 が bootstrap として
             使用されます。

      FreeBSD 5.2.1-RELEASE 以降:

         # cd /usr/ports/java/jdk13
         # make install

         注: FreeBSD 5.2.1-RELEASE 以降でも bootstrap の JDK が
             必要なのは同じですが、ports 内部で自動的に
             WITH_LINUX_BOOTSTRAP=yes とセットされますので、
             make install だけで OK です。


   最後に、確認のため Java アプリケーションの Hello World を
   コンパイル・実行してみましょう。java/jdk13 のバイナリは
      /usr/local/jdk1.3.1/bin/
   にインストールされます。

     ソース作成
       % cat HelloWorld.java
       public class HelloWorld {
         public static void main(String[] args){
           System.out.println("Hello World");
         }
       }

     コンパイル
       % /usr/local/jdk1.3.1/bin/javac HelloWorld.java

     HelloWorld.class が生成されたことを確認
       % ls ls HelloWorld.*
       HelloWorld.class    HelloWorld.java

     実行
       % /usr/local/jdk1.3.1/bin/java HelloWorld
       Hello World


管理番号 1812 (更新) 更新履歴
Q. FreeBSD 4.0 以降ではディスクの不良ブロックチェック(スキャン)
   などを行う bad144 コマンドがなくなりましたが、これからはどう
   やって不良ブロックチェックを行えばよいのでしょうか?

A. FreeBSD 4.0 以降の ad ドライバでは bad sector table のある
   パーティションがサポートされなくなり、bad144 コマンドもなく
   なりました。したがって、基本的に OS 上で不良ブロックのチェックを
   行うことはできません。[管理番号 278] 参照。

   一般的に OS の稼動中にディスクのチェックツールを使用するのは、
   結果に対する信頼性に欠くばかりでなく、HDD などに無理な負担が
   かかる可能性もありますので、OS 上での不良ブロックのチェックは
   あきらめて、以下のような診断ツールを使ってください。

   Hitachi Drive Fitness Test
     <URL:http://www.hitachigst.com/>
   Maxtor MAX
     <URL:http://www.maxtor.com/>
   Seagate SeaTools Disc Diagnostic
     <URL:http://www.seagate.com/>

   その他、メーカーを問わずハードウェアのチェックができる
   AMIDIAG (あな診)というものもあります。(有料)
     <URL:http://www.amij.com/> (日本語サイト)
     <URL:http://www.ami.com/>

   また、OS の稼働中にディスク交換する必要がある場合は、ホットスワップ
   対応の RAID 装置を使用することを考慮してください。これらのデバイス
   を利用すれば、ディスクを一旦システムから切り離して、不良ブロックの
   チェックなどのメンテナンス作業を行うことができます。


管理番号 2641 (新規) 更新履歴
Q. 古いバージョンの FreeBSD はどこで入手できるでしょうか?

A. FreeBSD ハンドブックの

     Mirroring FreeBSD
       <URL:http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/hubs/index.html>

   という文書の中で紹介されている

     FreeBSD Mirror Database
       <URL:http://mirrorlist.FreeBSD.org/>

   で配布サイトの一覧を検索できます。ここで古めのリリースも見つかるでしょう。

   古いソースを参照したいだけであれば、
      [管理番号 798]
         Q. FreeBSD の各バージョンの配布ファイルの内容や変更点を調べたいのですが。
   をどうぞ。


管理番号 2228 (更新) 更新履歴
Q. 乱数を得ようと rand(3) を使ったのですが、生成される乱数の質が悪いよ
   うです

A. FreeBSD の rand(3) 関数は、オンラインマニュアルにもあるとおり、非常
   に質の悪い乱数生成関数ですので、使わない方がよいでしょう。
   なお、乱数の質とはどのようなものかここでは触れませんので、後述の参
   考文献 (*1) 等を参照してください。

   乱数の利用目的とそれに応じた要求は大きく分けると次の2通りです。
    (1) モンテカルロ (Monte Carlo) 法等のシミュレーション
       再現性のある擬似乱数が必要です。 (決定論的乱数)
    (2) 暗号
       乱数列が推測できてはいけません。(非決定論的乱数)

   (1) シミュレーション等に用いる擬似乱数
     推奨はできませんが、どうしてもシステムで用意されている疑似乱数生
     成関数を使いたい場合は、random(3) がいくぶんましです。

     シミュレーション向けの擬似乱数については、2004年現在 Mersenne
     Twister が最も良いでしょう。
       <URL:http://www.math.keio.ac.jp/~matumoto/mt.html>
     詳しくは「間違いだらけの擬似乱数選び」
       <URL:http://www.soi.wide.ad.jp/class/20010000/slides/03/>
     をご覧ください。

     実装については、上記サイトで紹介されているものの他、C# 版が
       <URL:http://takel.jp/mt/>
     で公開されています。
     また、言語によっては処理系や広く使われているライブラリで提供され
     ています。例えば:
       boost <URL:http://www.boost.org/> (C++, ports/devel/boost)
       Blitz++ <URL:http://www.oonumerics.org/blitz/> (C++, ports/math/blitz++)
       ports/math/p5-Math-Random-MT (perl)

   (2) 暗号
     暗号に用いる場合、簡単にいうと、生成される乱数列が推測できてはい
     けません。FreeBSD では、/dev/random が利用できます。また、RC4 暗
     号に用いられる疑似乱数生成関数 arc4random() も用意されています。
     それぞれ、random(4)、arc4random(3) のマニュアルを参照してください。
     5.0-RELEASE 以降では、random(4) が
       Yarrow アルゴリズム <URL:http://www.counterpane.com/yarrow.html>
     を使うように書き直され、かなり良いものになったようです。

     FreeBSD に依存しないものだと、OpenSSL で乱数生成用の API が提供さ
     れています (RAND_*)。engine(3)、rand(3) 等、関連するマニュアルを
     参照してください。
     詳しいことは暗号関連の参考書を調べてください。

     なお、OpenSSL のマニュアル rand(3) はシステムの rand(3) 関数と重なって
     いるので、man -a 3 rand と -a オプションを指定しないと読めないでしょう。


   (*1) 乱数に関する参考資料
     日本語の書籍としては、
     ・『準数値算法/乱数』 D.E. Knuth 著、渋谷 政昭 訳 (サイエンス社)
       "The Art of Computer Programming, vol.2: Seminumerical Algorithms"
       2nd ed. Addison-Wesley, Reading, Mass. の訳です。
     ・『乱数』 伏見 正則 著 (東京大学出版会、ISBN 4-13-064072-0)
     を挙げておきます。ただし、後者には「乱数とは何か?」という話はあり
     ません。WWW では、次の
       Random Number Generators <URL:http://random.mat.sbg.ac.at/>

     また、Diehard という乱数生成器を試験するソフトウェアもあります。
       <URL:http://stat.fsu.edu/~geo/diehard.html> (ports/math/diehard)

   参考: [FreeBSD-users-jp 69480] とそれを含むスレッド


管理番号 2650 (新規) 更新履歴
Q. これまで locale 名は ja_JP.EUC だったと思うのですが、ja_JP.eucJP  と
   している人をみかけました。変更になったのですか?

A. 4.6-RELEASE の時点で、ja_JP.EUC から ja_JP.eucJP に変更されました。

   互換性を確保するため、
      /usr/share/locale/ja_JP.EUC@ -> ja_JP.eucJP
      /usr/share/locale/ja_JP.eucJP/
   とシンボリックリンクが張られています。

   ただし、
       FreeBSD 5.x で LANG=ja_JP.EUC のまま japanese/groff を make
       すると core dump してしまう [ports-jp:13853]
   という報告がありますので、余計なトラブルを避ける意味で ja_JP.eucJP に
   変更することをお勧めします。


管理番号 2664 (新規) 更新履歴
Q. 古い PC (i386 マシン) への 5.0-RELEASE 以降のインストールがうまくゆき
   ません。

A. その PC は、ACPI に対応していますか?
   対応していないか、ACPI 対応が出始めの頃のものであれば、起動時のメニュー
   (BSD デーモンの ASCII art が出ている画面) で
       acpi disabled
   を選択してみて下さい。

   ACPI 非対応の PC では、ディスクへの書き込みに失敗してインストールが中
   断したり、カーソルキーが効かなかったり、freeze したりといった不具合で
   インストール出来ない場合があるようです。


QandA
QandA Project
登録・更新 QandA 一覧