The Linux Kernel HOWTO Brian Ward, bri@cs.uchicago.edu v1.0, 5 June 1999 嶋崎@梨大 と JF Project 13 July 1999 この文書は Intel x86 ベースのシステム向けのカーネルの設定・コンパイ ル・アップグレード・トラブルシューティングに関する詳細な解説です.[] 内は訳注です. ______________________________________________________________________ 目次 1. はじめに 1.1 まずこれを読め!(そういうこと) 1.2 記述スタイル 2. 重要な質問とそれに対する解答 2.1 とりあえずカーネルは何をするの? 2.2 カーネルをアップグレードするといいことがあるの? 2.3 新しいカーネルはどんなハードウェアをサポートしているの? 2.4 gcc と libc のバージョンはいくつじゃないとだめなの? 2.5 ローダブルモジュールってなに? 2.6 ディスクの空きスペースはどれくらいいるの? 2.7 どれくらい時間が掛かるの? 3. カーネル設定の実際 3.1 ソースの入手 3.2 ソースの展開 3.3 カーネルの設定 3.3.1 Kernel math emulation [カーネルの数値演算エミュレーション] (Processor type and features) 3.3.2 Normal (MFM/RLL) disk and IDE disk/cdrom support [通常(MFM/RLL)のディスクと IDE ディスク/CDROM サポート] (Block Devices) 3.3.3 Networking support [ネットワークのサポート](General Setup) 3.3.4 System V IPC (General Setup) 3.3.5 Processor family [CPU のタイプ](Processor type and features) 3.3.6 SCSI support [SCSI のサポート] 3.3.7 Network device support [ネットワークデバイスのサポート] 3.3.8 Filesystems [ファイルシステム] 3.3.8.1 でも私はどのファイルシステムを使ったらいいの? 3.3.9 Character devices [キャラクタデバイス] 3.3.10 Sound [サウンドカード] 3.3.11 他の設定オプション 3.3.12 Kernel hacking [カーネルハッキング] 3.4 では何を?(Makefile) 4. カーネルのコンパイル 4.1 不要なファイルの削除と依存ファイルの確認 4.2 コンパイル 4.3 他の``make''できるもの 4.4 カーネルのインストール 5. カーネルへのパッチあて 5.1 パッチをあてる 5.2 何か変だ 5.3 .origファイルの消去 5.4 他のパッチ 6. 追加パッケージ 6.1 kbd 6.2 util-linux 6.3 hdparm 6.4 gpm 7. いくつかの落とし穴 7.1 make clean 7.2 巨大あるいは遅いカーネル 7.3 パラレルポートが動かない/プリンタが動かない 7.4 カーネルをコンパイルできない 7.5 新しいバージョンのカーネルでブートしていないようだ 7.6 LILO を実行し忘れた,あるいはまったくブートできない 7.7 `warning: bdflush not running' という警告が出る 7.8 IDE/ATAPI CD-ROM ドライブが動かない 7.9 廃れてしまった経路要求に対しておかしな警告が出る 7.10 1.2.0 でファイアウォールが動作しない 7.11 ``Not a compressed kernel Image file(カーネルイメージファイルが圧縮されていない)'' 7.12 1.3.x にアップデートした後コンソール端末に問題が出る 7.13 カーネルアップグレードの後コンパイルできなくなったようだ 7.14 上限値を大きくする 8. バージョン 2.0.x, 2.2.x へのアップグレードのために 9. Modules(モジュール) 9.1 モジュール用ユーティリティのインストール 9.2 カーネルとともに配布されるモジュール 10. ちょっとしたアイディア 10.1 make あるいは patch コマンドの出力をリダイレクトする 10.2 暫定的なカーネルのインストール 10.3 カーネルのアップデート 11. 他の有用な関連する HOWTO 12. その他もろもろ 12.1 著者 12.2 今後の方針 12.3 貢献者 12.4 著作権表示,使用許諾,およびその他の事柄 12.5 日本語訳について ______________________________________________________________________ 1. はじめに あなたはこの文書を読む必要があるでしょうか? 以下のような状態にあるか どうか考えてみてください: o 「なんてこった! この wizzo-46.5.6 パッケージにはカーネル 2.8.193 が 必要だ.だけど俺はまだ 1.0.9 しか持ってないぜ!」 o 手に入れた新しいカーネルの 1 つにデバイスドライバーが存在している o カーネルをコンパイルするにはどうしたらいいか,まったくわからない o 「READMEに書いてあることだけ知ってればいいのか?」 o 来て見て試した.しかし動かない o 私にカーネルのインストールを手伝ってくれと言ってくる連中にあてがう ものが欲しい 1.1. まずこれを読め!(そういうこと) この文書の中におけるいくつかの例では,あなたが GNU tar, find, xargs を 所有していることを前提にしています.これらは極めて標準的ですので,問題 を起こすことはまずないでしょう.またあなたが自分のシステムのファイルシ ステムの構造を把握していることも前提にしています.もし把握できていない のなら,通常のシステム動作の最中に mount コマンドが出力したメッセージ を書き留めておくことが必須です(あるいは,読むことができるのな ら/etc/fstabのリストが必要です).この情報は重要で,ディスクのパーティ ションを切り直したり,追加したり,システムをインストールしなおしたり, その他もろもろをしない限りは変化しません. 最新の「製品版」カーネルバージョンはこの文書を書いている時点で 2.2.9 ですので,この文書ではこれを参照したり例として挙げています.この文書は できるだけバージョンに依存しないようにしていますが,カーネルは常に開発 されています.ですから新しいリリースを手に入れたら,記述と異なる点がど うしてもあることでしょう.繰り返しになりますが,このことが大きな問題を 引き起こすことはありませんが,多少混乱することがあるかもしれません. Linux のカーネルソースのバージョンには「製品版」と「開発版」の 2 つが あります.製品版のリリースはマイナー番号[2つ目の数字]が偶数のリリー スです.すなわち 1.2.x は製品版,2.0.x も製品版,2.2.x も同様に製品版 です.これらのカーネルはリリース時においてもっとも安定,かつバグのない バージョンと考えられます.開発版カーネル(2.1.x, 2.3.x など)はテスト用 のカーネルであり,新しくてたぶん大変バグの多かろうカーネルをテストした い人々のためのものです.十分注意してください. 1.2. 記述スタイル 「ABCabc」のように見えるテキストは,画面上に現れる文字列やファイル名, キーボードから入力するコマンドやそのオプションなどを表しています(もし この文章をプレーンテキスト形式で読んでいるのなら,他とは区別がつきませ ん).コマンドやその他の入力すべき文字列はよく ` 'で括ります.でも,こ れは以下のような昔からよくある句読点の問題を引き起こします:もしコマン ドなどがクォートで括られた文の最後にくると,人によってはコマンドに `.' をつけてしまいます.というのはアメリカ流の引用では引用符の内側にピリオ ドを置くからです.常識では(残念ながら,ここでいう常識というのは,いわ ゆるアメリカ流の引用法を想定しています)句読点をまず外すはずですが,た いていの人はすぐに忘れてしまいます.だから私はそのような場合にはピリオ ドを引用符の外側に出します.言い換えれば,あなたが ``make config'' と タイプしなければならない場合は, `make config.'ではなく `make config' と書きます.[本和訳版では以上の記述は関係ありませんね.] 2. 重要な質問とそれに対する解答 2.1. とりあえずカーネルは何をするの? Unix のカーネルは,プログラムとハードウェアの仲介者として働きます.ま ず,すべての動作中のプログラム(プロセス)のメモリー管理(とそのための調 整)を行いますし,またそれらのプロセスが公平に(お好みとあらば不公平に) プロセッサのサイクルを共有できるようにします.さらに,プログラムがハー ドウェアと対話するための素晴らしい,またかなり汎用性のあるインターフェ ースを提供します. カーネルにはこれ以外にも機能がありますが,以上の基本的な機能だけは知っ ておくべきでしょう. 2.2. カーネルをアップグレードするといいことがあるの? 新しいカーネルを使うと,たいていはより多くのハードウェアが使えるように なります(すなわち,より多くのデバイスドライバがついてくる)し,プロセス 管理もよくなりますし,古いバージョンより速く動作しますし,古いバージョ ンより安定しているかもしれませんし,また古いバージョンのくだらないバグ が修正されています.ほとんどの人は,新しいデバイスドライバが欲しかった り,バグを修正したいのでカーネルをアップグレードするのです. 2.3. 新しいカーネルはどんなハードウェアをサポートしているの? Hardware-HOWTO を見てください.その代わりに,Linux のソースに入ってい るファイル `config.in'を見てもいいし,`make config' するときにもわかり ます.これで標準のカーネル配付でサポートされるすべてのハードウェアを知 ることができますが,これが Linux がサポートするハードウェアのすべてと いうわけではありません.多くの共通のデバイスドライバ (PCMCIA ドライバ や一部のテープドライバなど)は標準カーネルとは別々に管理・配付されるロ ーダブルモジュールです. 2.4. gcc と libc のバージョンはいくつじゃないとだめなの? Linus は Linux のソースに含まれている README ファイルに書かれているバ ージョンの gcc を推奨しています.もしこのバージョンを持っていなかった ら,推奨されているバージョンの gcc のドキュメントに,libc をアップグレ ードする必要があるかどうかが書かれています.アップグレード作業はそんな に難しくはありませんが,説明にしたがうことが大切です. 2.5. ローダブルモジュールってなに? ローダブルモジュールとは,カーネルには直接リンクされない(カーネル本体 には含まれない)カーネルコードのかけらです.個別にコンパイルし,ほとん どいつでも動作中のカーネルに組み込んだり取り外したりすることができま す.柔軟性ゆえ,特定のカーネル機能を実現するのに,好んで用いられていま す.よく使われているデバイスドライバの多く,例えば PCMCIA ドライバや QIC-80/40 テープドライバは,ローダブルモジュールです. 2.6. ディスクの空きスペースはどれくらいいるの? あなたのシステム設定しだいです.まず,圧縮した Linuxの ソースはバー ジョン 2.2.9 で 14 メガバイト弱というところです.ほとんどのサイトでは 展開した状態のファイルも置いています.展開してから適切な設定で構築を行 うと,さらに 67 MB が必要になります. 2.7. どれくらい時間が掛かるの? 新型のマシンでコンパイルすれば,古いマシンよりも劇的に早く終わります. AMD K6-2/300 に高速なディスクを付ければ,2.2.x のカーネルは約 4 分でコ ンパイルできます.古い Pentium, 486, 386 でカーネルをコンパイルしよう と思っていたら,時間単位,1 日単位で待つ覚悟をしてください…. これが嫌であり,かつ近くにたまたま高速なマシンがあるならば,高速なマシ ンでコンパイルして(適切なパラメータを指定していることや,ユーティリ ティが新しいこと等を想定しています),そのカーネルイメージを遅いマシン に転送するという手もあります. 3. カーネル設定の実際 3.1. ソースの入手 ftp.kernel.org の /pub/linux/kernel/vx.y から anonymous(匿名) FTP でソ ースを入手することができます.ここで x.y は前に説明したようなバージョ ンであり,奇数で終わるものは開発リリースなので不安定かもしれません.た いていは linux-x.y.z.tar.gz (x.y.z がバージョン)という名前が付けられて います.普通はこのサイトには拡張子 .bz2 が付いているファイルもありま す.これは bzip2 で圧縮されているファイルです(このようなファイルはサイ ズが小さく,転送時間を節約することができます). できるだけ ftp.xx.kernel.org (xx は国コード)を使うとよいでしょう.例え ばオーストリアでは ftp.at.kernel.org, アメリカでは ftp.us.kernel.org となります. 3.2. ソースの展開 root としてログインするか suして root になり,/usr/srcに cd します.最 初 Linux をインストールした際にカーネルのソースをインストールしていれ ば(普通はそうでしょう), linux というディレクトリがあるはずです.そこ には古いソースツリー全体が含まれています.ディスクの容量が十分にあり, かつ安全策を取るならこのディレクトリは残しておきましょう.今現在のシス テムのバージョンを調べて,このバージョンにあわせてディレクトリ名を変え ておくとよいでしょう.`uname -r' で現在のカーネルバージョンを表示でき ます.ですから,`uname -r' で `1.0.9' と表示されたら,`linux' を (`mv'で) `linux-1.2.8' というファイル名に変えます.まあ,ちょっと向こ う見ずのあなたは,ディレクトリごと消してしまいましょう.いずれにせよ, ソースコードを展開する前に /usr/src に `linux' というディレクトリが存 在しないことを確認してください. では,/usr/src で `tar zxpvf linux-x.y.z.tar.gz' としてソースを展開し ます(ファイル名の最後が単に .tar となっていて .gz がついていない場合は `tar xpvf linux-x.y.z.tar' で展開できます.展開中にはソースの中身が画 面に表示されていきます.展開が終了すると, /usr/src に新しい `linux' ディレクトリができています.linux に cd し,README ファイルを読んでく ださい.`INSTALLING the kernel'という題のついた章があります.説明に適 宜したがって,必要なシンボリックリンクを張ったり,古い.oファイルを消去 するなどしてください. ファイルの拡張子が .bz2 であり,bzip2 プログラム(詳しくは http://www.muraroa.demon.co.uk/ を参照)をお持ちであれば以下のコマンド で展開してください: bz2cat linux-x.y.z.tar.bz2 | tar xvf - 3.3. カーネルの設定 注: このうちいくつかは Linus の README ファイルの繰り返しだったり説明 だったりします. /usr/src/linux ディレクトリで `make config' コマンドを実行すると,設定 スクリプトが起動し,色々な質問をしてきます.このスクリプトは bash を必 要とするので,bash が /bin/bash, /bin/sh, $BASH のいずれかにあることを 確認してください. しかし,`make config' よりもずっといいものがいくつかあります.それらの 方がずっと簡単で使いやすいでしょう.`make menuconfig' がたぶん一番使わ れています.どれを使うか決める時には,そのインターフェースを使ってみる のが一番です.というのも,考えるよりも早く答えが出るからです.「X を 使っている」人は,`make xconfig' を試すとよいでしょう.ただし Tk が必 要です(`click-o-rama' - Nat). `make menuconfig' は,(n)curses を持っ ており,テキストベースのメニューが好きな人にお勧めです.これらのインタ フェースにはかなりはっきりとした利点があります: 設定の時にしくじって選 択を誤った時に,簡単に前に戻って直すことができます. `make menuconfig' と `make xconfig' では,設定オプションは階層的に表示 されます. これで質問に答える準備ができました.普通は `y'(はい)あるいは `n'(いい え)で答えていきます.デバイスドライバにはたいてい `m' オプションがあり ます.これは ``モジュール''を意味しており,カーネルのコンパイル時にコ ンパイルは行なわれますが,カーネルに直接組み込まれるわけではなく,ロー ド可能なモジュールとしてコンパイルされるのです.この `m' をもっとふざ けて説明しますと,これは ``maybe'' (多分)です.簡単だったりあまり重要 でないオプションについては,ここでは触れません.「他の設定オプション」 の章にいくつかのオプションの簡単な説明があります.`make menuconfig' を 使っている場合は,スペースバーによって選択状態が変わります. 2.0.x 以降のカーネルでは,`?' オプションがあります.`?' キーを押すと, 設定パラメータの簡単な説明が表示されます.この情報はたぶん最新でしょ う.以下では重要な機能いくつかについて,その機能がある階層と簡単な解説 を示します. 3.3.1. Kernel math emulation [カーネルの数値演算エミュレーション] (Processor type and features) 数値演算コプロセッサがない場合(素の 386 や 486SX の場合),この項目には `y' と答えなければいけません.コプロセッサがあるのに `y' と答えても気 にする必要はありません -- ちゃんとコプロセッサが使用され,エミュレー ションは行なわれません.割と新しいマシンだったら答えは `n' でしょう が,間違って `y' と答えても気にすることはありません.必要無ければ,こ の機能は使われません. 3.3.2. Normal (MFM/RLL) disk and IDE disk/cdrom support [通 常(MFM/RLL)のディスクと IDE ディスク/CDROM サポート] (Block Devices) この機能はサポートする必要があるでしょう.ほとんどの人が持っている,PC 標準のハードディスクをカーネルがサポートするということですから.このド ライバには SCSI ドライバは含まれていません.設定の後の方で出てきます. 続いて ``old disk-only'' と ``new IDE'' のドライバについて聞かれます. このうちどちらかを選択してください.大きな違いは,古いドライバは 1 つ のインターフェース上の 2 つのディスクのみをサポートしますが,新しい方 はセカンダリインターフェースと IDE/ATAPI の CD-ROM をサポートします. 新しいドライバは古い方よりも 4 kB 大きいですが多分「改善」されていま す.すなわち,含まれているバグの数は別にして,特にハードウェアが新しい (EIDE タイプ)場合にはディスクの性能が向上します. 3.3.3. Networking support [ネットワークのサポート](General Setup) インターネットのようなネットワークに接続されていたり,SLIP や PPP, term などを使ってインターネットへのダイアルアップ接続を行うのであれば `y' と答えます.しかし,多くのソフトウェアパッケージ(例えば X ウィンド ウシステム[日本語変換システムも])は,たとえマシンがネットワークに接続 されていなくてもネットワークサポートを必要とします.ですから `y' と答 えなければなりません.後で TCP/IP ネットワークが必要かどうか質問されま すが,よくわからなければここでも `y' と答えておいてください. 3.3.4. System V IPC (General Setup) IPC(Inter-Process Communication, プロセス間通信)のもっとも的確な定義の 一つは Perl book の用語一覧にあります.おどろくほどのことではないです が,Perlのプログラマーの中にははプロセス間で会話をさせるために IPC を 利用する人がいますし,他にもこれを利用しているパッケージがありま す(もっとも有名なのは DOOM でしょう[漢字コンソール KON もこれを利用し ています]).ですから,よくわからない場合はこれに `n' と答えてはいけま せん. 3.3.5. Processor family [CPU のタイプ](Processor type and features) (古いカーネルでは: Use -m486 flag for 486-specific optimizations) 従来は,このオプションでは特定の CPU 用に最適化したコンパイルを行なっ ていました; カーネルは他の(最適化した以外の)CPU でも良好に動作します が,カーネルは少々大きくなりました.しかし新しいカーネルでは,このこと は必ずしも当てはまりません.ですから,カーネルをコンパイルするマシンの CPU を必ず入力しなければなりません.``386'' 用カーネルならばすべてのマ シンで動作するでしょう. 3.3.6. SCSI support [SCSI のサポート] SCSI デバイスを持っていたら `y' と答えてください.CD-ROM やディスクの サポート,およびどの SCSI アダプタを使用するか等がさらに質問されます. 詳細は SCSI-HOWTO を参照してください. 3.3.7. Network device support [ネットワークデバイスのサポート] ネットワークカードを持っていたら,あるいは SLIP,PPP やパラレルポート アダプタを使ってインターネットに接続するのなら `y' と答えてください. 使用するカードやプロトコルについての質問があります. 3.3.8. Filesystems [ファイルシステム] 設定スクリプトは,以下のファイルシステムをサポートするかどうかを聞いて きます: Standard (minix) - 最近の Linux は minix ファイルシステムを作成しませ んし,ユーザも普通は使用しません.しかし,使用するように設定しておいた 方がよいでしょう.なぜなら「復旧ディスク」のプログラムにはこれを使うも のがありますし,多くのフロッピーが minix ファイルシステムを使っている からです.というのも,minix ファイルシステムはフロッピーでの使用に適し ているからです. Second extended - これは Linux 標準のファイルシステムです.ほぼ確実に このファイルシステムがあるはずなので,`y'と答えなければなりません. msdos - ハードディスク上の MS-DOS パーティションを使用したり,MS-DOS フォーマットのフロッピーディスクをマウントするなら `y' と答えてくださ い. 他のオペレーティングシステムのファイルシステムもいくつか使用できます. /proc - (多分ベル研のアイディアのパクリだと思います) ディスク上に proc というファイルシステムが作られるわけではありません.これはカーネルとプ ロセスのインターフェースとなるファイルシステムです.多くのプロセスリス ト表示プログラム(`ps' など)がこれを使用します. `cat /proc/meminfo' や `cat /proc/devices' などを後で試してみてください./proc/self/fd(他のシ ステムでは /dev/fdとして知られる)を I/O に使用するシェルもあります(特 に rc).ほとんどの場合 `y' と答えなければなりません.Linux の重要なツ ールの多くがこのファイルシステムに依存しています. NFS - ネットワークに接続されていて,他のシステム上にあるファイルシステ ムを使用するなら `y' と答えてください. ISO9660 - ほとんどの CD-ROM が使用しています.CD-ROM ドライブを持って いて,これを Linux でも使うつもりなら `y' と答えてください. 3.3.8.1. でも私はどのファイルシステムを使ったらいいの? `mount'とタイプしてみましょう.出力はこんな感じです: blah# mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) none on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) それぞれの行を見てください;`type' の次の単語がファイルシステムの種類 です.この例では / と /usr のファイルシステムが second extended です. 私は /proc も使用しています. msdos ファイルシステムを利用してマウント したフロッピーディスクもあります. 現在 /proc を利用できるなら,`cat /proc/filesystems' とタイプしてみて ください.カーネルが現在使用可能なファイルシステムが表示されます. あんまり使わない,それほど重要でないファイルシステムを使用できるように 設定すると,カーネルが不必要に大きくなってしまいます.対処法については モジュールに関する章を,また大きくなったカーネルが好まれない理由につい ては「落とし穴」の章を参照してください. 3.3.9. Character devices [キャラクタデバイス] ここではプリンタ(パラレルプリンタのことです),バスマウス,PS/2マウス (多くのノートパソコンは内蔵ポインティングデバイスで PS/2 プロトコルを 使用しています),いくつかのテープドライブ,その他のキャラクタデバイス の設定ができます.必要なものについて `y' と答えてください. 注:gpm は X ウィンドウシステムでなく仮想コンソール間で,マウスを用い たカット&ペーストを行うためのプログラムです.シリアルマウスを使用して いるなら,容易に X と共存できるので便利です.しかし他のマウスでは ちょっと面倒です.[gpm は -R オプションをつければ X と共存できます. また,真鍋さん multimouse はノートパソコンユーザーの方にお薦めです.] 3.3.10. Sound [サウンドカード] どうしてもbiffが吠えるのを聞きたい[biff コマンドの名前の由来は,郵便 屋さんが来ると吠える犬です]のなら `y' と答えてください.あとで別の設 定プログラムがサウンドボードに関する質問をして設定します.(サウンドカ ードの設定に関する注:設定プログラムがドライバをフルインストールするか どうかを聞いてきたら `n' と答え,必要と思われる機能のみを選択できま す.カーネルの使用するメモリを節約できます.) 本気でサウンドカードをサポートするなら, http://www.linux.org.uk/OSS/ にあるフリーのドライバと, http://www.opensound.com/ にある商用の Open Sound System を両方調べるとよいでしょう. 3.3.11. 他の設定オプション 設定オプションは頻繁に変化しますし,自明だったりしますので(例えば 3Com 3C509 イーサネットカードのためのデバイスドライバをコンパイルする等) す べてを紹介するわけではありません. Axel Boldt さ ん(axel@uni-paderborn.de)がまとめている,全オプションのわかりやすいリ スト(設定スクリプトへの組込み方も)とそのオンラインヘルプがありま す.Linux 2.0 では,これはカーネルのソースツリーに入っている Documentation/Configure.help という大きなファイルです. 3.3.12. Kernel hacking [カーネルハッキング] >Linus の README から引用します: 「カーネルハッキング」を設定するとカーネルが大きくなったり遅くなったり (あるいはその両方)しますし,カーネルの問題(kmalloc())を見つけるため悪 いコードを積極的に中断しようとするルーチンが組み込まれますので,カーネ ルが不安定になったりします.ですから「製品版」のカーネルでは `n' と答 えておくべきでしょう. 3.4. では何を?(Makefile) make config が終ると,カーネルの設定が終ったというメッセージが表示さ れ,また「追加設定のためトップレベルの Makefile をチェックしろ」という ようなメッセージが表示されます. では,Makefile を見てください.多分変更する必要はないでしょうが,見て も減るものではありません.新しいカーネルができたら,そのオプションを `rdev' コマンドで変更することもできます.ファイルを見たときに無くなっ ていると思っても,心配する必要はありません. 4. カーネルのコンパイル 4.1. 不要なファイルの削除と依存ファイルの確認 設定スクリプトの実行が終了すると,`make dep' と(たぶん, `make clean' を実行するように表示されます.ですから `make dep'してください.これは インクルードファイルなどの依存関係が全て正しいかどうかを確認します.マ シンがよほど遅くないかぎり,これにはそんなに時間が掛かりません.これが 終ったら,古いバージョンのカーネルの場合には `make clean' を行います. これはすべてのオブジェクトファイルと,以前のバージョンに関係する古い ファイルを消去します.いずれにせよ,このステップを忘れないようにしてく ださい. 4.2. コンパイル 依存関係のチェック(`make dep')と不要なファイルの削除 (`make clean')が 終了すると,`make bzImage' もしくは `make bzdisk' を実行することができ ます(これは時間がかかるところです).`make bzImage'はカーネルをコンパイ ルし, `bzImage' と呼ばれるファイルを arch/i386/boot に置きます(他の ファイルもあります).これが圧縮された新しいカーネルです.`make bzdisk' は同じことをしますが,``A:''ドライブに入れたフロッピーディスクに新しい bzImage を書き込みます.`bzdisk' は新しいカーネルの動作チェックに便利 です; もしフロッピーが爆発したり(あるいは単にうまく動かない場合)には, フロッピーを取り外せば古いカーネルでブートします.また,カーネルを誤っ て消してしまったときなど(あるいはそれに類する危機的状態)にもこのフロッ ピーは便利です.さらには,ディスクの中身を別のディスクに移したときに も,新しいシステムをインストールするのに使用できます (さあこんなにお得 でお客さん,いくらなら買います!?[うまく訳せません]). 割と最近のカーネルはすべて圧縮されてますので,名前の先頭に `bz' が付い ています.圧縮されたカーネルは,実行時に自動的に展開されます. 古いカーネルには bzImage を作るオプションがありません.これは単に zImage となります.このオプションもまだ利用可能ですが,新しいカーネル のコードのサイズを考えると,bzImage の構築はほとんど必須でしょう.なぜ なら,古い方法では大きすぎるカーネルは扱えないからです. 4.3. 他の``make''できるもの `make mrproper' はさらに徹底的なファイル削除((`make clean')) を行いま す.この作業が必要なこともあるので,パッチを当てるごとに実行するとよい でしょう.`make mrproper'は設定ファイルも消去してしまうでしょう.です から,設定ファイル(.config)が必要でしたら,そのバックアップを作ってお いてください. `make oldconfig' は古い設定ファイルにしたがってカーネルを構築しようと します; make config' のプロセスは飛ばします.もし,今まで一度もカーネ ルをコンパイルしてなかったり,古い設定ファイルがないなら,これを実行し てはいけません.デフォルトの設定を変更したいことがほとんどでしょうか ら. `make modules' の説明については,モジュールに関する節を参照してくださ い. 4.4. カーネルのインストール 設定通りの動作をするようなカーネルができたら,インストールしましょう. ほとんどの人は LILO(Linux Loader) を使用します[訳者は,LILO でなく Loadlin をお勧めします.LILO はうまくいかないと,徹底的にうまくいかな いような気がします].`make bzlilo' でカーネルをインストールし,そこで LILO を実行すれば,ブートの準備がすべてできます.しかしこれは LILO が 以下のように設定されている場合だけです:カーネルが /vmlinuz で,liloが /sbin にあり,LILO の設定ファイル(/etc/lilo.conf)がこれに合致している 場合です. そうでなければ,LILO を直接使用せねばなりません.LILO はインストールや 取扱いの容易なパッケージですが,設定ファイルで戸惑う人が多いようです. 設定ファイルを見てください(古いバージョンでは /etc/lilo/config,新しい ものでは /etc/lilo.conf です).そして現在の設定がどうなっているか見て ください.このような感じになっていると思います. image = /vmlinuz label = Linux root = /dev/hda1 ... `image =' には現在インストールされているカーネルが設定されています.ほ とんどの人は /vmlinuz を使用します. `label' は LILO がどのカーネルあ るいは OS をブートするかを判断するために使われ,`root' は立ち上げる OS の / です.古いカーネルのバックアップを作成し,新しい bzImage をコピー します(`/vmlinuz' を使用するなら `cp bzImage /vmlinuz' とします).それ から,新しいシステム上で再度 LILO を実行します( `lilo' を実行するだけ です).しかし LILO が古い場合には, /etc/lilo/install あるいは /etc/lilo/lilo -C /etc/lilo/config を実行する必要があるかもしれませ ん. LILO の設定についてもっと知りたい,あるいは LILO を持っていないのな ら,お好きな ftp サイトから最新のバージョンを入手し,説明にしたがって インストールしてください. ハードディスクから古いカーネルの 1 つをブートするには(新しいカーネルが どうにもならなくなったときの対処法の一つです),LILO の設定ファイルの `image = xxx' とそれ以降の行をファイルの一番最後にコピーし, `image = xxx' を `image = yyy' に変更します.ここで, `yyy' にはバックアップし ておいたカーネルのファイルのフルパスを指定します.それから `label = zzz' を `label = linux-backup' に変更し lilo を再実行します.設定ファ イルに `delay = x' という行を付け加える必要があるかもしれません.x は 1/10 秒単位で待ち時間を指定します.LILOは待ち時間の間はブートを開始し ませんので,その間に(シフトキーを押すなどして)ブートを中断することがで きます.新しいカーネルに問題があるときは,ここで古いカーネルのラベルを 入力することでそれを起動できます. 5. カーネルへのパッチあて 5.1. パッチをあてる カーネルを順番にアップグレードしていくための差分が,パッチとして配布さ れています.例えば,今バージョン 1.1.45 を使用していて,どこかに `patch46.gz' があることに気づきました.これはそのパッチをあてること で,バージョン 1.1.46 にアップグレードできることを意味します.まずソー スツリーをバックアップしたほうがよいかもしれません (`make clean' し て, `cd /usr/src; tar zcvf old-tree linux' すれば圧縮された tar ファ イルが作成できます). 例を続けます./usr/src に `patch46.gz' があるとします. /usr/src に cd して `zcat patch46.gz | patch -p0' を実行してください(パッチが圧縮され ていない場合は `patch -p0 < patch46' を実行してください).画面がすごい 勢いで(遅いシステムの場合はぱらぱらと)流れて行き,個々のパッチ当てに成 功したかどうかが表示されます.通常この表示は読むには速すぎるので,うま く行ったのかどうかわかりません.そんなときは -s フラグをつけるといいで しょう.こうすると patch コマンドはエラー以外のメッセージは表示しなく なります(「おれのコンピュータは何か書き換えているぜ!」って実感はないで すが,こっちの方がお好みかもしれません).うまく行かなかった部分を見つ けるには /usr/src/linux へ cd し, .rej という拡張子のついたファイルを 探してください.特定のバージョンの patch コマンド(恐らく低機能なファイ ルシステム上でコンパイルされた古いバージョンの patch)は拡張子 # をパッ チ当てできなかったファイルにつけます..rej を探すには `find' コマンド が使えます. find . -name '*.rej' -print とすると,カレントおよびその下のサブディレクトリに存在する,拡張子 .rej を持つファイルが全て標準出力に表示されます. すべてうまく行ったら,3 章と 4 章で説明したように `make clean', `make config', `make dep' を行います. patch コマンドにはかなり多くのオプションがあります.上述の通り,-s は エラー以外のメッセージを出さなくなります.カーネルソースを /usr/src/linux 以外に置いているなら(そのディレクトリで) patch -p1 とす ることでうまくパッチを当てられます.他のオプションについては,man コマ ンドで詳しい説明を読むことができます. 5.2. 何か変だ (注意: この節は主に大昔のカーネルについてです) 以前,patch が `config.in' というファイルを書き換えてしまい,これが正 しくないという問題がよく起こりました.これは,あなたがご自分の環境に合 わせてオプションを変更していたためです.この問題は[新しいリリースで は]修正してありますが,古いリリースでは起こることがあるかもしれませ ん.修正するには,config.in.rej ファイルを読んで,どこが元のパッチのま まになっているか見ます.変更された部分は行のはじめに `+' と `-' で印が つけてあります.印で囲まれた部分を見て,それらに `y' と答えたか `n' と 答えたか思い出してください.それから config.in を編集し,必要なら `y' を 'n' へ,'n' を 'y' に変更してください. patch -p0 < config.in.rej として成功したら(パッチ当てに失敗しなかったら),カーネルの設定とコンパ イルを続けてください.config.in.rej ファイルはそのまま残りますが,消去 してしまって構いません. まだ何か問題があるのなら,壊れたパッチを当ててしまったのかもしれませ ん. patch が `previously applied patch detected: Assume -R?' と言っ てきたら,現在より古いバージョンのパッチを当てようとしているのでしょ う.この問いに 'y' と答えると patch はソースのバージョンを下げようと試 みますが,恐らく失敗します.その結果,カーネルソース全体を改めて持って こなくてはならなくなります(まず,これは悪い手ではありませんでした). パッチを当てたものを元に戻すには,元のパッチで `patch -R' します. パッチ当てに失敗してしまったときの最良の手段は,新たにまっさらのソース ツリー(例えば linux-x.y.z.tar.gz ファイル)を持ってきて最初からやりなお すことです. 5.3. .origファイルの消去 いくつかパッチを当てると,.orig ファイルがたまってきます.例えば,私が 1.1.48 で最後に .orig を消去した 1.1.51 のソースツリーでは,.orig を消 すことで 500 kBのディスクスペースが空きました. find . -name '*.orig' -exec rm -f {} ';' とすれば .orig を全て始末できます.パッチ当てに失敗したファイルに .rej ではなく # を使用するバージョンの patch では,.orig のかわりにチル ド(tilde)を使用してください. .orig ファイルを消去するためのより良い方法もありますが,これは GNU xargs のバージョンによります: find . -name '*.orig' | xargs rm あるいは「極めて確実だが,もう少しおしゃべりな」方法として: find . -name '*.orig' -print0 | xargs --null rm -- があります. 5.4. 他のパッチ Linus が配布している以外にもパッチがあります(私はこれを「非標準」と呼 ぶことにします).このようなパッチを当てると Linus のパッチが当たらなく て非標準のパッチを取り除くはめになったり,ソースやパッチを修正しなけれ ばいけなかったり,新しいソースをインストールしなおしたり,あるいはこれ らを組み合せて対応しなくてはならなくなるかもしれません.これは大変スト レスのたまることですから,(悪い結果になりそうな)ソースの変更を望まない なら Linus のパッチを当てる前に非標準パッチを戻すか,さもなくば新しい ソースをインストールしなおしましょう.それから非標準のパッチがまだうま く当たるかどうか確認します.うまく行かなければ,古いカーネルを使い続け るか,うまく行くようにソースやパッチと戯れるか,新しいバージョンのパッ チが出てくるのを待って(もしかすると泣きついたりして)ください. 標準の配布に含まれていないパッチはどれくらい一般的なんでしょうか? 標準 でないパッチのうわさを聞くこともあるでしょう.私はカーソルが点滅するこ とをどうしても許せないので,仮想コンソールでカーソルが点滅しないパッチ を当てていました(このパッチは(少なくとも以前は)新しいカーネルのリリー スに合わせて頻繁にアップデートされていました).しかし,ローダブルモ ジュールとして開発されているほとんどの新しいドライバについては,``非標 準'' のパッチが出現する頻度はとても低くなってきています. 6. 追加パッケージ Linux のカーネルには,カーネルソース単独では明らかにならない機能がたく さんあります.これらの機能は普通,カーネル外のパッケージを用いて使用す ることができます.ここでは一般的なものを紹介します. 6.1. kbd Linux のコンソールは優れた機能を持っています.フォントの変更,キーボー ドの配列変更,(新しいカーネルでの)ビデオモードの変更などです.kbd パッ ケージはこれらすべてのことができ,多くのフォントとほとんどすべてのキー ボードに対応したキーボードマップも付属しています.このパッケージは,カ ーネルソースの置いてあるのと同じサイトから入手できます. 6.2. util-linux Rik Faith さん(faith@cs.unc.edu)は,奇妙な一致ですが, util-linux とい う Linux 用のユーティリティをたくさん集めたものをまとめていました.現 在は Nicolai Langfeldt さんが管理しています (util-linux@math.uio.no). このパッケージは metalab.unc.edu[およびそのミラーサイト]の /pub/Linux/system/misc から匿名 ftp で入手でき, setterm, rdev, ctrlaltdel 等のカーネルに関連したプログラムを含んでいます.Rik さんに よると「なにも考えないでインストールしてはいけません;パッケージのすべ てをインストールする必要はありません.そんなことすると重大な問題を引き 起こすかもしれません」ということです. 6.3. hdparm 多くのパッケージにおいて,この hdparm はかつてはカーネルパッチとパッチ と対になるプログラムでした.このパッチは公式のカーネルに取りこまれ,ハ ードディスクを最適化したりハードディスクと戯れるためのプログラムは別個 に配布されるようになりました. 6.4. gpm gpm は「general purpose mouse(汎用マウス)」を略したものです.このプロ グラムは仮想コンソール間でのカットアンドペーストを可能にしたり,非常に 多くの種類のマウスに関してさまざまな機能を提供します. 7. いくつかの落とし穴 7.1. make clean 通常のアップグレードの後,新しく構築したカーネルが奇妙な動作をするとき は,新しいカーネルをコンパイルをする前に「make clean」を実行するのを忘 れた可能性があります.症状はいろいろで,システムが完全にクラッシュして しまったり,入出力がおかしくなったり,速度が遅くなったりするかもしれま せん.「make dep」も忘れずに実行してください. 7.2. 巨大あるいは遅いカーネル カーネルが多量のメモリを使いこんだり,あまりに巨大だったり,あるいは せっかく新しい Quadbazillium-III/4400 を投入してやったというのにコンパ イルがいつまでたっても終わらないという場合は,いらないものまでカーネル に組みこんでしまっているかもしれません(デバイスやファイルシステムなど です).いらないものは組みこまないようにしましょう.メモリを浪費するこ とになるからです.カーネルの巨大化によって現われる,もっとも目立つ症状 は,メモリとディスクの間でスワップが頻繁に起こるというものです.ディス クがあまりにもうるさく,停止時にジェット機の着陸時のような音がする古い 富士通製の Eagles というハードディスクも使っていない場合には,カーネル の設定を調べてみましょう. カーネルがどれくらいメモリを消費してるかは,/proc/meminfo あるいは `free' コマンドの ``total mem'' からマシンに搭載しているメモリ量を差し 引くことでわかります. 7.3. パラレルポートが動かない/プリンタが動かない PC 用の設定オプションは以下の場所にあります.まずは「General Setup」の `Parallel port support' と `PC-style hardware' を選んでください.それ から `Character devices' の `Parallel printer support' を選択してくだ さい. すると名前表示されます.Linux 2.2 では,プリンタのデバイス名は前のリリ ースと異なっています.その結果,古いカーネルで使っていた lp1 は新しい カーネルでは lp0 となります.これを調べるには `dmesg' コマンドを使う か,/var/log のログを見てください. 7.4. カーネルをコンパイルできない コンパイルできない場合,パッチ当てに失敗していたり,カーネルソースがど こか壊れているのかもしれません.gcc のバージョンが違っていたり,gcc そ のものが壊れているのかもしれません(例えばインクルードファイルがおかし いなど).Linus さんが README で説明しているシンボリックリンクが正しく 設定されていることを確認してください.一般的に言って,標準のカーネルを コンパイルできない場合はシステムに重大な問題があり,特定のツールを再イ ンストールする必要があるかもしれません. 場合によっては,ハードウェアの問題で gcc がクラッシュすることがありま す.エラーメッセージは ``xxx exited with signal 15'' というような感じ になり,一般に大変ミステリアスに見えます.このことについてはあまり触れ ませんが,一度わたしも遭遇したことがあります - 原因はキャッシュメモリ の不良で,コンパイラが時々ゲロを吐く[core dump する]ことがありました. この問題に遭遇したら,まず gcc を再インストールしてみてください.外部 キャッシュをオフにしたり,RAM の容量を減らしてみたらカーネルコンパイル がうまく行く場合は,この辺を疑ってみるべきでしょう. ハードウェアに問題があるかもしれないと言うと,多くの人はいい気持がしな いようです.でも,私は話をでっちあげているわけじゃありません.専用の FAQ もあります -- http://www.bitwizard.nl/sig11/ を見てください. 7.5. 新しいバージョンのカーネルでブートしていないようだ LILO を実行していないか,LILO の設定が正しくありません.以前私が遭遇し たのは設定ファイルの問題でした.`boot = /dev/hda' ではなく `boot = /dev/hda1' と書いていました(これは慣れるまでは本当に紛らわしいですが, 一旦動作する設定ファイルを作ったら後は変更する必要はありません). 7.6. LILO を実行し忘れた,あるいはまったくブートできない あらら.ここでの最善の策はフロッピーディスクや CD-ROM から起動し,別の ブート可能なフロッピーを作ることです(`make zdisk' などとします).ルー トファイルシステム(/)の場所とそのファイルシステムの種類(ext2 や minix など)を知っている必要があります.以下の例では /usr/src/linux というソ ースツリーが置かれているファイルシステムとその種類,そしてこれが通常は どこにマウントされているかも知っていなければなりません. 以下の例では,/ は /dev/hda1 にあり,また /usr/src/linux が存在する ファイルシステムは /dev/hda3 であり,通常は /usr にマウントされていま す.どちらも ext2 ファイルシステムです. /usr/src/linux/arch/i386/boot に存在する,動作するカーネルイメージは bzImage と呼ばれます. この復旧法の考え方は,もしちゃんと動作する zImage が存在するなら,それ を新しいフロッピーで使用できるというものです.これよりうまくいくかどう かは定かではありませんが(これはどのようにしてシステムを破壊したかによ ります),別の方法について例の後に説明します. まずは起動/ルートディスクの組み合せか,あるいは復旧ディスクから起動を 行い,動作するカーネルがあるファイルシステムをマウントします: mkdir /mnt mount -t ext2 /dev/hda3 /mnt mkdir したときにディレクトリはすでに存在するといわれても,無視してくだ さい.続いて動作するカーネルイメージがあったディレクトリへ cd します. 以下のことに注意してください: /mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot フォーマットしたディスクをドライブ ``A:'' に入れ(断じて起動ディスクや ルートディスクじゃありません!),カーネルイメージをフロッピーへダンプ し,そのイメージが使うルートファイルシステムを設定します: cd /mnt/src/linux/arch/i386/boot dd if=bzImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1 / に cd し,通常は /usr となるファイルシステムをアンマウントします: cd / umount /mnt これで,作成したフロッピーからシステムを通常通りにリブートできるはずで す.リブート後,lilo の実行(あるいは失敗の原因の除去)を忘れずに行って ください! 上述の通り,一般的な対処法がもう一つあります.動作するカーネルがたまた ま / にある場合(例えば/vmlinuz),それをブートディスクとして使うことが できます.先に述べた条件をすべて満たしていて,かつカーネルイメージが /vmlinuz である場合,上の例をすべてこれに合うように変更するだけで す:/dev/hda3 を /dev/hda1(/ファイルシステムです)へ, /mnt/src/linux を /mntへ,if=bzImageを if=vmlinuz へ変更します.どうして /mnt/src/linux が出てくるのか,という点については気にしないでくださ い. LILO を大きなドライブ(1024 以上のシリンダを持つもの)で使用すると,問題 が生じることがあります.この問題に関する情報については LILO mini-HOWTO などを参照してください. 7.7. `warning: bdflush not running' という警告が出る これは重大な問題かもしれません.リリース 1.0 以降のカーネル(94 年の 4 月 20 日前後)から,ファイルシステムのバッファを定期的にフラッシュする `update' というプログラムの修正・置き換えが行われました. `bdflush' の ソースを入手し(カーネルソースを取ってきたところで見つかるはずです),イ ンストールします(インストールはおそらく古いカーネルの下で実行するほう がよいでしょう).これはインストールの際に自動的に `update' としてイン ストールされ,リブートの後は,新しいカーネルが文句を言うことはなくなる はずです. 7.8. IDE/ATAPI CD-ROM ドライブが動かない 何とも不思議なことに,ATAPI ドライブがうまく動かないという人がたくさん います.たぶんこれは,間違いが起こるポイントがたくさんあるからでしょ う. IDE インタフェースに繋がっているドライブが問題の CD-ROM だけの場合, ジャンパの設定を「master」または「single」にしなければなりません.たぶ ん,これが一番ありがちな間違いです. (例えば)Creative Labs はサウンドカードに IDE インタフェースを載せてい ます.しかし,これは奥の深い問題を起こします.すなわち,IDE インタフェ ースが 1 つしか無いマザーボードもありますが,多くのマザーボードには IDE インタフェースが 2 つあります(普通は IRQ 15).したがって,普通は SoundBlaster のインタフェースを 3 番目の IDE ポート(私は IRQ 11 くらい と聞きました)にすることになります. ところがこれは Linux では問題を起こします.つまり,バージョン 1.2.x は 3 つ目の IDE インタフェースをサポートしていないのです(1.3.x 系列のどこ かでサポートされるようになりましたが,このカーネルは開発版ですし,自動 検出も行われないのを忘れないでください).これを回避する方法はいくつか あります. 2 番目の IDE ポートが既にあり,これが使われていないか,あるいはまだデ バイスが 2 つ繋がっていないことがあります.この場合にはサウンドカード から ATAPI ドライブを取り外し,2 番目のインタフェースに接続してくださ い.そうすればサウンドカードのインタフェースを無効にすることもできま す.これでとりあえず IRQ も節約できます. 2 番目のインタフェースがなければ,サウンドカードのインタフェースをジャ ンパで設定して,IRQ15 (2 番目のインタフェース)にしてください.これで動 作するはずです. 7.9. 廃れてしまった経路要求に対しておかしな警告が出る route プログラムや,その他のプログラムで経路を操作するものを全て新しい バージョンにしてください. /usr/include/linux/route.h(実際には /usr/src/linux にあるファイルです)が変更されているからです. 7.10. 1.2.0 でファイアウォールが動作しない 少なくともバージョン 1.2.1 までアップデートしてください. 7.11. ``Not a compressed kernel Image file(カーネルイメージファイルが 圧縮されていない)'' /usr/src/linux にできるファイル vmlinux をブートイメージとして使用して はいけません;[..]/arch/i386/boot/bzImageを使ってください. 7.12. 1.3.x にアップデートした後コンソール端末に問題が出る /etc/termcap 内の,コンソール用 termcap エントリを dumb から linux に 変更してください.terminfo のエントリを作成する必要もあるかもしれませ ん. 7.13. カーネルアップグレードの後コンパイルできなくなったようだ Linux のカーネルソースにはたくさんのインクルードファイル(名前が .h で 終わるファイル)が入っています.これは, /usr/include にある標準のイン クルードファイルとして参照されます.これらのファイルは以下のように参照 されます(ここで xyzzy.h は /usr/include/linux に存在するもののどれかで す): #include 通常,/usr/includeディレクトリには linux というリンクがあり,これはカ ーネルソースの include/linux ディレクトリ (普通のシステムでは /usr/src/linux/include/linux)を指しています.このリンクが張られていな かったり,あるいはおかしなところへ張られていると,ほとんどのプログラム をコンパイルできなくなってしまいます.カーネルソースがあまりにディスク スペースを消費するからとこれを消去してしまうと,このリンクが消滅してし まい明らかに問題になります.ファイルのパーミッション(ファイルへのアク セス許可)でもうまくいかない原因になります;あなたのシステムの root が,デフォルトで他のユーザーにインクルードファイルを見せないように umask を設定していたり,かつカーネルを展開するときに p オプション(ファ イルモードを変更しない)をつけないと,他のユーザーはやはり C コンパイラ を使用できなくなります. chmod コマンドでパーミッションを変更すること もできますが,インクルードファイルを展開し直すほうが楽でしょう.最初に ソース全体を展開したときのコマンドに引数を追加するだけです. blah# tar zxvpf linux.x.y.z.tar.gz linux/include 注意: ``make config'' は /usr/src/linux にリンクが存在しなければ,リン クを張り直します. 7.14. 上限値を大きくする 少ししかありませんが以下のコマンド例は,カーネルが設定したソフトリミッ トを増やす方法を知りたい人の参考になるでしょう: echo 4096 > /proc/sys/kernel/file-max echo 12288 > /proc/sys/kernel/inode-max echo 300 400 500 > /proc/sys/vm/freepages 8. バージョン 2.0.x, 2.2.x へのアップグレードのために カーネルバージョン 2.0.x と 2.2.x ではカーネルのインストールはかなり変 わりました.それぞれのソースツリーに同梱のファイル Documentation/Changes には,アップグレードの際に知っておくべき情報が書 かれています [JF に翻訳( があります)]. 大抵は重要なパッケージをいくつかアップグレードする必要があることでしょ う.これは例えば gcc, libc, SysVInit などで,さらにシステムファイルも いくつか変更する必要があるでしょう.パニックになる必要はないですが. 9. Modules(モジュール) ローダブルカーネルモジュールを使うとメモリを節約できますし,設定も容易 です.モジュールのサポートする範囲は,ファイルシステム・イーサネットカ ードドライバ・テープドライバ・プリンタドライバ等まで広がってきました. 9.1. モジュール用ユーティリティのインストール モジュール用ユーティリティはカーネルソースと同じところに modules- x.y.z.tar.gz という形で置いてあります;現在使用しているカーネルのパッ チレベル以下で,パッチレベル(x.y.z)がもっとも高いものを取ってきてくだ さい. `tar zxvf modules-x.y.z.tar.gz' で展開し,ソース展開がされた ディレクトリ(modules-x.y.z)へ cd し, README ファイルを読み,説明にし たがってインストールを実行します(通常はそんなに難しくなくて,make install のようなことをするだけです).これで,/sbin に insmod, rmmod, ksyms, lsmod, gensyms, modprobe, depmod というプログラムができます.お 望みならサブディレクトリ insmod にある ``hw'' というサンプルのドライバ を使ってユーティリティのテストを行ってください;詳しくはそのサブディレ クトリにある INSTALL ファイルを読んでください. insmod は現在実行中のカーネルにモジュールを追加します.モジュールには 通常 .o という拡張子がついています;上述のサンプルのドライバは drv_hello.o という名前ですので,これを追加するには `insmod drv_hello.o' としてください.カーネルが現在使用中のモジュールを確認す るには lsmodを使用します.出力は以下のようになります: blah# lsmod Module: #pages: Used by: drv_hello 1 `drv_hello' はモジュールの名前で,これははメモリを 1 ページ (4kB)使用 しています.現時点ではこのモジュールに依存している他のカーネルモジュー ルはありません.このモジュールを取り外すには, `rmmod drv_hello' とし ます.rmmod はファイル名ではなく,モジュール名を要求することに注意して ください;モジュール名は lsmod の出力するリストに書いてあります.他の モジュールユーティリティの目的は,それぞれのオンラインマニュアルに書か れています. 9.2. カーネルとともに配布されるモジュール バージョン 2.0.30 の時点では,ほとんどすべてのドライバはモジュールとし て利用できます.これらのモジュールを使用するには,まずこれらのモジュー ルの機能をカーネルに組み込んでいないことを確認してください;つまり, `make config' する際には,y と答えてはいけません.新しいカーネルをコン パイルしそれでブートします.それから再度 /usr/src/linux へ cd し,`make modules' を実行します.するとカーネル設定で組み込まれなかっ た機能を持つモジュールがすべてコンパイルされ,/usr/src/linux/modules に存在するモジュールへリンクが張られます.そのディレクトリから直接実行 することもできますし,`make modules_install' を実行すれば,できたモ ジュールを /lib/modules/x.y.z へインストールすることもできます.ここで x.y.z はカーネルのバージョンです. モジュールは特にファイルシステムについて有用です.minix や msdos ファ イルシステムはあまり頻繁に使わないでしょう.例えば私が msdos のフロッ ピーに遭遇した場合(ああ嫌だ), insmod /usr/src/linux/modules/msdos.o し,用が済んだら rmmod msdosします.これで,msdos ファイルシステムを使 わないときには 50kB の RAM を節約することができます.minix ファイルシ ステムについては少々注意すべきことがあります:復旧ディスクで使えるよう に, minix ファイルシステムはは常にカーネルに組み込んでおくべきです. 10. ちょっとしたアイディア 10.1. make あるいは patch コマンドの出力をリダイレクトする `make' や `patch' コマンドの出力結果のログが欲しければ,出力をファイル へリダイレクトすることができます.まず,自分が使っているシェルの種類を 確認します.`grep root /etc/passwd' を実行し,`/bin/csh' のような記述 を探します. sh や bash を使用しているなら, (command) 2>&1 | tee (output file) により (command) の出力が (output file) へコピーされます. csh や tcsh の場合は (command) |& tee (output file) となります. rc(恐らく使ってないでしょうけど)の場合は (command) >[2=1] | tee (output file) です. 10.2. 暫定的なカーネルのインストール フロッピーディスクを使う以外にも,古いカーネルを変更することなく新しい カーネルをテストするための方法がいくつかあります.他の多くの UNIX 系の システムとは異なり,LILOはディスクのどこからでもカーネルをブートするこ とができます(もし(500 MB 以上の)大きなハードディスクを持っている場合 は,これによりどのような障害が出るか,LILOの解説書を読んでください). そうするには,以下のような記述をLILOの設定ファイルの最後に追加します. image = /usr/src/linux/arch/i386/boot/bzImage label = new_kernel これにより,古い /vmlinuz に触れることなく,新たにコンパイルしたカーネ ルを選んで起動できるようになります(もちろん lilo の実行後です).LILO に新しいカーネルのブートを指示するためのもっとも楽な方法は,ブート 時(LILO とだけ画面に表示され,ほかには何も表示されていないときです)に シフトキーを押すことで,プロンプトが表示されます.ここで,`new_kernel' と入力することで新しいカーネルをブートできます. 同時にいくつも異なるカーネルソースツリーをシステム上に持ちたい場合には (多量のディスクスペースを必要としますので注意してください),各ツリーに /usr/src/linux-x.y.z と名前をつけるのが一般的な方法でしょう.ここで x.y.z はカーネルのバージョンです.シンボリックリンクを使用してソースツ リーを選択することができます;例えば `ln -sf linux-1.2.2 /usr/src/linux' とすることで 1.2.2 のツリーが選択できます.このように シンボリックリンクを作成する前に, ln の最後の引数が実在するディレクト リでないこと(すでに存在するシンボリックファイルなら構いません)を確認し てください;さもないと期待通りの結果が得られません. 10.3. カーネルのアップデート Russell Nelson さん(nelson@crynwr.com)は新しいカーネルリリースの際に変 更点のまとめを出しています.まとめは短いので,アップグレードの前に一読 しておくとよいでしょう.ftp.emlist.com の pub/kchanges からの匿名 ftp あるいは以下の URL から入手できます. http://www.crynwr.com/kchanges 11. 他の有用な関連する HOWTO o Sound-HOWTO: サウンドカードとユーティリティ o SCSI-HOWTO: SCSI コントローラとデバイスに関連するすべて o NET-2-HOWTO: ネットワーク o PPP-HOWTO: ネットワークのうち特に PPP について o PCMCIA-HOWTO: ノートマシン用のドライバについて o ELF-HOWTO: ELF とはなにか,ELF への移行について o Hardware-HOWTO: サポートされているハードウェアの概況 o Module mini-HOWTO: カーネルモジュールについて o Kerneld mini-HOWTO: kerneld について BogoMips mini-HOWTO: BogoMips が何か分からなければ 12. その他もろもろ 12.1. 著者 Linux Kernel-HOWTO の制作/管理は Brian Ward(bri@cs.uchicago.edu) が行 なっています.コメント,追加,訂正(特に訂正していただけると大変ありが たいです)を私にぜひ送ってください.[日本語版に関することは JF プロ ジェクト(JF@linux.or.jp)へお願いします] 私のホームページは以下の URL のいずれかで見ることができます. http://www.math.psu.edu/bri/ http://blah.math.tu-graz.ac.at/~bri/ できるだけメールの返事は出すようにしています,私は毎日たくさんのメール を受け取るので,返事が届くのにしばらく時間がかかるかもしれません.特に 私に質問のメールを出す場合には,できるだけわかりやすく,詳細に書くよう 努力してください.動作しないハードウェアについての質問(あるいはそれに 類するもの)の場合,あなたのハードウェアの構成を知ることが必要です.エ ラーの報告なら,「やってみたけど,エラーが出ました」だけでは困ります. どんなエラーだったのかを知る必要があるのです.お使いのカーネル,gcc, libc のバージョンもお知らせください.どんなディストリビューションを 使っているかだけではあまり意味がありません.質問はどんなに簡単なもので も構いません.質問しないかぎり答えは得られないということを忘れないよう に!私にフィードバックしてくださった方々に感謝します. カーネルに関係ない質問や,私の知らない国の言葉で書かれたメールにはお返 事できません. もし,メールを私に出したけれど,妥協できる時間内(まあ 3 週間くらいで しょうか)に返事が来ない場合は,たぶんあなたのメールを何かの拍子に消し てしまったのかもしれません(ごめんなさい).もう一度出してみてください. 実際にはハードウェアの問題に関するメールもたくさん受け取ります.それも 構いません.でも,私は全世界に存在するすべてのハードウェアについて精通 しているわけではないことは心に留めておいてください; わたしが使っている のは AMD の CPU, Adapitec と Sybios の SCSI コントローラ,IBM の SCSI ディスクです. バージョン -0.1は 1994 年 10 月 3 日に作成されました;この文書には SGML, PostScript, TeX, roff, プレーンテキスト形式のものがあります. 12.2. 今後の方針 「ちょっとしたアイディア」の章はまだ少ないです.他の人の提案を入れて拡 充するつもりです. 「追加パッケージ」も同じです. デバッグやクラッシュからの修復に関するもっと詳しい情報が必要です. 12.3. 貢献者 Linus さんの README の一部を引用(カーネルハッキングオプション).(Linus さん,ありがとう!) uc@brian.lunetix.de (Ulrich Callmeier さん): patch -s と xargs quinlan@yggdrasil.com (Daniel Quinlan さん): 多くのセクションの訂正お よび追加 nat@nataa.frmug.fr.net (Nat Makarevitch さん): mrproper, tar -p boldt@math.ucsb.edu (Axel Boldt さん): ネット上でカーネル設定オプショ ンに関する説明を集め,リストを提供してくださいました lembark@wrkhors.psyber.com (Steve Lembark さん): 複数カーネルのブート に関する提案 kbriggs@earwax.pd.uwa.edu.au (Keith Briggs さん): いくつかの訂正と提案 rmcguire@freenet.columbus.oh.us (Ryan McGuire さん): make 可能なものの 追加 dumas@excalibur.ibp.fr (Eric Dumas さん): フランス語訳 yamatori@ab11.yamanashi.ac.jp (嶋崎保任さん): 日本語訳 jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias さん): スペイン語訳 mva@sbbs.se (Martin Wahlen さん): スウェーデン語訳 jzp1218@stud.u-szeged.hu (Zoltan Vamosi さん): ハンガリー語訳 bart@mat.uni.torun.pl (Bartosz Maruszewski さん): ポーランド語訳 donahue@tiber.nist.gov (Michael J Donahue さん): ミスタイプの訂正, ``sliced bread competition''の覇者[薄切りパンの覇者? 意味がわかりませ ん] rms@gnu.ai.mit.edu (Richard Stallman さん): 「フリー」な文書のコンセプ ト/配布条件 dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup さん): NFS に関する 事柄 esr@snark.thyrsus.com (Eric Raymond さん): 色々な豆知識 疑問点や問題点に関して私にメールを送ってくださった方々も大変助けになり ました. 12.4. 著作権表示,使用許諾,およびその他の事柄 Copyright (C) Brian Ward, 1994-1999. 著作権表示およびこの許諾表示を添付するかぎりこのマニュアルを自由に配布 してかまいません. この文書と同一の許諾条件に基づいて配布するなら,この条件を添付してこの マニュアルを変更したものを配布してかまいません.翻訳もこの「変更したも の」の範疇に入ります. 保証: なし 推奨:商業的な再配布はどんどんやってください;その際,配布者は再配布す る前に著者に連絡することを強く希望します.これは配布される文書を常に最 新版にしておきたいがためです(作成してたものを一部お送りいただければ幸 いです).翻訳者も事前に著者に連絡することを勧めます.印刷されたものの 方が読みやすいでしょう.リサイクルをしてくださいね. [この章に関してのみ原文を添付します] Copyright (C) Brian Ward, 1994-1999. Permission is granted to make and distribute copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the derived work is distributed under the terms of a permission notice identical to this one. Translations fall under the catagory of ``modified versions.'' Warranty: None. Recommendations: Commercial redistribution is allowed and encouraged; however, it is strongly recommended that the redistributor contact the author before the redistribution, in the interest of keeping things up-to-date (you could send me a copy of the thing you're making while you're at it). Translators are also advised to contact the author before translating. The printed version looks nicer. Recycle. 12.5. 日本語訳について 日本語訳は嶋崎@梨大(yamatori@ab11.yamanashi.ac.jp)と Linux Japanese FAQ Project が行いました.翻訳に関するご意見は JF プロジェクト 宛に連絡してください. 改訂履歴を以下に示します. v0.75, 16 August 1996 翻訳: 嶋崎@梨大 (yamatori@ab11.yamanashi.ac.jp) v1.0, 13 July 1999 更新: 藤原 輝嘉 (fujiwara@linux.or.jp)