「カーネル」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) →公式にサポートされているパッケージ: 章タイトルを修正 |
同期 |
||
| (5人の利用者による、間の70版が非表示) | |||
| 3行目: | 3行目: | ||
[[bs:Kernel]] |
[[bs:Kernel]] |
||
[[en:Kernel]] |
[[en:Kernel]] |
||
[[es:Kernel]] |
|||
[[fr:Kernel]] |
[[fr:Kernel]] |
||
[[ |
[[hu:Kernel]] |
||
[[pt:Kernel]] |
[[pt:Kernel]] |
||
[[ru:Kernel]] |
[[ru:Kernel]] |
||
[[zh-hans: |
[[zh-hans:内核]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related| |
{{Related|/Arch build system}} |
||
{{Related|/伝統的なコンパイル方法}} |
|||
{{Related|カーネルモジュールのコンパイル}} |
{{Related|カーネルモジュールのコンパイル}} |
||
{{Related|カーネル |
{{Related|カーネルモジュール}} |
||
{{Related|kernel-install}} |
|||
{{Related|sysctl}} |
{{Related|sysctl}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
Wikipedia によると: |
|||
:[[Wikipedia:ja:Linuxカーネル|Linux カーネル]]とは、モノリシックで Unix ライクなオープンソースのコンピュータ[[Wikipedia:ja:カーネル|オペレーティングシステムカーネル]]である。 |
|||
:''カーネルは、階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。アプリケーションとハードウェアレベルでの実際のデータ処理との間の架け橋である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。'' |
|||
[[Arch Linux]] は Linux カーネルをベースにしています。Arch Linux では最新の安定版カーネルに加え、様々な代替 Linux カーネルを利用することができます。この記事では、リポジトリで利用可能な選択肢のいくつかを、それぞれの簡単な説明とともにリストアップしています。また、システムのカーネルに適用できるパッチについての説明もあります。記事の最後には、カスタムカーネルのコンパイルについての概要と、様々な方法へのリンクがあります。 |
|||
カーネルパッケージは、パス {{ic|/usr/lib/modules/}} に[[インストール]]され、その後 {{ic|/boot/}} 内へ [[Wikipedia:ja:vmlinuz|vmlinuz]] 実行可能イメージをコピーするために使用されます。[https://archlinux.org/news/new-kernel-packages-and-mkinitcpio-hooks/] |
|||
メインラインの [[Wikipedia:ja:Linuxカーネル|Linux カーネル]]に加えて、Arch Linux では様々なカーネルを使うことができます。リポジトリから利用できるカーネルの一部と、それぞれの簡単な説明をこのページでリストアップしています。また、システムのカーネルに適用することができるパッチの説明も記述します。記事の最後にはカスタムカーネルのコンパイルの概要とリンクが付してあります。 |
|||
別のカーネルをインストールする場合や複数のカーネルを切り替える場合は、それに応じて[[ブートローダー]]を設定する必要があります。 |
|||
カーネルを古いバージョンにダウングレードする方法については、[[パッケージのダウングレード#カーネルのダウングレード|カーネルのダウングレード]]を参照してください。 |
|||
==公式サポートカーネル== |
== 公式サポートカーネル == |
||
公式にサポートされているカーネルについては、[https://bbs.archlinux.org/viewforum.php?id=22 フォーラム]でのコミュニティサポートと[[バグ報告ガイドライン|バグレポート]]を利用できます。 |
公式にサポートされているカーネルについては、[https://bbs.archlinux.org/viewforum.php?id=22 フォーラム]でのコミュニティサポートと[[バグ報告ガイドライン|バグレポート]]を利用できます。 |
||
* {{App|Stable|いくつかのパッチを適用したバニラな Linux カーネル。|https://www.kernel.org/|{{Pkg|linux}}}} |
|||
;{{Pkg|linux}} |
|||
* {{App|Hardened|カーネルおよびユーザ空間の脆弱性を緩和するための一連の堅牢化パッチを適用した、セキュリティ特化の Linux カーネルです。また、{{Pkg|linux}} よりも多くの上流のカーネル堅牢化機能を有効にします。|https://github.com/anthraxx/linux-hardened|{{Pkg|linux-hardened}}}} |
|||
:[core] リポジトリにある Linux カーネルとモジュール。バニラカーネル(素のカーネル)に[https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/linux 多少のパッチが適用されています]。 |
|||
* {{App|Longterm|長期サポート (LTS) Linux カーネル及びモジュール。最新の安定版カーネルと互換性のあるバージョンがタイムリーにリリースされないような out-of-tree のモジュールを使用する際に有用です。|https://www.kernel.org/|{{Pkg|linux-lts}}}} |
|||
* {{App|[[リアルタイムカーネル]]|[[Wikipedia:en:Ingo Molnár|Ingo Molnár]] 率いるコア開発者の小グループによって維持されています。このパッチを使用すると、コードのいくつかの非常に小さな領域("raw_spinlock クリティカル領域")を除いて、ほぼすべてのカーネルをプリエンプトできます。これは、ほとんどのカーネルスピンロックを優先度継承をサポートするミューテックスに置き換え、すべての割り込みとソフトウェア割り込みをカーネルスレッドに移動することによって行われます。|https://wiki.linuxfoundation.org/realtime/start|{{Pkg|linux-rt}}, {{Pkg|linux-rt-lts}}}} |
|||
: {{Note|1=リアルタイムカーネルサポートは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=baeb9a7d8b60b021d907127509c44507539c15e5 Linux 6.12] にマージされました。}} |
|||
;{{Pkg|linux-hardened}} |
|||
:カーネルやユーザースペースに対する脆弱性攻撃から防護する [https://github.com/thestinger/linux-hardened ハードニングパッチセット] が適用されたセキュリティ指向 Linux カーネル。ユーザー名前空間 (非特権による使用はパッチで無効化済み) や audit、あるいは [[SELinux]] など標準の {{Pkg|linux}} には含まれていないカーネルの堅牢化機能も有効になっています。 |
|||
* {{App|Zen Kernel|カーネルハッカーの共同作業により、日常的なシステムに最適な Linux カーネルです。より詳細な情報は [https://github.com/zen-kernel/zen-kernel/wiki/FAQ FAQ] と [https://github.com/zen-kernel/zen-kernel/wiki/Detailed-Feature-List Detailed Feature List] を参照してください。|https://github.com/zen-kernel/zen-kernel|{{Pkg|linux-zen}}}} |
|||
;{{Pkg|linux-lts}} |
|||
:[core] リポジトリにある長期サポート版 (Long term support, LTS) の Linux カーネルとモジュール。 |
|||
;{{Pkg|linux-zen}} |
|||
:[https://github.com/zen-kernel/zen-kernel ZEN Kernel] はカーネルハッカーたちの知恵の結晶です。日常的な利用にうってつけの最高の Linux カーネルになります。詳しい情報は https://liquorix.net を見てください (Debian 向けの ZEN ベースのカーネルバイナリ)。 |
|||
== コンパイル == |
== コンパイル == |
||
| 41行目: | 43行目: | ||
次の方法を使って、独自のカーネルをコンパイルできます。 |
次の方法を使って、独自のカーネルをコンパイルできます。 |
||
; [[カーネ |
; [[カーネル/Arch build system|Arch Build System]]: 既存の {{Pkg|linux}} [[PKGBUILD]] の高い品質と[[Wikipedia:Package management system|パッケージ管理]]の利点を生かします。 |
||
; [[カーネル/コンパイル |
; [[カーネル/伝統的なコンパイル方法|伝統的な方法]]: 手動でソースの tarball をダウンロードし、ホームディレクトリで通常のユーザーとしてコンパイルする必要があります。 |
||
{{Warning| |
{{Warning| |
||
* カスタムカーネルを使用すると、データの損失など、あらゆる種類の安定性と信頼性の問題が発生する可能性があります。[[バックアップ]] |
* カスタムカーネルを使用すると、データの損失など、あらゆる種類の安定性と信頼性の問題が発生する可能性があります。[[バックアップ]]をとることを強くお勧めします。 |
||
* Arch Linux は [[#公式サポートカーネル]]のみを公式にサポートしています。別のカーネルを使用する場合は、サポートリクエストにその旨を記載してください。 |
* Arch Linux は [[#公式サポートカーネル]]のみを公式にサポートしています。別のカーネルを使用する場合は、サポートリクエストにその旨を記載してください。 |
||
}} |
|||
{{Tip| |
{{Tip| |
||
* システムの速度を上げる最良の方法は、まず、カーネルの設定をアーキテクチャやプロセッサの種類に合わせることです。 |
|||
* Best way to increase the speed of your system is to first tailor your kernel config to your architecture and processor type. |
|||
* 自分が持っていないもの、使っていないもののサポートを含まないようにすることで、カーネルのサイズ (つまりビルド時間) を小さくすることができます。例えば、Bluetooth、video4linux、1000Mbit イーサネットなどのサポートです。 |
|||
* You can reduce the size of your kernel (and therefore build time) by not including support for things you do not have or use. For example support for things like bluetooth, video4linux, 1000Mbit ethernet, etc. |
|||
Arch のカーネルパッケージ |
Arch のカーネルパッケージ設定ファイルは Arch のパッケージのソースファイルに含まれています。例えば {{Pkg|linux}} の場合 [https://gitlab.archlinux.org/archlinux/packaging/packages/linux] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの {{ic|/proc/config.gz}} に存在します (カーネルオプションの {{ic|CONFIG_IKCONFIG_PROC}} が有効になっている場合。) |
||
}} |
|||
リストにあるパッケージの中には、[[非公式ユーザーリポジトリ]]からバイナリパッケージを入手できるものもあります。 |
リストにあるパッケージの中には、[[非公式ユーザーリポジトリ]]からバイナリパッケージを入手できるものもあります。 |
||
===kernel.org カーネル=== |
=== kernel.org カーネル === |
||
;{{AUR|linux-git}} |
|||
:[https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git Linus Torvalds の git リポジトリ] から得たソースを使ってビルドする Linux カーネルとモジュール。 |
|||
* {{App|Git|Linus Torvalds の git リポジトリから得たソースを使ってビルドする Linux カーネルとモジュール。|https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git|{{AUR|linux-git}}}} |
|||
;{{AUR|linux-mainline}} |
|||
* {{App|Mainline|すべての新機能が導入されるカーネル、2〜3ヶ月ごとにリリースされます。|https://www.kernel.org/|{{AUR|linux-mainline}}}} |
|||
:メインラインの Linux カーネルとモジュール。 |
|||
* {{App|Next|次の mainline リリースにマージされる予定の機能を持つ最先端のカーネル。|https://www.kernel.org/doc/man-pages/linux-next.html|{{AUR|linux-next-git}}}} |
|||
* {{App|DRM|最先端の GPU ドライバ付き Linux カーネル。|https://gitlab.freedesktop.org/drm|{{AUR|linux-drm-tip-git}}, {{AUR|linux-drm-next-git}}}} |
|||
* {{App|Longterm|長期サポート (LTS) Linux カーネルとモジュール。|https://www.kernel.org/|{{AUR|linux-lts612}}, {{AUR|linux-lts66}}, {{AUR|linux-lts61}}, {{AUR|linux-lts515}}, {{AUR|linux-lts510}}}} |
|||
=== 非公式カーネル === |
|||
;{{AUR|linux-next-git}} |
|||
:Next —次のメインラインリリースにマージされる予定の機能を備えた最先端のカーネル。 |
|||
* {{App|linux-cachyos|SCHED-EXT + BORE + "Cachy sauce" が組み合わされた Linux カーネル。これら以外のパッチや改良が施されたカーネルやモジュールも組み合わされています。|https://github.com/CachyOS/linux-cachyos|{{AUR|linux-cachyos}}}} |
|||
;{{AUR|linux-lts44}} |
|||
* {{App|[[Wikipedia:Linux-libre|Libre]]|[[Wikipedia:ja:難読化 (ソフトウェア)|難読化された]]デバイスドライバや[[Wikipedia:ja:バイナリ・ブロブ|プロプライエタリ]]のデバイスドライバーを使用しません。|https://www.fsfla.org/ikiwiki/selibre/linux-libre/|{{AUR|linux-libre}}}} |
|||
:Longterm 4.4 長期サポート版カーネルとモジュール。 |
|||
* {{App|Liquorix|Debian をターゲットとした設定と Zen カーネルソースを使用して構築されたカーネル代替品。デスクトップ、マルチメディア、ゲームなどのワークロード向けに設計されており、Debian Linux の性能代替カーネルとしてよく利用されます。Liquorix パッチセットのメンテナである Damentz は、同様に Zen パッチセットの開発者でもあります。|https://liquorix.net|{{AUR|linux-lqx}}}} |
|||
* {{App|pf-kernel|カーネルメインラインにマージされない、ほんの少しの素晴らしい機能を提供します。カーネルエンジニアによって管理されています。新しいカーネルのための含まれるパッチのポートが公式にリリースされていない場合、パッチセットは新しいカーネルへのパッチポートを提供し、サポートします。linux-pf の現在の最も代表的なパッチは、UKSM、DDCCI、v4l2loopback、そして BBRv3 です。|https://pfkernel.natalenko.name|パッケージ:}} |
|||
:* [[非公式ユーザーリポジトリ#post-factum kernels|リポジトリ]]: pf-kernel の開発者 [https://aur.archlinux.org/account/post-factum post-factum] による {{AUR|linux-pf}} |
|||
* {{App|Project C|Alfred Chen 氏の Project C パッチセット (BMQ スケジューラと PDS スケジューラ) を当てたカーネル。|https://gitlab.com/alfredchen/projectc|{{AUR|linux-prjc}}}} |
|||
* {{App|Nitrous|Skylake 及びそれ以降に対して最適化された修正版 Linux カーネル。|https://gitlab.com/xdevs23/linux-nitrous|{{AUR|linux-nitrous}}}} |
|||
* {{App|Tachyon|Intel の Clear Linux プロジェクトからのパッチが含まれています。Clear Linux プロジェクトは放棄されたため、現在は新しいプロジェクトにフォークされています。パフォーマンスとセキュリティの最適化を提供します。|https://git.staropensource.de/StarOpenSource/Linux-Tachyon|{{AUR|linux-tachyon}}}} |
|||
* {{App|tkg|デスクトップやゲームのパフォーマンスを向上させるためのパッチや調整を提供する、高度にカスタマイズ可能なカーネルビルドシステム。Etienne Juvigny によってメンテナンスされています。他のパッチの中で、様々な CPU スケージューラを提供しています: CFS、Project C PDS、Project C BMQ、MuQSS、CacULE。|https://github.com/Frogging-Family/linux-tkg|[[非公式ユーザーリポジトリ#chaotic-aur|chaotic-aur]] リポジトリで利用可能}} |
|||
* {{App|VFIO|Alex Williamson によって作成されたいくつかのパッチ(acs オーバーライドおよび i915)により、一部のマシンで KVM を使用して PCI パススルーを実行できるようになります。|https://lwn.net/Articles/499240/|{{AUR|linux-vfio}}, {{AUR|linux-vfio-lts}}}} |
|||
* {{App|XanMod|高性能ワークステーション、ゲーミングデスクトップ、メディアセンターなどで最大限に活用されることを目指し、より強固で応答性の高い、スムーズなデスクトップ体験を提供するために構築されています。このカーネルでは、BFQ I/O スケジューラ、[https://github.com/google/bbr/tree/v3 TCP BBRv3] 輻輳制御、x86_64 高度命令セットのサポート、部分的な Clear Linux パッチセットが使用されており、また一部のデフォルトも変更されています。|https://xanmod.org/|{{AUR|linux-xanmod}}, {{AUR|linux-xanmod-lts}}, {{AUR|linux-xanmod-rt}}, {{AUR|linux-xanmod-bore}}}} |
|||
これらの非公式カーネルの多くには、手動で有効化する必要のある機能が含まれています。パッチ自体に含まれるドキュメントを読むか (これらの多くはカーネルソース内の {{ic|Documentation/}} ディレクトリに変更点が含まれています)、ウェブ上でパッチセットの名前を検索してみましょう。 |
|||
;{{AUR|linux-lts49}} |
|||
:Longterm 4.9 長期サポート版カーネルとモジュール。 |
|||
== トラブルシューティング == |
|||
;{{AUR|linux-lts414}} |
|||
:Longterm 4.14 長期サポート版カーネルとモジュール。 |
|||
=== カーネルパニック === |
|||
;{{AUR|linux-lts419}} |
|||
:Longterm 4.19 長期サポート版カーネルとモジュール。 |
|||
Linux カーネルが回復不能な障害状態になると、''カーネルパニック''が発生します。この状態は通常、バグのあるハードウェアドライバーが原因で、マシンがデッドロックされ、応答しなくなり、再起動が必要になります。デッドロックの直前に、診断メッセージが生成されます。これは、障害が発生したときの''マシンの状態''、障害を検出したカーネルの関数までの ''呼び出しトレース''、および現在ロードされているモジュールのリストです。ありがたいことに、カーネルのメインラインバージョン (公式リポジトリで提供されているものなど) を使用してカーネルパニックが発生することはあまりありませんが、発生した場合に備えて対処方法を知る必要があります。 |
|||
;{{AUR|linux-lts54}} |
|||
:Longterm 5.4 長期サポート版カーネルとモジュール。 |
|||
{{Note|カーネルパニックは、''oops'' または''カーネル oops'' と呼ばれることもあります。パニックと oops は両方とも障害状態の結果として発生するものですが、oops はより一般的なものであり、必ずしもマシンがデッドロックするわけではありません。問題のあるタスクを強制終了して実行を継続することで、カーネルが oops から回復できる場合があります。}} |
|||
===非公式カーネル=== |
|||
;{{AUR|linux-aufs}} |
|||
:aufs 対応の linux カーネルとモジュール。[[Docker]] を使用する際に有用。 |
|||
{{Tip|回復可能な oops で代わりにパニックを発生させることを強制するには、カーネルパラメータ {{ic|1=oops=panic}} を起動時に渡すか、{{ic|/proc/sys/kernel/panic_on_oops}} に {{ic|1}} を書き込んでください。oops リカバリによってシステムが不安定になり将来のエラーの診断が困難になることを懸念しているのであれば、これは推奨される方法です。}} |
|||
;{{AUR|linux-clear}} |
|||
:IntelのClear Linuxプロジェクトからのパッチ。パフォーマンスとセキュリティの最適化を提供します。: https://github.com/clearlinux-pkgs/linux |
|||
==== パニックメッセージの検証 ==== |
|||
;{{AUR|linux-ck}} |
|||
:Con Kolivas の ck1 パッチセットを適用した Linux カーネル。 |
|||
:[[PKGBUILD]] 内で次の追加オプションを切り替えることができます: BFQ スケジューラ, nconfig, localmodconfig, 動作中のカーネル設定の利用。 |
|||
:これらのパッチはシステムのレスポンスを改善するように作られており、特にデスクトップに向きますが、どのような使用目的でも問題なく使えます。ck パッチには BFS が含まれています。 |
|||
:詳しい情報とインストールの方法については [[linux-ck]] を読んで下さい。 |
|||
ブートプロセスの非常に早い段階でカーネルパニックが発生すると、{{ic|Kernel panic - not syncing:}} という文字列が含まれるメッセージがコンソールに表示されます。ただし、[[systemd]] が実行され始めると、カーネルのメッセージはたいていキャプチャーされ、システムログに書き込まれます。しかし、パニックが発生した際、カーネルによる診断メッセージは''ほとんどの場合において''ディスク上のログファイルには書き込まれません。{{ic|system-journald}} がディスクにログを書き込む前に、マシンがデッドロックしてしまうためです。 |
|||
;{{AUR|linux-libre}} |
|||
:"バイナリブロブ"が取り除かれた Linux カーネル。 |
|||
===== ブルースクリーン上の QR コード ===== |
|||
;{{AUR|linux-lqx}} |
|||
:[http://liquorix.net Liquorix] はデスクトップ・マルチメディア・ゲーム用途に Debian 用の設定と ZEN カーネルソースを使ってビルドされたディストロカーネル代替です。Debian Linux ではパフォーマンス向上カーネルとしてよく使われています。Liquorix パッチセットのメンテナである Damentz は ZEN パッチセットの開発者でもあります。 |
|||
{{Pkg|linux}} 6.10 から ({{ic|drm_panic}} により)、カーネルはパニックをブルースクリーン上の [[Wikipedia:ja:QRコード|QR コード]]として表示するようになりました。QR コードによって与えられた URL で''スタックトレース''を見ることができます。Arch Linux では、QR コードは https://panic.archlinux.org/panic_report へのリンクとなっています。URL には、gzip によって圧縮され、[[Wikipedia:URL fragment|URL フラグメント]] 内にエンコードされた様々な情報やスタックトレースが含まれています。この情報はサーバには転送されません (クライアントサイドで処理されます)。 |
|||
;{{AUR|linux-mptcp}} |
|||
:[http://multipath-tcp.org/ Multipath TCP] に対応する Linux カーネルとモジュール。 |
|||
この[https://bbs.archlinux.org/viewtopic.php?pid=2256536#p2256536 フォーラムの投稿]にパニックのスクリーンショット例があります。 |
|||
;{{AUR|linux-pf}} |
|||
:pf-kernel パッチ [-ck パッチセット (BFS 含む), TuxOnIce, BFQ] と aufs3 が含まれた Linux カーネルとモジュール。 |
|||
{{ic|drm}} カーネルモジュールにパラメータ {{ic|panic_screen{{=}}kmsg}} (あるいは[[カーネルパラメータ]]として {{ic|drm.panic_screen{{=}}kmsg}}) を渡すことで、コンソールにスタックトレースを表示する以前の挙動に戻すことができます。 |
|||
;{{AUR|linux-rt}} |
|||
:リアルタイムパッチセットがあてられた Linux カーネル。遅延を減らしてハードリアルタイムが可能になります: https://rt.wiki.kernel.org/ |
|||
===== コンソールによる方法 ===== |
|||
;{{AUR|linux-vfio}} / {{AUR|linux-vfio-lts}} |
|||
:Alex Williamson によって書かれた KVM で PCI パススルーを出来るようにするパッチが適用された Linux カーネル (acs override と i915)。 |
|||
コンソール上にクラッシュを表示される「以前の」スタイルは依然として使用できます (''kdump crashkernel'' のセットアップをする必要はありません)。以下のカーネルパラメータで起動すると、tty1 上でパニックを表示しようとします: |
|||
;{{AUR|linux-xanmod}} / {{AUR|linux-xanmod-lts}} |
|||
:高性能ワークステーション、ゲームデスクトップ、メディアセンターなど、性能を最大限活用し、強固で応答性が高く、スムーズなデスクトップエクスペリエンスを提供するように構築されています。このカーネルは、BFS スケジューラ、BFQ I/O スケジューラ、UKSM リアルタイムメモリデータの重複排除、YeAH TCP 輻輳制御、x86_64 高度な命令セットサポート、およびその他のデフォルトの変更を使用します。: https://xanmod.org/ |
|||
systemd.journald.forward_to_console=1 console=tty1 |
|||
==パッチとパッチセット== |
|||
{{Tip|パニックメッセージが速くスクロールしすぎて検証できない場合、起動時にカーネルパラメータ {{ic|1=pause_on_oops=''秒数''}} を渡してみてください。}} |
|||
カーネルにパッチをあてる理由は様々です。パフォーマンスを向上させたり [[reiser4]] ファイルシステムのサポートなどメインラインに含まれていない機能を使うため、というのが大多数の理由でしょう。他の理由としては、カーネルの改善がどうやってなされるのか知ってみたいという好奇心もあるかもしれません。 |
|||
===== 例: 不良モジュール ===== |
|||
しかしながら、システムのスピードアップにベストな方法はまずカーネルをあなたのシステム、特にアーキテクチャとプロセッサーのタイプに適合させることだと気づくのは重要なことです。速度をアップさせるために、カスタムカーネルの(一般的なアーキテクチャ用の設定を使って)パッケージ済みのバージョンを使うのは推奨されませんし、あまり価値はありません。他の利点は、あなたが持っていない・使っていない物のサポートを含めないことで、カーネルのサイズ(そしてビルド時間)を減らすことができるということです。例えば、新しいカーネルバージョンがリリースされた時、私はいつもカーネルのコンフィグを皮切りに bluetooth, video4linux, 1000Mbit イーサネットといったサポート(マシンに必要ない機能)を削除します。このページではカーネルコンフィグのカスタマイズについては触れませんが、最初のステップとしてカーネルのビルドを行い、それからパッチセットを使ってみるのが推奨です。 |
|||
診断メッセージの情報を使って、何のサブシステムやモジュールがパニックを引き起こしているかを推測できます。この例では、とある架空のマシンで起動中にパニックが発生してしまいました。'''太字'''で強調した行に注目してください。 |
|||
Arch のカーネルパッケージのコンフィグファイルを手始めとして使うこともできます。コンフィグファイルは Arch のパッケージのソースファイルに含まれています。例えば {{Pkg|linux}} のは [https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/linux] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの {{ic|/proc/config.gz}} に存在します (カーネルオプションの {{ic|CONFIG_IKCONFIG_PROC}} が有効になっている場合)。 |
|||
{{bc|'''kernel: BUG: unable to handle kernel NULL pointer dereference at (null)''' <sup>1</sup> |
|||
===インストール方法=== |
|||
'''kernel: IP: fw_core_init+0x18/0x1000 [firewire_core]''' <sup>2</sup> |
|||
kernel: PGD 718d00067 |
|||
kernel: P4D 718d00067 |
|||
kernel: PUD 7b3611067 |
|||
kernel: PMD 0 |
|||
kernel: |
|||
kernel: Oops: 0002 [#1] PREEMPT SMP |
|||
'''kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ...''' <sup>3</sup> |
|||
kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1 |
|||
kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014 |
|||
kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000 |
|||
kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core] |
|||
kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246 |
|||
kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 |
|||
kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4 |
|||
kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95 |
|||
kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000 |
|||
kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840 |
|||
kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000 |
|||
kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 |
|||
kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0 |
|||
kernel: Call Trace: |
|||
'''kernel: do_one_initcall+0x50/0x190''' <sup>4</sup> |
|||
kernel: ? do_init_module+0x27/0x1f2 |
|||
kernel: do_init_module+0x5f/0x1f2 |
|||
kernel: load_module+0x23f3/0x2be0 |
|||
kernel: SYSC_init_module+0x16b/0x1a0 |
|||
kernel: ? SYSC_init_module+0x16b/0x1a0 |
|||
kernel: SyS_init_module+0xe/0x10 |
|||
kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5 |
|||
kernel: RIP: 0033:0x7f301f3a2a0a |
|||
kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af |
|||
kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a |
|||
kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010 |
|||
kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085 |
|||
kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208 |
|||
kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030 |
|||
kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48 |
|||
kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68 |
|||
kernel: CR2: 0000000000000000 |
|||
kernel: ---[ end trace 71f4306ea1238f17 ]--- |
|||
'''kernel: Kernel panic - not syncing: Fatal exception''' <sup>5</sup> |
|||
kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff |
|||
kernel: ---[ end Kernel panic - not syncing: Fatal exception}} |
|||
# パニックを引き起こしたエラーの種類を示しています。この場合、プログラマのバグです。 |
|||
カスタムカーネルパッケージのインストールには Arch Build System (ABS) を使います。カスタムパッケージをビルドしたことがない場合は次の記事を読んで勉強できます: [[Arch Build System]], [[パッケージの作成]]。 |
|||
# モジュール ''firewire_core'' 内の ''fw_core_init'' という関数でパニックが発生したことを示しています。 |
|||
# ''firewire_core'' は最後にロードされたモジュールであることを示しています。 |
|||
# ''fw_core_init'' 関数を呼んだ関数は ''do_one_initcall'' であったことを示しています。 |
|||
# この ''oops'' メッセージが実際にカーネルパニックであり、システムがデッドロックしていることを示しています。 |
|||
以上のメッセージにより、''firewire_core'' モジュールがロードされたときの初期ルーチン中にパニックが発生したということを推測できます。(マシンのファームウェアハードウェアは、プログラマのエラーによりこのバージョンのファームウェアドライバモジュールと互換性が無いかもしれないことが推測でき、新しいリリースを待つ必要があることになります。) その間、マシンを再び走らせる最も簡単な方法は、モジュールがロードされないようにすることです。以下の方法のうち1つを取ってください: |
|||
あなたがカーネルにパッチをあてたりカスタマイズをしたことがないとしても、インストールはそこまで難しいものではなく、また、それぞれのパッチセットの PKGBUILD がフォーラムにはたくさんあります。ただし、すぐ近くのバンドワゴンに飛びつくのではなく、それぞれのパッチセットの効能を調べるところから始めるのを推奨します。そのほうがいきなりカーネルを選ぶよりもやるべきことについて多く学ぶことができるでしょう。 |
|||
* モジュールが ''initramfs'' の実行中にロードされる場合、[[カーネルパラメータ]] {{ic|1=rd.blacklist=firewire_core}} を設定して再起動してください。 |
|||
[[#コンパイル]] を見て下さい。 |
|||
* それ以外の場合、カーネルパラメータ {{ic|1=module_blacklist=firewire_core}} を設定して再起動してください。 |
|||
==== 再起動して root シェルに入り問題を修正する ==== |
|||
{{note|新しいカーネルを使うために、あなたのブートローダ (例: GRUB) のブートオプションを変更するのを忘れないで下さい。}} |
|||
{{Out of date|[https://gitlab.archlinux.org/archlinux/packaging/packages/systemd/-/commit/292cdf8a2f7dd7c6c7d91d2b59617391935c837c initramfs の root アカウントはロックされているため]、{{ic|rd.rescue}} と {{ic|rd.emergency}} は動作しません。}} |
|||
===主なパッチセット=== |
|||
{{Accuracy|{{ic|rd.emergency}} ではキーボードは動作しないため、使用できません。}} |
|||
まず初めにパッチセットは様々な人によって開発されていることに注意してください。人々の中には linux カーネルの開発に深く関わっている人もいるでしょうし、そうでないひともいるでしょう。開発者のカーネルの理解度はパッチセットの信頼性と安定性に反映されます。 |
|||
システムに変更を加えてパニックが起こらないようにするには、root シェルが必要です。パニックが起動時に発生する場合、マシンがデッドロックする前に root シェルに入るための戦略が複数あります: |
|||
また、パッチセットによっては他のパッチセットとあわせて使うと効果がないものもあります (パッチの名前にそれが示されているかもしれません)。パッチセット(とカーネルアップデート)は'''非常に'''短い間隔でリリースされ、ほとんどの場合それを完全に追いつづける価値はありません。あまり夢中にならないようにしましょう、それを趣味にするなら話は別ですが。 |
|||
* カーネルパラメータ {{ic|emergency}} か {{ic|rd.emergency}} か {{ic|-b}} を設定して再起動する。これで、root ファイルシステムがマウントされて {{ic|systemd}} が起動した直後にログインプロンプトが表示されます。 |
|||
ググればもっと多くのパッチセットがあります - そのときはクォーテーションを使うのを覚えておいて下さい (例: {{ic|"-nitro"}})。そうしないと google はあなたが望む検索結果を'''表示しません'''。 |
|||
: {{Note|この時点では、root ファイルシステムは'''読み取り専用'''でマウントされます。ファイルシステムに変更を加えるには、{{ic|mount -o remount,rw /}} を root ユーザとして実行してください。}} |
|||
{{note|このセクションに書かれていることに保証はありません。安定性や信頼性は担保されていないので注意してください。}} |
|||
* カーネルパラメータ {{ic|rescue}}、{{ic|rd.rescue}}、{{ic|single}}、{{ic|s}}、{{ic|S}}、{{ic|1}} のどれか設定して再起動する。これで、ローカルのファイルシステムがマウントされた直後にログインプロンプトが表示されます。 |
|||
==== -ck ==== |
|||
* カーネルパラメータ {{ic|1=systemd.debug_shell}} を設定して再起動する。これで、非常に初期の root シェルが tty9 で表示されます。{{ic|Ctrl+Alt+F9}} を押してそのシェルに切り替えてください。 |
|||
* パニックを引き起こしているカーネルの機能を無効化するために、異なるカーネルパラメータの組で再起動して実験する。"定番" の {{ic|1=acpi=off}} と {{ic|nolapic}} を試してみてください。 |
|||
: {{Tip|すべてのカーネルパラメータは [https://docs.kernel.org/admin-guide/kernel-parameters.html kernel-parameters.html] を参照して下さい。}} |
|||
[[linux-ck]] にはシステムのレスポンスを良くするためのパッチが含まれています。デスクトップ用途に重点が置かれていますが他の環境でも使えます。このパッチは Con Kolivas によって作成・メンテナンスされており、彼のサイトは http://users.on.net/~ckolivas/kernel/ にあります。Con はフルセットを管理していますがパッチを分けて提供もしており、使いたいものだけを追加することが可能です。 |
|||
* 最後の手段として、[[インストールガイド#インストールメディアの準備|Arch Linux インストールメディア]]を起動し、ルートファイルシステムを {{ic|/mnt}} にマウントし、{{ic|arch-chroot /mnt}} を root ユーザとして実行する。 |
|||
-ck パッチは http://users.tpg.com.au/ckolivas/kernel/ から入手できます |
|||
* パニックを引き起こしているサービスやプログラムを無効化する。不具合のあるアップデートをロールバックする。設定の問題を修正する。 |
|||
{{Tip|[[Wikipedia:Initial ramdisk|初期 RAM ディスク]]イメージが破損している場合、新しいイメージを生成する必要があるかもしれません。イメージの破損は、カーネルアップデートが中断された場合に起こる可能性があります。新しいイメージを作成する方法は、[[mkinitcpio#イメージ作成とアクティベーション]] を参照してください。}} |
|||
====-rt==== |
|||
=== リグレッションをデバッグする === |
|||
このパッチセットは Ingo Molnar 率いるコアデベロッパのグループによってメンテナンスされています。このパッチを使うことでカーネルのほとんど全てをリアルタイム実行できるようになります、ただしコードの非常に小さい領域 ("raw_spinlock critical regions") は除きます。カーネルのスピンロックのほとんどを優先度継承をサポートするミューテックスに置き換え、全ての割り込みとソフトウェア割り込みをカーネルスレッドに移動することでこれを実現しています。詳しくは[[リアルタイムカーネル]]を参照してください。 |
|||
[[一般的なトラブルシューティング#リグレッションをデバッグする]] を参照してください。 |
|||
さらに高精度タイマーも組み入れられています - パッチセットは別々にメンテナンスされています。 |
|||
{{AUR|linux-mainline}} を試して、その問題が既に上流で修正されているかどうかを確認してください。ピン留めされたコメントは既にビルドされたカーネルを含むリポジトリにも言及しているので、時間がかかる手動でのビルドは必要ないかもしれません。 |
|||
[ソース: [https://rt.wiki.kernel.org/index.php/CONFIG_PREEMPT_RT_Patch Real-Time Linux Wiki]] |
|||
最近発生しなかった問題をデバッグするために LTS カーネル ({{Pkg|linux-lts}}) を試してみることも検討する価値があるかもしれません。LTS カーネルの古いバージョンは [[Arch Linux Archive]] で見つけることができます。 |
|||
パッチは https://www.kernel.org/pub/linux/kernel/projects/rt/ にあります。 |
|||
====-bld==== |
|||
{{Warning|このパッチは開発中です。}} |
|||
BLD は O(1) の CPU 利用技術とされます。ランキューの負担にあわせて CPU ランキューの順番を変えます。つまり、スケジューラが負担の変化に対応することで、適当な順番でランキューを動作させることが可能です。この技術はスケジューラのチェックに依存しません。この技術では最も単純な方法が取られています: 負担を追跡してランキューの順番を変更する。どちらも同じような操作です。負担の追跡はシステム上で負担の変化が起こった時に行われ、負担が変化したランキューの順番が変えられます。一番負担が低いランキューから一番負担が高いランキューまでの順番が付けられたら、一番下の (一番忙しい) ランキューを選択するのは簡単です。スケジューラはランキューにタスクを割り振るときに何も計算や比較を行うことなく一番下のランキューを選択します。そして sched_exec や sched_fork で負担を分散させるのに一番良いのは一番下の一番忙しいランキューを優先することです。これで、ロードバランシングを行わなくてもシステムのバランスが取られます。try_to_wake_up するときアイドル状態のランキューが一番優先されるようになりますが、ドメインごとに実行されるため CPU のキャッシュを正しく利用します。キャッシュの利用には更なる注意が必要になります。 |
|||
引き続き問題が発生する場合は、{{AUR|linux-git}} カーネルを [[bisect]] し、Linux カーネルにおける[https://docs.kernel.org/admin-guide/reporting-regressions.html リグレッション報告]の方法に従ってバグを報告してください。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/MAINTAINERS {{ic|MAINTAINERS}}] ファイル内の Bugtracker ({{ic|B:}}) エントリによっては、サブシステムのメーリングリスト、Kernel Bugzilla、あるいは DRM Gitlab などの他のイシュートラッカーでイシューを開く必要があります。パッチと関係ないことを確認するために、パッチなしの "バニラ"バージョンを試すことが重要です。もしパッチが問題を引き起こすなら、そのパッチの作者に報告してください。 |
|||
Github ウェブページ: https://github.com/rmullick/bld-patches |
|||
{{Note|カーネルの bisect は何度も作り直さなければならないので、かなりの時間がかかるかもしれません。}} |
|||
====Tiny-Patches==== |
|||
[https://elinux.org/Linux_Tiny Linux Tiny] の目標はメモリやディスクの使用量を減らし、小さなシステムで動作するのを助ける機能を追加することです。組み込みシステムの開発者や 386 など小さい・古いマシンのユーザーを対象にしています。 |
|||
==== より小さなカーネルを構築する ==== |
|||
メインストリームの Linux カーネルに対するパッチリリースは止まっています。開発者達は少数のパッチに力を注ぎメインラインカーネルにパッチをマージさせることに時間を割くことを選んだようです。 |
|||
[[modprobed-db]] か {{ic|make localmodconfig}} を使って、ローカルシステムに必要なモジュールだけをビルドしたり、によってカーネルビルド時間を短縮したりできます。もちろん、ネットワークの問題をデバッグするために、サウンドドライバなど、無関係なドライバを完全に削除することも可能です。 |
|||
====-pf==== |
|||
{{AUR|linux-pf}} は非公式の Linux カーネルのフォークで、メインラインにマージされていないひと握りの素敵な機能を提供します。既存の Linux フォークやパッチセットには基づいていませんが、必要なパッチが公式にリリースされていない場合に非公式のポートが使われることもあります。 |
|||
linux-pf の特徴的なパッチとして TuxOnIce, CK パッチセット (特に BFS), AUFS3, LinuxIMQ, l7 フィルタ, BFQ があります。 |
|||
== 参照 == |
|||
詳しくは [[linux-pf]] を見て下さい。 |
|||
* [http://www.kroah.com/lkn/ O'Reilly - Linux Kernel in a Nutshell] (フリーの電子書籍) |
|||
===個々のパッチ=== |
|||
* [http://kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/ What stable kernel should I use?] by Greg Kroah-Hartman |
|||
* [https://docs.kernel.org/index.html Linux カーネルのドキュメント] |
|||
{{TranslationStatus|Kernel|2026-04-12|870571}} |
|||
以下のパッチはバニラカーネルのビルドに含めたり、他のパッチセットに組み入れることができます: |
|||
*[[Reiser4]] |
|||
*[[fbsplash]] |
|||
== コンパイル == |
|||
Arch Linux ではカーネルコンパイルに複数の方法があります。 |
|||
=== Arch Build System を使う === |
|||
[[Arch Build System]] の利用には既存の {{Pkg|linux}} の [[PKGBUILD]] と[[Wikipedia:ja:パッケージ管理システム|パッケージ管理システム]]を使えるというアドバンテージがあります。PKGBUILD があるので、ソースがダウンロードされた後、ビルドを止めてカーネルを設定することができます。 |
|||
[[カーネル/コンパイル/Arch Build System]] を見て下さい。 |
|||
=== 伝統的な方法 === |
|||
手動でソース tarball をダウンロードし、標準ユーザーとして home ディレクトリでビルドを行います。設定を行った後、コンパイル・インストールする方法は2つあります; 伝統的に手動で行うか [[makepkg]] + [[pacman]] を使うかです。 |
|||
伝統的な方法のメリットは、他の Linux ディストリビューションでもカーネルを動作させることができることです。 |
|||
[[カーネル/コンパイル/伝統的な方法]]を見て下さい。 |
|||
== 参照 == |
|||
*[http://www.kroah.com/lkn/ O'Reilly - Linux Kernel in a Nutshell] (フリーの電子書籍) |
|||
* [http://kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/ What stable kernel should I use?] by Greg Kroah-Hartman |
|||
* [https://www.kernel.org/doc/html/latest/index.html Linux kernel documentation] |
|||
2026年4月12日 (日) 06:11時点における最新版
Wikipedia によると:
- Linux カーネルとは、モノリシックで Unix ライクなオープンソースのコンピュータオペレーティングシステムカーネルである。
Arch Linux は Linux カーネルをベースにしています。Arch Linux では最新の安定版カーネルに加え、様々な代替 Linux カーネルを利用することができます。この記事では、リポジトリで利用可能な選択肢のいくつかを、それぞれの簡単な説明とともにリストアップしています。また、システムのカーネルに適用できるパッチについての説明もあります。記事の最後には、カスタムカーネルのコンパイルについての概要と、様々な方法へのリンクがあります。
カーネルパッケージは、パス /usr/lib/modules/ にインストールされ、その後 /boot/ 内へ vmlinuz 実行可能イメージをコピーするために使用されます。[1]
別のカーネルをインストールする場合や複数のカーネルを切り替える場合は、それに応じてブートローダーを設定する必要があります。
カーネルを古いバージョンにダウングレードする方法については、カーネルのダウングレードを参照してください。
公式サポートカーネル
公式にサポートされているカーネルについては、フォーラムでのコミュニティサポートとバグレポートを利用できます。
- Stable — いくつかのパッチを適用したバニラな Linux カーネル。
- Hardened — カーネルおよびユーザ空間の脆弱性を緩和するための一連の堅牢化パッチを適用した、セキュリティ特化の Linux カーネルです。また、linux よりも多くの上流のカーネル堅牢化機能を有効にします。
- Longterm — 長期サポート (LTS) Linux カーネル及びモジュール。最新の安定版カーネルと互換性のあるバージョンがタイムリーにリリースされないような out-of-tree のモジュールを使用する際に有用です。
- リアルタイムカーネル — Ingo Molnár 率いるコア開発者の小グループによって維持されています。このパッチを使用すると、コードのいくつかの非常に小さな領域("raw_spinlock クリティカル領域")を除いて、ほぼすべてのカーネルをプリエンプトできます。これは、ほとんどのカーネルスピンロックを優先度継承をサポートするミューテックスに置き換え、すべての割り込みとソフトウェア割り込みをカーネルスレッドに移動することによって行われます。
- ノート リアルタイムカーネルサポートは Linux 6.12 にマージされました。
- Zen Kernel — カーネルハッカーの共同作業により、日常的なシステムに最適な Linux カーネルです。より詳細な情報は FAQ と Detailed Feature List を参照してください。
コンパイル
次の方法を使って、独自のカーネルをコンパイルできます。
- Arch Build System
- 既存の linux PKGBUILD の高い品質とパッケージ管理の利点を生かします。
- 伝統的な方法
- 手動でソースの tarball をダウンロードし、ホームディレクトリで通常のユーザーとしてコンパイルする必要があります。
- カスタムカーネルを使用すると、データの損失など、あらゆる種類の安定性と信頼性の問題が発生する可能性があります。バックアップをとることを強くお勧めします。
- Arch Linux は #公式サポートカーネルのみを公式にサポートしています。別のカーネルを使用する場合は、サポートリクエストにその旨を記載してください。
- システムの速度を上げる最良の方法は、まず、カーネルの設定をアーキテクチャやプロセッサの種類に合わせることです。
- 自分が持っていないもの、使っていないもののサポートを含まないようにすることで、カーネルのサイズ (つまりビルド時間) を小さくすることができます。例えば、Bluetooth、video4linux、1000Mbit イーサネットなどのサポートです。
Arch のカーネルパッケージ設定ファイルは Arch のパッケージのソースファイルに含まれています。例えば linux の場合 [2] にリンクがあります。今現在動かしているカーネルのコンフィグファイルはファイルシステムの /proc/config.gz に存在します (カーネルオプションの CONFIG_IKCONFIG_PROC が有効になっている場合。)
リストにあるパッケージの中には、非公式ユーザーリポジトリからバイナリパッケージを入手できるものもあります。
kernel.org カーネル
- Git — Linus Torvalds の git リポジトリから得たソースを使ってビルドする Linux カーネルとモジュール。
- Mainline — すべての新機能が導入されるカーネル、2〜3ヶ月ごとにリリースされます。
- Next — 次の mainline リリースにマージされる予定の機能を持つ最先端のカーネル。
- DRM — 最先端の GPU ドライバ付き Linux カーネル。
- Longterm — 長期サポート (LTS) Linux カーネルとモジュール。
- https://www.kernel.org/ || linux-lts612AUR, linux-lts66AUR, linux-lts61AUR, linux-lts515AUR, linux-lts510AUR
非公式カーネル
- linux-cachyos — SCHED-EXT + BORE + "Cachy sauce" が組み合わされた Linux カーネル。これら以外のパッチや改良が施されたカーネルやモジュールも組み合わされています。
- Liquorix — Debian をターゲットとした設定と Zen カーネルソースを使用して構築されたカーネル代替品。デスクトップ、マルチメディア、ゲームなどのワークロード向けに設計されており、Debian Linux の性能代替カーネルとしてよく利用されます。Liquorix パッチセットのメンテナである Damentz は、同様に Zen パッチセットの開発者でもあります。
- pf-kernel — カーネルメインラインにマージされない、ほんの少しの素晴らしい機能を提供します。カーネルエンジニアによって管理されています。新しいカーネルのための含まれるパッチのポートが公式にリリースされていない場合、パッチセットは新しいカーネルへのパッチポートを提供し、サポートします。linux-pf の現在の最も代表的なパッチは、UKSM、DDCCI、v4l2loopback、そして BBRv3 です。
- https://pfkernel.natalenko.name || パッケージ:
- リポジトリ: pf-kernel の開発者 post-factum による linux-pfAUR
- Project C — Alfred Chen 氏の Project C パッチセット (BMQ スケジューラと PDS スケジューラ) を当てたカーネル。
- Nitrous — Skylake 及びそれ以降に対して最適化された修正版 Linux カーネル。
- Tachyon — Intel の Clear Linux プロジェクトからのパッチが含まれています。Clear Linux プロジェクトは放棄されたため、現在は新しいプロジェクトにフォークされています。パフォーマンスとセキュリティの最適化を提供します。
- tkg — デスクトップやゲームのパフォーマンスを向上させるためのパッチや調整を提供する、高度にカスタマイズ可能なカーネルビルドシステム。Etienne Juvigny によってメンテナンスされています。他のパッチの中で、様々な CPU スケージューラを提供しています: CFS、Project C PDS、Project C BMQ、MuQSS、CacULE。
- https://github.com/Frogging-Family/linux-tkg || chaotic-aur リポジトリで利用可能
- VFIO — Alex Williamson によって作成されたいくつかのパッチ(acs オーバーライドおよび i915)により、一部のマシンで KVM を使用して PCI パススルーを実行できるようになります。
- XanMod — 高性能ワークステーション、ゲーミングデスクトップ、メディアセンターなどで最大限に活用されることを目指し、より強固で応答性の高い、スムーズなデスクトップ体験を提供するために構築されています。このカーネルでは、BFQ I/O スケジューラ、TCP BBRv3 輻輳制御、x86_64 高度命令セットのサポート、部分的な Clear Linux パッチセットが使用されており、また一部のデフォルトも変更されています。
- https://xanmod.org/ || linux-xanmodAUR, linux-xanmod-ltsAUR, linux-xanmod-rtAUR, linux-xanmod-boreAUR
これらの非公式カーネルの多くには、手動で有効化する必要のある機能が含まれています。パッチ自体に含まれるドキュメントを読むか (これらの多くはカーネルソース内の Documentation/ ディレクトリに変更点が含まれています)、ウェブ上でパッチセットの名前を検索してみましょう。
トラブルシューティング
カーネルパニック
Linux カーネルが回復不能な障害状態になると、カーネルパニックが発生します。この状態は通常、バグのあるハードウェアドライバーが原因で、マシンがデッドロックされ、応答しなくなり、再起動が必要になります。デッドロックの直前に、診断メッセージが生成されます。これは、障害が発生したときのマシンの状態、障害を検出したカーネルの関数までの 呼び出しトレース、および現在ロードされているモジュールのリストです。ありがたいことに、カーネルのメインラインバージョン (公式リポジトリで提供されているものなど) を使用してカーネルパニックが発生することはあまりありませんが、発生した場合に備えて対処方法を知る必要があります。
oops=panic を起動時に渡すか、/proc/sys/kernel/panic_on_oops に 1 を書き込んでください。oops リカバリによってシステムが不安定になり将来のエラーの診断が困難になることを懸念しているのであれば、これは推奨される方法です。パニックメッセージの検証
ブートプロセスの非常に早い段階でカーネルパニックが発生すると、Kernel panic - not syncing: という文字列が含まれるメッセージがコンソールに表示されます。ただし、systemd が実行され始めると、カーネルのメッセージはたいていキャプチャーされ、システムログに書き込まれます。しかし、パニックが発生した際、カーネルによる診断メッセージはほとんどの場合においてディスク上のログファイルには書き込まれません。system-journald がディスクにログを書き込む前に、マシンがデッドロックしてしまうためです。
ブルースクリーン上の QR コード
linux 6.10 から (drm_panic により)、カーネルはパニックをブルースクリーン上の QR コードとして表示するようになりました。QR コードによって与えられた URL でスタックトレースを見ることができます。Arch Linux では、QR コードは https://panic.archlinux.org/panic_report へのリンクとなっています。URL には、gzip によって圧縮され、URL フラグメント 内にエンコードされた様々な情報やスタックトレースが含まれています。この情報はサーバには転送されません (クライアントサイドで処理されます)。
このフォーラムの投稿にパニックのスクリーンショット例があります。
drm カーネルモジュールにパラメータ panic_screen=kmsg (あるいはカーネルパラメータとして drm.panic_screen=kmsg) を渡すことで、コンソールにスタックトレースを表示する以前の挙動に戻すことができます。
コンソールによる方法
コンソール上にクラッシュを表示される「以前の」スタイルは依然として使用できます (kdump crashkernel のセットアップをする必要はありません)。以下のカーネルパラメータで起動すると、tty1 上でパニックを表示しようとします:
systemd.journald.forward_to_console=1 console=tty1
pause_on_oops=秒数 を渡してみてください。例: 不良モジュール
診断メッセージの情報を使って、何のサブシステムやモジュールがパニックを引き起こしているかを推測できます。この例では、とある架空のマシンで起動中にパニックが発生してしまいました。太字で強調した行に注目してください。
kernel: BUG: unable to handle kernel NULL pointer dereference at (null) 1 kernel: IP: fw_core_init+0x18/0x1000 [firewire_core] 2 kernel: PGD 718d00067 kernel: P4D 718d00067 kernel: PUD 7b3611067 kernel: PMD 0 kernel: kernel: Oops: 0002 [#1] PREEMPT SMP kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ... 3 kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1 kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014 kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000 kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core] kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246 kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4 kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95 kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000 kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840 kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0 kernel: Call Trace: kernel: do_one_initcall+0x50/0x190 4 kernel: ? do_init_module+0x27/0x1f2 kernel: do_init_module+0x5f/0x1f2 kernel: load_module+0x23f3/0x2be0 kernel: SYSC_init_module+0x16b/0x1a0 kernel: ? SYSC_init_module+0x16b/0x1a0 kernel: SyS_init_module+0xe/0x10 kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5 kernel: RIP: 0033:0x7f301f3a2a0a kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010 kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085 kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208 kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030 kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48 kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68 kernel: CR2: 0000000000000000 kernel: ---[ end trace 71f4306ea1238f17 ]--- kernel: Kernel panic - not syncing: Fatal exception 5 kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff kernel: ---[ end Kernel panic - not syncing: Fatal exception
- パニックを引き起こしたエラーの種類を示しています。この場合、プログラマのバグです。
- モジュール firewire_core 内の fw_core_init という関数でパニックが発生したことを示しています。
- firewire_core は最後にロードされたモジュールであることを示しています。
- fw_core_init 関数を呼んだ関数は do_one_initcall であったことを示しています。
- この oops メッセージが実際にカーネルパニックであり、システムがデッドロックしていることを示しています。
以上のメッセージにより、firewire_core モジュールがロードされたときの初期ルーチン中にパニックが発生したということを推測できます。(マシンのファームウェアハードウェアは、プログラマのエラーによりこのバージョンのファームウェアドライバモジュールと互換性が無いかもしれないことが推測でき、新しいリリースを待つ必要があることになります。) その間、マシンを再び走らせる最も簡単な方法は、モジュールがロードされないようにすることです。以下の方法のうち1つを取ってください:
- モジュールが initramfs の実行中にロードされる場合、カーネルパラメータ
rd.blacklist=firewire_coreを設定して再起動してください。 - それ以外の場合、カーネルパラメータ
module_blacklist=firewire_coreを設定して再起動してください。
再起動して root シェルに入り問題を修正する
システムに変更を加えてパニックが起こらないようにするには、root シェルが必要です。パニックが起動時に発生する場合、マシンがデッドロックする前に root シェルに入るための戦略が複数あります:
- カーネルパラメータ
emergencyかrd.emergencyか-bを設定して再起動する。これで、root ファイルシステムがマウントされてsystemdが起動した直後にログインプロンプトが表示されます。
- ノート この時点では、root ファイルシステムは読み取り専用でマウントされます。ファイルシステムに変更を加えるには、
mount -o remount,rw /を root ユーザとして実行してください。
- カーネルパラメータ
rescue、rd.rescue、single、s、S、1のどれか設定して再起動する。これで、ローカルのファイルシステムがマウントされた直後にログインプロンプトが表示されます。 - カーネルパラメータ
systemd.debug_shellを設定して再起動する。これで、非常に初期の root シェルが tty9 で表示されます。Ctrl+Alt+F9を押してそのシェルに切り替えてください。 - パニックを引き起こしているカーネルの機能を無効化するために、異なるカーネルパラメータの組で再起動して実験する。"定番" の
acpi=offとnolapicを試してみてください。
- ヒント すべてのカーネルパラメータは kernel-parameters.html を参照して下さい。
- 最後の手段として、Arch Linux インストールメディアを起動し、ルートファイルシステムを
/mntにマウントし、arch-chroot /mntを root ユーザとして実行する。 - パニックを引き起こしているサービスやプログラムを無効化する。不具合のあるアップデートをロールバックする。設定の問題を修正する。
リグレッションをデバッグする
一般的なトラブルシューティング#リグレッションをデバッグする を参照してください。
linux-mainlineAUR を試して、その問題が既に上流で修正されているかどうかを確認してください。ピン留めされたコメントは既にビルドされたカーネルを含むリポジトリにも言及しているので、時間がかかる手動でのビルドは必要ないかもしれません。
最近発生しなかった問題をデバッグするために LTS カーネル (linux-lts) を試してみることも検討する価値があるかもしれません。LTS カーネルの古いバージョンは Arch Linux Archive で見つけることができます。
引き続き問題が発生する場合は、linux-gitAUR カーネルを bisect し、Linux カーネルにおけるリグレッション報告の方法に従ってバグを報告してください。MAINTAINERS ファイル内の Bugtracker (B:) エントリによっては、サブシステムのメーリングリスト、Kernel Bugzilla、あるいは DRM Gitlab などの他のイシュートラッカーでイシューを開く必要があります。パッチと関係ないことを確認するために、パッチなしの "バニラ"バージョンを試すことが重要です。もしパッチが問題を引き起こすなら、そのパッチの作者に報告してください。
より小さなカーネルを構築する
modprobed-db か make localmodconfig を使って、ローカルシステムに必要なモジュールだけをビルドしたり、によってカーネルビルド時間を短縮したりできます。もちろん、ネットワークの問題をデバッグするために、サウンドドライバなど、無関係なドライバを完全に削除することも可能です。
参照
- O'Reilly - Linux Kernel in a Nutshell (フリーの電子書籍)
- What stable kernel should I use? by Greg Kroah-Hartman
- Linux カーネルのドキュメント