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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎PKGBUILD の修正: 警告を翻訳して追加)
(→‎PKGBUILD の修正: ドキュメントの作成を避けるを翻訳して追加)
29行目: 29行目:
   
 
{{Warning|{{ic|linux}} を {{ic|provides}} 配列に '''追加しないでください''' カスタムカーネルは、そのカーネルに対して構築されたバイナリモジュールと互換性がないため、その依存関係を満たすことはできません。 同様に、同様の理由で、ヘッダーパッケージの {{ic|provides}} 配列に {{ic|linux-headers}} を追加しないでください。}}
 
{{Warning|{{ic|linux}} を {{ic|provides}} 配列に '''追加しないでください''' カスタムカーネルは、そのカーネルに対して構築されたバイナリモジュールと互換性がないため、その依存関係を満たすことはできません。 同様に、同様の理由で、ヘッダーパッケージの {{ic|provides}} 配列に {{ic|linux-headers}} を追加しないでください。}}
  +
  +
=== ドキュメントの作成を避ける ===
  +
  +
長い [[#Compiling|コンパイル]] 作業の大部分は、ドキュメントの作成に費やされています。 2020年5月の時点で、PKGBUILDへの次のパッチはその作成を回避します。
  +
  +
{{bc|1=
  +
64d64
  +
< make htmldocs
  +
188c188
  +
< pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
  +
---
  +
> pkgname=("$pkgbase" "$pkgbase-headers")
  +
}}
  +
このパッチは行#64 を削除し、行#188 を変更します。 PKGBUILD ファイルが正しく適用されない場合は、手動で編集する必要がある場合があります。
   
 
===prepare() の変更===
 
===prepare() の変更===

2021年2月13日 (土) 16:12時点における版

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

材料の入手

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

$ cd ~/
$ mkdir build
$ cd build/

asp パッケージと base-devel パッケージグループをインストールしてください。

それからカスタマイズの起点になる綺麗なカーネルが必要になります。ABS からカーネルパッケージファイルを取得してください:

$ ASPROOT=. asp checkout linux

その後に、必要なファイル (例: カスタム設定ファイル, パッチ, etc.) を各自のソースから手に入れて下さい。

PKGBUILD の修正

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

pkgbase=linux-custom

PKGBUILD によっては linux.install の名前も pkgbase にあわせて変更する必要があります (例: linux-hardened)。

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

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

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

64d64
<   make htmldocs
188c188
< pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
---
> pkgname=("$pkgbase" "$pkgbase-headers")

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

prepare() の変更

prepare 関数で、必要なカーネルパッチをあてたりカーネルのビルド設定を変更できます。

変更するコンフィグオプションが少ないときは、ソース内のコンフィグファイルを編集してください。既存のコンフィグファイルを、64ビット環境の場合は config.x86_64 に32ビット環境の場合は config にコピーします。

また GUI ツールを使ってオプションを設定することも可能です。PKGBUILD の prepare() 関数内にある候補のどれかをアンコメントしてください、例えば:

PKGBUILD
...
  # load configuration
  # Configure the kernel. Replace the line below with one of your choice.
  #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
  # ... or manually edit .config
...
警告: systemd には特定のユースケース (例: UEFI) の場合や特定の systemd の機能 (例: bootchart) を使用するために、設定する必要があるカーネルコンフィグが多数存在します。正しく設定しないとシステムの調子がおかしくなったり全く使えなくなったりします。必須あるいは推奨されているカーネルコンフィグのリストは /usr/share/doc/systemd/README に書かれています。コンパイルする前によく確認してください。必要なコンフィグはときどき変わっています。Arch では基本的に公式カーネルを使用することになっているので、要件が変わってもアナウンスはされません。新しいバージョンの systemd をインストールする前に、リリースノートをチェックして使用しているカスタムカーネルが新しい systemd の要件を満たしているか確認してください。

既存の .config をロード

カーネルの .config ファイルをすでに持っている場合は、nconfig などのインタラクティブな設定ツールをアンコメントして、ツールを使って .config をロードできます。こうすれば他の方法で発生するカーネルの名前付けの問題を避けられます。

ノート: prepare() の 'make menuconfig' をアンコメントして使用し、menuconfig の gui を使って既存のコンフィグをロードした場合、作例されたパッケージでファイルが衝突する問題が発生します。これは PKGBUILD によってユニークなインストールパスに変更を加えられたデフォルトのコンフィグが上書きされるのが原因であり、特に LOCALVERSION と LOCALVERSION_AUTO コンフィグオプションが問題になります。この問題を修正するには、menuconfig で LOCALVERSION をカスタムカーネルの名前にリセットして LOCALVERSION_AUTO=n を設定してください。詳しくは、https://bbs.archlinux.org/viewtopic.php?id=173504 を参照。

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

コンフィグを修正したら、以下のコマンドを実行して新しいチェックサムを生成する必要があります:

$ updpkgsums

コンパイル

普通のパッケージと同じビルドコマンド (makepkg) を使ってカーネルをコンパイルします。

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

$ makepkg -s

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

ヒント:

インストール

makepkg が終わったら linux.install ファイルの変数が変わっているのが見て取れるはずです。

後は、pacman (もしくは pacman に代わるプログラム) で通常通りにパッケージをインストールするだけです。カスタムカーネルで必要となる (nvidia ドライバーをインストールするときなど) カーネルヘッダーを先にインストールすると良いでしょう:

# pacman -U kernel-headers_package
# pacman -U kernel_package

ブートローダー

これであなたのカスタムカーネルのフォルダとファイルが作成されました、例: /boot/vmlinuz-linux-test。あなたのカーネルをテストするには、ブートローダーの設定ファイルを更新してカスタムカーネルに対応する新しいエントリ ('default' や 'fallback') を追加してください。PKGBUILD の pkgbase でカーネルの名前を変更した場合は pacman でインストールする前に $build/pkg/kernel/etcinitramfs.img の名前を変える必要があります。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。

参照