「Arch build system」の版間の差分
細 (修正) |
細 (AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに) |
||
(2人の利用者による、間の12版が非表示) | |||
3行目: | 3行目: | ||
[[Category:パッケージ管理]] |
[[Category:パッケージ管理]] |
||
[[de:Arch Build System]] |
[[de:Arch Build System]] |
||
− | [[en:Arch |
+ | [[en:Arch build system]] |
[[es:Arch Build System]] |
[[es:Arch Build System]] |
||
− | [[fr:Arch |
+ | [[fr:Arch build system]] |
[[pt:Arch Build System]] |
[[pt:Arch Build System]] |
||
− | [[ru:Arch |
+ | [[ru:Arch build system]] |
[[zh-hans:Arch Build System]] |
[[zh-hans:Arch Build System]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
13行目: | 13行目: | ||
{{Related|Arch User Repository}} |
{{Related|Arch User Repository}} |
||
{{Related|パッケージの作成}} |
{{Related|パッケージの作成}} |
||
− | {{Related| |
+ | {{Related|カーネル/Arch build system}} |
{{Related|makepkg}} |
{{Related|makepkg}} |
||
{{Related|公式リポジトリ}} |
{{Related|公式リポジトリ}} |
||
{{Related|pacman}} |
{{Related|pacman}} |
||
{{Related|PKGBUILD}} |
{{Related|PKGBUILD}} |
||
− | {{Related| |
+ | {{Related|パッケージにパッチを適用}} |
{{Related articles end}} |
{{Related articles end}} |
||
− | Arch |
+ | Arch build system (ABS) とは、''ports ライクな''システムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。[[pacman]] はバイナリパッケージの管理用に特殊化された Arch ツールであるに対し、Arch build system は、インストール可能な ''.pkg.tar.zst'' パッケージにソースをコンパイルするためのツールのコレクションです。 |
''Ports'' は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。''port'' を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。''port'' はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの ''port'' に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で {{ic|make}} か {{ic|make install clean}} を実行すればよく、ソフトウェアのインストールがシンプルになります。 |
''Ports'' は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。''port'' を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。''port'' はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの ''port'' に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で {{ic|make}} か {{ic|make install clean}} を実行すればよく、ソフトウェアのインストールがシンプルになります。 |
||
− | + | Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。各リポジトリには [[PKGBUILD]] ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。[[makepkg]] をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内でパッケージングされます。その後、そのパッケージを [[pacman]] でインストールできます。 |
|
− | == |
+ | == ツールチェイン == |
+ | Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています: |
||
− | 'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからです; そのため、技術的には正確ではありませんが、'ABS' はツールキットとして以下のツールを意味します: |
||
− | ; |
+ | ; リポジトリ: すべての公式パッケージのビルドに必要なファイルを含むディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。[https://gitlab.archlinux.org/archlinux/packaging/packages Gitlab] 上の [[Git]] リポジトリという形で利用できます。詳細は [[#リポジトリ構造]] セクションを参照してください。 |
− | ; [[PKGBUILD]]: ソースコードの URL とコンパイル |
+ | ; [[PKGBUILD]]: ソースコードの URL と、コンパイルやパッケージングの命令が記述されている [[Bash]] スクリプト。 |
− | ; [[makepkg]]: PKGBUILD を読み込む |
+ | ; [[makepkg]]: PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、({{ic|makepkg.conf}} の {{ic|PKGEXT}} に従って) ''.pkg.tar*'' を作成します。makepkg を使って [[AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は [[パッケージの作成]] を見て下さい。 |
− | ; [[pacman]]: pacman は |
+ | ; [[pacman]]: pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。 |
− | ; [[ |
+ | ; [[AUR]]: Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。 |
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}} |
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}} |
||
− | === |
+ | === リポジトリ構造 === |
+ | [[公式リポジトリ]] ''core''、''extra''、''core-testing''、そして ''extra-testing'' は、[https://gitlab.archlinux.org/ Arch Linux Gitlab インスタンス]上でホストされています。 |
||
− | ''core'', ''extra'', ''testing'' [[リポジトリ]]は ''packages'' SVN リポジトリから[[#非再帰的なチェックアウト|チェックアウト]]できます。''community'' と ''multilib'' リポジトリは ''community'' SVN リポジトリに含まれています。 |
||
− | 各パッケージには |
+ | 各パッケージには、{{ic|archlinux/packaging/packages}} という名前空間内にそれぞれの独自のリポジトリが存在します。各リポジトリには、公式なビルドで使用される PKGBUILD とファイルが含まれています。また、ビルドプロセスで開発者によって使用されるファイルも存在していることがあります。 |
− | 例えば、{{pkg|acl}} のツリーは以下のよう |
+ | 例えば、{{pkg|acl}} のツリーは以下のような見た目をしています: |
acl |
acl |
||
+ | ├── keys |
||
− | acl/repos |
||
+ | │ └── pgp |
||
− | acl/repos/core-i686 |
||
+ | │ ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc |
||
− | acl/repos/core-i686/PKGBUILD |
||
+ | │ ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc |
||
− | acl/repos/core-x86_64 |
||
+ | │ └── B902B5271325F892AC251AD441633B9FE837F581.asc |
||
− | acl/repos/core-x86_64/PKGBUILD |
||
+ | └── PKGBUILD |
||
− | acl/trunk |
||
− | acl/trunk/PKGBUILD |
||
− | パッケージのソースコードは |
+ | パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。 |
− | == |
+ | == ユースケース == |
+ | Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります: |
||
− | Arch Build System の用途は以下の通りです: |
||
− | * |
+ | * パッケージを(再)コンパイルする必要があるケース。 |
− | * パッケージが |
+ | * パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。 |
− | * |
+ | * 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。 |
− | * FreeBSD |
+ | * (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。 |
− | * カスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]]を見て |
+ | * 自分のカスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]] を見てください)。 |
− | * |
+ | * カーネルモジュールをカスタムカーネルで動くようにする。 |
− | * PKGBUILD 内のバージョン番号を |
+ | * PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。 |
+ | == 使用法 == |
||
− | ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。 |
||
+ | === PKGBUILD ソースを取得する === |
||
− | == ABS の使用方法 == |
||
− | + | 特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。 |
|
− | === |
+ | ==== pkgctl ツールを使う ==== |
+ | 前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。 |
||
− | ==== 要件 ==== |
||
+ | {{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用されます: |
||
− | {{Pkg|subversion}} パッケージを[[インストール]]してください。 |
||
+ | $ pkgctl repo clone ''pkgname'' |
||
− | ==== 非再帰的なチェックアウト ==== |
||
+ | 注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。 |
||
− | {{Warning|リポジトリ全体をダウンロードしないでください。SVN リポジトリの全体は巨大です。理不尽なほどのディスク容量を消費するばかりでなく、ダウンロードするのに archlinux.org サーバーに大きな負担をかけることになります。リポジトリ全体をダウンロードしてはいけません。以下で説明している方法だけにしてください。サービスに過度の負担をかける行為をした場合、あなたのアドレスがブロックされる可能性もあります。何らかのスクリプトで公の SVN を使わないようにしてください。}} |
||
+ | このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。 |
||
− | ''core'', ''extra'', ''testing'' [[リポジトリ]]をチェックアウト: |
||
+ | パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます: |
||
− | $ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki> |
||
+ | $ pkgctl repo clone --switch="2:1.19.5-1" go |
||
− | ''community'' と ''multilib'' リポジトリをチェックアウト: |
||
+ | 詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。 |
||
− | $ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki> |
||
+ | ==== 直接 git を使う ==== |
||
− | どちらの場合でも空のディレクトリが作成されますが、svn のチェックアウトとわかります。 |
||
− | + | 以下の git コマンドでパッケージを clone できます: |
|
+ | $ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git |
||
− | チェックアウトした svn リポジトリがあるディレクトリ (''packages'' または ''community'') で以下のコマンドを実行: |
||
+ | 例えば、Apache のビルドファイルをコピーするには: |
||
− | $ svn update ''package-name'' |
||
+ | $ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki> |
||
− | 上記のコマンドでリクエストしたパッケージがチェックアウトされます。最上位のディレクトリで ''svn update'' を実行すると、アップデートされます。 |
||
+ | === パッケージをビルドする === |
||
− | 存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合: |
||
− | |||
− | * パッケージ名のスペルを確認してください。 |
||
− | * パッケージが別のリポジトリに移っていないか確認してください (community から main リポジトリなど)。 |
||
− | * https://www.archlinux.jp/packages を確認して他のベースパッケージからビルドされていないかチェックしてください (例えば {{Pkg|python-tensorflow}} は {{Pkg|tensorflow}} の PKGBUILD からビルドします)。 |
||
− | |||
− | {{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[#旧リビジョンのパッケージをチェックアウト]]を参照してください。}} |
||
− | |||
− | リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新してください。以下のコマンドで更新できます: |
||
− | |||
− | $ svn update |
||
− | |||
− | === Git を使って PKGBUILD ソースを取得 === |
||
− | |||
− | まず最初に {{Pkg|asp}} パッケージを[[インストール]]してください。 |
||
− | |||
− | 特定のパッケージの svntogit リポジトリを複製するには: |
||
− | $ asp checkout ''pkgname'' |
||
− | |||
− | 上記のコマンドで指定したパッケージの名前が付いたディレクトリに git リポジトリが複製されます。 |
||
− | |||
− | 複製した git リポジトリを更新するには {{ic|asp update}} を実行して git リポジトリの中で {{ic|git pull}} を行ってください。 |
||
− | |||
− | また、他の git コマンドを使ってパッケージの古いバージョンをチェックアウトしたり変更を追跡することもできます。git の詳しい使い方については [[git]] のページを見てください。 |
||
− | |||
− | 最新の [[PKGBUILD]] のスナップショットをコピーしたいだけの場合、以下のコマンドを使ってください: |
||
− | $ asp export ''pkgname'' |
||
− | |||
− | === パッケージのビルド === |
||
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。 |
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。 |
||
− | [[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。 |
+ | [[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。 |
== ヒントとテクニック == |
== ヒントとテクニック == |
||
=== 修正を加えたパッケージを保護する === |
=== 修正を加えたパッケージを保護する === |
||
− | pacman でシステムを更新すると、公式リポジトリの同じ名前のパッケージで ABS で作ったパッケージが置き換えられてしまいます。これを回避するには以下の方法を見て下さい。 |
||
+ | [[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。 |
||
− | group 行を PKGBUILD に挿入して、パッケージを {{ic|modified}} という名前のグループに追加してください。 |
||
+ | group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。 |
||
− | {{hc|PKGBUILD| |
||
+ | |||
− | <nowiki>groups=('modified')</nowiki> }} |
||
+ | {{hc|PKGBUILD|2= |
||
+ | groups=('modified') |
||
+ | }} |
||
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。 |
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。 |
||
− | {{hc|/etc/pacman.conf| |
+ | {{hc|/etc/pacman.conf|2= |
− | + | IgnoreGroup = modified |
|
+ | }} |
||
− | システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを |
+ | システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。 |
− | |||
− | === 旧リビジョンのパッケージをチェックアウト === |
||
− | |||
− | [[#非再帰的なチェックアウト]]で説明したチェックアウト済みの svn リポジトリ ("packages" または "community") で、ログを確認: |
||
− | |||
− | $ svn log ''package-name'' |
||
− | |||
− | 履歴を確認して適切なリビジョンを見つけたら、チェックアウトするリビジョンを指定してください。例えば {{ic|r1729}} をチェックアウトするには: |
||
− | |||
− | $ svn update -r1729 ''package-name'' |
||
− | |||
− | 既存の ''package-name'' の作業コピーが選択したリビジョンに更新されます。 |
||
− | |||
− | 日付を指定することもできます。指定された日付のリビジョンが存在しない場合、svn はその日付の直前のパッケージを取得します。例えば2009年3月3日からのリビジョンをチェックアウトするには: |
||
− | |||
− | $ svn update -r'{20090303}' ''package-name'' |
||
− | |||
− | 他のリポジトリに移動される前のバージョンのパッケージをチェックアウトすることもできます。パッケージが移動された日付や最後のリビジョン番号をログで確認してください。 |
||
== 他のツール == |
== 他のツール == |
||
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。 |
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。 |
||
+ | |||
+ | {{TranslationStatus|Arch build system|2023-05-24|779405}} |
2023年10月16日 (月) 23:30時点における最新版
関連記事
Arch build system (ABS) とは、ports ライクなシステムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。pacman はバイナリパッケージの管理用に特殊化された Arch ツールであるに対し、Arch build system は、インストール可能な .pkg.tar.zst パッケージにソースをコンパイルするためのツールのコレクションです。
Ports は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。port を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。port はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの port に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で make
か make install clean
を実行すればよく、ソフトウェアのインストールがシンプルになります。
Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。各リポジトリには PKGBUILD ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。makepkg をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内でパッケージングされます。その後、そのパッケージを pacman でインストールできます。
目次
ツールチェイン
Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています:
- リポジトリ
- すべての公式パッケージのビルドに必要なファイルを含むディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。Gitlab 上の Git リポジトリという形で利用できます。詳細は #リポジトリ構造 セクションを参照してください。
- makepkg
- PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、(
makepkg.conf
のPKGEXT
に従って) .pkg.tar* を作成します。makepkg を使って AUR やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は パッケージの作成 を見て下さい。
- pacman
- pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
- AUR
- Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。
リポジトリ構造
公式リポジトリ core、extra、core-testing、そして extra-testing は、Arch Linux Gitlab インスタンス上でホストされています。
各パッケージには、archlinux/packaging/packages
という名前空間内にそれぞれの独自のリポジトリが存在します。各リポジトリには、公式なビルドで使用される PKGBUILD とファイルが含まれています。また、ビルドプロセスで開発者によって使用されるファイルも存在していることがあります。
例えば、acl のツリーは以下のような見た目をしています:
acl ├── keys │ └── pgp │ ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc │ ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc │ └── B902B5271325F892AC251AD441633B9FE837F581.asc └── PKGBUILD
パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が PKGBUILD
に含まれています。
ユースケース
Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
- パッケージを(再)コンパイルする必要があるケース。
- パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする (パッケージの作成 を見てください)。
- 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。
- (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。
- 自分のカスタムカーネルをクリーンにビルド・インストールする (カーネル#コンパイル を見てください)。
- カーネルモジュールをカスタムカーネルで動くようにする。
- PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。
使用法
PKGBUILD ソースを取得する
特定のパッケージをソースからビルドするために必要な PKGBUILD ファイルを取得するには、pkgctl
ツールを使うか、直接 Git を使うことができます。
pkgctl ツールを使う
前提条件として、devtools パッケージをインストールしてください。pkgctl
は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。
pkgctl
を使用して最新のビルドファイルを含む git リポジトリを clone するには、以下のコマンドが使用されます:
$ pkgctl repo clone pkgname
注意点として、ここではビルドソースファイルというのは PKGBUILD のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。
このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の git コマンドもすべて利用できます。
パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます:
$ pkgctl repo clone --switch="2:1.19.5-1" go
詳細や他の利用可能なコマンドは pkgctl-repo-clone(1) を読んでください。
直接 git を使う
以下の git コマンドでパッケージを clone できます:
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/pkgname.git
例えば、Apache のビルドファイルをコピーするには:
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git
パッケージをビルドする
チェックアウトした PKGBUILD からパッケージをビルドするときに makepkg を設定する方法は makepkg#設定を見てください。
PKGBUILD が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。makepkg#使用方法に書かれているように makepkg を使ってパッケージを作成・インストールします。
ヒントとテクニック
修正を加えたパッケージを保護する
pacman でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
group 配列を PKGBUILD に挿入し、対象のパッケージを modified
と言う名前の group に追加してください。
PKGBUILD
groups=('modified')
そしてこのグループを /etc/pacman.conf
の IgnoreGroup
セクションに追加してください。
/etc/pacman.conf
IgnoreGroup = modified
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。
他のツール
- pbget - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。