「Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに)
 
(6人の利用者による、間の25版が非表示)
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]]
 
[[ko:Arch Build System]]
 
[[pl:Arch Build System]]
 
 
[[pt:Arch Build System]]
 
[[pt:Arch Build System]]
[[ro:ABS]]
+
[[ru:Arch build system]]
[[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 はディレクトリツリーで構成されており SVN を使ってチェックアウトできます。ツリーは全ての公式 Arch ソフトウェアを表します (ソフトウェア自体が含まれているわけではありません)。サブディレクトリにはソフトウェアパッケージやソースコードのかわりに [[PKGBUILD]] ファイルとその他ファイルが含まれています。PKGBUILD が含まれているディレクトリで [[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 によって、または手動で実行される必要があります。
; SVN ツリー: ABS のディレクトリ構造; あなたの(ローカル)マシンの {{ic|/var/abs/}} 下の SVN 階層のことです。{{ic|/etc/abs.conf}} で設定したリポジトリにある全ての公式 Arch Linux ソフトウェア毎にサブディレクトリが存在します。ただしパッケージ自体は含まれていません。[https://www.archlinuxjp.org/svn/ svn] と [https://projects.archlinux.org/svntogit/packages.git/ git] リポジトリから利用可能です。
 
   
  +
; [[AUR]]: Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。
; [[PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash]] スクリプト。
 
   
  +
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
; [[makepkg]]: PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし {{ic|.pkg.tar*}} (形式は {{ic|makepkg.conf}} の {{ic|PKGEXT}} で設定) を作成します。makepkg を使って [[Arch User Repository|AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です ([[パッケージの作成]]を見て下さい)。
 
   
  +
=== リポジトリ構造 ===
; [[pacman]]: pacman は abs とは完全に切り離されています。ただし、ビルドしたパッケージをインストール・削除したり依存関係を解決するのには pacman が必要になります。pacman は makepkg によって実行されることもあります。
 
   
  +
[[公式リポジトリ]] ''core''、''extra''、''core-testing''、そして ''extra-testing'' は、[https://gitlab.archlinux.org/ Arch Linux Gitlab インスタンス]上でホストされています。
; [[Arch User Repository|AUR]]: Arch User Repository は勿論 ABS とは別物ですが、AUR の(サポートがない) PKGBUILD をビルドするときには makepkg を使ってパッケージをコンパイル・作成します。ローカルマシン上の ABS ツリーと対照的に、AUR にはウェブインターフェースがあります。AUR にはユーザーによって投稿された沢山の PKGBUILD が含まれており、その PKGBUILD を使うことで公式の Arch リポジトリにないソフトウェアをインストールできます。公式の Arch ツリーにないパッケージをビルドする必要がある場合は、AUR を使うことになります。
 
   
  +
各パッケージには、{{ic|archlinux/packaging/packages}} という名前空間内にそれぞれの独自のリポジトリが存在します。各リポジトリには、公式なビルドで使用される PKGBUILD とファイルが含まれています。また、ビルドプロセスで開発者によって使用されるファイルも存在していることがあります。
{{Warning|公式の PKGBUILD ではパッケージは[[en2:DeveloperWiki:Building_in_a_Clean_Chroot|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
 
   
  +
例えば、{{pkg|acl}} のツリーは以下のような見た目をしています:
==== SVN ツリー ====
 
 
''core'', ''extra'', ''testing'' [[リポジトリ]]は ''packages'' SVN リポジトリから[[#非再帰的なチェックアウト|チェックアウト]]できます。''community'' と ''multilib'' リポジトリは ''community'' SVN リポジトリに含まれています。
 
 
各パッケージにはサブディレクトリが存在します。サブディレクトリの中には {{ic|repos}} と {{ic|trunk}} ディレクトリがあります。{{ic|repos}} はリポジトリ名 (例: ''core'') とアーキテクチャで分かれています。公式ビルドでは {{ic|repos}} に入っている PKGBUILD とその他ビルドファイルが使われます。{{ic|trunk}} のファイルは開発者によって使われ、その後 {{ic|repos}} にコピーされます。
 
 
例えば、{{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
 
   
パッケージのソースコードは ABS ディレクトリに入っていません。わりに {{ic|PKGBUILD}} にはパッケージビルドするときにソースコードの取得先となる URL が記述されています。
+
パッケージのソースコードはディレクトリは存在しません。その代わりパッケージビルドにソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。
   
== ABS を使う理由 ==
+
== ユースケース ==
   
  +
Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
Arch Build System の用途は以下の通りです:
 
* 何らかの理由で、パッケージをコンパイル・リコンパイルする
+
* パッケージを(再)コンパイルする必要があるケース。
* パッケージがもう入手できなくなったので、ソフトウェアのソースから新しいパッケージを作成・インストールする ([[パッケージの作成]]を見てさい)
+
* パッケージがまだ利用できなソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)
* ニーズにあわせて既存のパッケージをカスタマイズする (オプションを有効化無効化、パッチをてる)
+
* 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチをてる)
* FreeBSD (à la FreeBSD)、自分で決めたコンパイフラグを使ってシステム全体をリビルドする (例: [[pacbuilder]])
+
* (FreeBSD ) コンパイフラグを指定してシステム全体をリビルドする
* カスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]]を見てさい)
+
* 自分のカスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]] を見てください)
* カスタムカーネルと一緒に動作するカーネルモジュールを入れ
+
* カーネルモジュールをカスタムカーネルで動くよう
* PKGBUILD 内のバージョン番号を変えることで Arch パッケージの新しい古いベータ版の・開発版のバージョンを簡単にコンパイル・インストールする
+
* PKGBUILD 内のバージョン番号を編集して、新しい古いベータ開発バージョンの Arch パッケージを簡単にコンパイル・インストールする
   
  +
== 使用法 ==
ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。
 
   
  +
=== PKGBUILD ソースを取得する ===
== ABS の使用方法 ==
 
   
  +
特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。
=== 要件 ===
 
   
  +
==== pkgctl ツールを使う ====
{{Pkg|subversion}} パッケージを[[インストール]]してください。
 
   
  +
前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。
=== 非再帰的なチェックアウト ===
 
   
  +
{{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用されます:
{{Warning|リポジトリ全体をダウンロードしないでください。SVN リポジトリの全体は巨大です。理不尽なほどのディスク容量を消費するばかりでなく、ダウンロードするのに archlinux.org サーバーに大きな負担をかけることになります。リポジトリ全体をダウンロードしてはいけません。以下で説明している方法だけにしてください。サービスに過度の負担をかける行為をした場合、あなたのアドレスがブロックされる可能性もあります。何らかのスクリプトで公の SVN を使わないようにしてください。}}
 
   
  +
$ pkgctl repo clone ''pkgname''
''core'', ''extra'', ''testing'' [[リポジトリ]]をチェックアウト:
 
   
  +
注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki>
 
   
  +
このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。
''community'' と ''multilib'' リポジトリをチェックアウト:
 
   
  +
パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます:
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki>
 
   
  +
$ pkgctl repo clone --switch="2:1.19.5-1" go
どちらの場合でも空のディレクトリが作成されますが、svn のチェックアウトとわかります。
 
   
  +
詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。
=== パッケージのチェックアウト ===
 
   
  +
==== 直接 git を使う ====
チェックアウトした svn リポジトリがあるディレクトリ (''packages'' または ''community'') で以下のコマンドを実行:
 
   
  +
以下の git コマンドでパッケージを clone できます:
$ svn update ''package-name''
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git
上記のコマンドでリクエストしたパッケージがチェックアウトされます。最上位のディレクトリで ''svn update'' を実行すると、アップデートされます。
 
   
  +
例えば、Apache のビルドファイルをコピーするには:
存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合、パッケージ名のスペルを確認したり、パッケージが別のリポジトリに移っていないか確認してください (community から main リポジトリなど)。
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki>
{{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[#旧リビジョンのパッケージをチェックアウト]]を参照してください。}}
 
   
  +
=== パッケージをビルドする ===
リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新してください。以下のコマンドで更新できます:
 
 
$ svn update
 
 
=== makepkg の設定 ===
 
   
 
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。
 
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。
   
  +
[[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。
=== パッケージのビルド ===
 
   
  +
== ヒントとテクニック ==
[[PKGBUILD]] が含まれたディレクトリうをどこか好きなところにコピーしてください。それから必要な修正を加えてください。''makepkg'' を [[makepkg#使用方法]]に書かれているようにして使ってパッケージを作成・インストールします。
 
   
  +
=== 修正を加えたパッケージを保護する ===
==== fakeroot ====
 
基本的に、伝統的な方法と同じ手順 ({{ic|./configure, make, make install}}) を実行しますが、ソフトウェアは ''fake root'' 環境にインストールされます (''fake root'' はビルドディレクトリ内のサブディレクトリで、システムの root ディレクトリとして振る舞います。'''fakeroot''' プログラムと一緒に、makepkg は fake root ディレクトリを作成し、コンパイルしたバイナリと関連ファイルをそのディレクトリに、所有者 '''root''' としてインストールします)。そして ''fake root'' やコンパイルしたソフトウェアを含むサブディレクトリツリーは圧縮され {{ic|.pkg.tar.xz}} 拡張子の付くアーカイブ (もしくは''パッケージ'') になります。pacman はそのパッケージを展開してシステムの本当の root ディレクトリ ({{ic|/}}) にインストールします。
 
   
  +
[[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
== Tips and tricks ==
 
   
  +
group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。
=== 修正を加えたパッケージを保護する ===
 
pacman でシステムを更新すると、公式リポジトリの同じ名前のパッケージで ABS で作ったパッケージが置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
 
   
  +
{{hc|PKGBUILD|2=
group 行を PKGBUILD に挿入して、パッケージを {{ic|modified}} という名前のグループに追加してください。
 
  +
groups=('modified')
 
  +
}}
{{hc|PKGBUILD|
 
<nowiki>groups=('modified')</nowiki> }}
 
   
 
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。
 
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。
   
{{hc|/etc/pacman.conf|
+
{{hc|/etc/pacman.conf|2=
<nowiki>IgnoreGroup = modified</nowiki>}}
+
IgnoreGroup = modified
  +
}}
   
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
+
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。
   
  +
== 他のツール ==
=== 旧リビジョンのパッケージをチェックアウト ===
 
   
  +
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。
[[#非再帰的なチェックアウト]]で説明したチェックアウト済みの 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''
 
 
他のリポジトリに移動される前のバージョンのパッケージをチェックアウトすることもできます。パッケージが移動された日付や最後のリビジョン番号をログで確認してください。
 
 
== 他のツール ==
 
   
  +
{{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 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。