Debian には独自の kernel と関連モジュールの再構築方法があります。 Debian と kernel, 第 2.7 節 をご覧ください。
最新の Linux kernel をコンパイルする場合、unstable から
gcc
、binituls
と modutils
をインストールして使用すると役に立つかもしれません。
公式の情報を得るには、/usr/share/doc/kernel-package/README.gz
、特に最後尾を
ご覧ください。
常に変更が発生しているので、kernel のコンパイルは最も称賛される開発者 でさえも混乱を招きかねない難しい事項です。
/etc/mkinitrd/mkinitrd.conf
に MKIMAGE を必ず設定する必要がある。
常に注意して Manoj と Kent による
/usr/share/doc/kernel-package/README.gz
に頼ってください。最新版の
kernel をコンパイルしようとしている場合、 最新の unstable 版の
kernel-package
パッケージを 確実にインストールしてください。
1 台のマシンのためにしか kernel をコンパイルする必要がないなら、
initrd は必要ありません。kernel-image パッケージにより供給される
kernel とほとんど同じにしたいため、私は initrd を用います。 もし
initrd を使用するなら、initrd(8)
と
mkinitrd.conf(5)
をご覧ください。 また、http://bugs.debian.org/149236
もご覧ください。
kernel-package
, gcc
, binutils
, そして
modutils
へのバグレポートに気を付けてください。
これらの最新版を使うことが必要です。
Debian system 上でソースから カスタム kernel をコンパイルするには、
特別な注意が必要です。複数の kernel-image を作成するには、
--append_to_version オプション付きで make-kpkg
を用いてください。
# apt-get install debhelper modutils kernel-package libncurses5-dev # apt-get install kernel-source-2.4.18 # 最新版を使用 # apt-get install fakeroot # vi /etc/kernel-pkg.conf # 名前と email アドレスを入力 $ cd /usr/src # 構築ディレクトリ $ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2 $ cd kernel-source-2.4.18 # これがあなたの kernel ソースの場合 $ cp /boot/config-2.4.18-386 .config # 現在の config をデフォルトにする $ make menuconfig # 希望どおりカスタマイズする $ make-kpkg clean # 必ず実行 (man make-kpkg による) $ fakeroot make-kpkg --append_to_version -486 --initrd \ --revision=rev.01 kernel_image \ modules_image # pcmcia-cs などのためのモジュールイメージ $ cd .. # dpkg -i kernel-image*.deb pcmcia-cs*.deb # インストール
make dep を行います。initrd を使用しない場合は、--initrd を使わないでください。
pcmcia-cs からのモジュールを使う場合、又は pcmcia を使いたくない場合、 make menuconfig にて "General setup —>" -> "PCMCIA/CardBus support —>" を選び、 "< > PCMCIA/CardBus support" を設定(すなわちチェックボックスを外す) してください。
SMP の場合は、kernel-pkg.conf(5)
に従い、 CONCURRENT_LEVEL
を設定してください。
オリジナルソースを以下から取得してください。
http://www.kernel.org/
http://pcmcia-cs.sourceforge.net/
又は Debian での 同等の kernel source を用いて次の手順を実行してください。
# cd /usr/src # tar xfvz linux-whatever.tar.gz # rm -rf linux # ln -s linux-whatever linux # tar xfvz pcmcia-cs-whatever.tar.gz # ln -s pcmcia-cs-whatever pcmcia # cd linux # make menuconfig ... 設定を行う # make dep # make bzImage ... lilo / grub の設定 ... ... /usr/src/linux/arch/i386/boot/bzImage を boot に移動... ... /sbin/lilo 又は grub のための好みの方法を実行 # make modules; make modules_install # cd ../pcmcia # make config # make all # make install ... 必要なモジュール名を /etc/modules に追加 # shutdown -r now ... 新しい kernel を boot
ほとんどの "normal" なプログラムには kernel
ヘッダは必要なく、実際直接
使用した場合動かなくなるかもしれません。その代わり、glibc
を構築するのに使った ヘッダに対してコンパイルすべきです。それらは
Debian システムの /usr/include/linux
と
/usr/include/asm
にあるバージョンのものです。
それゆえ、いくつかの古びたドキュメントが推奨しているように
/usr/include/linux
および /usr/include/asm
から
/usr/src/linux
にあるディレクトリに symlink を張らないでください。
カーネル特有のアプリケーションプログラムに特定の kernel ヘッダが
必要 ならば、include path が
dir-of-particular-kernel-headers/include/linux
と
dir-of-particular-kernel-headers/include/asm
を
指すように makefile を変更してください。
kernel-image-2.4.NN
により供給されている 新しい Debian
2.4 kernel は非常にモジュール化されています。 意図したとおりに kernel
が動くように必要なモジュールが有効になっているかを 確認する必要があります。
次の章で応急手段として /etc/modules
の多くの例を挙げていますが、
モジュール関連のこれらの問題を修正するための正しい方法は、現在の kernel
で得られる充分な alias が存在するので、/etc/modutils/
にある
デバイスへの alias を設定することだと聞いています。いくつかのモジュールは
discover
などのハードウェア自動検知プログラムにより
自動で有効化されるかもしれません。X
用のハードウェア検出, 第 9.4.2 節 もご覧ください。
正確な情報は モジュールを扱うための特別な準備, 第 2.7.5
節 や Linux source にある Documentation/*.txt
をご覧ください。
PCMCIA を動かすには、/etc/modules
に次に示す内容を含める必要
があるかもしれません。
# ISA PnP ドライバ isa-pnp # 新しい低レベル PCMCIA ドライバ # yenta_socket # 私の場合、必要ないようです
残りは PCMCIA スクリプト (pcmcia-cs
パッケージのもの)、
depmod
と kmod
がやってくれます。 私のノート PC
は古い ISA-PCMCIA なので、isa-pnp
が必要と 考えています。最近の
CardBus/PCMCIA を使ったノート PC にはこれは 必要ないかもしれません。
genius Miquel van Smoorenburg miquels@cistron.nl
の発言を
次に示します。
"ノート PC から cardmgr などの pcmcia 関連全体を単に削除して、 cardbus
をサポートした 2.4 kernel をインストールしました。 そして woody から新しい
hotplug
パッケージを インストールしました。
32-bit カードしか持っていない限り、pcmcia パッケージは必要ありません。 Linux 2.4 は組込みの PC カードサービスを持っています。そして標準の tulip ドライバは dlink カードでもうまく動きます。
—Mike."
Linux PCMCIA
HOWTO
と ネットワーク設定と PCMCIA, 第
10.10.5 節 をご覧ください。
[NOT TESTED] SCSI を動かすには /etc/modules
に次の内容を
追加する必要があります。
# SCSI コアドライバ scsi_mod # SCSI 汎用ドライバ generic driver sg # SCSI disk sd_mod # 他に必要なハードウェアモジュール全て ...
上記モジュールのうちいくつかは depmod
が対処してくれるかも
しれません。
特別なネットワーク機能のためには、次に示す内容を /etc/modules
に追加する必要があります。
# net/ipv-4 ip_gre ipip # net/ipv-4/netfilter # iptable (in order) ip_tables ip_conntrack ip_conntrack_ftp iptable_nat iptable_filter iptable_mangle # ip_nat_ftp ip_queue # ipt_LOG ipt_MARK ipt_MASQUERADE ipt_MIRROR ipt_REDIRECT ipt_REJECT ipt_TCPMSS ipt_TOS ipt_limit ipt_mac ipt_mark ipt_multiport ipt_owner ipt_state ipt_tcpmss ipt_tos ipt_unclean # #ipchains #ipfwadm
これらの記述は最適化されていません。上記モジュールのいくつかは、
depmod
が対処してくれるかもしれません。
EXT3 FS によりジャーナリングファイルシステムを有効化するには、Debian の プリコンパイルされた kernel-image ( > 2.4.17) パッケージを用いると、 次の手順が発生します。
# cd /etc; mv fstab fstab.old # sed 's/ext2/ext3,ext2/g' <fstab.old >fstab # vi /etc/fstab ... root filesystem type を "ext3,ext2" の代わりに "auto" に設定 # cd /etc/mkinitrd # echo jbd >>modules # echo ext3 >>modules # echo ext2 >>modules # cd / # apt-get update; apt-get install kernel-image-2.4.17-686-smp ... 最新の kernel をインストールし boot の設定を行う (ここでは lilo を用いる) # tune2fs -j -i 0 /dev/hda1 # tune2fs -j -i 0 /dev/hda2 ... 全ての EXT2 FS を EXT3 に変換するため # shutdown -r now
ついに EXT3 ジャーナルが有効化されました。 fstab
の
"type" エントリに ext3,ext2 を用いると 非 root
パーティションに対して kernel が EXT3 をサポートしていない場合、 EXT2 に safe
fallback するのを保証してくれます。
以前 2.4 kernel をインストールしており、再インストールしたくない場合、
上記の手順を apt-get
まで行い、そして次の手順を行ってください。
# mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp # lilo # tune2fs -j -i 0 /dev/hda1 # tune2fs -j -i 0 /dev/hda2 ... 全 EXT2 FS を EXT3 に変換するため # shutdown -r now
EXT3 ジャーナルが有効化されました。
mkinitrd
を起動した時に /etc/mkinitrd/modules
が設定されていなく、ブート時にモジュールを追加したいなら、initrd プロンプトで
RETURN を押せば shell を実行できます。
# insmod jbd # insmod ext3 # modprobe ext3 の実行には注意が必要 # insmod ext2 # ^ ...ブートを継続
システムブートスクリーン (dmesg
) において、 "cramfs: wrong
magic" が表示されるかもしれませんが、これは害がないことが
わかっています。本件は Sarge において 2002 年 10 月に解決しています。 詳細は
http://bugs.debian.org/135537
、 EXT3
File System mini-HOWTO
並びに
/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz"
をご覧ください。
EXT3 を有効にして深刻な kernel lockup を経験したという報告が 数例有りますが、私は問題ありません (2.4.17 kernel を使用)
なんらかの理由で、現在 RTL-8139 モジュールは rtl8139 ではなく、8139too
と呼ばれます。2.2 kernel から 2.4 kernel に更新する場合、
/etc/modules
を編集してこの変更を反映してください。
kernel-image-2.4.*
では、パラレルポートのサポートは
モジュールとして供給されています。次の手順で有効化できます。
# modprobe lp # echo lp >> /etc/modules
Linux source の Documentation/parport.txt
をご覧ください。
Linux kernel の挙動は proc ファイルシステムを用いるとオンザフライで変更できます。
/proc
ファイルシステムを通して kernel パラメータを変更すること
に関する基本的な情報は Linux source の Documentation/sysctl/*
をご覧ください。
/etc/init.d/networking
と いくつかのウェブサイトにアクセスした時の奇妙な挙動,
第 3.7.5 節 には kernel パラメータの操作方法の例がいくつかあります。
通常 /etc/rcS.d/S30procps.sh
から起動される
/etc/init.d/procps.sh
を用いた /proc
ファイルシステムを通じたブート時の kernel 設定手順については See
sysctl.conf(5)
をご覧ください。
Linux kernel が "Too many open files" とエラーを出力することがあります。 これは file-max の標準値が小さい (8096) ためです。 この問題を解決するには、root で次のコマンドを実行してください。
# echo "65536" > /proc/sys/fs/file-max # 2.2 と 2.4 kernel の両方で有効 # echo "131072" > /proc/sys/fs/inode-max # 2.2 kernel のみ
変更をずっと有効にしたい場合は、/etc/sysctl.conf
に次の行を追加してください。
file-max=65536 # 2.2 と 2.4 kernel の両方で有効 inode-max=131072 # 2.2 kernel のみ
proc ファイルシステムを通じて disk flush 間隔を変更できます。 次のコマンドにより、間隔をデフォルトの 5 秒 から 1 秒 に変更されます。
# echo "40 0 0 0 100 30000 60 0 0" > /proc/sys/vm/bdflush
本変更はファイル I/O 性能にほんの少し悪影響を与えるかもしれません。しかし、 本変更により、デフォルトの 5 秒より短い最後の 1 秒の間を除き、ファイル内容を 安全に保たれます。
古い少メモリ容量マシンの場合、proc ファイルシステムを通じて メモリの over-commit を有効にするとまだ役に立つかもしれません。
# echo 1 > /proc/sys/vm/overcommit_memory
udev は /dev/
のダイナミックな置き換えです。
デバイス名は非常に短い物にもできます。 2.4 カーネルで使われた devfs
は今や過去の物となりました。
udev
パッケージを kernel-image-2.6.NN
で提供される新たな Debian 2.6 カーネルとともにインストールすると、
本機能が実現します。
Debian リファレンス
CVS, 2005年 4月 3日 月曜日 22時59分00秒 UTC時間osamu@debian.org
tsuno@ngy.1st.ne.jp