「Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに)
 
(6人の利用者による、間の35版が非表示)
1行目: 1行目:
[[Category:About Arch (日本語)]]
+
[[Category:Arch について]]
[[Category:Package development (日本語)]]
+
[[Category:パッケージ開発]]
[[Category:Package management (日本語)]]
+
[[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]]
+
[[zh-hans:Arch Build System]]
  +
{{Related articles start}}
[[ro:ABS]]
 
  +
{{Related|Arch パッケージングスタンダード}}
[[ru:Arch Build System]]
 
  +
{{Related|Arch User Repository}}
[[tr:Arch_derleme_sistemi]]
 
  +
{{Related|パッケージの作成}}
[[zh-CN:Arch Build System]]
 
  +
{{Related|カーネル/Arch build system}}
[[zh-TW:Arch Build System]]
 
{{Related articles start (日本語)}}
+
{{Related|makepkg}}
  +
{{Related|公式リポジトリ}}
{{Related2|ABS FAQ (日本語)|ABS FAQ}}
 
  +
{{Related|pacman}}
{{Related2|Arch Packaging Standards (日本語)|Arch Packaging Standards}}
 
  +
{{Related|PKGBUILD}}
{{Related2|Creating Packages (日本語)|パッケージの作成}}
 
  +
{{Related|パッケージにパッチを適用}}
{{Related2|Kernels (日本語)#Arch Build System を使う|ABS によるカーネルコンパイル}}
 
{{Related2|PKGBUILD (日本語)|PKGBUILD}}
 
{{Related2|makepkg (日本語)|makepkg}}
 
{{Related2|pacman (日本語)|pacman}}
 
{{Related2|Official Repositories (日本語)|公式リポジトリ}}
 
{{Related2|Arch User Repository (日本語)|Arch User Repository}}
 
 
{{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 (日本語)|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 (日本語)|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]] というファイルが含まれています。PKGBUILD は簡潔な Bash スクリプトで、ソースコードのダウンロード元や、コンパイル、パッケージ作成に必要なコマンドが記述してあります。ABS の [[makepkg (日本語)|makepkg]] を実行することで、ソフトウェアはコンパイル・''パッケージング''されビルド用ディレクトリにパッケージが作成されます。後は [[pacman (日本語)|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 (日本語)|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 (日本語)|rsync]] を使ってダウンロードしています。}}
 
   
  +
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
; [[PKGBUILD (日本語)|PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash (日本語)|Bash]] スクリプト。
 
   
  +
