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 からのモジュールを使いたい場合、又は kernel pcmcia source による モジュールを使いたくない場合、 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 リファレンス
1.08-3, 2005年 5月 1日 日曜日 07時45分18秒 UTC時間osamu@debian.orgtsuno@ngy.1st.ne.jp