#contents

*Linuxカーネルについて [#i36a7676]
Linuxカーネルは、いろいろなOSの基本思想の中で、その誕生の流れからSystem VやBSD,MinixなどのUnixの流れを汲んでいることから、カーネルが担う部分が多々ある。しかしながら、MachやWindowsNTなどの、マイクロカーネル思想からの影響を受け、ver2.xからはカーネル機能を最低限にし、多くの機能をカーネルモジュールとして分割は行ったものの、いまだにリコンパイルの呪縛から逃れ切れていないようだ。

*カーネルのコンパイル準備 [#w70f66e1]
ncursesのインストール(詳細は下記参照)
 # yum install ncurses ncurses-devel
現在のCentOSのカーネルソースをインストール
 # yum install kernel-devel
カーネルソースのインストール
 # cd /usr/src
 # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.6.tar.gz
 # tar zxvf linux-2.6.28.6.tar.gz
 # make mrproper                            <- configファイルすら消すClean
現在の設定ファイルをコピー
 # cp /boot/config-2.6.18-92.el5 /usr/src/linux-2.6.28.6/.config

※ncursesとは、端末に依存しない形式でテキストユーザインタフェース(TUI)を作成するためのAPIを提供するライブラリ。画面切り替えを最適化し、リモートシェルで使ってもレイテンシを最小に抑えるようになっている。

**RPMファイルの作成とインストール [#k0057238]
 # make rpm
 # cp /usr/src/redhat/RPMS/i386/kernel-2.6.28.3-1.i386.rpm /usr/local/src
 # rpm -ivh /usr/src/redhat/RPMS/x86_64/kernel-2.6.28.3-1.x86_64.rpm

*カーネルの設定 [#ia51139f]
カーネルの設定プログラムはいろいろ準備されていますが、menuconfigがお勧めである。
 # cd /usr/src/linux-2.6.28.6
 # make menuconfig
操作方法は、<Y>で指定モジュールを組み込み(表示は*)、<N>で除外、<M>でモジュール化(表示はM)、<ESC>2回押しで、前画面に戻る、</>で検索。設定するべき内容については下記を参照のこと。推奨については通常利用を想定(保証しません!)~

***General設定 [#sa99e099]
|>|設定項目|説明|推奨|h
|>|Prompt for development and/or incomplete code/drivers|開発中もしくは実験的に実装されている機能を表示させるかどうかを選択する項目||
|>|Local version - append to kernel release|バージョン番号に付加する文字列を設定(例:Project-001等)||
|>|Automatically append version information to the version string|バージョン管理システムで使うリビジョン番号をバージョン文字列に付加|*|
|>|Support for paging of anonymous memory (swap)|・メモリー・ページを2次記憶装置に退避させるメモリー・スワッピング機能を有効にする|*|
|>|System V IPC|System V方式のプロセス間通信をサポートする||
|>|POSIX Message Queues|POSIXで定義されたメッセージ・キューをサポートする|*|
|>|BSD Process Accounting|プロセスの実行ログ生成機能を有効にする|*|
||BSD Process Accounting version 3 file format|新しい形式(バージョン3形式)のログを生成する||
|>|Export task/process statistics through netlink (EXPERIMENTAL)|稼働中のタスクやプロセスの情報をnetlink経由で公開|*|
||Enable per-task delay accounting (EXPERIMENTAL)||*|
||Enable extended accounting over taskstats (EXPERIMENTAL)|||
|>|Auditing support|システム監査用フレームワークを有効にする|*|
||Enable system-call auditing support||*|
|>|Kernel .config support|カーネル設定ファイル(.config)をカーネル内部に保存する||
|>|Kernel log buffer size (16 => 64KB, 17 => 128KB)|カーネルのログバッファーのサイズ指定|17|
|>|Control Group support|CPUやメモリー・ノードをグループ化して分割する||
|>|Group CPU scheduler|||
|>|Create deprecated sysfs files|重複したsysfsファイルを作成可能にする|*|
|>|Kernel->user space relay support (formerly relayfs)|debugfsなどのファイル・システムのリレー・インタフェースをサポートする|*|
|>|Namespaces support||*|
||UTS namespace|||
||IPC namespace |||
||User namespace (EXPERIMENTAL)|||
||PID Namespaces (EXPERIMENTAL)|||
|>|Initial RAM filesystem and RAM disk (initramfs/initrd) support|初期RAMディスクをサポート|*|
||Initramfs source file(s)|ファイル名の指定、初期値=initrd.img||
|>|Optimize for size|サイズ優先の最適化をしてカーネルをコンパイルする|*|
|>|Configure standard kernel features (for small systems)|標準カーネル機能のカスタマイズ(小規模システム用に機能を削る場合に指定)||
||Enable 16-bit UID system calls (NEW)|古い16ビットUIDシステム・コール用のラッパーを有効にする|*|
||Sysctl syscall support (NEW)|カーネル稼働中に設定を参照・変更できるsysctlシステム・コールを有効にする|*|
||Load all symbols for debugging/ksymoops (NEW)|デバッグ/トレース用のシンボル情報をカーネルに組み込む|*|
||+ Include all symbols in kallsyms|||
||+ Do an extra kallsyms pass||*|
||Support for hot-pluggable devices (NEW)|Hotswap可能な機器をサポートする|*|
||Enable support for printk (NEW)|カーネル・メッセージを出力するprintk関数を有効にする|*|
||BUG() support (NEW)|カーネルの不具合情報を出力するBUG()関数を有効にする|*|
||Enable ELF core dumps (NEW)|ELF形式のコア・ダンプを作成する機能を提供する|*|
||Enable PC-Speaker support (NEW)|PCのスピーカーを利用する|*|
|>|Disable heap randomization||*|
|>|Choose SLAB allocator (SLAB)|2択 SLAB(一般的なスラブ・アロケータ) or SLUB(メモリーを効率良く使用できるアロケータ)|SLAB|
|>|Profiling support (EXPERIMENTAL)||*|
|>|Activate markers|||
|>|Profile system profiling (EXPERIMENTAL)||M|
|>|Profile AMD IBS support (EXPERIMENTAL)|||
|>|Kprobes|ユーザーがあらかじめ指定したアドレス(プローブポイント)をカーネルが実行した際に、登録されているコールバック関数を呼び出す機能を提供する機構です。特定区間の実行速度の計測や障害発生時の動作解析などに有効です。|×|

***ローダブルモジュール [#c19b8442]
|>|設定項目|説明|推奨|h
|>|Enable loadable module support|動的に組み込み可能なカーネル・モジュールに関する設定|*|
||Forced module loading|カーネルが危険と判断していても,強制的にカーネル・モジュールをロードする||
||Module unloading|カーネル・モジュールの取り外しに対応する|*|
||+ Forced module unloading|カーネルが危険と判断していても,強制的にカーネル・モジュールを取り外し可能にする||
||Module versioning support|カーネル・モジュールにカーネルのバージョン番号を組み込み,バージョンが異なるモジュールを利用不可にする|*|
||Source checksum for all modules|ビルドに使ったソース・コードのチェック・サム情報をカーネル・モジュールに組み込む|*|

***ブロックレイヤー [#m2f4d4e2]
|>|設定項目|説明|推奨|h
|>|Enable the block layer|ブロック・デバイス層を有効にする|*|
||Support for Large Block Devices|2Tバイトを超えるブロック・デバイスを取り扱るようにする|*|
||Support for tracing block io actions|キューに蓄えられた入出力処理を追跡可能にする|*|
||Support for Large Single Files|2Tバイトを超えるファイルを取り扱えるようにする|*|
||Block layer SG support v4 (EXPERIMENTAL)|SCSI規格のバージョン4をサポートする||
||Block layer data integrity support|||
|>|IO Schedulers|ブロック入出力に利用するスケジューリング・アルゴリズムに関する設定|*|
||Anticipatory I/O scheduler|汎用性の高いスケジューラ(Anticipatory)をサポートする|*|
||Deadline I/O scheduler|データベースのような単一プロセスの入出力性能向上に向いた(Deadline)スケジューラをサポートする|*|
||CFQ I/O scheduler|デスクトップ環境向き(CFQ)のスケジューラをサポートする|*|
||Default I/O scheduler|初期設定スケジュールの設定 Anticipatory,Deadline,CFQ,No-op(スケジューラを使用しない=I/O要求順に処理する)のどれかを選択|CFQ|

***プロセッサのタイプと機能の設定 [#fa1b59a9]
|>|設定項目|説明|推奨|h
|>|Tickless System (Dynamic Ticks)|カーネル内の処理を定期的なタイマー割り込みに依存しないようにする||
|>|High Resolution Timer Support|高精度タイマーをサポートする||
|>|Symmetric multi-processing support|対称型マルチプロセッサに対応する|*|
|>|Enable MPS table||*|
||Subarchitecture Type|プロセッサ以外のシステム・アーキテクチャを設定。PC-compatible,AMD Elan,Generic architectureの3択|PC-compatible|
||<Generic時のみ>|NUMAQ (IBM/Sequent) : Non-Uniform Memory Accessアーキテクチャ「NUMA-Q」||
||<Generic時のみ>|Summit/EXA (IBM x440) : 米IBM社のx440に採用されている分散共有メモリーのアーキテクチャ||
||<Generic時のみ>|Support for Unisys ES7000 IA32 series : 米Unisys社のES7000で採用されているCMP(Cellular Multi Processing)アーキテクチャ ||
||<Generic時のみ>|Support for big SMP systems with more than 8 CPUs : 8個以上のCPUを搭載するサブシステムのアーキテクチャ ||
|>|RDC R-321x SoC|||
|>|Single-depth WCHAN output||*|
|>|Paravirtualized guest support|準仮想化環境でカーネルを稼働させるための機構を有効にする||
||VMI Guest support|||
||KVM paravirtualized clock|||
||KVM Guest support|||
||Lguest guest support|||
||Enable paravirtualization code|||
|>|Memtest|||
|>|Processor family|386,486,586/K5/5x86/6x86,Pentium-Classic,Pentium-MMX,Pentium-Proの6択から選択|Pentium-Pro|
|>|Generic x86 support|x86互換プロセッサ汎用の最適化をする。選択したプロセッサ以外のx86環境でも稼働可能になる|*|
|>|Pentiumpro memory ordering errata workaround||*|
|>|HPET Timer Support|高性能なハードウエア・タイマー「HPET」をサポートする|*|
|>|Maximum number of CPUs (2-512)|最大プロセッサ数を設定する|32|
|>|SMT (Hyperthreading) scheduler support|Hyperthreadingのような「SMT」(Simultaneous Multithreading)機構をサポートする|*|
|>|Multi-core scheduler support|マルチコア・プロセッサ向けのプロセッサ・スケジューラをサポートする|*|
|>|Preemption Model|プロセス実行中にCPUを横取りして,ほかのプロセスに割り当てるか否かの設定。3択。No Force Preemption (Server) CPUの横取りをしない, Voluntary Kernel Preemption (Desktop)特定ポイントだけCPUの横取りを可能にする, Preemptible Kernel (Low-Latency Desktop)すべての処理でCPUの横取りを可能にする|Voluntary Kernel Preemption|
|>|Machine Check Exception|プロセッサの自己診断機能による例外を受け取り可能にする|*|
|>|Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium|Athlon/Duron,Pentium 4プロセッサの致命的でないエラーを検知可能にする ||
|>|check for P4 thermal throttling interrupt|発熱に応じて動作クロックや電圧を調整するPentium 4の「Thermal Throttling」機能の動作を検知可能にする|*|
|>|Toshiba Laptop support|東芝製ノートPCのシステム管理モードにアクセスするドライバを有効にする|M|
|>|Dell laptop support|Dell Inspiron 8000のシステム管理モードにアクセスするドライバを有効にする|M|
|>|Enable X86 board specific fixups for reboot|一部のハードウエアで再起動がうまく行かない問題を回避する||
|>|/dev/cpu/microcode - microcode support|IA32プロセッサのマイクロコード更新用のデバイス・ファイル(/dev/cpu/microcode)を有効にする|M|
|>|Intel microcode patch loading support||*|
|>|AMD microcode patch loading support|||
|>|/dev/cpu/*/msr - Model-specific register support|Model-specificレジスタにアクセスするためのデバイス・ファイル(/dev/cpu/*msr)を有効にする|M|
|>|/dev/cpu/*/cpuid - CPU information support|プロセッサ情報(CPUID)参照用のデバイス・ファイル(/dev/cpu/*/cpuid)を有効にする|M|
|>|High Memory Support|最大メモリの設定, off(1GB), 4GB, 64GB の三択|4GB|
|>|Memory model|メモリー・モデルの選択、flat memory=一般的なメモリー・モデル,Sparse memory=活線挿抜に対応したメモリー|Flat Memory|
|>|64 bit Memory and IO resources (EXPERIMENTAL)|64ビット長のメモリー・アドレスやI/Oアドレスをサポートする|*|
|>|Add LRU list to track non-evictable pages||*|
|>|Allocate 3rd-level pagetables from highmem|HIGHMEM領域のページのアドレス解決に3段ページ・テーブルを使用する|*|
|>|Check for low memory corruption|||
|>|Reserve low 64K of RAM on AMI/Phoenix BIOSen||*|
|>|Math emulation|数値演算プロセッサをソフトウエアでエミュレートする ||
|>|MTRR (Memory Type Range Register) support|プロセッサのメモリー・アクセス方法を制御するレジスタを/proc/mtrr経由で操作可能にする|*|
||MTRR cleanup support||*|
||MTRR cleanup enable value (0-1)||0|
||MTRR cleanup spare reg num (0-7)||1|
||x86 PAT support|||
|>|EFI runtime service support||*|
|>|Enable seccomp to safely compute untrusted bytecode|||
|>|Timer frequency|タイマー割り込みの頻度を設定する|1000 HZ|
|>|kexec system call|マシンを再起動せずに他のシステムを起動するkexecシステム・コールを有効にする|*|
|>|kernel crash dumps|kexecによる起動後、クラッシュ・ダンプを生成する|*|
|>|Physical address where the kernel is loaded|カーネルをロードする物理アドレスを指定する|0x100000|
|>|Build a relocatable kernel (EXPERIMENTAL)|再配置可能なカーネルをビルドする|*|
|>|Alignment value to which kernel should be aligned|カーネルをロードするアドレスのアライメントを指定する|0x400000|
|>|Support for hot-pluggable CPUs|CPUの活線挿抜をサポートする|*|
|>|Compat VDSO support|(2.3.3より前のGNU Cライブラリが採用していた)従来の形式のVDSO(Virtual Dynamic Shared Object)をサポートする||
|>|Built-in kernel command line|||

***パワー制御とACPIのオプション設定 [#m36ba5a2]
|>|設定項目|説明|推奨|h
|>|Power Management support|ACPIやAPMなどの電源管理機構に関する設定|*|
||Power Management Debug Support|電源管理コードのデバッグ機能を有効にする||
||Verbose Power Management debugging|電源管理コードの冗長化デバッグ機能を有効にする||
||Suspend/resume event tracing|サスペンド/レジューム中に発生したイベントを追跡可能にする||
|>|Suspend to RAM and standby|メイン・メモリーが通電状態でシステムのスリープを許可する|*|
|>|Hibernation (aka 'suspend to disk')|ハイバネーション機能を有効にする||
||Default resume partition|システム状態を保存するディスク区画を設定する||
|>|ACPI (Advanced Configuration and Power Interface) Support|ACPIを有効にする|*|
|>|APM (Advanced Power Management) BIOS support|APM BIOSに関する設定|*|
|>|CPU Frequency scaling|CPUの動作周波数を動的に変更できるようにする|*|
||Enable CPUfreq debugging||*|
||CPU frequency translation statistics||M|
||CPU frequency translation statistics details||*|
||Default CPUFreq governor|CPUの動作周波数調整ポリシーを設定するperformance(性能を重視する),userspace(ユーザー・アプリケーションで調節),ondemand,conservativeの4択|userspace|
||'performance' governor|性能重視の「performance」ポリシーを有効にする|*|
||'powersave' governor|省電力重視の「powersave」ポリシーを有効にする|M|
||'userspace' governor for userspace frequency scaling|ユーザー・アプリケーションで調整する「userspace」ポリシーを有効にする|*|
||'ondemand' cpufreq policy governor|CPU負荷に応じて動的に周波数を調整する「ondemand」ポリシーを有効にする|M|
||'conservative' cpufreq governor|ondemandポリシーよりも緩やかに周波数を調整する「conservative」ポリシーを有効にする|M|
||ACPI Processor P-States driver|CPUのP-Stateを制御するACPIドライバを有効にする|M|
||AMD Mobile K6-2/K6-3 PowerNow!|AMD Mobile K6-2/K6-3の「PowerNow!」機能をサポートする||
||AMD Mobile Athlon/Duron PowerNow!|AMD Mobile Athlon/Duronの「PowerNow!」機能をサポートする|*|
||AMD Opteron/Athlon64 PowerNow!|Opteron/Athlon64の「PowerNow!」機能をサポートする|*|
||>|>|CPUFreq processor drivers|
||ACPI Support|ACPI機能を有効にする|*|
||Cyrix MediaGX/NatSemi Geode Suspend Modulation|Cyrix MediaGX/NatSemi Geodeのサスペンド機能をサポートする||
||Intel Enhanced SpeedStep(deprecated)|Intelプロセッサの拡張SpeedStepをサポートする|*|
||+ Built-in tables for Banias CPUs|BaniasコアのCPUの内部テーブルを使用する|*|
||Intel Speedstep on ICH-M chipsets (ioport interface)|ICH-MチップセットのSpeedStepをサポートする|*|
||Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)|440BX/ZX/MXチップセットのSpeedStepをサポートする|*|
||Intel Pentium 4 clock modulation|Pentium 4のクロック調整機能をサポートする|M|
||nVidia nForce2 FSB changing|NVIDIA nForce2のFSB(Front Side Bus)動作周波数調整機能をサポートする||
||Transmeta LongRun|Transmeta社のプロセッサのLongRun機能をサポートする|*|
||VIA Cyrix III Longhaul|VIA Cyrix IIIのLonghaul機能をサポートする||
||VIA C7 Enhanced PowerSaver|VIA C7の拡張PowerSaver機能をサポートする||
||>|>|shared options|
||/proc/acpi/processor/../performance interface (deprecated)|主にデバッグ目的に使うprocfsインタフェースを有効にする||
||Relaxed speedstep capability checks|SpeedStepの機能チェックを一部省略する||
|>|CPU idle PM support||*|

***バスのオプション指定(PCI etc) [#y0901326]
|>|設定項目|説明|推奨|h

***実行可能ファイルのフォーマット関係 [#me02e644]
|>|設定項目|説明|推奨|h

***ネットワークの設定 [#kb222c67]
|>|設定項目|説明|推奨|h

***デバイスドライバの設定 [#k60cafbd]
|>|設定項目|説明|推奨|h

***ファームウェア(機器に内臓されるコントロールドライバ)の設定 [#r35040a4]
|>|設定項目|説明|推奨|h

***ファイルシステム関係 [#u46f46e7]
|>|設定項目|説明|推奨|h

***カーネルデバッグ関係(Hackingと言っている) [#j6e47524]
|>|設定項目|説明|推奨|h

***セキュリティオプション [#v2a12df6]
|>|設定項目|説明|推奨|h

***暗号機能に関する設定 [#fbf0f095]
|>|設定項目|説明|推奨|h

***仮想化に関する設定 [#p128adcd]
|>|設定項目|説明|推奨|h
|>|Kernel-based Virtual Machine (KVM) support|||
||KVM for Intel processors support|||
||KVM for AMD processors support|||
|>|Linux hypervisor example code|||
|>|PCI driver for virtio devices (EXPERIMENTAL)|||
|>|Virtio balloon driver (EXPERIMENTAL)|||

***ライブラリ・モジュール [#gff095af]
|>|設定項目|説明|推奨|h
|>|CRC-CCITT functions||M|
|>|CRC16 functions||M|
|>|CRC calculation for the T10 Data Integrity Field|||
|>|CRC ITU-T V.41 functions||M|
|>|CRC32 functions||*|
|>|CRC7 functions|||
|>|CRC32c (Castagnoli, et al) Cyclic Redundancy-Check||*|

*起動設定 [#ha101195]
 # emacs /etc/grub.conf
   title CentOS (2.6.28.6)
        root (hd0,0)
        kernel /vmlinuz-2.6.28.6 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.28.6.img

*Kernelモジュールの作成 [#t9661790]
 # make bzImage
 # cp /usr/src/linux-2.6.28.6/arch/i386/boot/bzImage /boot/vmlinuz-2.6.28.6

*initrd.img ファイルの作成 [#m982fb51]
 # make modules
 # make modules_install
 # mkinitrd /boot/initrd-2.6.28.6.img 2.6.28.6

*GRUBの起動画像の変更 [#g1d3a98e]
/boot/grubにある、splash.xpm.gzの画像を変更することで、起動時の画像を変更することができる。注意点は640x480ドットの14色で作成することである。そのためImagemagicが入っていれば以下の手順で画像を変換できる。
 # convert -colors 14 gazo-source.gif splash.xpm
 # gzip splash.xpm
 # cp splash.xpm.gz /boot/grub/splash.xpm.gz

*起動後のチェック [#acbde166]
メモリ空間をチェックする。
 # cat /proc/meminfo
ロードされたプログラムの確認
 # dmesg
モジュールのロード状況
 # lsmod                      <- 横に、Name サイズ 利用Page数(1page=4kB)の順

*必要なモジュールのロードと解除 [#df2050af]
例:MSDOSのファイルシステムのモジュールロード
 # insmod /usr/src/linux/modules/msdos.o
例:MSDOSのファイルシステムのモジュール解除
 # rmmod msdos