次のページ 前のページ 目次へ

2. CD-ROM を焼くための Linux の設定

この章は SCSI、IDE/ATAPI、そしてパラレルポート接続タイプの CD ライタに 適用できます。USB 接続の CD ライタは 2000 年 5 月の時点では サポートされていません。SCSI 以外のライタには互換ドライバが必要です。 このドライバは、これらのデバイスを 本物の SCSI デバイスであるかのように見せかけます。 ある面では、このような統一化 (「全てのデバイスが SCSI である」) は簡単です。 なぜなら、アプリケーションレベルでは CD ライタの種類に関わらず 他のユーザと知識を共有できるからです。 その反面、ドライバ名の変更を反映させるため、 CD プレイヤーのようなアプリケーションや、 マウントユーティリティの再設定を行わなければなりません。 例えば、今まではデバイスファイル /dev/hdc 経由で ATAPI 接続の CD ライタにアクセスしていたとしても、SCSI 互換ドライバを有効にした後は /dev/scd0 経由でアクセスしなければならなくなります。

一度ハードウェアとその他の Linux システムの設定がうまくできれば、 cdrecord -scanbus コマンドの実行により SCSI バスに接続されている デバイスの一覧が表示されます。この章の目的は、 最終的に次のような出力が得られるよう Linux システムを設定する手伝いをすることです:

shell> cdrecord -scanbus
Cdrecord release 1.7a1 Copyright (C) 1995-1998 Jög Schilling
scsibus0:
      0,0,0) 'Quantum ' 'XP34300         ' 'F76D' Disk
      0,1,0) 'SEAGATE ' 'ST11200N        ' '8334' Disk
      0,2,0) *
      0,3,0) 'TOSHIBA ' 'MK537FB/        ' '6258' Disk
      0,4,0) 'WANGTEK ' '5150ES SCSI 36  ' 'ESB6' Removable Tape
      0,5,0) 'EXABYTE ' 'EXB-8500-85QUE  ' '0428' Removable Tape
      0,6,0) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM
      0,7,0) *
scsibus1:
      1,0,0) 'Quantum ' 'XP31070W        ' 'L912' Disk
      1,1,0) *
      1,2,0) *
      1,3,0) 'TEAC    ' 'CD-R55S         ' '1.0H' Removable CD-ROM
      1,4,0) 'MATSHITA' 'CD-R   CW-7502  ' '4.02' Removable CD-ROM
      1,5,0) *
      1,6,0) 'YAMAHA  ' 'CDR400t         ' '1.0d' Removable CD-ROM
      1,7,0) *
リスト: SCSI バスでのデバイスの検出

この例は Jörg Schilling さんから頂いたもので、全部で 4 つの CD ライタ が表示されています。-scanbus オプションは他のデバイス(例えば普通の CD-ROM やハードディスク)も表示するので注意してください。 各デバイスにおける最後のカラムは、 それがどんな SCSI デバイスかを説明したものです。 この項目では、普通の CD-ROM ドライブと、 CD を焼く機能を持った CD-ROM ドライブとをはっきりとは区別できません。 しかし、製品識別文字列 (真ん中の項目) を見れば、 機能に関するヒントが R, -R, -RW といった形で得られることがよくあります。

2.1 やってみよう

この章は、設定に関して手早く簡単な解説をしてみようというものです。 あらゆる設定をカバーしてあるわけではありませんが、どうか構わず、 やってみてください。まず最初に、``uname -r'' コマンドで表示されるバージョン 番号をチェックしてください。2.0.X とか 2.2.Y みたいな感じになるはずです。 ここで X は 36 以上、Y は 11 以上とします。 もっと古いバージョンのやつだとか、いわゆる開発版カーネルだったら、 あなたにお任せです。 新しいカーネルをインストールするというのは古いものを直すのと同じぐらい 大変ですから、 バグいカーネルに対して必要なヒントの類は全部消しました。

下に載せる一連のコマンドで設定開始です。デバイスファイルのエントリを、 まだそれがないものに関して、/dev の下に作成します。

test `whoami` = 'root' || echo "You must be root to execute the commands."
cd /dev/
umask -S u=rwx,g=rwx,o-rwx
[ -f loop0 ] \
    || ./MAKEDEV loop \
    || for i in 0 1 2 3 4 5 6 7; do mknod loop$i b 7 $i; done
