「カーネル/Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(update links)
(2023-09-08版に同期)
 
(6人の利用者による、間の24版が非表示)
1行目: 1行目:
 
[[Category:カーネル]]
 
[[Category:カーネル]]
 
[[de:Eigenen Kernel erstellen]]
 
[[de:Eigenen Kernel erstellen]]
[[en:Kernels/Arch Build System]]
+
[[en:Kernel/Arch build system]]
[[it:Kernels/Arch Build System]]
+
[[ru:Kernel (Русский)/Arch Build System]]
[[ru:Custom Kernel Compilation with ABS]]
+
[[zh-hans:Kernel/Arch Build System]]
  +
[[Arch Build System]] を使うことで、公式の {{Pkg|linux}} パッケージをベースにカスタムカーネルをビルドすることができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定や[[パッチ]]の追加が可能です。
[[zh-CN:Kernels/Arch Build System]]
 
[[Arch Build System|Arch Build System]] を使うことで、公式の {{Pkg|linux}} パッケージをベースにカスタムカーネルを作成することができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定やパッチの追加が可能です。
 
   
==材料の入手==
+
== 材料の入手 ==
   
  +
[[makepkg]] を使用するので、以下のベストプラクティスに従ってください。例えば、makepkg を [[root ユーザ]]として実行することはできません。したがって、まずはホームディレクトリに {{ic|build}} ディレクトリを作成してください:
[[公式リポジトリ]]から {{Pkg|abs}} パッケージと {{Grp|base-devel}} パッケージグループを[[インストール]]してください。
 
   
  +
$ mkdir ~/build/
まず最初に、カスタマイズの起点になる綺麗なカーネルが必要になります。ABS からカーネルパッケージファイルを取得してください:
 
  +
$ cd ~/build/
   
  +
パッケージ {{Pkg|devtools}} と {{Pkg|base-devel}} を[[インストール]]してください。
{{bc|1=$ ABSROOT=. abs core/linux}}
 
   
  +
