「カーネル/Arch build system」の版間の差分
(→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)。
ドキュメントの作成を避ける
長い コンパイル 作業の大部分は、ドキュメントの作成に費やされています。 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 ...
既存の .config をロード
カーネルの .config
ファイルをすでに持っている場合は、nconfig
などのインタラクティブな設定ツールをアンコメントして、ツールを使って .config
をロードできます。こうすれば他の方法で発生するカーネルの名前付けの問題を避けられます。
新しいチェックサムを生成
コンフィグを修正したら、以下のコマンドを実行して新しいチェックサムを生成する必要があります:
$ 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/etc の initramfs.img
の名前を変える必要があります。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。