=== リポジトリ構造 ===
; [[makepkg (日本語)|makepkg]]: PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし {{ic|.pkg.tar*}} (形式は {{ic|makepkg.conf}} の {{ic|PKGEXT}} で設定) を作成します。makepkg を使って [[Arch User Repository (日本語)|AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です ([[Creating Packages (日本語)]] を見て下さい)。
 
   
  +
[[公式リポジトリ]] ''core''、''extra''、''core-testing''、そして ''extra-testing'' は、[https://gitlab.archlinux.org/ Arch Linux Gitlab インスタンス]上でホストされています。
; [[pacman (日本語)|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}} のツリーは以下のような見た目をしています:
== ABS を使う理由 ==
 
   
  +
acl
Arch Build System の用途は以下の通りです:
 
  +
├── keys
* 何らかの理由で、パッケージをコンパイル・リコンパイルする
 
  +
│   └── pgp
* パッケージがもう入手できなくなったので、ソフトウェアのソースから新しいパッケージを作成・インストールする ([[Creating Packages (日本語)|Creating Package]] を見て下さい)
 
  +
│   ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
* ニーズにあわせて既存のパッケージをカスタマイズする (オプションを有効化・無効化、パッチをあてる)
 
  +
│   ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
* FreeBSD 流に (à la FreeBSD)、自分で決めたコンパイルフラグを使ってシステム全体をリビルドする (例: [[pacbuilder]])
 
  +
│   └── B902B5271325F892AC251AD441633B9FE837F581.asc
* カスタムカーネルをクリーンにビルド・インストールする ([[Kernels (日本語)#コンパイル]] を見て下さい)
 
  +
└── PKGBUILD
* カスタムカーネルと一緒に動作するカーネルモジュールを手に入れる
 
* PKGBUILD 内のバージョン番号を変えることで Arch パッケージの新しい・古い・ベータ版の・開発版のバージョンを簡単にコンパイル・インストールする
 
   
  +
パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。
ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。
 
   
== ABS の使用方法 ==
+
== ユースケース ==
   
  +
Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
abs を使ってパッケージをビルドするには以下の手順を踏みます:
 
#[[pacman (日本語)|pacman]] で {{Pkg|abs}} パッケージをイトール
+
* パッケージを(再)コンパルする必要があるケース。
  +
* パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。
#root で {{ic|abs}} を実行。Arch Linux サーバーと同期して ABS ツリーを作成します。
 
  +
* 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。
#ビルドファイル (通常 {{ic|/var/abs/<repo>/<pkgname>}} 下にあります) をビルドディレクトリにコピー。
 
  +
* (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。
#ビルドディレクトリまで移動して、PKGBUILD を (好みに・必要なら) 編集し、'''makepkg''' を実行。
 
  +
* 自分のカスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]] を見てください)。
#PKGBUILD の指示に従って、makepkg は適切なソース tarball をダウンロードし、それを解凍して、必要ならパッチを適用し、{{ic|makepkg.conf}} で指定された {{ic|CFLAGS}} を使ってコンパイル、そして最後にビルドファイルを圧縮して {{ic|.pkg.tar.gz}} か {{ic|.pkg.tar.xz}} の拡張子が付いたパッケージを作ります。
 
  +
* カーネルモジュールをカスタムカーネルで動くようにする。
#インストールは {{ic|pacman -U <.pkg.tar.xz file>}} をするだけです。パッケージの削除も pacman で行います。
 
  +
* PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。
   
  +
== 使用法 ==
=== ツールのインストール ===
 
   
  +
=== PKGBUILD ソースを取得する ===
ABS を使うには、まず[[Official Repositories (日本語)|公式リポジトリ]]から {{Pkg|abs}} を[[pacman (日本語)|インストール]]する必要があります。
 
   
  +
特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。
abs をインストールするだけで (その依存として) abs-sync スクリプトや様々なビルドスクリプト、そして [[rsync (日本語)|rsync]] が入ります。
 
   
  +
==== pkgctl ツールを使う ====
ただし、実際に何かをビルドする前に、基本的なコンパイルツールも必要になります。これらは[[Pacman (日本語)#パッケージグループのインストール|パッケージグループ]]として {{grp|base-devel}} にまとめられています。このグループは pacman でインストール可能です。
 
   
  +
前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。
=== /etc/abs.conf ===
 
   
root で {{ic|/etc/abs.conf}} を編集して利用するリポジトリを指定してくだい。
+
{{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用れます:
   
  +
$ pkgctl repo clone ''pkgname''
利用するリポジトリの前の {{ic|!}} を削除することでそのリポジトリを有効にします。例:
 
REPOS=(core extra community !testing)
 
   
  +
注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。
=== ABS ツリー ===
 
   
  +
このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。
ABS ツリーは {{ic|/var/abs}} 下に SVN のディレクトリ階層として以下のように存在しています:
 
   
  +
パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます:
{{bc|<nowiki>
 
| -- core/
 
| || -- acl/
 
| || || -- PKGBUILD
 
| || -- attr/
 
| || || -- PKGBUILD
 
| || -- abs/
 
| || || -- PKGBUILD
 
| || -- autoconf/
 
| || || -- PKGBUILD
 
| || -- ...
 
| -- extra/
 
| || -- acpid/
 
| || || -- PKGBUILD
 
| || -- apache/
 
| || || -- PKGBUILD
 
| || -- ...
 
| -- community/
 
| || -- ...
 
</nowiki>}}
 
   
  +
$ pkgctl repo clone --switch="2:1.19.5-1" go
ABS ツリーはパッケージデータベースと全く同じ構造を持っています:
 
   
  +
詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。
* 第一階層: リポジトリの名前
 
* 第二階層: パッケージ名のディレクトリ
 
* 第三階層: PKGBUILD (パッケージのビルドに必要な情報が含まれています) とその他関連ファイル (パッチなど、パッケージのビルドに必要なファイル)
 
   
  +
==== 直接 git を使う ====
パッケージのソースコードは ABS ディレクトリには存在しません。その代わり、'''PKGBUILD''' ファイルには、パッケージをビルドする時にどこの URL からソースコードをダウンロードすればいいか書かれています。そのため、abs ツリー自体のサイズはとても小さくなっています。
 
   
  +
以下の git コマンドでパッケージを clone できます:
==== ABS ツリーのダウンロード ====
 
root で次を実行してください:
 
# abs
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git
今、あなたの ABS ツリーは {{ic|/var/abs}} 下に作成されました。ABS ツリーの適切なブランチが作られ {{ic|/etc/abs.conf}} で指定されたものと対応していることに注意してください。
 
   
  +
例えば、Apache のビルドファイルをコピーするには:
公式リポジトリと同期し続けるために abs コマンドは定期的に実行するのがベターです。また、個々の ABS パッケージファイルをダウンロードすることもできます:
 
   
  +
$ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki>
# abs <repository>/<package>
 
こうすれば一つのパッケージをビルドするのに abs ツリー全体をチェックする必要がなくなります。
 
   
  +
=== パッケージをビルドする ===
=== /etc/makepkg.conf ===
 
   
  +
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。
{{ic|/etc/makepkg.conf}} ではグローバルの環境変数やコンパイルフラグを指定します。SMP なシステムを使っている等、最適化を指定したいと思った場合このファイルを編集してください。デフォルト設定は i686 と x86_64 に最適化が指定されていて、それぞれのアーキテクチャを使ったシングル CPU のシステムで問題なく動くようになっています (このデフォルト設定でも SMP マシンで動作はしますが、コンパイル時には一つのコア/CPU しか使われません -- [[makepkg (日本語)|makepkg.conf]] を見て下さい)。
 
   
  +
[[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。
==== /etc/makepkg.conf で PACKAGER 変数を設定する ====
 
   
  +
== ヒントとテクニック ==
{{ic|/etc/makepkg.conf}} に PACKAGER 変数を設定することは任意ですが''強く推奨されています''。設定することでどのパッケージがあなたによってビルド・インストールされたかすぐわかるようにすることができるからです。community リポジトリの {{Pkg|expac}} を使うことで簡単にパッケージの見分けがつきます:
 
   
===== 全てのパッケージの表示 (AUR のパッケージを含む) =====
+
=== 修正を加えたパッケージを保護する ===
$ grep myname /etc/makepkg.conf
 
PACKAGER="myname <myemail@myserver.com>"
 
   
  +
[[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
$ expac "%n %p" | grep "myname" | column -t
 
archey3 myname
 
binutils myname
 
gcc myname
 
gcc-libs myname
 
glibc myname
 
tar myname
 
   
  +
group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。
===== リポジトリに含まれているパッケージのみを表示 =====
 
   
  +
{{hc|PKGBUILD|2=
この例では {{ic|/etc/pacman.conf}} に定義されているリポジトリに含まれているパッケージだけを表示します:
 
  +
groups=('modified')
  +
}}
   
  +
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。
$ . /etc/makepkg.conf; grep -xvFf <(pacman -Qqm) <(expac "%n\t%p" | grep "$PACKAGER$" | cut -f1)
 
binutils
 
gcc
 
gcc-libs
 
glibc
 
tar
 
   
  +
{{hc|/etc/pacman.conf|2=
=== ビルドディレクトリの作成 ===
 
  +
IgnoreGroup = modified
  +
}}
   
  +
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。
実際のコンパイルをするためのビルドディレクトリを作成することを推奨します。ABS ツリーに変更を加えても、ABS のアップデートによってデータは (上書きされて) ロストしてしまうからです。あなたの home ディレクトリを使うのがグッドプラクティスです。ただし Arch ユーザーには {{ic|/var/abs/}} の下に通常ユーザーで所有された 'local' ディレクトリを作成するのを好む人もいます。
 
   
  +
== 他のツール ==
あなたのビルドディレクトリの作成。例:
 
 
$ mkdir -p $HOME/abs
 
 
ツリー ({{ic|/var/abs/<repository>/<pkgname>}}) から ABS をビルドディレクトリにコピーしてください。
 
 
=== パッケージのビルド ===
 
 
ここでは、例として ''slim'' ディスプレイマネージャのパッケージをビルドすることにします。
 
 
slim ABS を ABS ツリーからビルドディレクトリにコピー:
 
$ cp -r /var/abs/extra/slim/ ~/abs
 
 
ビルドディレクトリに移動:
 
$ cd ~/abs/slim
 
 
PKGBUILD を修正。コンポーネントのサポートを追加・削除したり、パッチをあてたり、パッケージバージョンの変更などをする。(任意):
 
$ nano PKGBUILD
 
 
通常ユーザーで makepkg を実行 ({{ic|-s}} スイッチをつけると自動的に依存関係を解決します):
 
$ makepkg -s
 
 
{{Note|依存関係が欠けていることに文句を言う前に、全ての Arch Linux システムで {{Grp|base}} グループがインストールされていることを思い出してください。'''makepkg''' でビルドするときは "base-devel" グループがインストールされているのが前提となっています。[[#ツールのインストール]]を見てください。}}
 
 
root でインストール:
 
# pacman -U slim-1.3.0-2-i686.pkg.tar.xz
 
 
これで完了です。ソースから slim をビルドして pacman でインストールする手順はこの通りです。パッケージの削除も pacman によって行います ({{ic|pacman -R slim}})。
 
 
ABS を使うことで利便性の向上と自動化を達成しながら、ビルドとインストールの関数を PKGBUILD に含めることでコントロールを失うことなく完全な透明性を維持することができます。
 
 
==== 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 でシステムを更新すると、公式リポジトリの同じ名前のパッケージで ABS で作ったパッケージが置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
 
 
group 行を PKGBUILD に挿入して、パッケージを {{ic|modified}} という名前のグループに追加してください。
 
 
{{hc|PKGBUILD|
 
<nowiki>groups=('modified')</nowiki> }}
 
 
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。
 
   
  +
* [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。
{{hc|/etc/pacman.conf|
 
<nowiki>IgnoreGroup = modified</nowiki>}}
 
   
  +
{{TranslationStatus|Arch build system|2023-05-24|779405}}
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
 

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