カスタマイズを開始するには、クリーンなカーネルが必要です。以下を実行して、[[Arch Build System#PKGBUILD ソースを取得する|git を使って PKGBUILD ソースを取得]]し、他のいくつかのファイルも取得してください:
ファイアウォールによって rsync ポートがブロックされる場合は、-t オプションで tarball を使って同期することができます。
 
   
  +
$ pkgctl repo clone --protocol=https linux
{{bc|1=$ ABSROOT=. abs core/linux -t}}
 
   
  +
この時点で、ディレクトリツリーは以下のようになります(他にもいくつかファイルがあるかもしれません)
その後に、必要なファイル (例: カスタム設定ファイル, パッチ, etc.) を各自のソースから手に入れて下さい。
 
   
  +
{{bc|~/build/linux/-+
==PKGBUILD の修正==
 
  +
+--config
{{ic|pkgbase}} をあなたのカスタムパッケージの名前に変えて下さい、例えば:
 
  +
\__PKGBUILD
pkgbase=linux-custom
 
  +
}}
   
  +
その後、必要なファイル (例:カスタム設定ファイル、パッチなど) をそれぞれのソースから取得してください。
===build() の変更===
 
  +
変更するコンフィグオプションが少ない時は、デフォルトのオプションを使ってあなたのオプションを設定ファイルに追加することができます:
 
  +
== PKGBUILD の修正 ==
$ echo '
 
  +
CONFIG_DEBUG_INFO=y
 
  +
PKGBUILD を編集して、{{ic|pkgbase}} パラメータをあなたのカスタムパッケージの名前に変えて下さい、例えば:
CONFIG_FOO=n
 
  +
' >> config.x86_64
 
  +
{{hc|PKGBUILD|2=
  +
pkgbase=linux-custom}}
  +
  +
{{Warning|{{ic|linux}} を {{ic|provides}} 配列に '''追加しないでください'''。カスタムカーネルは、そのカーネルに対して構築されたバイナリモジュールと互換性がないため、その依存関係を満たすことはできません。 同様に、同様の理由で、ヘッダーパッケージの {{ic|provides}} 配列に {{ic|linux-headers}} を追加しないでください。}}
  +
  +
=== ドキュメントの作成を避ける ===
  +
  +
長い[[#コンパイル|コンパイル]]作業の大部分は、ドキュメントの作成に費やされています。2022年8月25日の時点で、PKGBUILD への次のパッチにより作成を回避します:
  +
  +
{{bc|1=
  +
63c63
  +
< make htmldocs all
  +
---
  +
> make all
  +
195c195
  +
< pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
  +
---
  +
> pkgname=("$pkgbase" "$pkgbase-headers")
  +
}}
  +
  +
このパッチは行#63 と行#195 を変更します。 PKGBUILD ファイルが正しく適用されない場合は、手動で編集する必要がある場合があります。
  +
  +
=== prepare() の変更 ===
  +
  +
{{ic|prepare()}} 関数では、[[パッケージにパッチを適用#パッチの適用|パッチの適用]] やカーネルビルドの設定を変更することができます。
  +
[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commit/fbf5b3b8adaf4274e53f35634124e1c3d2e4d328 2018-08-01]以降、PKGBUILDは自動的にソース内の{{ic|*.patch}}ファイルを適用します。
  +
  +
もし、いくつかの設定を変更する必要があるなら、ソースの {{ic|config}} を編集することができます。
  +
  +
また、GUI ツールを使ってオプションを調整することもできます。PKGBUILD の prepare() 関数に {{ic|make olddefconfig}} とコメントし、好きなツールを追加してください (利用可能な設定ターゲットをすべてリストアップするには {{ic|make help}} を実行してください):
   
また GUI ツールを使ってオプションを設定することも可能です。PKGBUILD の prepare() 関数内にある候補のどれかをアンコメントしてください、例えば:
 
 
{{hc|PKGBUILD|
 
{{hc|PKGBUILD|
 
...
 
...
  +
msg2 "Setting config..."
# load configuration
 
  +
cp ../config .config
# Configure the kernel. Replace the line below with one of your choice.
 
  +
#make olddefconfig
  +
  +
make nconfig # new CLI menu for configuration
 
#make menuconfig # CLI menu for configuration
 
#make menuconfig # CLI menu for configuration
make nconfig # new CLI menu for configuration
+
#make xconfig # X-based configuration
  +
#make oldconfig # using old config from previous kernel version
#make xconfig # X-based configuration
 
#make oldconfig # using old config from previous kernel version
 
 
# ... or manually edit .config
 
# ... or manually edit .config
  +
make prepare
 
...
 
...
 
}}
 
}}
   
  +
{{Warning|systemd には、汎用的なユースケース、特定のユースケース (例: UEFI)、特定の systemd の機能 (例: bootchart) を使用するために、設定する必要があるカーネルコンフィグが多数存在します。正しく設定しないとシステムの調子がおかしくなったり全く使えなくなったりします。必須あるいは推奨されているカーネルコンフィグのリストは {{ic|/usr/share/doc/systemd/README}} に書かれています。コンパイルする前によく確認してください。必要なコンフィグはときどき変わっています。Arch では基本的に公式カーネルを使用することになっているので、要件が変わってもアナウンスはされません。新しいバージョンの systemd をインストールする前に、リリースノートをチェックして使用しているカスタムカーネルが新しい systemd の要件を満たしているか確認してください。}}
カーネルの {{ic|.config}} ファイルをすでに持っている場合は、{{ic|nconfig}} などのインタラクティブな設定ツールをアンコメントして、ツールを使って {{ic|.config}} をロードできます。こうすれば他の方法で発生するカーネルの名前付けの問題を避けられます。
 
   
  +
=== 新しいチェックサムを生成 ===
{{Note|build() の 'make menuconfig' をアンコメントして使用し、menuconfig の gui を使って既存のコンフィグをロードした場合、作例されたパッケージでファイルが衝突する問題が発生します。これは PKGBUILD によってユニークなインストールパスに変更を加えられたデフォルトのコンフィグが上書きされるのが原因であり、特に LOCALVERSION と LOCALVERSION_AUTO コンフィグオプションが問題になります。この問題を修正するには、menuconfig で LOCALVERSION をカスタムカーネルの名前にリセットして LOCALVERSION_AUTO&#61;n を設定してください。詳しくは、https://bbs.archlinux.org/viewtopic.php?id&#61;173504 を参照。}}
 
   
  +
[[#prepare() の変更]] では、{{ic|$_srcname/.config}} への変更の可能性を示唆しています。 このパスはパッケージファイルのダウンロードが終了した場所ではないため、そのチェックサムは makepkg によってチェックされませんでした (実際は {{ic|$_srcname/../../config}} をチェックしました)。
{{Note|If you uncomment ''return 1'', you can change to the kernel source directory after makepkg finishes extraction and then make nconfig. This lets you configure the kernel over multiple sessions. When you're ready to compile, copy the .config file over top of either config or config.x86_64 (depending on your architecture), comment ''return 1'' and use '''makepkg -i'''. But do not use this for custom patches; put your patch commands after these lines. If you do patch manually bztar unpack and replace your patch.}}
 
   
  +
makepkg を実行する前に、ダウンロードした {{ic|config}} を別の設定ファイルに置き換えた場合は、{{Pkg|pacman-contrib}} パッケージを[[インストール]]し、以下を実行して新しいチェックサムを生成してください:
{{Warning| systemd has a number of kernel configuration requirements for general use, for specific usecases (e.g., UEFI) and for specific systemd functionality (e.g., bootchart). Failure to meet these requirements can result in your system being degraded or unusable. The list of required and recommended kernel CONFIGs can be found in {{ic|/usr/share/doc/systemd/README}}. Check them before you compile.These requirements also change over time. Because Arch assumes you are using the official kernel, there will be no announcement of these changes. Before you install a new version of systemd, check the version release notes to make sure your current custom kernel meets any new systemd requirements.}}
 
   
===新しいチェックサムを生成===
 
コンフィグを修正したら、次を実行して新しいチェックサムを生成する必要があります:
 
 
$ updpkgsums
 
$ updpkgsums
   
==コンパイル==
+
== コンパイル ==
  +
{{Tip|マルチコアのシステムでは[[Makepkg#MAKEFLAGS|複数のコンパイルジョブを同時に実行することで]]コンパイル時間を大幅に削減することが可能です。}}
 
  +
これで、いつものコマンド {{ic|makepkg}} を使って、あなたのカーネルをコンパイルできるようになりました。
  +
  +
カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に設定を行ってください。
  +
  +
$ makepkg -s
  +
  +
{{ic|-s}} パラメータによって xml やドキュメントなど最近のカーネルが必要とする依存パッケージがダウンロードされます。
  +
  +
{{Note|
  +
* カーネルソースは [https://www.kernel.org/signature.html#kernel-org-web-of-trust PGP 署名] が付いており、makepkg は署名を検証します。詳しくは [[Makepkg#署名チェック]]を見てください。
  +
* ハードウェアのパフォーマンスによっては、コンパイルに数時間かかる可能性があります。マルチコアのシステムでは[[Makepkg#並列コンパイル|複数のコンパイルジョブを同時に実行する]]ことでコンパイル時間を大幅に削減することが可能です。
  +
* 上記の {{ic|makepkg}} を {{ic|time}} コマンドを使って実行すれば、コンパイルにどれだけの時間が掛かったのかを知ることができます。
  +
}}
  +
  +
== インストール ==
  +
  +
コンパイルのステップを終えると、{{ic|~/build/linux}} フォルダ内に 2 つのパッケージが作成されています。1 つはカーネルで、もう一つはカーネルのヘッダファイル群です。これらは以下のような名前かもしれません:
  +
  +
linux-custom-5.8.12-x86_64.pkg.tar.zst
  +
linux-custom-headers-5.8.12-x86_64.pkg.tar.zst
  +
  +
ベストプラクティスは、両方のパッケージを一緒に[[インストール]]することです。両方とも必要になるかもしれませんから (例えば [[DKMS]]):
  +
  +
# pacman -U ''linux-custom-headers-5.8.12-x86_64.pkg.tar.zst'' ''linux-custom-5.8.12-x86_64.pkg.tar.zst''
  +
  +
(先のフォルダ内にあるファイルの実際の名前に置き換えてください)
  +
  +
== ブートローダー ==
  +
  +
新しいカーネルをデフォルトのカーネルと共存させるために {{ic|pkgbase}} を変更した場合、ブートローダーの設定ファイルを更新し、関連する initramfs イメージとカスタムカーネルの新しいエントリ ('default' と 'fallback') を追加する必要があります。
  +
  +
== アップデート ==
  +
  +
更新したい arch kernel source を持っていると仮定すると、そのための一つの方法は https://github.com/archlinux/linux を使うことです。以下では、カーネルソースの最上位ディレクトリを {{ic|~/build/linux/}} とします。
  +
  +
一般に、arch は2つのローカル git リポジトリを持つ arch kernel source を設定します。{{ic|archlinux-linux/}} にあるのは、{{ic|<nowiki>https://github.com/archlinux/linux.git</nowiki>}} を指しているローカルの裸の [[git]] リポジトリです。もう一つは {{ic|'''src/'''archlinux-linux/}} にあり、最初のリポジトリから取り出します。可能なローカルパッチとビルドは、{{ic|'''src/'''archlinux-linux/}} にあると期待されます。
  +
  +
この例では、{{ic|archlinux-linux/}} にローカルにインストールされた bare git リポジトリソースの HEAD が最初に指されています:
  +
  +
{{hc|1=
  +
$ cd ~/build/linux/archlinux-linux/
  +
$ git log --oneline --max-count 1 HEAD|2=
  +
4010b622f1d2 Merge branch 'dax-fix-5.3-rc3' of <nowiki>git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm</nowiki>
  +
}}
  +
  +
v5.2.5-arch1とv5.2.6-arch1の間のどこかにあります。
  +
  +
$ git fetch --verbose
  +
  +
取得した新しいタグを出力するため、最新の archlinux タグである v5.2.7-arch1 をフェッチしたことがわかります。 新しいタグが取得されなかった場合、利用可能な新しい archlinux ソースはありません。
  +
  +
これで、実際のビルドが行われる場所でソースを更新できます。
  +
  +
$ cd ~/build/linux/src/archlinux-linux/
  +
$ git checkout master
  +
$ git pull
  +
$ git fetch --tags --verbose
  +
$ git branch --verbose 5.2.7-arch1 v5.2.7-arch1
  +
$ git checkout 5.2.7-arch1
  +
  +
次のような方法で状況が進んでいることを確認できます
  +
  +
{{hc|1=$ git log --oneline 5.2.7-arch1 --max-count=7|2=
  +
13193bfc03d4 '''Arch Linux kernel v5.2.7-arch1'''
  +
9475c6772d05 netfilter: nf_tabf676926c7f60les: fix module autoload for redir
  +
498d650048f6 iwlwifi: Add support for SAR South Korea limitation
  +
bb7293abdbc7 iwlwifi: mvm: disable TX-AMSDU on older NICs
  +
f676926c7f60 ZEN: Add CONFIG for unprivileged_userns_clone
  +
5e4e503f4f28 add sysctl to disallow unprivileged CLONE_NEWUSER by default
  +
5697a9d3d55f '''Linux 5.2.7'''
  +
}}
  +
  +
これは、{{ic|Arch Linux kernel v5.2.7-arch1}} と {{ic|Linux 5.2.7}} の間のいくつかの特定の archlinux パッチを示しています。
  +
  +
最新の PKGBUILD および archlinux カーネルのコンフィグレーションファイルは、{{ic|git}} を使ってパッケージディレクトリへ取得できます:
  +
  +
$ cd ~/build/linux/
  +
$ git pull
  +
  +
{{ic|~/build/linux/linux/*}} 内のファイルを {{ic|~/build/linux/}} へ[[Vim#ファイルのマージ|マージする]]必要があります。マージは手動で行うことができますし、[[アプリケーション一覧#Comparison, diff, merge|特定のユーティリティ]]を使うこともできます。[[#prepare() の変更]] を見て、PKGBUILD::prepare() のシェルコマンドを (全てではないにしろ) ほぼ全て手動で実行してください。
  +
  +
この時点で、 {{ic|makepkg--verifysource}} は成功するはずです。[[#コンパイル]] の時には、{{ic|makepkg}} {{ic|--noextract}} オプションも追加してください。これによりソースが makepkg --nobuild によって抽出されたかのようにパッケージをビルドできるはずです。そして [[#インストール]] に戻ります。
  +
  +
=== クリーンアップ ===
  +
  +
マージした後、{{ic|~/build/linux/linux/}} を削除したい場合があるでしょう。{{ic|~/build/linux/src/archlinux}} は、より新しい更新がこの方法で行われた場合、{{ic|5.2.7-arch1}} の形でブランチを蓄積します。 これらは以下で削除することができます:
   
  +
$ cd ~/build/linux/src/archlinux
通常のコマンドを使ってカーネルをコンパイルします:
 
  +
$ git branch --delete --force --verbose 5.2.7-arch1
{{ic|makepkg}}
 
カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に行ってください。
 
   
  +
== 参照 ==
{{Note|カーネルのコンパイルにはちょっと時間が必要になります。1時間かかるのもざらです。SSD を搭載した最近の環境では10分もかかりませんが。}}
 
   
  +
* https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ
==インストール==
 
makepkg が終わったら linux.install ファイルの変数が変わっているのが見て取れるはずです。後は、pacman (もしくは pacman に代わるプログラム) で通常通りにパッケージをインストールするだけです:
 
# pacman -U <kernel-headers_package>
 
# pacman -U <kernel_package>
 
{{Note|[[NVIDIA#Alternate install: カスタムカーネル|nvidia-hook]] を使って nvidia ドライバーを含めたい場合は、先にカーネルヘッダーをインストールするのが良いでしょう。}}
 
   
  +
{{TranslationStatus|Kernel/Arch build system|2023-06-04|780280}}
==ブートローダー==
 
これであなたのカスタムカーネルのフォルダとファイルが作成されました、例: {{ic|/boot/vmlinuz-linux-test}}。あなたのカーネルをテストするには、ブートローダーを更新して (GRUB では grub-mkconfig) カスタムカーネルに対応する新しいエントリ ('default' や 'fallback') を追加してください。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。
 

2023年9月27日 (水) 21:29時点における最新版

Arch Build System を使うことで、公式の linux パッケージをベースにカスタムカーネルをビルドすることができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定やパッチの追加が可能です。

材料の入手

makepkg を使用するので、以下のベストプラクティスに従ってください。例えば、makepkg を root ユーザとして実行することはできません。したがって、まずはホームディレクトリに build ディレクトリを作成してください:

$ mkdir ~/build/
$ cd ~/build/

パッケージ devtoolsbase-develインストールしてください。

カスタマイズを開始するには、クリーンなカーネルが必要です。以下を実行して、git を使って PKGBUILD ソースを取得し、他のいくつかのファイルも取得してください:

$ pkgctl repo clone --protocol=https linux

この時点で、ディレクトリツリーは以下のようになります(他にもいくつかファイルがあるかもしれません)

~/build/linux/-+
               +--config
               \__PKGBUILD

その後、必要なファイル (例:カスタム設定ファイル、パッチなど) をそれぞれのソースから取得してください。

PKGBUILD の修正

PKGBUILD を編集して、pkgbase パラメータをあなたのカスタムパッケージの名前に変えて下さい、例えば:

PKGBUILD
pkgbase=linux-custom
警告: linuxprovides 配列に 追加しないでください。カスタムカーネルは、そのカーネルに対して構築されたバイナリモジュールと互換性がないため、その依存関係を満たすことはできません。 同様に、同様の理由で、ヘッダーパッケージの provides 配列に linux-headers を追加しないでください。

ドキュメントの作成を避ける

長いコンパイル作業の大部分は、ドキュメントの作成に費やされています。2022年8月25日の時点で、PKGBUILD への次のパッチにより作成を回避します:

63c63
<   make htmldocs all
---
>   make all
195c195
< pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
---
> pkgname=("$pkgbase" "$pkgbase-headers")

このパッチは行#63 と行#195 を変更します。 PKGBUILD ファイルが正しく適用されない場合は、手動で編集する必要がある場合があります。

prepare() の変更

prepare() 関数では、パッチの適用 やカーネルビルドの設定を変更することができます。 2018-08-01以降、PKGBUILDは自動的にソース内の*.patchファイルを適用します。

もし、いくつかの設定を変更する必要があるなら、ソースの config を編集することができます。

また、GUI ツールを使ってオプションを調整することもできます。PKGBUILD の prepare() 関数に make olddefconfig とコメントし、好きなツールを追加してください (利用可能な設定ターゲットをすべてリストアップするには make help を実行してください):

PKGBUILD
...
  msg2 "Setting config..."
  cp ../config .config
  #make olddefconfig

  make nconfig     # new CLI menu for configuration
  #make menuconfig # CLI menu for configuration
  #make xconfig    # X-based configuration
  #make oldconfig  # using old config from previous kernel version
  # ... or manually edit .config
  make prepare
...
警告: systemd には、汎用的なユースケース、特定のユースケース (例: UEFI)、特定の systemd の機能 (例: bootchart) を使用するために、設定する必要があるカーネルコンフィグが多数存在します。正しく設定しないとシステムの調子がおかしくなったり全く使えなくなったりします。必須あるいは推奨されているカーネルコンフィグのリストは /usr/share/doc/systemd/README に書かれています。コンパイルする前によく確認してください。必要なコンフィグはときどき変わっています。Arch では基本的に公式カーネルを使用することになっているので、要件が変わってもアナウンスはされません。新しいバージョンの systemd をインストールする前に、リリースノートをチェックして使用しているカスタムカーネルが新しい systemd の要件を満たしているか確認してください。

新しいチェックサムを生成

#prepare() の変更 では、$_srcname/.config への変更の可能性を示唆しています。 このパスはパッケージファイルのダウンロードが終了した場所ではないため、そのチェックサムは makepkg によってチェックされませんでした (実際は $_srcname/../../config をチェックしました)。

makepkg を実行する前に、ダウンロードした config を別の設定ファイルに置き換えた場合は、pacman-contrib パッケージをインストールし、以下を実行して新しいチェックサムを生成してください:

$ updpkgsums

コンパイル

これで、いつものコマンド makepkg を使って、あなたのカーネルをコンパイルできるようになりました。

カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に設定を行ってください。

$ makepkg -s

-s パラメータによって xml やドキュメントなど最近のカーネルが必要とする依存パッケージがダウンロードされます。

ノート:
  • カーネルソースは PGP 署名 が付いており、makepkg は署名を検証します。詳しくは Makepkg#署名チェックを見てください。
  • ハードウェアのパフォーマンスによっては、コンパイルに数時間かかる可能性があります。マルチコアのシステムでは複数のコンパイルジョブを同時に実行することでコンパイル時間を大幅に削減することが可能です。
  • 上記の makepkgtime コマンドを使って実行すれば、コンパイルにどれだけの時間が掛かったのかを知ることができます。

インストール

コンパイルのステップを終えると、~/build/linux フォルダ内に 2 つのパッケージが作成されています。1 つはカーネルで、もう一つはカーネルのヘッダファイル群です。これらは以下のような名前かもしれません:

linux-custom-5.8.12-x86_64.pkg.tar.zst
linux-custom-headers-5.8.12-x86_64.pkg.tar.zst

ベストプラクティスは、両方のパッケージを一緒にインストールすることです。両方とも必要になるかもしれませんから (例えば DKMS):

# pacman -U linux-custom-headers-5.8.12-x86_64.pkg.tar.zst linux-custom-5.8.12-x86_64.pkg.tar.zst

(先のフォルダ内にあるファイルの実際の名前に置き換えてください)

ブートローダー

新しいカーネルをデフォルトのカーネルと共存させるために pkgbase を変更した場合、ブートローダーの設定ファイルを更新し、関連する initramfs イメージとカスタムカーネルの新しいエントリ ('default' と 'fallback') を追加する必要があります。

アップデート

更新したい arch kernel source を持っていると仮定すると、そのための一つの方法は https://github.com/archlinux/linux を使うことです。以下では、カーネルソースの最上位ディレクトリを ~/build/linux/ とします。

一般に、arch は2つのローカル git リポジトリを持つ arch kernel source を設定します。archlinux-linux/ にあるのは、https://github.com/archlinux/linux.git を指しているローカルの裸の git リポジトリです。もう一つは src/archlinux-linux/ にあり、最初のリポジトリから取り出します。可能なローカルパッチとビルドは、src/archlinux-linux/ にあると期待されます。

この例では、archlinux-linux/ にローカルにインストールされた bare git リポジトリソースの HEAD が最初に指されています:

$ cd ~/build/linux/archlinux-linux/
$ git log --oneline --max-count 1 HEAD
4010b622f1d2 Merge branch 'dax-fix-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

v5.2.5-arch1とv5.2.6-arch1の間のどこかにあります。

$ git fetch --verbose

取得した新しいタグを出力するため、最新の archlinux タグである v5.2.7-arch1 をフェッチしたことがわかります。 新しいタグが取得されなかった場合、利用可能な新しい archlinux ソースはありません。

これで、実際のビルドが行われる場所でソースを更新できます。

$ cd ~/build/linux/src/archlinux-linux/
$ git checkout master
$ git pull
$ git fetch --tags --verbose
$ git branch --verbose 5.2.7-arch1 v5.2.7-arch1
$ git checkout 5.2.7-arch1

次のような方法で状況が進んでいることを確認できます

$ git log --oneline 5.2.7-arch1 --max-count=7
13193bfc03d4 Arch Linux kernel v5.2.7-arch1
9475c6772d05 netfilter: nf_tabf676926c7f60les: fix module autoload for redir
498d650048f6 iwlwifi: Add support for SAR South Korea limitation
bb7293abdbc7 iwlwifi: mvm: disable TX-AMSDU on older NICs
f676926c7f60 ZEN: Add CONFIG for unprivileged_userns_clone
5e4e503f4f28 add sysctl to disallow unprivileged CLONE_NEWUSER by default
5697a9d3d55f Linux 5.2.7

これは、Arch Linux kernel v5.2.7-arch1Linux 5.2.7 の間のいくつかの特定の archlinux パッチを示しています。

最新の PKGBUILD および archlinux カーネルのコンフィグレーションファイルは、git を使ってパッケージディレクトリへ取得できます:

$ cd ~/build/linux/
$ git pull

~/build/linux/linux/* 内のファイルを ~/build/linux/マージする必要があります。マージは手動で行うことができますし、特定のユーティリティを使うこともできます。#prepare() の変更 を見て、PKGBUILD::prepare() のシェルコマンドを (全てではないにしろ) ほぼ全て手動で実行してください。

この時点で、 makepkg--verifysource は成功するはずです。#コンパイル の時には、makepkg --noextract オプションも追加してください。これによりソースが makepkg --nobuild によって抽出されたかのようにパッケージをビルドできるはずです。そして #インストール に戻ります。

クリーンアップ

マージした後、~/build/linux/linux/ を削除したい場合があるでしょう。~/build/linux/src/archlinux は、より新しい更新がこの方法で行われた場合、5.2.7-arch1 の形でブランチを蓄積します。 これらは以下で削除することができます:

$ cd ~/build/linux/src/archlinux
$ git branch --delete --force --verbose 5.2.7-arch1

参照

翻訳ステータス: このページは en:Kernel/Arch build system の翻訳バージョンです。最後の翻訳日は 2023-06-04 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。