「Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Kusanaginoturugi (トーク) による編集を Kusakata.bot による直前の版へ差し戻しました)
(同期)
12行目: 12行目:
 
[[ko:Arch Build System]]
 
[[ko:Arch Build System]]
 
[[pl:Arch Build System]]
 
[[pl:Arch Build System]]
  +
[[pt:Arch Build System]]
 
[[ro:ABS]]
 
[[ro:ABS]]
 
[[ru:Arch Build System]]
 
[[ru:Arch Build System]]
42行目: 43行目:
 
=== ABS の特徴 ===
 
=== ABS の特徴 ===
   
ABS も Ports に似たシステムで、{{ic|/var/abs}} ディレクトリ下に、カテゴ- ケージ名の順番ツリーフォルダ群 (ABS ツリー)保存ています。これには ''Arch Linux の公式ソフト'' すべてのパッケージが含まれます (Ports と同様に、ソースコードやバイナリパッケージを含んでないのサイズそんなに大きくありません)。パッケージ名 (例えば、'ABS') のフォルダを開いたとします。すると、中にはソフトウェアパッケージやソースはなく、代わりに [[PKGBUILD]] というファイルが含まれています。PKGBUILD は簡潔な Bash スクリプト、ソースコードのダウンロード元や、コンパイル、パッケージ作成に必要なコマンドが記述してあります。ABS の [[makepkg]] を実行することで、ソフトウェアはコンパイル・''パッケージング''されビルドディレクトリパッケージが作成されます。は [[pacman]] を使って、ソフウェを簡単に管理することが可能です。
+
ABS ディレクトリーで構成されており SVN を使ってチェクアウトきます。ツリーは全て公式 Arch ソフトウェアします (ソフトウェア自体が含まれるわけではありません)。サブディレクトリにはソフトウェアパッケージやソースコードのかわりに [[PKGBUILD]] ファイルその他ファイルが含まれています。PKGBUILD が含まれているディレリで [[makepkg]] を実行することで、ソフトウェアはビルドディレクトリ内でコンパイルされパッケージになります。パッケージは [[pacman]] を使ってインスール・ップグレードきます。
   
 
=== ABS の概要 ===
 
=== ABS の概要 ===
48行目: 49行目:
 
'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからです; そのため、技術的には正確ではありませんが、'ABS' はツールキットとして以下のツールを意味します:
 
'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからです; そのため、技術的には正確ではありませんが、'ABS' はツールキットとして以下のツールを意味します:
   
; ABS ツリー: ABS のディレクトリ構造; あなたの(ローカル)マシンの {{ic|/var/abs/}} 下の SVN 階層のことです。{{ic|/etc/abs.conf}} で設定したリポジトリにある全ての公式 Arch Linux ソフトウェア毎にサブディレクトリが存在します。ただしパッケージ自体は含まれていません。このツリーは [[pacman]] {{Pkg|abs}} パッケーをインスールして {{ic|abs}} スクプトを実行した後に作れます。
+
; 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] リポジトリ利用可能です。
 
