Debian には独自の kernel 並びに関連モジュールの再構築方法があります。 Debian と kernel, 第 2.7 節 をご覧ください。
最新の Linux kernel をコンパイルする場合、unstable から
gcc
、binituls
および modutils
をインストールして使用すると役に立つかもしれません。
公式の情報を得るには、/usr/share/doc/kernel-package/README.gz
、特に最後尾を
ご覧ください。
常に変更が発生しているので、kernel のコンパイルは最も称賛される開発者 でさえも混乱を招きかねない難しい事項です。
/etc/mkinitrd/mkinitrd.conf
.
常に注意して 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 # if this is your kernel source $ 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 # modules_image is for pcmcia-cs* etc. $ 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 を変更してください。
The new Debian 2.4 kernels provided by
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 にはこれは 必要ないかもしれません。
Voice of the generous Miquel van Smoorenburg miquels@cistron.nl
:
"I simply removed the entire pcmcia stuff from the laptop here at work,
including the cardmgr etc and just installed a 2.4 kernel with cardbus support,
and the new hotplug
package from woody.
32-bit カードしか持っていない限り、pcmcia パッケージは必要ありません; Linux 2.4 は組込みの PC カードサービスを持っています。そして標準の tulip ドライバは dlink カードでもうまく動きます。
—Mike."
Linux PCMCIA
HOWTO
並びに Network
configuration and PCMCIA, 第 10.9.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
本変更は file I/O 性能にほんの少し悪影響を与えるかもしれません。しかし、 本変更によりデフォルトの 5秒より短い最後の1秒の間を除き、ファイル内容を 安全に保たれます。
古い少メモリ容量マシンの場合、proc ファイルシステムを通じて メモリの over-commit を有効にするとまだ役に立つかもしれません:
# echo 1 > /proc/sys/vm/overcommit_memory
Debian レファレンス
1.07-2, 2004年 4月 11日 日曜日 08時00分07秒 UTC時間osamu@debian.org
tsuno@ngy.1st.ne.jp