[ -f sg0 -o -f sga ] \
    || ./MAKEDEV sg \
    || for i in 0 1 2 3 4 5 6 7; do mknod sg$i  c 21 $i; done
リスト: デバイスファイルの作成

Linux においては、ハードウェアへのアクセスは一般にデバイスファイルを 通す形で実装されます。ですから、何よりも先に、これらのファイルが /dev ディレクトリにちゃんと存在することを確かめないといけません。 とはいうものの、なぜこのへんがデバイス・ファイルシステム (devfs) といった技術を通して自動化されていないのか、 その理由をずばり私に教えてくれた人はいません。 devfs は何年も前から利用可能でしたし、より安全 (!)、 デバイスの名称もはるかに明快になるし、 デバイスのエントリは自動的に /dev 以下に現れるというのに。 devfs は完璧な解ではないと論じていらっしゃるご高名な方々もいらっしゃいますが、 彼らはいい代案どころか、 devfs と比較になるような何かを出しているわけですらないし、 他に何かテスト済みのものが利用できるわけでもないのです。 devfs を使いはじめてみませんか。 そうすれば、上に述べたコマンド群はこの文書から取っちゃえるのです。 ( http://www.atnf.CSIRO.AU/~rgooch/linux/kernel-patches.html)

次に確認すべきことは、その Linux カーネルに 必要なドライバが付いているかどうかです。 以下のコマンドは、いま動作中の Linux カーネルについて、 ドライバの所在を確かめるために、いろんなファイルをチェックします。 通常は、``cdrecord -scanbus'' コマンドがきっかけとなって、 必要なドライバは自動的に読み込まれます。 その後もドライバがカーネルにないようなら、そのことが報告され、 insmod を使って、 モジュール化されたドライバ (モジュール) が手動で読み込まれます。

test `whoami` = 'root' || echo "You must be root to execute the commands."
cdrecord -scanbus > /dev/null
if ! (pidof kerneld || test -f "/proc/sys/kernel/modprobe"); then
    echo "Neither kerneld nor kmod are running to automatically load modules".
fi
report_no_autoload() {
    echo "Ensure the module $1 is loaded automatically next time."
}
if test ! -f "/proc/scsi/scsi"; then
    report_no_autoload scsi_mod  &&  insmod scsi_mod
fi
if ! grep "^........ sg_" /proc/ksyms > /dev/null; then
    report_no_autoload sg  &&  insmod sg
fi
if ! grep "^........ sr_" /proc/ksyms > /dev/null; then
    report_no_autoload sr_mod  &&  insmod sr_mod
fi
if ! grep "^........ loop_" /proc/ksyms > /dev/null; then
    report_no_autoload loop  &&  insmod loop
fi
if ! grep iso9660 /proc/filesystems > /dev/null; then
    report_no_autoload iso9660  &&  insmod iso9660
fi
echo "The following is only needed for IDE/ATAPI CD-writers."
if ! grep ide-scsi /proc/ide/drivers > /dev/null; then
    report_no_autoload ide-scsi  &&  insmod ide-scsi
fi
cdrecord -scanbus
リスト: ドライバのテスト

insmod が「モジュール・ファイルがない」と文句を言ってくる場合は、 次の節を読んでください。 テキストモード (コンソール) で使っている場合は、 モジュールがロードされると、画面に何かメッセージが表示されるはずです。 グラフィックスモード (X11, KDE, Gnome) なら、dmesg コマンドで メッセージを再び呼び出せます。

次に Linux システムを立上げたときにもモジュールが読み込まれるようにする方法は いくつかあります。

(1) 適切な insmod コマンドを起動シーケンスに組み込む
    (rc.local などの名前のシェル・スクリプト)
(2a) kerneld か kmod を動かして、
(2b) /etc/modules.conf にて設定する
    (より正確に言えば、上のデーモンから呼び出されるところの
     modprobe ユーティリティを設定する)

モジュールがロードされるようにするには、 /etc/modules といった設定ファイルのリストにそのモジュールを追加するか、 kerneld か kmod デーモンを走らせておきます。両方とも、カーネルが何か モジュールの必要性に気づいたときに必要なモジュールを自動的にロードして くれるデーモンです。

SCSI のライタを持っている人はこの章の残りは飛ばして結構です。 このあたりのハードウェアなら、大概の場合 cdrecord が検出してくれている はずです。だめだったら、設定状況について私にメールを送ってください。 そうすれば SCSI ライタについての章を改善できますので。

では、IDE/ATAPI の CD ライタをお持ちのかたの番です。前の節で書いたように、 互換ドライバ ide-scsi をロードしなければなりません。ただし、このドライバは、 他のドライバがすでに CD ライタに手を出していない場合に限り CD ライタに アクセスできます。言い換えれば、 普通の (互換ドライバでないほうの) IDE ドライバに、 その CD ライタを認識しないよう教え込んでおかなければいけません。 そうしておけば、ide-scsi ドライバが CD ライタを「にぎれる」わけです。

hda = IDE bus/connector 0 master device
hdb = IDE bus/connector 0 slave  device
hdc = IDE bus/connector 1 master device
hdd = IDE bus/connector 1 slave  device
表: IDE/ATAPI のデバイスファイル名

上の表は、デバイスファイルの名前と、そのデバイスの IDE バス上の位置と の関係を示しています。デバイスファイルの名前は、Linux カーネルのどの ドライバを通してお使いの CD ライタが使われるかを示しています。例えば hdb=ide-scsi など。こういった設定は、そのドライバがカーネルに静的に コンパイルされて入っている場合 (訳注: そのドライバをモジュールとして 動的にロードするのではない場合) は、lilo.conf や chos.conf に書きます。 おそらく、これがもっと一般的なケースでしょう。 カーネルに複数のパラメータを渡したい場合は、 (chos の設定例のように)、それらをスペースで区切ってください。 次に示すリスト 2 つの設定例には、 適切な append 行以外にもいろいろ書いてあります。 append と cmdline の行は、カーネル・イメージごとの設定であることに 注意してください。 (言い換えれば、設定ファイルの先頭に直に足してはだめです)

image=/boot/zImage-2.2.14
  label=Linux
  read-only
  append="hdb=ide-scsi"
Listing: Example configuration for lilo (/etc/lilo.conf)

linux "Linux 2.1.14" {
        image=/boot/zImage-2.0.37
        cmdline= root=/dev/hda5 readonly hdb=ide-scsi
}
リスト: chos の設定例 (/etc/chos.conf)

IDE/ATAPI CD-ROM のドライバがモジュールとしてロードされている場合なら、 上記の設定はあなたの環境に何ら影響を及ぼしませんが、次のリストにある options の行が入っていることを確認してください。リスト末尾の 3 行は、 必要となったモジュールの読み込みをより自動化するための設定として 一般にお奨めできるものです。

options ide-cd ignore=hdb            # ide-cd モジュールに、
                                     # hdb は無視するよう指定

alias scd0 sr_mod                    # scd0 にアクセスがあったら
                                     # sr_mod をロード

#pre-install ide-scsi modprobe imm   # 一部の ZIP ドライブの場合のみ
                                     # アンコメントせよ

pre-install sg     modprobe ide-scsi # sg の前に ide-scsi を読み込む
pre-install sr_mod modprobe ide-scsi # sr_mod の前に ide-scsi を読み込む
pre-install ide-scsi modprobe ide-cd # ide-scsi の前に ide-cd を読み込む
リスト: /etc/modules.conf の設定例

もし、マシンについている CD-ROM ドライブがその CD ライタだけなら、 CD-ROM へのアクセスも、デバイスファイル /dev/scdn (n は 0 から 8) を通して、そのライタを使って行わなければならない ことに留意してください。cdrom というシンボリックな名称で、その新しい デバイスファイルを指すように変更するのもいいでしょう。以下のリストは、 例えば scd0 に対してそうするためのコマンドです。

cd /dev && rm cdrom && ln -s scd0 cdrom
リスト: cdrom を scd0 を指すシンボリックな名前にする

CD ライタと CD-ROM ドライブが(物理的に)別のデバイスなのなら、cdrom の シンボリックリンクを変更してはいけません。

SCSI CD ライタに関する特別な注意

お持ちのライタが SCSI ホストアダプタ・カードの BIOS で認識されることを確認してください。 SCSI ホストアダプタというものは、電源投入後に SCSI バスをスキャンして、 自分が発見した、バスに接続されているデバイスをすべて報告します。 報告には、デバイスの SCSI ID と製品名が入っています。 お使いの CD ライタがこの報告内容に含まれていない場合は、 何をやっても意味はありません。

SCSI デバイスをパラレル・ポートを介して接続しようと思っているなら、 (パラレル・ポートに接続する IDE ドライブの話とごっちゃにしないこと) 特別なアクティブ・ケーブルとカーネル・ドライバが必要です。 詳しくは http://www.torque.net/parport/parscsi.html を読んでください。

パラレル・ポート接続の CD ライタに関する特別な注意

これについてはさっぱりわかりません。ごめんなさい。 http://www.torque.net/parport/paride.html を見るか、 ローカルファイル /usr/src/linux/Documentation/paride.txt を見てください。

ないカーネル・モジュールをコンパイルする (任意)

ここまでの設定に関する説明で、 お持ちのハードがちゃんと認識されて設定できているのなら、 この章を読む必要はありません。

Linux カーネルはさまざまな機能のためのドライバを装備しています。 ドライバはカーネルイメージに静的に組み込むか、動的ロードできる モジュールとして組み込むことができます。Linux システムを動かすために 本質的でないドライバは後者の方法がいいでしょう。なぜならカーネルが 小さくなり、したがって高速になるからです。しかし、一部のドライバは システムを立ち上げるためにどうしても必要であり、モジュールとして組み込むべき ではありません。例えば、システムが IDE ハードディスク上にある場合には、 IDE ハードディスク用のドライバはカーネル内になければならず、モジュール にはできません。

CD ライタには異なる 3 種類のものがあります。すなわち SCSI, IDE/ATAPI のライタと、パラレルポート経由で動作する外付けライタです。 それぞれのハードウェアについてLinux カーネルをどのように 設定すればよいかを表に示します。表の最初のカラムはカーネル設定メニュー でのセクションです。ここに設定があると思います。2 番目のカラムは カーネルの機能の説明です(これもカーネル設定メニューからの引用です)。 3 番目のカラムは、できるモジュールの名前です。SCSI, IDE, PP という カラムは、対応するハードウェアにとって必要なオプションです (PP はパラレルポートのことです)。

セクション 説明                    モジュール SCSI  IDE   PP
------------------------------------------------------------
BLOCK  Enhanced IDE/MFM/RLL...                     Y      
BLOCK  IDE/ATAPI CDROM             ide-cd          M     
BLOCK  SCSI emulation support      ide-scsi        M      
BLOCK  Loopback device             loop       M    M     M

PARIDE Parallel port IDE device    paride               Y/M
PARIDE Parallel port ATAPI CD-ROMs                       M
PARIDE Parallel port generic ATAPI                       M
PARIDE (select a low-level driver)                       Y

SCSI   SCSI support                scsi_mod  Y/M  Y/M    
SCSI   SCSI CD-ROM support         sr_mod    Y/M  Y/M     
SCSI     Enable vendor-specific               Y    Y      
SCSI   SCSI generic support        sg        Y/M  Y/M     
SCSI   (select a low-level driver)            Y

FS     ISO 9660 CDROM filesystem   iso9660   Y/M  Y/M   Y/M
FS     Microsoft Joliet cdrom...   joliet     Y    Y     Y
表: 各種ライタ用のドライバ選択

Y は 'yes' を表し、カーネルに組み込むべきであることを示します。 M は 'module (モジュール)' を表し、その機能はモジュールとしてコンパイル すべき、あるいはコンパイルしなければならないことを示します。Y/M ならば どちらかを選ぶことができます(問題が起こる可能性が小さい方を選びましょう)。 空の部分は変更する必要がないことを表します。 このような設定は変えないほうが、作ったカーネルが動作する可能性が高いでしょう (前に動いた実績があれば…)。特に、SCSI デバイスと ATAPI デバイスが混在 している環境では、ほとんどのものをモジュールとして作成する方がよいでしょう。

ループバックデバイスはコンパイルしなくてもかまいません。このデバイスを 使うと、イメージをメディアに書き込む前にテストすることができます。 CD-ROM を読み取りたければ、ISO 9660 ファイル システムをサポートする必要があります。このドライバは自動的に RockRidge 拡張を含みます。Microsoft Joliet 拡張は、明示的に ISO 9660 ファイルシステムに追加しなければなりません。いずれの場合にも、 ハードウェアに対応した低レベルドライバが必要です。低レベルドライバとは、 直接ハードウェアと通信するドライバのことです。SCSI やパラレルポートの 場合には、たくさんの低レベルドライバがあります。

できた Linux カーネルをインストールする方法については、この HOWTO の 範囲から外れます。お使いの Linux ディストリビューションの説明書に あたってください。

RedHat Linux のユーザなら、``Ramdisk support'' と ``Initial ramdisk'' 機能がコンパイルされて含まれるようにしないといけないことを押えておいて ください。さらに、その新しいモジュールで新しい ramdisk を生成しないと いけません。こんなふうにコマンドを実行します: ``mkinitrd --preload ide-cd initrd-2.2.14.img 2.2.14''

自分自身のマシンをお使いであれば、ディストリビューションに付属している 「Linux カーネルソース」というパッケージをインストールするだけです。 その後で以下のコマンドを実行します:

cd /usr/src/linux
make menuconfig  # 説明とメニューに従います
make dep
make zImage      # または "make bzImage"
# 先に進む前にフロッピーディスクを挿入します
dd if=arch/i386/boot/zImage of=/dev/fd0
make modules
make modules_install
表: 起動可能なフロッピーディスクの作成

これによって起動可能なフロッピーディスクができます。この作業全体が本当 にわからないのであれば、システムをぐちゃぐちゃにしてしまう前に Kernel HOWTO といった他の文書を読むか、友達の助けを求めるべきでしょう。 カーネルがシステムの中心部分であることを忘れてはいけません。

カーネルが許すならば、IDE/ATAPI CD-ROM 用のドライバをモジュールとして コンパイルします。それができなければこれを無効(N)にして、SCSI CD-ROM 用のドライバを使います。バージョン 2.2 系列のカーネルでは、 同じ物理デバイスで IDE と SCSI のドライバを同時に使うことは できなくなりました (まだ 2.0.36 を使っているなら後の説明を読んでください)。

2.2 CD-R を焼くためのユーザソフトウェアの入手

CD-ROM を作成するためのツールに関する詳しい調査の結果が http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdb.html にあります。

コマンドライン用ユーティリティ

CD-R のイメージ (データ CD-ROM の場合のみ) を生成するためには、 以下のパッケージのいずれかが必要です:

ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ (mkisofs)

ftp://ftp.ge.ucl.ac.uk/pub/mkhfs (mkhybrid)

イメージを CD-R に焼くためには、以下のパッケージのいずれかが必要です:

ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ (cdrecord)

http://www.ping.de/sites/daneb/cdrdao.html (cdrdao)

http://www.munich-vision.de/vcd/ (mkvcdfs)

古いmkisofs のオンラインマニュアルにはバージョン 1.5 の cdwrite が必要だと書かれていますが、これを信じてはいけません。 黙って cdrecord を使ってください。それで大丈夫です。 新しいバージョンの cdrecord には改良版の mkisofs が付属していることと、 他では見つからない追加ツールがいくつか misc ディレクトリ(readcd, isosize)にあることに注意してください。

GUI (無くてもかまいません)

Linux においては、フロントエンドは本当にフロントエンドです。つまり、 フロントエンドだけあってもだめで、コマンドライン用のユーティリティを インストールしなければなりません。でも、 フロントエンドは使う時の見栄えをよくしてくれます。

X-CD-Roast は Linux で CD を簡単に作成するためのプログラム パッケージです。これは cdrecordmkisofs のような コマンドライン用のツールと組み合わせて用いるもので、 使いやすい GUI を提供します。

http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e_overview.html

BurnIT は cdrecord の Java 版フロントエンドであり、 cdda2wav-0.95 を加えれば UNIX 環境で CD を焼くための完全な環境が作れます。これは

http://sunsite.auc.dk/BurnIT/

から入手できます。

CD-Tux は mkisofs と cdrecord のための、 キャラクタベースのフロントエンドです。 「CD に対してできる操作ならなんでも可能な使いやすい環境を、 あの素晴らし(く..もないか) NCURSES ライブラリを使って、 フルカラーでつくり出しています。実行バイナリは 75K に満たないサイズです。

http://www.datadictator.co.za/cdtux/


次のページ 前のページ 目次へ