「Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎他のツール: Tips and tricks を追加)
(AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに)
 
(6人の利用者による、間の27版が非表示)
2行目: 2行目:
 
[[Category:パッケージ開発]]
 
[[Category:パッケージ開発]]
 
[[Category:パッケージ管理]]
 
[[Category:パッケージ管理]]
[[cs:Arch Build System]]
 
[[da:Arch Build System]]
 
 
[[de:Arch Build System]]
 
[[de:Arch Build System]]
[[el:Arch Build System]]
+
[[en:Arch build system]]
[[en:Arch Build System]]
 
 
[[es:Arch Build System]]
 
[[es:Arch Build System]]
[[fr:ABS]]
+
[[fr:Arch build system]]
[[it:Arch Build System]]
+
[[pt:Arch Build System]]
[[ko:Arch Build System]]
+
[[ru:Arch build system]]
[[pl:Arch Build System]]
 
[[ro:ABS]]
 
[[ru:Arch Build System]]
 
[[tr:Arch derleme sistemi]]
 
 
[[zh-hans:Arch Build System]]
 
[[zh-hans:Arch Build System]]
[[zh-hant:Arch Build System]]
 
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|ABS FAQ}}
 
 
{{Related|Arch パッケージングスタンダード}}
 
{{Related|Arch パッケージングスタンダード}}
  +
{{Related|Arch User Repository}}
 
{{Related|パッケージの作成}}
 