{{note|実際のパッケージは [https://www.archlinux.org/svn/ svn] と [https://projects.archlinux.org/svntogit/packages.git/ git] リポジトリにあり、{{ic|abs}} スクリプトは [[rsync]] を使ってダウンロードしています。}}
 
   
 
; [[PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash]] スクリプト。
 
; [[PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash]] スクリプト。
61行目: 60行目:
   
 
{{Warning|公式の PKGBUILD ではパッケージは[[en2:DeveloperWiki:Building_in_a_Clean_Chroot|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
 
{{Warning|公式の PKGBUILD ではパッケージは[[en2:DeveloperWiki:Building_in_a_Clean_Chroot|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
  +
  +
==== 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/repos
  +
acl/repos/core-i686
  +
acl/repos/core-i686/PKGBUILD
  +
acl/repos/core-x86_64
  +
acl/repos/core-x86_64/PKGBUILD
  +
acl/trunk
  +
acl/trunk/PKGBUILD
  +
  +
パッケージのソースコードは ABS ディレクトリに入っていません。かわりに {{ic|PKGBUILD}} にはパッケージをビルドするときにソースコードの取得先となる URL が記述されています。
   
 
== ABS を使う理由 ==
 
== ABS を使う理由 ==
77行目: 95行目:
 
== ABS の使用方法 ==
 
== ABS の使用方法 ==
   
  +
=== 要件 ===
abs を使ってパッケージをビルドするには以下の手順を踏みます:
 
#[[pacman]] で {{Pkg|abs}} パッケージをインストール。
 
#root で {{ic|abs}} を実行。Arch Linux サーバーと同期して ABS ツリーを作成します。
 
#ビルドファイル (通常 {{ic|/var/abs/<repo>/<pkgname>}} 下にあります) をビルドディレクトリにコピー。
 
#ビルドディレクトリまで移動して、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 で行います。
 
   
=== ルのインストール ===
+
{{Pkg|subversion}} パッケジを[[インストール]]してください。
   
  +
=== 非再帰的なチェックアウト ===
ABS を使うには、まず[[公式リポジトリ]]から {{Pkg|abs}} を[[pacman|インストール]]する必要があります。
 
   
  +
{{Warning|リポジトリ全体をダウンロードしないでください。SVN リポジトリの全体は巨大です。理不尽なほどのディスク容量を消費するばかりでなく、ダウンロードするのに archlinux.org サーバーに大きな負担をかけることになります。リポジトリ全体をダウンロードしてはいけません。以下で説明している方法だけにしてください。サービスに過度の負担をかける行為をした場合、あなたのアドレスがブロックされる可能性もあります。何らかのスクリプトで公の SVN を使わないようにしてください。}}
abs をインストールするだけで (その依存として) abs-sync スクリプトや様々なビルドスクリプト、そして [[rsync]] が入ります。
 
   
  +
''core'', ''extra'', ''testing'' [[リポジトリ]]をチェックアウト:
ただし、実際に何かをビルドする前に、基本的なコンパイルツールも必要になります。これらは[[Pacman#パッケージグループのインストール|パッケージグループ]]として {{grp|base-devel}} にまとめられています。このグループは pacman でインストール可能です。
 
   
  +
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki>
=== /etc/abs.conf ===
 
   
  +
''community'' と ''multilib'' リポジトリをチェックアウト:
root で {{ic|/etc/abs.conf}} を編集して利用するリポジトリを指定してください。
 
   
  +
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki>
利用するリポジトリの前の {{ic|!}} を削除することでそのリポジトリを有効にします。例:
 
REPOS=(core extra community !testing)
 
   
  +
どちらの場合でも空のディレクトリが作成されますが、svn のチェックアウトとわかります。
=== ABS ツリー ===
 
   
  +
=== パッケージのチェックアウト ===
ABS ツリーは {{ic|/var/abs}} 下に SVN のディレクトリ階層として以下のように存在しています:
 
   
  +
チェックアウトした svn リポジトリがあるディレクトリ (''packages'' または ''community'') で以下のコマンドを実行:
{{bc|<nowiki>
 
| -- core/
 
| || -- acl/
 
| || || -- PKGBUILD
 
| || -- attr/
 
| || || -- PKGBUILD
 
| || -- abs/
 
| || || -- PKGBUILD
 
| || -- autoconf/
 
| || || -- PKGBUILD
 
| || -- ...
 
| -- extra/
 
| || -- acpid/
 
| || || -- PKGBUILD
 
| || -- apache/
 
| || || -- PKGBUILD
 
| || -- ...
 
| -- community/
 
| || -- ...
 
</nowiki>}}
 
   
  +
$ svn update ''package-name''
ABS ツリーはパッケージデータベースと全く同じ構造を持っています:
 
   
  +
上記のコマンドでリクエストしたパッケージがチェックアウトされます。最上位のディレクトリで ''svn update'' を実行すると、アップデートされます。
* 第一階層: リポジトリの名前
 
* 第二階層: パッケージ名のディレクトリ
 
* 第三階層: PKGBUILD (パッケージのビルドに必要な情報が含まれています) とその他関連ファイル (パッチなど、パッケージのビルドに必要なファイル)
 
   
  +
存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合、パッケージ名のスペルを確認したり、パッケージが別のリポジトリに移っていないか確認してください (community から main リポジトリなど)。
パッケージのソースコードは ABS ディレクトリには存在しません。その代わり、'''PKGBUILD''' ファイルには、パッケージをビルドする時にどこの URL からソースコードをダウンロードすればいいか書かれています。そのため、abs ツリー自体のサイズはとても小さくなっています。
 
   
  +
{{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[#旧リビジョンのパッケージをチェックアウト]]を参照してください。}}
==== ABS ツリーのダウンロード ====
 
root で次を実行してください:
 
# abs
 
   
  +
リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新してください。以下のコマンドで更新できます:
今、あなたの ABS ツリーは {{ic|/var/abs}} 下に作成されました。ABS ツリーの適切なブランチが作られ {{ic|/etc/abs.conf}} で指定されたものと対応していることに注意してください。
 
   
  +
$ svn update
公式リポジトリと同期し続けるために abs コマンドは定期的に実行するのがベターです。また、個々の ABS パッケージファイルをダウンロードすることもできます:
 
   
  +
=== makepkg の設定 ===
# abs <repository>/<package>
 
こうすれば一つのパッケージをビルドするのに abs ツリー全体をチェックする必要がなくなります。
 
   
  +
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。
=== /etc/makepkg.conf ===
 
 
{{ic|/etc/makepkg.conf}} ではグローバルの環境変数やコンパイルフラグを指定します。SMP なシステムを使っている等、最適化を指定したいと思った場合このファイルを編集してください。デフォルト設定は i686 と x86_64 に最適化が指定されていて、それぞれのアーキテクチャを使ったシングル CPU のシステムで問題なく動くようになっています (このデフォルト設定でも SMP マシンで動作はしますが、コンパイル時には一つのコア/CPU しか使われません -- [[makepkg|makepkg.conf]] を見て下さい)。
 
 
==== /etc/makepkg.conf で PACKAGER 変数を設定する ====
 
 
{{ic|/etc/makepkg.conf}} に PACKAGER 変数を設定することは任意ですが''強く推奨されています''。設定することでどのパッケージがあなたによってビルド・インストールされたかすぐわかるようにすることができるからです。community リポジトリの {{Pkg|expac}} を使うことで簡単にパッケージの見分けがつきます:
 
 
===== 全てのパッケージの表示 (AUR のパッケージを含む) =====
 
{{hc|$ grep myname /etc/makepkg.conf|2=PACKAGER="myname <myemail@myserver.com>"}}
 
 
{{hc|<nowiki>$ expac "%n %p" | grep "myname" | column -t</nowiki>|
 
archey3 myname
 
binutils myname
 
gcc myname
 
gcc-libs myname
 
glibc myname
 
tar myname
 
}}
 
 
===== リポジトリに含まれているパッケージのみを表示 =====
 
 
この例では {{ic|/etc/pacman.conf}} に定義されているリポジトリに含まれているパッケージだけを表示します:
 
 
{{hc|<nowiki>$ . /etc/makepkg.conf; grep -xvFf <(pacman -Qqm) <(expac "%n\t%p" | grep "$PACKAGER$" | cut -f1)</nowiki>|
 
binutils
 
gcc
 
gcc-libs
 
glibc
 
tar
 
}}
 
 
=== ビルドディレクトリの作成 ===
 
 
実際のコンパイルをするためのビルドディレクトリを作成することを推奨します。ABS ツリーに変更を加えても、ABS のアップデートによってデータは (上書きされて) ロストしてしまうからです。あなたの home ディレクトリを使うのがグッドプラクティスです。ただし Arch ユーザーには {{ic|/var/abs/}} の下に通常ユーザーで所有された 'local' ディレクトリを作成するのを好む人もいます。
 
 
あなたのビルドディレクトリの作成。例:
 
 
$ mkdir -p $HOME/abs
 
 
ツリー ({{ic|/var/abs/<repository>/<pkgname>}}) から ABS をビルドディレクトリにコピーしてください。
 
   
 
=== パッケージのビルド ===
 
=== パッケージのビルド ===
   
  +
[[PKGBUILD]] が含まれたディレクトリうをどこか好きなところにコピーしてください。それから必要な修正を加えてください。''makepkg'' を [[makepkg#使用方法]]に書かれているようにして使ってパッケージを作成・インストールします。
ここでは、例として ''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 ====
 
==== 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|/}}) にインストールします。
 
基本的に、伝統的な方法と同じ手順 ({{ic|./configure, make, make install}}) を実行しますが、ソフトウェアは ''fake root'' 環境にインストールされます (''fake root'' はビルドディレクトリ内のサブディレクトリで、システムの root ディレクトリとして振る舞います。'''fakeroot''' プログラムと一緒に、makepkg は fake root ディレクトリを作成し、コンパイルしたバイナリと関連ファイルをそのディレクトリに、所有者 '''root''' としてインストールします)。そして ''fake root'' やコンパイルしたソフトウェアを含むサブディレクトリツリーは圧縮され {{ic|.pkg.tar.xz}} 拡張子の付くアーカイブ (もしくは''パッケージ'') になります。pacman はそのパッケージを展開してシステムの本当の root ディレクトリ ({{ic|/}}) にインストールします。
  +
  +
== Tips and tricks ==
   
 
=== 修正を加えたパッケージを保護する ===
 
=== 修正を加えたパッケージを保護する ===
228行目: 156行目:
   
 
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
 
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
  +
  +
=== 旧リビジョンのパッケージをチェックアウト ===
  +
  +
[[#非再帰的なチェックアウト]]で説明したチェックアウト済みの 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''
  +
  +
他のリポジトリに移動される前のバージョンのパッケージをチェックアウトすることもできます。パッケージが移動された日付や最後のリビジョン番号をログで確認してください。
   
 
== 他のツール ==
 
== 他のツール ==

2017年6月1日 (木) 00:16時点における版

関連記事

この記事では Arch Build System の概要と、初心者のためのウォークスルーを提供しています。完全なリファレンスガイドではありません!ABS の簡単な手引きは、ABS FAQ を見て下さい。より詳しい情報が必要な場合は、man ページを参照してください。

ノート: ABS の同期は日に一度行われます。そのためリポジトリで利用可能になっているものとラグが生じることがあります。

Arch Build System について

ABS とは Arch Build System の略で、FreeBSD などで採用されている ports に似ています。ABS はソースコードから .pkg.tar.xz 形式のバイナリパッケージを作成することができます。作られたパッケージは pacman によって、通常の(配布されている)バイナリパッケージと同様に管理することができます。

ports システムとは

'Ports' は BSD 系 UNIX によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。port を使ってソフトウェアのソースコードのダウンロード・展開、パッチの適用、コンパイル、インストールを行います。'port' はただの小さなディレクトリで、それぞれの 'port' に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。ソフトウェアをインストールしたい時は、port のフォルダまで移動し make もしくは make install clean と入力するだけでパッケージのダウンロードからコンパイル、インストールまでを自動的に行います。

ABS の特徴

ABS はディレクトリツリーで構成されており SVN を使ってチェックアウトできます。ツリーは全ての公式 Arch ソフトウェアを表します (ソフトウェア自体が含まれているわけではありません)。サブディレクトリにはソフトウェアパッケージやソースコードのかわりに PKGBUILD ファイルとその他ファイルが含まれています。PKGBUILD が含まれているディレクトリで makepkg を実行することで、ソフトウェアはビルドディレクトリ内でコンパイルされパッケージになります。パッケージは pacman を使ってインストール・アップグレードできます。

ABS の概要

'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからです; そのため、技術的には正確ではありませんが、'ABS' はツールキットとして以下のツールを意味します:

SVN ツリー
ABS のディレクトリ構造; あなたの(ローカル)マシンの /var/abs/ 下の SVN 階層のことです。/etc/abs.conf で設定したリポジトリにある全ての公式 Arch Linux ソフトウェア毎にサブディレクトリが存在します。ただしパッケージ自体は含まれていません。svngit リポジトリから利用可能です。
PKGBUILD
ソースコードの URL とコンパイル・パッケージングの手順が入った Bash スクリプト。
makepkg
PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし .pkg.tar* (形式は makepkg.confPKGEXT で設定) を作成します。makepkg を使って AUR やサードパーティのソースからカスタムパッケージを作成することも可能です (パッケージの作成を見て下さい)。
pacman
pacman は abs とは完全に切り離されています。ただし、ビルドしたパッケージをインストール・削除したり依存関係を解決するのには pacman が必要になります。pacman は makepkg によって実行されることもあります。
AUR
Arch User Repository は勿論 ABS とは別物ですが、AUR の(サポートがない) PKGBUILD をビルドするときには makepkg を使ってパッケージをコンパイル・作成します。ローカルマシン上の ABS ツリーと対照的に、AUR にはウェブインターフェースがあります。AUR にはユーザーによって投稿された沢山の PKGBUILD が含まれており、その PKGBUILD を使うことで公式の Arch リポジトリにないソフトウェアをインストールできます。公式の Arch ツリーにないパッケージをビルドする必要がある場合は、AUR を使うことになります。
警告: 公式の PKGBUILD ではパッケージはクリーンな chroot でビルドされることを前提としています。汚いビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。

SVN ツリー

core, extra, testing リポジトリpackages SVN リポジトリからチェックアウトできます。communitymultilib リポジトリは community SVN リポジトリに含まれています。

各パッケージにはサブディレクトリが存在します。サブディレクトリの中には repostrunk ディレクトリがあります。repos はリポジトリ名 (例: core) とアーキテクチャで分かれています。公式ビルドでは repos に入っている PKGBUILD とその他ビルドファイルが使われます。trunk のファイルは開発者によって使われ、その後 repos にコピーされます。

例えば、acl のツリーは以下のようになります:

acl
acl/repos
acl/repos/core-i686
acl/repos/core-i686/PKGBUILD
acl/repos/core-x86_64
acl/repos/core-x86_64/PKGBUILD
acl/trunk
acl/trunk/PKGBUILD

パッケージのソースコードは ABS ディレクトリに入っていません。かわりに PKGBUILD にはパッケージをビルドするときにソースコードの取得先となる URL が記述されています。

ABS を使う理由

Arch Build System の用途は以下の通りです:

  • 何らかの理由で、パッケージをコンパイル・リコンパイルする
  • パッケージがもう入手できなくなったので、ソフトウェアのソースから新しいパッケージを作成・インストールする (パッケージの作成を見て下さい)
  • ニーズにあわせて既存のパッケージをカスタマイズする (オプションを有効化・無効化、パッチをあてる)
  • FreeBSD 流に (à la FreeBSD)、自分で決めたコンパイルフラグを使ってシステム全体をリビルドする (例: pacbuilder)
  • カスタムカーネルをクリーンにビルド・インストールする (カーネル#コンパイルを見て下さい)
  • カスタムカーネルと一緒に動作するカーネルモジュールを手に入れる
  • PKGBUILD 内のバージョン番号を変えることで Arch パッケージの新しい・古い・ベータ版の・開発版のバージョンを簡単にコンパイル・インストールする

ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。

ABS の使用方法

要件

subversion パッケージをインストールしてください。

非再帰的なチェックアウト

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

core, extra, testing リポジトリをチェックアウト:

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

communitymultilib リポジトリをチェックアウト:

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

どちらの場合でも空のディレクトリが作成されますが、svn のチェックアウトとわかります。

パッケージのチェックアウト

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

$ svn update package-name

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

存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合、パッケージ名のスペルを確認したり、パッケージが別のリポジトリに移っていないか確認してください (community から main リポジトリなど)。

ヒント: 古いバージョンのパッケージをチェックアウトしたい場合、#旧リビジョンのパッケージをチェックアウトを参照してください。

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

$ svn update

makepkg の設定

チェックアウトした PKGBUILD からパッケージをビルドするときに makepkg を設定する方法は makepkg#設定を見てください。

パッケージのビルド

PKGBUILD が含まれたディレクトリうをどこか好きなところにコピーしてください。それから必要な修正を加えてください。makepkgmakepkg#使用方法に書かれているようにして使ってパッケージを作成・インストールします。

fakeroot

基本的に、伝統的な方法と同じ手順 (./configure, make, make install) を実行しますが、ソフトウェアは fake root 環境にインストールされます (fake root はビルドディレクトリ内のサブディレクトリで、システムの root ディレクトリとして振る舞います。fakeroot プログラムと一緒に、makepkg は fake root ディレクトリを作成し、コンパイルしたバイナリと関連ファイルをそのディレクトリに、所有者 root としてインストールします)。そして fake root やコンパイルしたソフトウェアを含むサブディレクトリツリーは圧縮され .pkg.tar.xz 拡張子の付くアーカイブ (もしくはパッケージ) になります。pacman はそのパッケージを展開してシステムの本当の root ディレクトリ (/) にインストールします。

Tips and tricks

修正を加えたパッケージを保護する

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

group 行を PKGBUILD に挿入して、パッケージを modified という名前のグループに追加してください。

PKGBUILD
groups=('modified') 

そしてこのグループを /etc/pacman.confIgnoreGroup セクションに追加してください。

/etc/pacman.conf
IgnoreGroup = modified

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

旧リビジョンのパッケージをチェックアウト

#非再帰的なチェックアウトで説明したチェックアウト済みの svn リポジトリ ("packages" または "community") で、ログを確認:

$ svn log package-name

履歴を確認して適切なリビジョンを見つけたら、チェックアウトするリビジョンを指定してください。例えば r1729 をチェックアウトするには:

$ svn update -r1729 package-name

既存の package-name の作業コピーが選択したリビジョンに更新されます。

日付を指定することもできます。指定された日付のリビジョンが存在しない場合、svn はその日付の直前のパッケージを取得します。例えば2009年3月3日からのリビジョンをチェックアウトするには:

$ svn update -r{20090303} package-name

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

他のツール

  • pbget - ウェブインターフェイスから直接パッケージの PKGBUILD を取得します。AUR にも対応。
  • asp - Arch Linux パッケージを作成するのに使われるビルドソースファイルを管理するツール。git インターフェイスを使用することで最新のソースを提供します。