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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(update links)
(同期)
3行目: 3行目:
 
[[en:Kernels/Arch Build System]]
 
[[en:Kernels/Arch Build System]]
 
[[it:Kernels/Arch Build System]]
 
[[it:Kernels/Arch Build System]]
  +
[[ru:Kernels/Arch Build System]]
[[ru:Custom Kernel Compilation with ABS]]
 
[[zh-CN:Kernels/Arch Build System]]
+
[[zh-cn:Kernels/Arch Build System]]
 
[[Arch Build System|Arch Build System]] を使うことで、公式の {{Pkg|linux}} パッケージをベースにカスタムカーネルを作成することができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定やパッチの追加が可能です。
 
[[Arch Build System|Arch Build System]] を使うことで、公式の {{Pkg|linux}} パッケージをベースにカスタムカーネルを作成することができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定やパッチの追加が可能です。
   
 
==材料の入手==
 
==材料の入手==
  +
  +
[[makepkg]] を使用するため、以下のベストプラクティスに従ってください。例えば、makepkg を root あるいは sudo で実行することはできません。したがって、まずはホームディレクトリに {{ic|build}} ディレクトリを作成してください:
  +
$ cd ~/
  +
$ mkdir build
  +
$ cd build/
   
 
[[公式リポジトリ]]から {{Pkg|abs}} パッケージと {{Grp|base-devel}} パッケージグループを[[インストール]]してください。
 
[[公式リポジトリ]]から {{Pkg|abs}} パッケージと {{Grp|base-devel}} パッケージグループを[[インストール]]してください。
   
まず最初に、カスタマイズの起点になる綺麗なカーネルが必要になります。ABS からカーネルパッケージファイルを取得してください:
+
それからカスタマイズの起点になる綺麗なカーネルが必要になります。ABS からカーネルパッケージファイルを取得してください:
   
{{bc|1=$ ABSROOT=. abs core/linux}}
+
$ ABSROOT=. abs core/linux
   
ファイアウォールによって rsync ポートがブロックされる場合は、-t オプションで tarball を使って同期することができます
+
ファイアウォールによって rsync ポートがブロックされる場合は、-t オプションで tarball を使って同期することができます:
   
{{bc|1=$ ABSROOT=. abs core/linux -t}}
+
$ ABSROOT=. abs core/linux -t
   
 
その後に、必要なファイル (例: カスタム設定ファイル, パッチ, etc.) を各自のソースから手に入れて下さい。
 
その後に、必要なファイル (例: カスタム設定ファイル, パッチ, etc.) を各自のソースから手に入れて下さい。
   
 
==PKGBUILD の修正==
 
==PKGBUILD の修正==
{{ic|pkgbase}} をあなたのカスタムパッケージの名前に変えて下さい、例えば:
+
PKGBUILD {{ic|pkgbase}} をあなたのカスタムパッケージの名前に変えて下さい、例えば:
pkgbase=linux-custom
+
pkgbase=linux-custom
   
  +
PKGBUILD によっては {{ic|linux.install}} の名前も {{ic|pkgbase}} にあわせて変更する必要があります (例: {{Pkg|linux-grsec}})。
===build() の変更===
 
  +
変更するコンフィグオプションが少ない時は、デフォルトのオプションを使ってあなたのオプションを設定ファイルに追加することができます:
 
  +
===prepare() の変更===
$ echo '
 
  +
CONFIG_DEBUG_INFO=y
 
  +
prepare 関数で、必要なカーネルパッチをあてたりカーネルのビルド設定を変更できます。
CONFIG_FOO=n
 
  +
' >> config.x86_64
 
  +
変更するコンフィグオプションが少ないときは、ソース内のコンフィグファイルを編集してください。既存のコンフィグファイルを、64ビット環境の場合は {{ic|config.x86_64}} に32ビット環境の場合は {{ic|config}} にコピーします。
   
 
また GUI ツールを使ってオプションを設定することも可能です。PKGBUILD の prepare() 関数内にある候補のどれかをアンコメントしてください、例えば:
 
また GUI ツールを使ってオプションを設定することも可能です。PKGBUILD の prepare() 関数内にある候補のどれかをアンコメントしてください、例えば:
45行目: 51行目:
 
}}
 
}}
   
  +
{{Warning|systemd には特定のユースケース (例: UEFI) の場合や特定の systemd の機能 (例: bootchart) を使用するために、設定する必要があるカーネルコンフィグが多数存在します。正しく設定しないとシステムの調子がおかしくなったり全く使えなくなったりします。必須あるいは推奨されているカーネルコンフィグのリストは {{ic|/usr/share/doc/systemd/README}} に書かれています。コンパイルする前によく確認してください。必要なコンフィグはときどき変わっています。Arch では基本的に公式カーネルを使用することになっているので、要件が変わってもアナウンスはされません。新しいバージョンの systemd をインストールする前に、リリースノートをチェックして使用しているカスタムカーネルが新しい systemd の要件を満たしているか確認してください。}}
カーネルの {{ic|.config}} ファイルをすでに持っている場合は、{{ic|nconfig}} などのインタラクティブな設定ツールをアンコメントして、ツールを使って {{ic|.config}} をロードできます。こうすれば他の方法で発生するカーネルの名前付けの問題を避けられます。
 
   
  +
