「カーネル/伝統的なコンパイル方法」の版間の差分
(同期) |
細 (→モジュールをインストールする: 英文消し忘れ) |
||
(3人の利用者による、間の15版が非表示) | |||
1行目: | 1行目: | ||
[[Category:カーネル]] |
[[Category:カーネル]] |
||
+ | [[en:Kernel/Traditional compilation]] |
||
− | [[fr:Compiler un nouveau noyau]] |
||
− | [[ |
+ | [[pt:Kernel (Português)/Traditional compilation]] |
− | [[ |
+ | [[ru:Kernel (Русский)/Traditional compilation]] |
− | [[ |
+ | [[zh-hans:Kernel/Traditional compilation]] |
+ | この記事では、'''kernel.org のソース'''からカスタムカーネルをビルドする方法を紹介します。この方法は、全てのディストリビューションで共通の伝統的な方法です。あなたの経験量にもよりますが、[[カーネル/Arch build system]] を用いる方法よりも複雑です。[[Arch Build System]] のツールは、繰り返されるコンパイルタスクを効率的かつ安全にするために開発されメンテナンスされているということを考慮に入れておいてください。 |
||
− | [[zh-CN:Kernels/Compilation/Traditional]] |
||
− | この記事では '''kernel.org のソース'''からカスタムカーネルを作成する方法を説明しています。このカーネルをコンパイルする方法は全てのディストリビューションで共通の伝統的な方法です。経験にもよりますが、[[カーネル/コンパイル/Arch Build System|Arch Build System を使用する方法]]よりも複雑です。[[Arch Build System]] は何度もコンパイルする作業を効率的かつ安全に行うために開発されたツールです。 |
||
== 準備 == |
== 準備 == |
||
− | カーネルの準備 |
+ | カーネルの準備では root アカウントや root 権限 (つまり、[[sudo]]) を使う必要はありませんし、推奨されてもいません。 |
− | === コアパッケージ |
+ | === コアパッケージをインストールする === |
− | {{ |
+ | {{Pkg|base-devel}} [[メタパッケージ]]をインストールしてください。これにより、{{Pkg|make}} や {{Pkg|gcc}} などの必須パッケージがインストールされます。デフォルトの Arch カーネルの [https://github.com/archlinux/svntogit-packages/blob/packages/linux/trunk/PKGBUILD PKGBUILD] に記載されている次のパッケージもインストールすることを推奨します: {{Pkg|xmlto}}、{{Pkg|kmod}}、{{Pkg|inetutils}}、{{Pkg|bc}}、{{Pkg|libelf}}、{{Pkg|git}}、{{Pkg|cpio}}、{{Pkg|perl}}、{{Pkg|tar}}、{{Pkg|xz}}。 |
− | === カーネルコンパイル用のディレクトリを作成 === |
+ | === カーネルコンパイル用のディレクトリを作成する === |
− | カーネル用 |
+ | あなたのカーネル用の個別のビルドディレクトリを作成することをおすすめします。以下の例では {{ic|home}} ディレクトリに {{ic|kernelbuild}} を作成します: |
$ mkdir ~/kernelbuild |
$ mkdir ~/kernelbuild |
||
− | === カーネルソース |
+ | === カーネルのソースをダウンロードする === |
− | {{Warning|[[systemd]] は |
+ | {{Warning|[[systemd]] はバージョン 3.12 以上のカーネルを必要とします ([[cgroups]] の統一的な階層のサポートは 4.2 以上)。詳しくは {{ic|/usr/share/doc/systemd/README}} を見てください。}} |
− | + | https://www.kernel.org からカーネルのソースをダウンロードしてください。カーネルのソースファイルは、あなたが選んだカーネルの [[Wikipedia:ja:tar|tarball]] (''.tar.xz'') ファイルの形であるはずです。 |
|
− | ブラウザ |
+ | ブラウザから {{ic|tar.xz}} (''tarball'') リンクを右クリックしてダウンロードすることもできますし、HTTP や [[TFTP]]、[[Rsync]]、[[Git]] を使用するグラフィカルツールやコマンドラインツールでもダウンロードできます。 |
+ | {{Note| |
||
− | {{Note|ダウンロードしたカーネル tarball の PGP 署名を検証すると良いでしょう。信頼の輪が正当であることが確認されます。[http://kernel.org/signature.html#using-gnupg-to-verify-kernel-signatures kernel.org/signature] を見てください。}} |
||
+ | * ダウンロードしたカーネルの tarball の PGP 署名を検証するのは良いアイデアです。そうすれば、そのファイルが正規のものであることを確実にでき、信用の輪 (Web of Trust) を構築するのに役立ちます。[https://kernel.org/signature.html#using-gnupg-to-verify-kernel-signatures kernel.org/signature] を参照してください。 |
||
+ | * 特定のリリース (例: {{ic|-rc}} リリース) では、ダウンロードしたアーカイブと展開後のディレクトリが、このページの例で使用されている {{ic|''A''.''B''.''C''}} という命名形式に厳密には従っていません。必要に応じて調整してください。 |
||
+ | }} |
||
− | 以下のコマンドでは |
+ | 以下のコマンドでは、{{Pkg|wget}} がインストールされていて、{{ic|~/kernelbuild}} 内で {{Pkg|wget}} を使ってカーネル ''A''.''B''.''C'' を取得しています: |
$ cd ~/kernelbuild |
$ cd ~/kernelbuild |
||
− | $ wget https:// |
+ | $ wget <nowiki>https://cdn.kernel.org/pub/linux/kernel/</nowiki>v''A''.x/linux-''A''.''B''.''C''.tar.xz |
+ | ダウンロードしたファイルを信頼する前に、そのファイルの正しさを検証するべきです。まず、署名をダウンロードし、その署名を使って署名鍵のフィンガープリントを入手します。そして、そのフィンガープリントを使って実際の署名鍵を入手します: |
||
− | ビルドディレクトリの中で {{ic|wget}} を使わなかった場合は、tarball をビルドディレクトリに移動します: |
||
+ | $ wget <nowiki>https://cdn.kernel.org/pub/linux/kernel/</nowiki>v''A''.x/linux-''A''.''B''.''C''.tar.sign |
||
− | $ mv /path/to/linux-4.8.6.tar.xz ~/kernelbuild/ |
||
+ | $ gpg --list-packets linux-''A''.''B''.''C''.tar.sign |
||
+ | $ gpg --recv-keys ''前のコマンドで入手したフィンガープリント'' |
||
+ | 注意点として、この署名は tar アーカイブ (つまり、拡張子 {{ic|.tar}}) に対して生成されたものであって、圧縮された {{ic|.tar.xz}} ファイルのものではありません。{{ic|.tar.xz}} ファイルを {{ic|.tar}} へ展開する必要があります。{{pkg|xz}} がインストールされていることを確認してください。インストールされていれば、以下のようにできます: |
||
− | === カーネルソースの展開 === |
||
+ | $ unxz linux-''A''.''B''.''C''.tar.xz |
||
− | ビルドディレクトリの中にカーネル tarball を展開してください: |
||
+ | $ gpg --verify linux-''A''.''B''.''C''.tar.sign linux-''A''.''B''.''C''.tar |
||
+ | このコマンドで "Good signature" という文字列を含む出力が出てこなかった場合、この先に進んではなりません。 |
||
− | $ tar -xvJf linux-4.8.6.tar.xz |
||
+ | {{ic|wget}} をビルドディレクトリ内で使わなかった場合、tarball をビルドディレクトリ内へ移動する必要があります。例えば: |
||
− | カーネルツリーが完全にクリーンであることを確認したら準備完了です。カーネルソースを展開しただけではカーネルツリーがクリーンとは限りません。新しく作られたカーネルソースのディレクトリに移動して、{{ic|make mrproper}} コマンドを実行してください: |
||
− | $ |
+ | $ mv /path/to/linux-''A''.''B''.''C''.tar.xz ~/kernelbuild/ |
− | $ make clean && make mrproper |
||
+ | ==== 準公式カーネルミラー ==== |
||
− | == 設定 == |
||
+ | いくつかの kernel.org Git リポジトリの準公式ミラーがそれぞれのメンテナによって提供されています。これらのミラーは kernel.org よりも clone が速い傾向にあります。 |
||
− | あなたのコンピュータの正確な仕様にあわせてデフォルトカーネルをカスタマイズします。一番重要なステップです。カーネルコンフィグは {{ic|.config}} ファイルで設定し、[[カーネルモジュール]]の使用も含めます。 |
||
+ | * メインラインブランチは Linus Torvalds の GitHub アカウントでミラーリングされています: https://github.com/torvalds/linux.git 。 |
||
− | {{Note|まだこの段階で root アカウントや root 権限は必要ありません。}} |
||
+ | * 安定ブランチは Greg Kroah-Hartman の GitHub アカウントでミラーリングされています: https://github.com/gregkh/linux 。[http://kroah.com/log/blog/2019/06/15/linux-stable-tree-mirror-at-github/] |
||
+ | === カーネルのソースを展開する === |
||
− | {{ic|.config}} のオプションを適切に設定することで、カーネルとコンピュータは効率的に機能します。 |
||
+ | ビルドディレクトリ内で、カーネルの tarball を展開してください: |
||
− | === カーネルの設定 === |
||
+ | $ tar -xvf linux-''A''.''B''.''C''.tar |
||
− | カーネルを設定する方法は2つ存在します: |
||
− | * A. 公式カーネルの Arch のデフォルト設定を使う (推奨) |
||
− | * B. 実行中のカーネルの設定に一致する設定ファイルを生成する (カーネルの設定を細かくカスタマイズしたい場合) |
||
− | + | パーミッションエラーが発生しないことを確実にするには、[[Wikipedia:ja:Chown|chown]] を実行してフォルダの所有者を現在のユーザに変更する必要があります。 |
|
+ | フォルダとその中の全ファイルの所有者を現在のユーザに変更するには、chown コマンドを実行してください。 |
||
− | ==== A. Arch のデフォルト設定 ==== |
||
+ | $ chown -R $USER:$USER linux-''A''.''B''.''C'' |
||
− | この方法では Arch のデフォルトのカーネル設定を使ってカスタムカーネルの {{ic|.config}} ファイルを作成します。標準の Arch カーネルが使われていることを確認して、カスタムカーネルのソースディレクトリの中で以下のコマンドを実行してください: |
||
+ | これにより、フォルダ内の全ファイルの所有者があなたになりました。なので、パーミッション関連のエラーは発生しません。 |
||
− | $ zcat /proc/config.gz > .config |
||
+ | 準備を終える前に、カーネルツリーが絶対的にクリーンであることを確認してください。解凍後のソースツリーがクリーンであると思い込んではなりません。確認するには、新しく作成したカーネルソースディレクトリに移動し、{{ic|make mrproper}} コマンドを実行してください: |
||
− | {{Warning|現在の {{ic|.config}} ファイルを使ってカーネルをコンパイルする場合、下に記載しているユーザーインターフェイスのどれかを使って {{ic| General Setup --->}} オプションでカーネルバージョンの名前を変更してください。名前を変更しなかった場合、既存のカーネルを間違って上書きしてしまう危険があります。}} |
||
+ | $ cd linux-''A''.''B''.''C'' |
||
− | ==== B. 設定の生成 ==== |
||
+ | $ make mrproper |
||
+ | {{Note|{{ic|mrproper}} Make ターゲットは {{ic|clean}} ターゲットに依存しているため、これら両方を実行する必要はありません。参考までに [https://unix.stackexchange.com/q/387640] を参照してください。}} |
||
− | {{tip|この方法を使用する場合は、今後使うかもしれないあらゆるデバイスを接続してください。}} |
||
+ | == カーネルの設定 == |
||
− | カーネル 2.6.32 から、{{ic|localmodconfig}} コマンドは現在動作中のカーネルで使われないオプションを全て無効化してカスタムカーネルの {{ic|.config}} ファイルを作成するようになりました。つまり、現在使用されているオプションだけが有効になります。 |
||
+ | これは、あなたのコンピュータの仕様を正確に反映させるために、デフォルトのカーネルをカスタマイズする作業の中で最も重要なステップです。カーネルの設定 (コンフィグレーション) は {{ic|.config}} ファイルで設定されます。このファイルには、[[カーネルモジュール]]の使用に関する設定も含まれています。{{ic|.config}} 内のオプションを適切に設定すれば、あなたのカーネルとコンピュータを最も効率的に機能させることができます。 |
||
− | この最小主義的なアプローチを使えば、あなたの環境にぴったりな効率的で無駄のない設定ができますが、欠点もあります。新しいハードウェアや周辺機器、その他の機能が使えないカーネルになってしまう可能性などです。 |
||
+ | {{Note|この段階では root アカウントや root 権限は必要ありません。}} |
||
− | {{Note|以下のコマンドを実行する前に、再度、使用するデバイス全てがコンピュータに接続されていることを確認してください。}} |
||
+ | カーネルの設定は、以下の2つを組み合わせて行うことができます: |
||
− | $ make localmodconfig |
||
+ | |||
+ | * 公式カーネルの Arch のデフォルト設定を使う (推奨) |
||
+ | * カーネルオプションを手動で設定する (任意。高度な方法であり、推奨されません) |
||
+ | |||
+ | === Arch のデフォルト設定 === |
||
+ | |||
+ | この方法では、Arch のデフォルトのカーネル設定を使ってカスタムカーネル用の {{ic|.config}} ファイルを作成します。標準の Arch カーネルが実行中である場合、カスタムカーネルのソースディレクトリ内で以下のコマンドを実行することで、現在実行中のカーネルの {{ic|.config}} ファイルを作成できます: |
||
+ | |||
+ | $ zcat /proc/config.gz > .config |
||
+ | |||
+ | あるいは、オンラインで [https://github.com/archlinux/svntogit-packages/blob/packages/linux/trunk/config official Arch Linux カーネル]パッケージからデフォルトの設定を入手できます。 |
||
+ | |||
+ | {{Tip| |
||
+ | * カーネルをアップグレードすると、一部のオプションが変更されたり、削除されたりする場合があります。この場合、[[#コンパイル]] 時に {{ic|make}} を実行すると、バージョン間で変更された設定オプションに答えるよう尋ねてきます。このプロンプトを表示させずにデフォルトを適用させるには、{{ic|make olddefconfig}} を実行してください。 |
||
+ | * [[modprobed-db]] を使用することで、不要なモジュールをデフォルトの Arch {{ic|.config}} から取り除くことができます。[[modprobed-db#データベースを生成する|適切に生成されたデータベース]]を入手できたら、{{ic|1=make LSMOD=$HOME/.config/modprobed.db localmodconfig}} を実行して、{{ic|modprobed.db}} データベース内に存在しないモジュールをすべて取り除いてください。 |
||
+ | }} |
||
+ | |||
+ | {{Warning|現在の {{ic|.config}} ファイルを使ってカーネルをコンパイルする場合、{{ic|.config}} を直接編集するか、あるいは [[#高度な設定]] に記載されているユーザインターフェイスの ''General Setup > Local version - append to kernel release'' を使って、カーネルバージョン "CONFIG_LOCALVERSION" を忘れずに変更してください。名前を変更しなかった場合、既存のカーネルを間違って上書きしてしまう危険があります。}} |
||
=== 高度な設定 === |
=== 高度な設定 === |
||
− | {{Tip|カスタムカーネルで起動したりシャットダウンするときに大量のメッセージを表示させたくない場合、デバッグオプションは無効化すると良いでしょう。}} |
+ | {{Tip|カスタムカーネルで起動したりシャットダウンするときに大量のメッセージを表示させたくない場合、関連するデバッグオプションは無効化すると良いでしょう。}} |
− | カーネル |
+ | カーネルの設定を調整するためのツールが複数存在します。これらを使えば、何時間も掛けてコンパイル中に利用可能なオプションを1つずつすべて手作業で設定する手間を省けます。 |
− | {{Note|以下のツールはカーネルの機能について3つの設定オプションを |
+ | {{Note|以下のツールは各カーネルの機能について3つの設定オプションを提供しています: {{ic|y}} (有効)、{{ic|n}} (無効)、{{ic|m}} (カーネルモジュールとして有効、必要なときにロード)。}} |
+ | 以下がそのツールです: |
||
− | * {{ic|make menuconfig}}: ncurses コマンドラインインターフェイス ({{ic|nconfig}} によって置き換えられています) |
||
− | * {{ic|make nconfig}}: コマンドラインの新しい ncurses インターフェイス |
||
− | * {{ic|make xconfig}}: ユーザーフレンドリーなグラフィカルインターフェイス。依存パッケージとして {{Pkg|packagekit-qt4}}{{Broken package link|package not found}} をインストールする必要があります。各オプションの情報を簡単に確認することができるので初心者向けです。 |
||
− | * {{ic|make gconfig}}: GTK+ を使用する、xconfig と同じようなグラフィカル設定 |
||
+ | * {{ic|make menuconfig}}: コマンドライン ncurses インターフェイス。{{ic|nconfig}} が後継です。 |
||
− | カーネルソースディレクトリの中で上記のコマンドを実行してください。新しい {{ic|.config}} ファイルが作成されるか、既存のファイルが上書きされます。任意の設定は全て自動的に有効になりますが、新しい設定オプションは自動的に選択されない場合があります (古いカーネル {{ic|.config}} を使用した場合)。 |
||
+ | * {{ic|make nconfig}}: より新しい、コマンドライン用の ncurses インターフェイス。 |
||
+ | * {{ic|make xconfig}}: ユーザーフレンドリーなグラフィカルインターフェイス。依存パッケージとして {{Pkg|packagekit-qt5}} をインストールする必要があります。簡単に操作でき、各オプションの情報も表示されるので、(特に初心者に) おすすめです。 |
||
+ | * {{ic|make gconfig}}: グラフィカルな設定方法。xconfig に似ていますが、GTK を使用します。{{Pkg|gtk2}}、{{Pkg|glib2}}、そして {{AUR|libglade}} を必要とします。 |
||
+ | カーネルソースディレクトリの中で上記のどれかのコマンドを実行してください。新しい {{ic|.config}} ファイルが作成されるか、既存のファイルが上書きされます。任意の設定は全て自動的に有効になりますが、新しい設定オプションは自動的に選択されない場合があります (古いカーネル {{ic|.config}} を使用した場合)。 |
||
− | 変更を加えたら {{ic|.config}} ファイルを保存してください。ソースディレクトリの外にバックアップすると良いでしょう。全てのオプションを適切に設定するまで複数回はバックアップが必要になると思われます。 |
||
+ | 変更を加えたら {{ic|.config}} ファイルを保存してください。ソースディレクトリの外にバックアップすると良いでしょう。すべてのオプションを適切に設定するまで、複数回これを繰り返す必要があるかもしれません。 |
||
− | 設定がよくわからない場合は、少しずつオプションを変更してコンパイルしてください。ビルドしたカーネルで起動できない場合、[https://www.archlinux.org/news/users-of-unofficial-kernels-must-enable-devtmpfs-support/ こちら] に必須のコンフィグアイテムのリストが存在します。 |
||
+ | 設定がよくわからない場合は、少しずつオプションを変更してコンパイルしてください。ビルドしたカーネルで起動できない場合、[https://archlinux.org/news/users-of-unofficial-kernels-must-enable-devtmpfs-support/ ここ]に必須のコンフィグアイテムのリストが存在します。 |
||
− | ライブ CD から {{ic|lspci -k}} を実行すると使用しているカーネルモジュールの名前が表示されます。一番重要なのは [[systemd]] を使うのに必要な [[cgroups]] のサポートです。 |
||
+ | ライブメディアから {{ic|lspci -k #}} を実行すると、使用中のカーネルモジュールの名前のリストが出力されます。一番重要なのは、[[cgroups]] サポートを維持しなければならないことです。これは [[systemd]] に必要不可欠です。詳細は、[[Gentoo:Kernel/Gentoo Kernel Configuration Guide]]、[[Gentoo:Intel#Kernel]] (Intel プロセッサ)、[[Gentoo:Ryzen#Kernel]] (AMD Ryzen プロセッサ) を参照してください。 |
||
− | == コンパイルとインストール == |
||
− | {{Tip|使用しているプロセッサの命令セットに {{Pkg|gcc}} を最適化したい場合、カーネルソースディレクトリ内の {{ic|arch/x86/Makefile}} (i686) または {{ic|arch/x86_64/Makefile}} (86_64) を編集してください: |
||
− | * {{ic|Processor type and features > Processor Family}} で選択した {{ic|CONFIG_MK8,CONFIG_MPSC,CONFIG_MCORE2,CONFIG_MATOM,CONFIG_GENERIC_CPU}} を確認してください。 |
||
− | * {{ic|-march<nowiki>=</nowiki>native}} の cc-option フラグを Processor Family で選択した文字列に変えてください。例: {{ic|cflags-$(CONFIG_MK8) +<nowiki>=</nowiki> $(call cc-option,-march<nowiki>=</nowiki>native)}}。{{ic|-march<nowiki>=</nowiki>native}} でコンパイルする場合におそらく一番良い方法です。 |
||
− | * 32ビットカーネルの場合、代わりに {{ic|arch/x86/Makefile_32.cpu}} を編集して使用しているプロセッサにあわせて {{ic|-march<nowiki>=</nowiki>native}} を設定してください。}} |
||
− | + | == コンパイル == |
|
+ | |||
− | コンパイルにかかる時間は15分程度から1時間以上まで幅広く、設定したカーネルコンフィグやプロセッサの性能によって大きく変わります。詳しくは [[Makepkg#MAKEFLAGS|Makeflags]] を見てください。カスタムカーネルの {{ic|.config}} ファイルを設定したら、ソースディレクトリの中で以下のコマンドを実行するとコンパイルが始まります: |
||
+ | {{Tip|あなたのプロセッサの命令セットに最適化するように {{Pkg|gcc}} を設定するには、カーネルソースディレクトリ内の {{ic|arch/x86/Makefile}} を編集してください: |
||
+ | |||
+ | * {{ic|Processor type and features > Processor Family}} で選択した {{ic|CONFIG_MK8,CONFIG_MPSC,CONFIG_MCORE2,CONFIG_MATOM,CONFIG_GENERIC_CPU}} を探してください。 |
||
+ | * {{ic|call cc-options}} フラグを {{ic|1=-march=native}} から、Processor Family で選択したものへ変えてください。例: {{ic|1=cflags-$(CONFIG_MK8) += $(call cc-option,-march=native)}}。これは、{{ic|1=-march=native}} でコンパイルする場合におそらく一番良い方法です。 |
||
+ | }} |
||
+ | |||
+ | コンパイルにかかる時間は15分程度から1時間以上まで幅広く、設定したカーネルコンフィグやプロセッサの性能によって大きく変わります。カスタムカーネルの {{ic|.config}} ファイルを設定したら、ソースディレクトリの中で以下のコマンドを実行するとコンパイルが始まります: |
||
$ make |
$ make |
||
+ | {{Tip|{{ic|-j''X''}} 引数を付けて ''make'' を実行すれば、コンパイルを速めることができます ({{ic|''X''}} は並列ジョブ数です)。マシンの CPU コアの数を設定すると、最も速くなることが多いです。例えば、2 コアのプロセッサの場合は {{ic|make -j2}} となります。詳細は [[makepkg#コンパイル時間を短縮する]] を参照してください。}} |
||
− | === モジュールのコンパイル === |
||
− | {{warning|ここから、コマンドは root あるいは root 権限で実行する必要があります。通常ユーザーでは失敗します。}} |
||
+ | == インストール == |
||
− | カーネルがコンパイルされたら、カーネルのモジュールをコンパイルします。root か root 権限を使って、以下のコマンドを実行してください: |
||
+ | |||
+ | === モジュールをインストールする === |
||
+ | |||
+ | カーネルがコンパイルできたら、次はモジュールです。まず、モジュールをビルドしてください: |
||
+ | |||
+ | $ make modules |
||
+ | |||
+ | 次に、モジュールをインストールしてください。root として、あるいは root 権限で、以下のコマンドを実行してください: |
||
# make modules_install |
# make modules_install |
||
− | + | これで、コンパイルされたモジュールが {{ic|/lib/modules/''A''.''B''.''C''/}} へコピーされます。これにより、使用されるカーネル毎にモジュールが分けられるようになっています。 |
|
+ | |||
+ | {{Tip|標準的な Linux カーネルでは配布されていないモジュールを必要とする場合、完了した後にカスタムカーネル用にモジュールをコンパイルしてください。そのようなモジュールは基本的に実行中の環境で別個に明示的にインストールします。例えば [[NVIDIA#カスタムカーネル]] を見てください。}} |
||
+ | === カーネルを /boot ディレクトリにコピーする === |
||
− | {{Tip|標準的な Linux カーネルでは配布されていないモジュールを必要とする場合、完了した後にカスタムカーネル用にモジュールをコンパイルしてください。そのようなモジュールは基本的に実行中の環境で別個に明示的にインストールします。例えば [[NVIDIA#カスタムカーネル]]を見てください。}} |
||
− | === /boot ディレクトリにカーネルをコピー === |
||
{{Note|{{ic|bzImage}} カーネルファイルは使用しているシステムアーキテクチャにあわせて適切なディレクトリからコピーしてください。下を参照。}} |
{{Note|{{ic|bzImage}} カーネルファイルは使用しているシステムアーキテクチャにあわせて適切なディレクトリからコピーしてください。下を参照。}} |
||
− | カーネル |
+ | カーネルをコンパイルすると、カーネルの圧縮された {{ic|bzImage}} (big zImage) が生成されます。生成されない場合、以下を実行する必要があります: |
+ | make bzImage |
||
− | * 32ビット (i686) カーネル: |
||
− | # cp -v arch/x86/boot/bzImage /boot/vmlinuz-linux48 |
||
+ | このファイルは {{ic|/boot}} ディレクトリにコピーして名前を変える必要があります。名前に {{ic|vmlinuz-}} という接頭辞を付ければ、好きな名前を付けることができます。以下の例では、コンパイルされ、インストールされた ''A''.''B''.''C'' カーネルがコピーされ、{{ic|vmlinuz-linux''AB''}} という名前に変更されます: |
||
− | * 64ビット (x86_64) カーネル: |
||
− | # cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-linux48 |
||
+ | # cp -v arch/x86/boot/bzImage /boot/vmlinuz-linux''AB'' |
||
− | === 初期 RAM ディスクの作成 === |
||
− | {{Note|initramfs イメージファイルの名前は自由に付けられます。ただし、{{ic|linux<major revision><minor revision>}} という命名規則に従うことを推奨します。例えば、'linux48' という名前であればメジャーバージョンが '4' でマイナーリビジョンが '8' の 4.8 カーネルです。複数のカーネルを保持するときや、定期的に mkinitcpio を使ったりサードパーティ製のモジュールをビルドする場合に楽になります。}} |
||
+ | === 初期 RAM ディスクを作成する === |
||
− | {{Tip|LILO ブートローダーを使用していてカーネルのデバイスマッパードライバーが使えない場合は、先に {{ic|modprobe dm-mod}} を実行してください。}} |
||
+ | |||
+ | {{Note|Initramfs イメージファイルの名前は自由に付けられます。ただし、{{ic|linux''major_revision<wbr>minor_revision''}} という命名規則に従うことを推奨します。複数のカーネルを保持するときや、定期的に mkinitcpio を使ったりサードパーティ製のモジュールをビルドする場合に楽になります。}} |
||
+ | |||
+ | {{Tip|LILO ブートローダーを使用していてカーネルのデバイスマッパードライバーが使えない場合は、先に {{ic|modprobe dm-mod}} を実行しなければなりません。}} |
||
初期 RAM ディスクが何なのか知らない場合は [[wikipedia:ja:Initrd|Wikipedia]] や [[mkinitcpio]] を見てください。 |
初期 RAM ディスクが何なのか知らない場合は [[wikipedia:ja:Initrd|Wikipedia]] や [[mkinitcpio]] を見てください。 |
||
− | ==== 自動 |
+ | ==== 自動化されたプリセットを用いる方法 ==== |
− | 既存の [[Mkinitcpio#イメージ作成とアクティベーション|mkinitcpio プリセット]]をコピーして変更を加えることで公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成できます。カーネルを再コンパイルする場合などに有用です (例: アップデートする場合など)。以下の例では、標準の Arch カーネルのプリセットファイルをコピーして、上でインストールしたカーネル 4.8 用に変更を加えます。 |
||
+ | 既存の [[Mkinitcpio#イメージ作成とアクティベーション|mkinitcpio プリセット]]をコピーして変更を加えることで公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成できます。カーネルを再コンパイルする場合などに有用です (例: アップデートする場合など)。以下の例では、標準の Arch カーネルのプリセットファイルをコピーして、上でインストールしたカーネル ''A''.''B''.''C'' 用に変更を加えます。 |
||
− | まず、既存のプリセットファイルをコピーして、{{ic|bzImage}} をコピーしたときに {{ic|/boot/vmlinuz-}} の後ろにつけたカスタムカーネルの名前と一致するように名前を変更します (上記の場合、{{ic|linux48}}): |
||
+ | まず、既存のプリセットファイルをコピーして、{{ic|bzImage}} をコピーしたときに {{ic|/boot/vmlinuz-}} の後ろにつけたカスタムカーネルの名前と一致するように名前を変更してください: |
||
− | # cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux48.preset |
||
+ | # cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux''AB''.preset |
||
− | 次に、ファイルを編集してカスタムカーネル用に変更します。{{ic|ALL_kver<nowiki>=</nowiki>}} パラメータも {{ic|bzImage}} をコピーしたときに付けたカスタムカーネルの名前と合わせる必要があります: |
||
+ | 次に、ファイルを編集してカスタムカーネル用に変更します。{{ic|1=ALL_kver=}} パラメータも {{ic|bzImage}} をコピーしたときに付けたカスタムカーネルの名前と合わせる必要があります: |
||
− | {{hc|/etc/mkinitcpio.d/linux48.preset| |
||
+ | |||
+ | {{hc|/etc/mkinitcpio.d/linux''AB''.preset|2= |
||
... |
... |
||
− | ALL_kver |
+ | ALL_kver="/boot/vmlinuz-linux''AB''" |
... |
... |
||
− | default_image |
+ | default_image="/boot/initramfs-linux''AB''.img" |
... |
... |
||
− | fallback_image |
+ | fallback_image="/boot/initramfs-linux''AB''-fallback.img" |
+ | }} |
||
最後に、公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成してください: |
最後に、公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成してください: |
||
− | # mkinitcpio -p |
+ | # mkinitcpio -p linux''AB'' |
+ | |||
+ | ==== 手動による方法 ==== |
||
− | ==== 手動で作成する方法 ==== |
||
プリセットファイルを使用する以外にも、mkinitcpio を使って手動で initramfs ファイルを生成することもできます。コマンドの構文は以下の通りです: |
プリセットファイルを使用する以外にも、mkinitcpio を使って手動で initramfs ファイルを生成することもできます。コマンドの構文は以下の通りです: |
||
− | # mkinitcpio -k |
+ | # mkinitcpio -k ''kernel_version'' -g /boot/initramfs-''file_name''.img |
− | * {{ic|-k}} (--kernel |
+ | * {{ic|-k}} ({{ic|--kernel ''kernel_version''}}): initramfs イメージを生成する際に用いるモジュールを指定します。{{ic|''kernel_version''}} は、カスタムカーネルのモジュールディレクトリ ({{ic|/usr/lib/modules/}} 内にあるディレクトリ) の名前と同じにします (カーネルイメージへのパスも使用できます)。 |
− | * {{ic|-g}} (--generate |
+ | * {{ic|-g}} ({{ic|--generate ''file_name''}}): {{ic|/boot}} ディレクトリに生成する initramfs ファイルの名前を指定します。上記の命名規則を使うことを推奨します。 |
− | 例えば、上でインストールした |
+ | 例えば、上でインストールした ''A''.''B''.''C'' カスタムカーネルの場合のコマンドは以下のようになります: |
− | # mkinitcpio -k |
+ | # mkinitcpio -k ''A''.''B''.''C'' -g /boot/initramfs-linux''AB''.img |
− | === System.map |
+ | === System.map をコピーする === |
+ | |||
− | {{ic|System.map}} ファイルは Linux を起動するのに必ずしも必須ではありません。一種の"電話帳"みたいなものでカーネルの特定のビルドの機能が記載されています。{{ic|System.map}} にはカーネルのシンボルの一覧 (つまり機能や変数の名前など) とそれぞれのアドレスが含まれます。この"アドレスマッピングのシンボル名"を使うのは: |
||
+ | {{ic|System.map}} ファイルは Linux を起動するのに必ずしも必須ではありません。一種の"電話帳"みたいなもので、カーネルの特定のビルドの機能が記載されています。{{ic|System.map}} にはカーネルのシンボルの一覧 (つまり、関数名や変数名など) とそれぞれのアドレスが含まれます。この "シンボル名とアドレスの対応表" を使うのは: |
||
* klogd や ksymoops などの一部プロセス |
* klogd や ksymoops などの一部プロセス |
||
− | * カーネル |
+ | * カーネルのクラッシュ中に情報 (つまり、どの関数でクラッシュしたかなど) をスクリーンへ出力するために OOPS ハンドラによって使用されます。 |
− | {{Tip| |
+ | {{Tip|[[EFI システムパーティション]]は FAT32 でフォーマットされているため、シンボリックリンクをサポートしません。}} |
− | {{ic|/boot}} がシンボリックリンクをサポートしているファイルシステム (つまり FAT32 以外のファイルシステム) 上にある場合、{{ic|System.map}} を {{ic|/boot}} にコピーして、カーネルの名前をファイルの名前の後ろに加えてください。それから {{ic|/boot/System.map}} から {{ic|/boot/System.map- |
+ | {{ic|/boot}} がシンボリックリンクをサポートしているファイルシステム (つまり FAT32 以外のファイルシステム) 上にある場合、{{ic|System.map}} を {{ic|/boot}} にコピーして、カーネルの名前をコピー先のファイルの名前の後ろに加えてください。それから {{ic|/boot/System.map}} から {{ic|/boot/System.map-linux''AB''}} にシンボリックリンクを作成してください: |
+ | |||
− | # cp System.map /boot/System.map-YourKernelName |
||
− | # |
+ | # cp System.map /boot/System.map-linux''AB'' |
+ | # ln -sf /boot/System.map-linux''AB'' /boot/System.map |
||
以上の全ての手順を完了したら、以下の3つのファイルと1つのシンボリックリンクがあなたの {{ic|/boot}} ディレクトリに追加されているはずです: |
以上の全ての手順を完了したら、以下の3つのファイルと1つのシンボリックリンクがあなたの {{ic|/boot}} ディレクトリに追加されているはずです: |
||
− | * カーネル: {{ic|vmlinuz-YourKernelName}} |
||
− | * Initramfs: {{ic|Initramfs-YourKernelName.img}} |
||
− | * システムマップ: {{ic|System.map-YourKernelName}} |
||
− | * システムマップのカーネルシンボリックリンク |
||
+ | * カーネル: {{ic|vmlinuz-linux''AB''}} |
||
− | == ブートローダーの設定 == |
||
+ | * Initramfs: {{ic|initramfs-linux''AB''.img}} |
||
+ | * System Map: {{ic|System.map-linux''AB''}} |
||
+ | * System Map のカーネルのシンボリックリンク: {{ic|System.map}} ({{ic|System.map-linux''AB''}} へのシンボリックリンク) |
||
+ | |||
+ | == ブートローダの設定 == |
||
+ | |||
+ | ブートローダの設定ファイルに新しいカーネルのエントリを追加してください。利用可能なブートローダは [[Arch ブートプロセス#機能比較]] を、その他の情報は関連する wiki ページを参照してください。 |
||
+ | |||
+ | {{Tip|カーネルのソースには [[LILO]] のエントリを自動で作成するスクリプトが含まれています。他のブートローダを使用する場合は、これは安全に無視できます。}} |
||
+ | |||
+ | == 参照 == |
||
+ | * https://cateee.net/lkddb/web-lkddb/ : カーネル設定の文字列とその説明のアルファベット順の包括的なリストがあります。 |
||
− | ブートローダーの設定ファイルに新しいカーネルのエントリを追加してください。[[GRUB]], [[LILO]], [[GRUB2]], [[Syslinux]], [[systemd-boot]], [[REFInd]] を見てください。 |
||
+ | {{TranslationStatus|Kernel/Traditional compilation|2023-06-10|774832}} |
||
− | {{Tip|カーネルのソースには LILO のエントリを自動で作成するスクリプトが含まれています: {{ic|$ arch/x86/boot/install.sh}}。更新するときは root で {{ic|lilo}} と入力してください。}} |
2023年6月10日 (土) 18:53時点における最新版
この記事では、kernel.org のソースからカスタムカーネルをビルドする方法を紹介します。この方法は、全てのディストリビューションで共通の伝統的な方法です。あなたの経験量にもよりますが、カーネル/Arch build system を用いる方法よりも複雑です。Arch Build System のツールは、繰り返されるコンパイルタスクを効率的かつ安全にするために開発されメンテナンスされているということを考慮に入れておいてください。
準備
カーネルの準備では root アカウントや root 権限 (つまり、sudo) を使う必要はありませんし、推奨されてもいません。
コアパッケージをインストールする
base-devel メタパッケージをインストールしてください。これにより、make や gcc などの必須パッケージがインストールされます。デフォルトの Arch カーネルの PKGBUILD に記載されている次のパッケージもインストールすることを推奨します: xmlto、kmod、inetutils、bc、libelf、git、cpio、perl、tar、xz。
カーネルコンパイル用のディレクトリを作成する
あなたのカーネル用の個別のビルドディレクトリを作成することをおすすめします。以下の例では home
ディレクトリに kernelbuild
を作成します:
$ mkdir ~/kernelbuild
カーネルのソースをダウンロードする
https://www.kernel.org からカーネルのソースをダウンロードしてください。カーネルのソースファイルは、あなたが選んだカーネルの tarball (.tar.xz) ファイルの形であるはずです。
ブラウザから tar.xz
(tarball) リンクを右クリックしてダウンロードすることもできますし、HTTP や TFTP、Rsync、Git を使用するグラフィカルツールやコマンドラインツールでもダウンロードできます。
以下のコマンドでは、wget がインストールされていて、~/kernelbuild
内で wget を使ってカーネル A.B.C を取得しています:
$ cd ~/kernelbuild $ wget https://cdn.kernel.org/pub/linux/kernel/vA.x/linux-A.B.C.tar.xz
ダウンロードしたファイルを信頼する前に、そのファイルの正しさを検証するべきです。まず、署名をダウンロードし、その署名を使って署名鍵のフィンガープリントを入手します。そして、そのフィンガープリントを使って実際の署名鍵を入手します:
$ wget https://cdn.kernel.org/pub/linux/kernel/vA.x/linux-A.B.C.tar.sign $ gpg --list-packets linux-A.B.C.tar.sign $ gpg --recv-keys 前のコマンドで入手したフィンガープリント
注意点として、この署名は tar アーカイブ (つまり、拡張子 .tar
) に対して生成されたものであって、圧縮された .tar.xz
ファイルのものではありません。.tar.xz
ファイルを .tar
へ展開する必要があります。xz がインストールされていることを確認してください。インストールされていれば、以下のようにできます:
$ unxz linux-A.B.C.tar.xz $ gpg --verify linux-A.B.C.tar.sign linux-A.B.C.tar
このコマンドで "Good signature" という文字列を含む出力が出てこなかった場合、この先に進んではなりません。
wget
をビルドディレクトリ内で使わなかった場合、tarball をビルドディレクトリ内へ移動する必要があります。例えば:
$ mv /path/to/linux-A.B.C.tar.xz ~/kernelbuild/
準公式カーネルミラー
いくつかの kernel.org Git リポジトリの準公式ミラーがそれぞれのメンテナによって提供されています。これらのミラーは kernel.org よりも clone が速い傾向にあります。
- メインラインブランチは Linus Torvalds の GitHub アカウントでミラーリングされています: https://github.com/torvalds/linux.git 。
- 安定ブランチは Greg Kroah-Hartman の GitHub アカウントでミラーリングされています: https://github.com/gregkh/linux 。[1]
カーネルのソースを展開する
ビルドディレクトリ内で、カーネルの tarball を展開してください:
$ tar -xvf linux-A.B.C.tar
パーミッションエラーが発生しないことを確実にするには、chown を実行してフォルダの所有者を現在のユーザに変更する必要があります。
フォルダとその中の全ファイルの所有者を現在のユーザに変更するには、chown コマンドを実行してください。
$ chown -R $USER:$USER linux-A.B.C
これにより、フォルダ内の全ファイルの所有者があなたになりました。なので、パーミッション関連のエラーは発生しません。
準備を終える前に、カーネルツリーが絶対的にクリーンであることを確認してください。解凍後のソースツリーがクリーンであると思い込んではなりません。確認するには、新しく作成したカーネルソースディレクトリに移動し、make mrproper
コマンドを実行してください:
$ cd linux-A.B.C $ make mrproper
カーネルの設定
これは、あなたのコンピュータの仕様を正確に反映させるために、デフォルトのカーネルをカスタマイズする作業の中で最も重要なステップです。カーネルの設定 (コンフィグレーション) は .config
ファイルで設定されます。このファイルには、カーネルモジュールの使用に関する設定も含まれています。.config
内のオプションを適切に設定すれば、あなたのカーネルとコンピュータを最も効率的に機能させることができます。
カーネルの設定は、以下の2つを組み合わせて行うことができます:
- 公式カーネルの Arch のデフォルト設定を使う (推奨)
- カーネルオプションを手動で設定する (任意。高度な方法であり、推奨されません)
Arch のデフォルト設定
この方法では、Arch のデフォルトのカーネル設定を使ってカスタムカーネル用の .config
ファイルを作成します。標準の Arch カーネルが実行中である場合、カスタムカーネルのソースディレクトリ内で以下のコマンドを実行することで、現在実行中のカーネルの .config
ファイルを作成できます:
$ zcat /proc/config.gz > .config
あるいは、オンラインで official Arch Linux カーネルパッケージからデフォルトの設定を入手できます。
高度な設定
カーネルの設定を調整するためのツールが複数存在します。これらを使えば、何時間も掛けてコンパイル中に利用可能なオプションを1つずつすべて手作業で設定する手間を省けます。
以下がそのツールです:
make menuconfig
: コマンドライン ncurses インターフェイス。nconfig
が後継です。make nconfig
: より新しい、コマンドライン用の ncurses インターフェイス。make xconfig
: ユーザーフレンドリーなグラフィカルインターフェイス。依存パッケージとして packagekit-qt5 をインストールする必要があります。簡単に操作でき、各オプションの情報も表示されるので、(特に初心者に) おすすめです。make gconfig
: グラフィカルな設定方法。xconfig に似ていますが、GTK を使用します。gtk2、glib2、そして libgladeAUR を必要とします。
カーネルソースディレクトリの中で上記のどれかのコマンドを実行してください。新しい .config
ファイルが作成されるか、既存のファイルが上書きされます。任意の設定は全て自動的に有効になりますが、新しい設定オプションは自動的に選択されない場合があります (古いカーネル .config
を使用した場合)。
変更を加えたら .config
ファイルを保存してください。ソースディレクトリの外にバックアップすると良いでしょう。すべてのオプションを適切に設定するまで、複数回これを繰り返す必要があるかもしれません。
設定がよくわからない場合は、少しずつオプションを変更してコンパイルしてください。ビルドしたカーネルで起動できない場合、ここに必須のコンフィグアイテムのリストが存在します。
ライブメディアから lspci -k #
を実行すると、使用中のカーネルモジュールの名前のリストが出力されます。一番重要なのは、cgroups サポートを維持しなければならないことです。これは systemd に必要不可欠です。詳細は、Gentoo:Kernel/Gentoo Kernel Configuration Guide、Gentoo:Intel#Kernel (Intel プロセッサ)、Gentoo:Ryzen#Kernel (AMD Ryzen プロセッサ) を参照してください。
コンパイル
コンパイルにかかる時間は15分程度から1時間以上まで幅広く、設定したカーネルコンフィグやプロセッサの性能によって大きく変わります。カスタムカーネルの .config
ファイルを設定したら、ソースディレクトリの中で以下のコマンドを実行するとコンパイルが始まります:
$ make
インストール
モジュールをインストールする
カーネルがコンパイルできたら、次はモジュールです。まず、モジュールをビルドしてください:
$ make modules
次に、モジュールをインストールしてください。root として、あるいは root 権限で、以下のコマンドを実行してください:
# make modules_install
これで、コンパイルされたモジュールが /lib/modules/A.B.C/
へコピーされます。これにより、使用されるカーネル毎にモジュールが分けられるようになっています。
カーネルを /boot ディレクトリにコピーする
カーネルをコンパイルすると、カーネルの圧縮された bzImage
(big zImage) が生成されます。生成されない場合、以下を実行する必要があります:
make bzImage
このファイルは /boot
ディレクトリにコピーして名前を変える必要があります。名前に vmlinuz-
という接頭辞を付ければ、好きな名前を付けることができます。以下の例では、コンパイルされ、インストールされた A.B.C カーネルがコピーされ、vmlinuz-linuxAB
という名前に変更されます:
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-linuxAB
初期 RAM ディスクを作成する
初期 RAM ディスクが何なのか知らない場合は Wikipedia や mkinitcpio を見てください。
自動化されたプリセットを用いる方法
既存の mkinitcpio プリセットをコピーして変更を加えることで公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成できます。カーネルを再コンパイルする場合などに有用です (例: アップデートする場合など)。以下の例では、標準の Arch カーネルのプリセットファイルをコピーして、上でインストールしたカーネル A.B.C 用に変更を加えます。
まず、既存のプリセットファイルをコピーして、bzImage
をコピーしたときに /boot/vmlinuz-
の後ろにつけたカスタムカーネルの名前と一致するように名前を変更してください:
# cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linuxAB.preset
次に、ファイルを編集してカスタムカーネル用に変更します。ALL_kver=
パラメータも bzImage
をコピーしたときに付けたカスタムカーネルの名前と合わせる必要があります:
/etc/mkinitcpio.d/linuxAB.preset
... ALL_kver="/boot/vmlinuz-linuxAB" ... default_image="/boot/initramfs-linuxAB.img" ... fallback_image="/boot/initramfs-linuxAB-fallback.img"
最後に、公式カーネルと同じようにカスタムカーネルの initramfs イメージを生成してください:
# mkinitcpio -p linuxAB
手動による方法
プリセットファイルを使用する以外にも、mkinitcpio を使って手動で initramfs ファイルを生成することもできます。コマンドの構文は以下の通りです:
# mkinitcpio -k kernel_version -g /boot/initramfs-file_name.img
-k
(--kernel kernel_version
): initramfs イメージを生成する際に用いるモジュールを指定します。kernel_version
は、カスタムカーネルのモジュールディレクトリ (/usr/lib/modules/
内にあるディレクトリ) の名前と同じにします (カーネルイメージへのパスも使用できます)。-g
(--generate file_name
):/boot
ディレクトリに生成する initramfs ファイルの名前を指定します。上記の命名規則を使うことを推奨します。
例えば、上でインストールした A.B.C カスタムカーネルの場合のコマンドは以下のようになります:
# mkinitcpio -k A.B.C -g /boot/initramfs-linuxAB.img
System.map をコピーする
System.map
ファイルは Linux を起動するのに必ずしも必須ではありません。一種の"電話帳"みたいなもので、カーネルの特定のビルドの機能が記載されています。System.map
にはカーネルのシンボルの一覧 (つまり、関数名や変数名など) とそれぞれのアドレスが含まれます。この "シンボル名とアドレスの対応表" を使うのは:
- klogd や ksymoops などの一部プロセス
- カーネルのクラッシュ中に情報 (つまり、どの関数でクラッシュしたかなど) をスクリーンへ出力するために OOPS ハンドラによって使用されます。
/boot
がシンボリックリンクをサポートしているファイルシステム (つまり FAT32 以外のファイルシステム) 上にある場合、System.map
を /boot
にコピーして、カーネルの名前をコピー先のファイルの名前の後ろに加えてください。それから /boot/System.map
から /boot/System.map-linuxAB
にシンボリックリンクを作成してください:
# cp System.map /boot/System.map-linuxAB # ln -sf /boot/System.map-linuxAB /boot/System.map
以上の全ての手順を完了したら、以下の3つのファイルと1つのシンボリックリンクがあなたの /boot
ディレクトリに追加されているはずです:
- カーネル:
vmlinuz-linuxAB
- Initramfs:
initramfs-linuxAB.img
- System Map:
System.map-linuxAB
- System Map のカーネルのシンボリックリンク:
System.map
(System.map-linuxAB
へのシンボリックリンク)
ブートローダの設定
ブートローダの設定ファイルに新しいカーネルのエントリを追加してください。利用可能なブートローダは Arch ブートプロセス#機能比較 を、その他の情報は関連する wiki ページを参照してください。
参照
- https://cateee.net/lkddb/web-lkddb/ : カーネル設定の文字列とその説明のアルファベット順の包括的なリストがあります。