{{Related|パッケージの作成}}
{{Related2|カーネル#Arch Build System を使う|ABS によるカーネルコンパイル}}
+
{{Related|カーネル/Arch build system}}
{{Related|PKGBUILD}}
 
 
{{Related|makepkg}}
 
{{Related|makepkg}}
{{Related|pacman}}
 
 
{{Related|公式リポジトリ}}
 
{{Related|公式リポジトリ}}
{{Related|Arch User Repository}}
+
{{Related|pacman}}
{{Related|ABS でパッチを適用}}
+
{{Related|PKGBUILD}}
  +
{{Related|パッケージにパッチを適用}}
 
{{Related articles end}}
 
{{Related articles end}}
   
  +
Arch build system (ABS) とは、''ports ライクな''システムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。[[pacman]] はバイナリパッケージの管理用に特殊化された Arch ツールであるに対し、Arch build system は、インストール可能な ''.pkg.tar.zst'' パッケージにソースをコンパイルするためのツールのコレクションです。
この記事では Arch Build System の概要と、初心者のためのウォークスルーを提供しています。完全なリファレンスガイドではありません!ABS の簡単な手引きは、[[ABS FAQ]] を見て下さい。より詳しい情報が必要な場合は、man ページを参照してください。
 
{{Note|ABS の同期は日に一度行われます。そのためリポジトリで利用可能になっているものとラグが生じることがあります。}}
 
== Arch Build System について ==
 
   
  +
''Ports'' は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。''port'' を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。''port'' はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの ''port'' に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で {{ic|make}} か {{ic|make install clean}} を実行すればよく、ソフトウェアのインストールがシンプルになります。
ABS とは '''Arch Build System''' の略で、FreeBSD などで採用されている ''ports'' に似ています。ABS はソースコードから {{ic|.pkg.tar.xz}} 形式のバイナリパッケージを作成することができます。作られたパッケージは [[pacman]] によって、通常の(配布されている)バイナリパッケージと同様に管理することができます。
 
   
  +
Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。各リポジトリには [[PKGBUILD]] ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。[[makepkg]] をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内でパッケージングされます。その後、そのパッケージを [[pacman]] でインストールできます。
=== ports システムとは ===
 
   
  +
== ツールチェイン ==
'Ports' は BSD 系 UNIX によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。''port'' を使ってソフトウェアのソースコードのダウンロード・展開、パッチの適用、コンパイル、インストールを行います。'port' はただの小さなディレクトリで、それぞれの 'port' に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。ソフトウェアをインストールしたい時は、port のフォルダまで移動し {{ic|make}} もしくは {{ic|make install clean}} と入力するだけでパッケージのダウンロードからコンパイル、インストールまでを自動的に行います。
 
   
  +
Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています:
=== ABS の特徴 ===
 
   
  +
; リポジトリ: すべての公式パッケージのビルドに必要なファイルを含むディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。[https://gitlab.archlinux.org/archlinux/packaging/packages Gitlab] 上の [[Git]] リポジトリという形で利用できます。詳細は [[#リポジトリ構造]] セクションを参照してください。
ABS も Ports に似たシステムで、{{ic|/var/abs}} ディレクトリ下に、カテゴリ - パッケージ名の順番で、ツリー状のフォルダ群 (ABS ツリー) を保存しています。これには ''Arch Linux の公式ソフト'' すべてのパッケージが含まれます (Ports と同様に、ソースコードやバイナリパッケージを含んでいないのでサイズはそんなに大きくありません)。パッケージ名 (例えば、'ABS') のフォルダを開いたとします。すると、中にはソフトウェアパッケージやソースはなく、代わりに [[PKGBUILD]] というファイルが含まれています。PKGBUILD は簡潔な Bash スクリプトで、ソースコードのダウンロード元や、コンパイル、パッケージ作成に必要なコマンドが記述してあります。ABS の [[makepkg]] を実行することで、ソフトウェアはコンパイル・''パッケージング''されビルド用ディレクトリにパッケージが作成されます。後は [[pacman]] を使って、ソフトウェアを簡単に管理することが可能です。
 
   
  +
; [[PKGBUILD]]: ソースコードの URL と、コンパイルやパッケージングの命令が記述されている [[Bash]] スクリプト。
=== ABS の概要 ===
 
   
  +
; [[makepkg]]: PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、({{ic|makepkg.conf}} の {{ic|PKGEXT}} に従って) ''.pkg.tar*'' を作成します。makepkg を使って [[AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は [[パッケージの作成]] を見て下さい。
'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからです; そのため、技術的には正確ではありませんが、'ABS' はツールキットとして以下のツールを意味します:
 
   
  +
; [[pacman]]: pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
; ABS ツリー: ABS のディレクトリ構造; あなたの(ローカル)マシンの {{ic|/var/abs/}} 下の SVN 階層のことです。{{ic|/etc/abs.conf}} で設定したリポジトリにある全ての公式 Arch Linux ソフトウェア毎にサブディレクトリが存在します。ただしパッケージ自体は含まれていません。このツリーは [[pacman]] で {{Pkg|abs}} パッケージをインストールして {{ic|abs}} スクリプトを実行した後に作られます。
 
   
  +
; [[AUR]]: Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。
{{note|実際のパッケージは [https://www.archlinux.org/svn/ svn] と [https://projects.archlinux.org/svntogit/packages.git/ git] リポジトリにあり、{{ic|abs}} スクリプトは [[rsync]] を使ってダウンロードしています。}}
 
   
  +
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
; [[PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash]] スクリプト。
 
   
  +
=== リポジトリ構造 ===
; [[makepkg]]: PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし {{ic|.pkg.tar*}} (形式は {{ic|makepkg.conf}} の {{ic|PKGEXT}} で設定) を作成します。makepkg を使って [[Arch User Repository|AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です ([[パッケージの作成]]を見て下さい)。
 
   
  +
[[公式リポジトリ]] ''core''、''extra''、''core-testing''、そして ''extra-testing'' は、[https://gitlab.archlinux.org/ Arch Linux Gitlab インスタンス]上でホストされています。
; [[pacman]]: pacman は abs とは完全に切り離されています。ただし、ビルドしたパッケージをインストール・削除したり依存関係を解決するのには pacman が必要になります。pacman は makepkg によって実行されることもあります。
 
   
  +
各パッケージには、{{ic|archlinux/packaging/packages}} という名前空間内にそれぞれの独自のリポジトリが存在します。各リポジトリには、公式なビルドで使用される PKGBUILD とファイルが含まれています。また、ビルドプロセスで開発者によって使用されるファイルも存在していることがあります。
; [[Arch User Repository|AUR]]: Arch User Repository は勿論 ABS とは別物ですが、AUR の(サポートがない) PKGBUILD をビルドするときには makepkg を使ってパッケージをコンパイル・作成します。ローカルマシン上の ABS ツリーと対照的に、AUR にはウェブインターフェースがあります。AUR にはユーザーによって投稿された沢山の PKGBUILD が含まれており、その PKGBUILD を使うことで公式の Arch リポジトリにないソフトウェアをインストールできます。公式の Arch ツリーにないパッケージをビルドする必要がある場合は、AUR を使うことになります。
 
   
  +
例えば、{{pkg|acl}} のツリーは以下のような見た目をしています:
{{Warning|公式の PKGBUILD ではパッケージは[[en2:DeveloperWiki:Building_in_a_Clean_Chroot|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
 
   
  +
acl
== ABS を使う理由 ==
 
  +
├── keys
  +
│   └── pgp
  +
│   ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
  +
│   ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
  +
│   └── B902B5271325F892AC251AD441633B9FE837F581.asc
  +
└── PKGBUILD
   
  +
パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。
Arch Build System の用途は以下の通りです:
 
* 何らかの理由で、パッケージをコンパイル・リコンパイルする
 
* パッケージがもう入手できなくなったので、ソフトウェアのソースから新しいパッケージを作成・インストールする ([[パッケージの作成]]を見て下さい)
 
* ニーズにあわせて既存のパッケージをカスタマイズする (オプションを有効化・無効化、パッチをあてる)
 
* FreeBSD 流に (à la FreeBSD)、自分で決めたコンパイルフラグを使ってシステム全体をリビルドする (例: [[pacbuilder]])
 
* カスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]]を見て下さい)
 
* カスタムカーネルと一緒に動作するカーネルモジュールを手に入れる
 
* PKGBUILD 内のバージョン番号を変えることで Arch パッケージの新しい・古い・ベータ版の・開発版のバージョンを簡単にコンパイル・インストールする
 
   
  +
== ユースケース ==
ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。
 
   
  +
Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
== ABS の使用方法 ==
 
  +
* パッケージを(再)コンパイルする必要があるケース。
  +
* パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。
  +
* 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。
  +
* (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。
  +
* 自分のカスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]] を見てください)。
  +
* カーネルモジュールをカスタムカーネルで動くようにする。
  +
* PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。
   
=== Prerequisites ===
+
== 使用法 ==
   
  +
=== PKGBUILD ソースを取得する ===
[[Install]] the {{Pkg|subversion}} package.
 
   
  +
特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。
=== Non-recursive checkout ===
 
   
  +
==== pkgctl ツールを使う ====
{{Warning|Do not download the whole repo; only follow the instructions below. The entire SVN repo is huge. Not only will it take an obscene amount of disk space, but it will also tax the archlinux.org server for you to download it. If you abuse this service, your address may be blocked. Never use the public SVN for any sort of scripting.}}
 
   
  +
前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。
To checkout the ''core'', ''extra'', and ''testing'' [[repositories]]:
 
   
  +
{{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用されます:
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki>
 
   
  +
$ pkgctl repo clone ''pkgname''
To checkout the ''community'' and ''multilib'' repositories:
 
   
  +
注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki>
 
   
  +
このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。
In both cases, it simply creates an empty directory, but it does know that it is an svn checkout.
 
   
  +
パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます:
=== Checkout a package ===
 
   
  +
$ pkgctl repo clone --switch="2:1.19.5-1" go
In the directory containing the svn repository you checked out (i.e., ''packages'' or ''community''), do:
 
   
  +
詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。
$ svn update ''package-name''
 
   
  +
==== 直接 git を使う ====
This will pull the package you requested into your checkout. From now on, any time you ''svn update'' at the top level, this will be updated as well.
 
   
  +
以下の git コマンドでパッケージを clone できます:
If you specify a package that does not exist, svn will not warn you. It will just print something like "At revision 115847", without creating any files. If that happens, check your spelling of the package name and that the package has not been moved to another repository (i.e. from community to the main repository).
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git
{{Tip|To checkout an older version of a package, see [[#Checkout an older version of a package]].}}
 
   
  +
例えば、Apache のビルドファイルをコピーするには:
You should periodically update all of your checked out packages if you wish to perform rebuilds on more recent revisions of the repositories. To do so, do:
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki>
$ svn update
 
   
  +
=== パッケージをビルドする ===
=== Configure makepkg ===
 
   
  +
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。
See [[makepkg#Configuration]] on how to configure ''makepkg'' for building packages from the [[PKGBUILD]]'s you have checked out.
 
   
  +
[[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。
=== Build package ===
 
   
  +
== ヒントとテクニック ==
Copy the directory containing the [[PKGBUILD]] you wish to modify to a new location. Then make the desired modifications. From there, use ''makepkg'' as described in [[makepkg#Usage]] to create and install the new package.
 
   
  +
=== 修正を加えたパッケージを保護する ===
==== fakeroot ====
 
   
  +
[[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
{{Deletion|I'm not sure the point of this section}}
 
   
  +
group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。
Essentially, the same steps are being executed in the traditional method (generally including the {{ic|./configure, make, make install}} steps) but the software is installed into a ''fake root'' environment. (A ''fake root'' is simply a subdirectory within the build directory that functions and behaves as the system's root directory. In conjunction with the '''fakeroot''' program, ''makepkg'' creates a fake root directory, and installs the compiled binaries and associated files into it, with '''root''' as owner.) The ''fake root'', or subdirectory tree containing the compiled software, is then compressed into an archive with the extension {{ic|.pkg.tar.xz}}, or a ''package''. When invoked, pacman then extracts the package (installs it) into the system's real root directory ({{ic|/}}).
 
 
== Tips and tricks ==
 
 
=== Preserve modified packages ===
 
 
Updating the system with pacman will replace a modified package from ABS with the package of the same name from the official repositories. See the following instructions for how to avoid this.
 
 
Insert a group array into the PKGBUILD, and add the package to a group called {{ic|modified}}.
 
   
 
{{hc|PKGBUILD|2=
 
{{hc|PKGBUILD|2=
137行目: 124行目:
 
}}
 
}}
   
  +
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。
Add this group to the section {{ic|IgnoreGroup}} in {{ic|/etc/pacman.conf}}.
 
   
 
{{hc|/etc/pacman.conf|2=
 
{{hc|/etc/pacman.conf|2=
143行目: 130行目:
 
}}
 
}}
   
  +
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。
If new versions are available in the official repositories during a system update, pacman prints a note that it is skipping this update because it is in the IgnoreGroup section. At this point the modified package should be rebuilt from ABS to avoid partial upgrades.
 
   
  +
== 他のツール ==
=== Checkout an older version of a package ===
 
   
  +
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。
Within the svn repository you checked out as described in [[#Non-recursive checkout]] (i.e. "packages" or "community"), first examine the log:
 
 
$ svn log ''package-name''
 
 
Find out the revision you want by examining the history, then specify the revision you wish to checkout. For example, to checkout revision {{ic|r1729}} you would do:
 
 
$ svn update -r1729 ''package-name''
 
 
This will update an existing working copy of ''package-name'' to the chosen revision.
 
 
You can also specify a date. If no revision on that day exists, svn will grab the most recent package before that time. The following example checks out the revision from 2009-03-03:
 
 
$ svn update -r{20090303} ''package-name''
 
 
It is possible to checkout packages at versions before they were moved to another repository as well; check the logs thoroughly for the date they were moved or the last revision number.
 
 
== 他のツール ==
 
   
  +
{{TranslationStatus|Arch build system|2023-05-24|779405}}
* [http://xyne.archlinux.ca/projects/pbget/ pbget] - ウェブインターフェイスから直接パッケージの PKGBUILD を取得します。AUR にも対応。
 
* [https://github.com/falconindy/asp asp] - Arch Linux パッケージを作成するのに使われるビルドソースファイルを管理するツール。git インターフェイスを使用することで最新のソースを提供します。
 

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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。