==== 既存の .config をロード ====
{{Note|build() の 'make menuconfig' をアンコメントして使用し、menuconfig の gui を使って既存のコンフィグをロードした場合、作例されたパッケージでファイルが衝突する問題が発生します。これは PKGBUILD によってユニークなインストールパスに変更を加えられたデフォルトのコンフィグが上書きされるのが原因であり、特に LOCALVERSION と LOCALVERSION_AUTO コンフィグオプションが問題になります。この問題を修正するには、menuconfig で LOCALVERSION をカスタムカーネルの名前にリセットして LOCALVERSION_AUTO=n を設定してください。詳しくは、https://bbs.archlinux.org/viewtopic.php?id=173504 を参照。}}
 
   
  +
カーネルの {{ic|.config}} ファイルをすでに持っている場合は、{{ic|nconfig}} などのインタラクティブな設定ツールをアンコメントして、ツールを使って {{ic|.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.}}
 
   
  +
{{Note|prepare() の 'make menuconfig' をアンコメントして使用し、menuconfig の gui を使って既存のコンフィグをロードした場合、作例されたパッケージでファイルが衝突する問題が発生します。これは PKGBUILD によってユニークなインストールパスに変更を加えられたデフォルトのコンフィグが上書きされるのが原因であり、特に LOCALVERSION と LOCALVERSION_AUTO コンフィグオプションが問題になります。この問題を修正するには、menuconfig で LOCALVERSION をカスタムカーネルの名前にリセットして LOCALVERSION_AUTO=n を設定してください。詳しくは、https://bbs.archlinux.org/viewtopic.php?id=173504 を参照。}}
{{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}}) を使ってカーネルをコンパイルします
{{ic|makepkg}}
 
カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に行ってください。
 
   
  +
カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に設定を行ってください。
{{Note|カーネルのコンパイルにはちょっと時間が必要になります。1時間かかるのもざらです。SSD を搭載した最近の環境では10分もかかりませんが。}}
 
  +
  +
$ makepkg -s
  +
  +
{{ic|-s}} パラメータによって xml やドキュメントなど最近のカーネルが必要とする依存パッケージがダウンロードされます。
  +
  +
{{Tip|
  +
* カーネルソースは [https://www.kernel.org/signature.html#kernel-org-web-of-trust PGP 署名] が付いており、makepkg は署名を検証します。詳しくは [[Makepkg#署名チェック]]を見てください。
  +
* マルチコアのシステムでは[[Makepkg#MAKEFLAGS|複数のコンパイルジョブを同時に実行する]]ことでコンパイル時間を大幅に削減することが可能です。}}
   
 
==インストール==
 
==インストール==
makepkg が終わったら linux.install ファイルの変数が変わっているのが見て取れるはずです。後は、pacman (もしくは pacman に代わるプログラム) で通常通りにパッケージをインストールするだけです:
+
''makepkg'' が終わったら {{ic|linux.install}} ファイルの変数が変わっているのが見て取れるはずです。
  +
# pacman -U <kernel-headers_package>
 
  +
後は、pacman (もしくは pacman に代わるプログラム) で通常通りにパッケージをインストールするだけです。カスタムカーネルで必要となる ([[NVIDIA#カスタムカーネル|nvidia]] ドライバーをインストールするときなど) カーネルヘッダーを先にインストールすると良いでしょう:
# pacman -U <kernel_package>
 
  +
# pacman -U ''kernel-headers_package''
{{Note|[[NVIDIA#Alternate install: カスタムカーネル|nvidia-hook]] を使って nvidia ドライバーを含めたい場合は、先にカーネルヘッダーをインストールするのが良いでしょう。}}
 
  +
# pacman -U ''kernel_package''
   
 
==ブートローダー==
 
==ブートローダー==
これであなたのカスタムカーネルのフォルダとファイルが作成されました、例: {{ic|/boot/vmlinuz-linux-test}}。あなたのカーネルをテストするには、ブートローダーを更新して (GRUB では grub-mkconfig) カスタムカーネルに対応する新しいエントリ ('default' や 'fallback') を追加してください。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。
+
これであなたのカスタムカーネルのフォルダとファイルが作成されました、例: {{ic|/boot/vmlinuz-linux-test}}。あなたのカーネルをテストするには、[[ブートローダー]]の設定ファイルを更新してカスタムカーネルに対応する新しいエントリ ('default' や 'fallback') を追加してください。''PKGBUILD の pkgbase'' でカーネルの名前を変更した場合は pacman でインストールする前に ''$build/pkg/kernel/etc'' の {{ic|initramfs.img}} の名前を変える必要があります。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。

2016年11月28日 (月) 23:14時点における版

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

材料の入手

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

$ cd ~/
$ mkdir build
$ cd build/

公式リポジトリから abs パッケージと base-devel パッケージグループをインストールしてください。

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

$ ABSROOT=. abs core/linux

ファイアウォールによって rsync ポートがブロックされる場合は、-t オプションで tarball を使って同期することができます:

$ ABSROOT=. abs core/linux -t

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

PKGBUILD の修正

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

pkgbase=linux-custom

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

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 の名前を変える必要があります。そうすれば標準のカーネルとカスタムカーネルを選択できるようになります。