コンテンツにスキップ

「Arch build system」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
Kgx (トーク | 投稿記録)
git を直接使う: 情報を更新
AshMyzk (トーク | 投稿記録)
AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに
 
(2人の利用者による、間の3版が非表示)
3行目: 3行目:
[[Category:パッケージ管理]]
[[Category:パッケージ管理]]
[[de:Arch Build System]]
[[de:Arch Build System]]
[[en:Arch Build System]]
[[en:Arch build system]]
[[es:Arch Build System]]
[[es:Arch Build System]]
[[fr:Arch Build System]]
[[fr:Arch build system]]
[[pt:Arch Build System]]
[[pt:Arch Build System]]
[[ru:Arch Build System]]
[[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|ABS によるカーネルコンパイル}}
{{Related|カーネル/Arch build system}}
{{Related|makepkg}}
{{Related|makepkg}}
{{Related|公式リポジトリ}}
{{Related|公式リポジトリ}}
{{Related|pacman}}
{{Related|pacman}}
{{Related|PKGBUILD}}
{{Related|PKGBUILD}}
{{Related|ABS でパッチを適用}}
{{Related|パッケージにパッチを適用}}
{{Related articles end}}
{{Related articles end}}


Arch Build System とは、''ports ライクな''システムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。[[pacman]] はバイナリパッケージ (ABS によってビルドされたパッケージを含む) の管理用に特殊化された Arch ツールであるに対し、ABS は、インストール可能な ''.pkg.tar.zst'' パッケージにソースをコンパイルするためのツールのコレクションです。
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}} を実行すればよく、ソフトウェアのインストールがシンプルになります。


ABS も似たようなコンセプトす。ABS の一部分には、SVN リポジトリと、等価な Git リポジトリがあります。リポジトリには、Arch Linux で利用可能なパッケージに対応するディレクトリが含まれています。リポジトリのディレクトリには [[PKGBUILD]] ファイルが含まれており (他のファイルが含まれている場合もある)、ソフトウェアのソースやバイナリは含まれていません。ディレクトリ内で [[makepkg]] を実行する、ソフトウェアのソースがダウンロードされ、コンパイルされ、ビルドディレクトリ内パッケージングされます。そして[[pacman]] を使ってそのパッケージをインストールできます。
Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。リポジトリには [[PKGBUILD]] ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。[[makepkg]] をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内パッケージングされます。その後、そのパッケージを [[pacman]] でインストールできます。


== 概要 ==
== ツールチェイン ==


Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています:
'ABS' は複数のコンポーネントから構成されているので、それらをまとめて 'ABS' と呼ばれることがあります。故に、(技術的には正しくありませんが) 'ABS' は完全なツールキットとして以下のツールを指すことがあります:


; リポジトリツリー: すべての公式パッケージのビルドに必要なファイルまれているディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含ません。[https://archlinux.org/svn/ svn] [https://github.com/archlinux/svntogit-packages git] リポジトリで利用できます。詳細は [[#リポジトリツリー]] セクションをてください。
; リポジトリ: すべての公式パッケージのビルドに必要なファイルディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。[https://gitlab.archlinux.org/archlinux/packaging/packages Gitlab] 上の [[Git]] リポジトリという形で利用できます。詳細は [[#リポジトリ構造]] セクションを参照してください。


; [[PKGBUILD]]: ソースコードの URL と、コンパイルやパッケージングの命令が記述されている [[Bash]] スクリプト。
; [[PKGBUILD]]: ソースコードの URL と、コンパイルやパッケージングの命令が記述されている [[Bash]] スクリプト。
39行目: 39行目:
; [[pacman]]: pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
; [[pacman]]: pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。


; [[AUR]]: Arch User Repository は ABS分離されていますが、AUR の (サポトされていない) PKGBUILD 、makepkg を使ってビルドされ、ソフトウェアをコンパイルしパッケージングしま。単な素の git リポジトリある ABS ツリーとは対象的に、AUR は様々なインタラクティブな機能を持つ洗練されたウェブサイトインターフェイスとして存在します。AUR には、公式の Arch パッケージとしては利用できないソフトウェアのための、ユーザによって提供されている数多くの PKGBUILD があります。公式の Arch ツリーパッケージをビルドする必要がある場合、AUR にかもしれせん
; [[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'' リポジトリにあります。''community'' と ''multilib'' リポジトリは ''community'' リポジトリに含まれています。


各パッケージにはサブディレクトリが存在します。サブディレクトリの中には {{ic|repos}} と {{ic|trunk}} ディレクトリがあります。{{ic|repos}} はさらにリポジトリ名 (例: ''core'') とアーキテクチャ分かれています。公式ビルドでは {{ic|repos}} に入っている PKGBUILD とその他ビルドファイルが使われます。{{ic|trunk}} のファイ開発者によって準備のために使われ、その後 {{ic|repos}} にコピーされます。
各パッケージには{{ic|archlinux/packaging/packages}} という名前空間内にそれぞれの独自のリポジトリが存在します。リポジトリには、公式ビルドで使用される PKGBUILD とファイルが含まています。また、ビドプロセスで開発者によって使されるファイルも存在していることがあります。


例えば、{{pkg|acl}} のツリーは以下のような見た目をしています:
例えば、{{pkg|acl}} のツリーは以下のような見た目をしています:


acl
acl
├── keys
acl/repos
│   └── pgp
acl/repos/core-x86_64
│   ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
acl/repos/core-x86_64/PKGBUILD
│   ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
acl/trunk
│   └── B902B5271325F892AC251AD441633B9FE837F581.asc
acl/trunk/PKGBUILD
└── PKGBUILD


パッケージのソースコードは ABS ディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。
パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。


== ユースケース ==
== ユースケース ==


ABS は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
* パッケージを(再)コンパイルする必要があるケース。
* パッケージを(再)コンパイルする必要があるケース。
* パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。
* パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。
75行目: 76行目:
=== PKGBUILD ソースを取得する ===
=== PKGBUILD ソースを取得する ===


特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、[[SVN]] あるいは [[Git]] ベースのアプローチのどちらかを使できます。
特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。


==== Git を使って PKGBUILD ソースを取得する ====
==== pkgctl ツールを使 ====


前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。
===== asp ツールを使う =====


{{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用されます:
要件としては、{{Pkg|asp}} パッケージを[[インストール]]してください。[https://github.com/falconindy/asp Asp] は、Git インターフェイスを使って Arch Linux パッケージのビルドソースファイルを取得するためのツールです。また、Arch Linux BBS フォーラムのスレッド [https://bbs.archlinux.org/viewtopic.php?id=185075] も見てください。


$ pkgctl repo clone ''pkgname''
特定のパッケージの svntogit リポジトリをクローンするには:


注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。
$ asp checkout ''pkgname''


このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。
これは、与えられたパッケージの git リポジトリを、パッケージと同じ名前のディレクトリにクローンします。


パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます:
クローンされた git リポジトリをアップデートするには、その git リポジトリ内で {{ic|git pull}} とその次に {{ic|asp update}} を実行してください。


$ pkgctl repo clone --switch="2:1.19.5-1" go
さらに、他の git コマンドもすべて使うことができ、パッケージの古いバージョンをチェックアウトしたり、カスタムの変更をトラックしたりすることもできます。git の使用法に関する詳細は [[git]] ページを見てください。


詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。
単に特定のパッケージの現在の [[PKGBUILD]] のスナップショットをコピーしたいだけなのであれば、以下のコマンドを使ってください:


==== 直接 git を使う ====
$ asp export ''pkgname''


以下の git コマンドでパッケージを clone できます:
===== git を直接使う =====


$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git
以下の git コマンドを使って特定のブランチだけをクローンしてください。このようにして、リポジトリ全体をコピーすることを防ぎます:


例えば、Apache のビルドファイルをコピーするには:
$ git clone --branch ''branch''/''package'' --single-branch https://github.com/archlinux/svntogit-packages.git


$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki>
例えば、apache ビルドファイルをコピーするには:

$ git clone --branch packages/apache --single-branch https://github.com/archlinux/svntogit-packages.git

https://github.com/archlinux には、[https://github.com/archlinux/svntogit-community.git svntogit-community.git] のような、より多くのアーカイブ関連のソースリポジトリがあります。使用例は [https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/thread/HQG26FE7BTYRHX2DOGQCFHAFMQTGVUO5/ Where can I get last source pkg for hylafax before it was dropped in 2021?] で見ることができます。このスレッドの、最後のメッセージ [https://lists.archlinux.org/archives/users/adc731edeb644145ae208c24fef0ff6d/ query] を見逃さないようにしてください。

==== SVN を使って PKGBUILD ソースを取得する ====

===== 要件 =====

{{Pkg|subversion}} パッケージを[[インストール]]してください。

===== リポジトリをチェックアウトする =====

{{Warning|リポジトリ全体をダウンロードしないでください。以下の指示だけに従ってください。SVN リポジトリ全体は巨大です。理不尽なほどのディスク容量を消費するばかりでなく、あなたがダウンロードするために archlinux.org サーバーに大きな負担をかけることになります。サービスに過度の負担をかける行為をした場合、あなたのアドレスがブロックされる可能性もあります。何らかのスクリプトで公の SVN を使わないようにしてください。}}

[[公式リポジトリ]]の ''core''、''extra''、''testing'' をチェックアウトするには:

$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki>

リポジトリ ''community''、''multilib'' をチェックアウトするには:

$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki>

両ケースで、からのディレクトリが作成されるだけですが、svn のチェックアウトであることは分かります。

===== パッケージをチェックアウトする =====

チェックアウトした svn リポジトリのあるディレクトリ (つまり ''packages'' または ''community'') で以下のコマンドを実行してください:

$ svn update ''package-name''

上記のコマンドにより、リクエストしたパッケージがチェックアウトされます。最上位のディレクトリで ''svn update'' を実行すると、アップデートされます。

存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合:
* パッケージ名のスペルを確認してください。
* パッケージが別のリポジトリに (例えば、community からメインのリポジトリへ) 移っていないか確認してください。
* https://archlinux.org/packages を確認して他のベースパッケージからビルドされていないかチェックしてください (例えば {{Pkg|python-tensorflow}} は {{Pkg|tensorflow}} の PKGBUILD からビルドします)。

{{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[#パッケージの古いバージョンをチェックアウトする]]を参照してください。}}

リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新する必要があります。以下のコマンドで更新できます:

$ svn update

===== パッケージの古いバージョンをチェックアウトする =====

[[#リポジトリをチェックアウトする]] で説明されている通りにチェックアウトした svn リポジトリ内では (つまり、"packages" や "community")、まずログを確かめます:

$ svn log ''package-name''

ヒストリを調べて目的のリビジョンを見つけ、チェックアウトしたいリビジョンを指定してください。例えば、リビジョン {{ic|r1729}} にチェックアウトするには:

$ svn update -r1729 ''package-name''

これは、''package-name'' の既存のコピーを、指定したリビジョンにアップデートします。

日付を指定することもできます。指定した日にリビジョンが存在しない場合、svn は、指定した日より前の最も最近のパッケージを使用します。以下の例では、2009-03-03 のリビジョンをチェックアウトします:

$ svn update -r'{20090303}' ''package-name''

他のリポジトリに移動する前のリビジョンにパッケージをチェックアウトすることもできます。ログをよくチェックし、パッケージが移動された日や最後のリビジョン番号を調べてください。


=== パッケージをビルドする ===
=== パッケージをビルドする ===
176行目: 116行目:
=== 修正を加えたパッケージを保護する ===
=== 修正を加えたパッケージを保護する ===


[[pacman]] でシステムを更新すると、ABS で作ったパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
[[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。


group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。
group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。
190行目: 130行目:
}}
}}


システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。


== 他のツール ==
== 他のツール ==
196行目: 136行目:
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。


{{TranslationStatus|Arch Build System|2022-10-27|753585}}
{{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 のディレクトリ内で makemake install clean を実行すればよく、ソフトウェアのインストールがシンプルになります。

Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。各リポジトリには PKGBUILD ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。makepkg をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内でパッケージングされます。その後、そのパッケージを pacman でインストールできます。

ツールチェイン

Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています:

リポジトリ
すべての公式パッケージのビルドに必要なファイルを含むディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。Gitlab 上の Git リポジトリという形で利用できます。詳細は #リポジトリ構造 セクションを参照してください。
PKGBUILD
ソースコードの URL と、コンパイルやパッケージングの命令が記述されている Bash スクリプト。
makepkg
PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、(makepkg.confPKGEXT に従って) .pkg.tar* を作成します。makepkg を使って AUR やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は パッケージの作成 を見て下さい。
pacman
pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
AUR
Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。
警告 公式の PKGBUILD ではパッケージはクリーンな chroot でビルドされることを前提としています。汚いビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。

リポジトリ構造

公式リポジトリ coreextracore-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.confIgnoreGroup セクションに追加してください。

/etc/pacman.conf
IgnoreGroup = modified

システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。

他のツール

  • pbget - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。
翻訳ステータス: このページは en:Arch build system の翻訳バージョンです。最後の翻訳日は 2023-05-24 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。