「Arch build system」の版間の差分
細 (→リポジトリツリー: リンクを修正) |
(→ABS の使用方法: 同期) |
||
71行目: | 71行目: | ||
* PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。 |
* PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。 |
||
− | == |
+ | == 使用法 == |
+ | === PKGBUILD ソースを取得する === |
||
− | ソースからパッケージをビルドするのに必要な [[PKGBUILD]] を取得する際、svntogit リポジトリのラッパーである {{pkg|asp}} パッケージを使って [[SVN]] あるいは [[Git]] で取得できます。以下では svn による方法と git による方法の両方を説明します。 |
||
+ | 特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、[[SVN]] あるいは [[Git]] ベースのアプローチのどちらかを使用できます。 |
||
− | === SVN を使って PKGBUILD ソースを取得 === |
||
+ | ==== Git を使って PKGBUILD ソースを取得する ==== |
||
− | ==== 要件 ==== |
||
+ | |||
+ | ===== asp ツールを使う ===== |
||
+ | |||
+ | 要件としては、{{Pkg|asp}} パッケージを[[インストール]]してください。[https://github.com/falconindy/asp Asp] は、Git インターフェイスを使って Arch Linux パッケージのビルドソースファイルを取得するためのツールです。また、Arch Linux BBS フォーラムのスレッド [https://bbs.archlinux.org/viewtopic.php?id=185075] も見てください。 |
||
+ | |||
+ | 特定のパッケージの svntogit リポジトリをクローンするには: |
||
+ | |||
+ | $ asp checkout ''pkgname'' |
||
+ | |||
+ | これは、与えられたパッケージの git リポジトリを、パッケージと同じ名前のディレクトリにクローンします。 |
||
+ | |||
+ | クローンされた git リポジトリをアップデートするには、その git リポジトリ内で {{ic|git pull}} とその次に {{ic|asp update}} を実行してください。 |
||
+ | |||
+ | さらに、他の git コマンドもすべて使うことができ、パッケージの古いバージョンをチェックアウトしたり、カスタムの変更をトラックしたりすることもできます。git の使用法に関する詳細は [[git]] ページを見てください。 |
||
+ | |||
+ | 単に特定のパッケージの現在の [[PKGBUILD]] のスナップショットをコピーしたいだけなのであれば、以下のコマンドを使ってください: |
||
+ | |||
+ | $ asp export ''pkgname'' |
||
+ | |||
+ | ===== git を直接使う ===== |
||
+ | |||
+ | 以下の git コマンドを使って特定のブランチだけをクローンしてください。このようにして、リポジトリ全体をコピーすることを防ぎます: |
||
+ | |||
+ | $ git clone --branch ''branch''/''package'' --single-branch https://github.com/archlinux/svntogit-packages.git |
||
+ | |||
+ | 例えば、apache ビルドファイルをコピーするには: |
||
+ | |||
+ | $ git clone --branch packages/apache --single-branch https://github.com/archlinux/svntogit-packages.git |
||
+ | |||
+ | ==== SVN を使って PKGBUILD ソースを取得する ==== |
||
+ | |||
+ | ===== 要件 ===== |
||
{{Pkg|subversion}} パッケージを[[インストール]]してください。 |
{{Pkg|subversion}} パッケージを[[インストール]]してください。 |
||
− | ==== |
+ | ===== リポジトリをチェックアウトする ===== |
− | {{Warning|リポジトリ全体をダウンロードしないでください。SVN リポジトリ |
+ | {{Warning|リポジトリ全体をダウンロードしないでください。以下の指示だけに従ってください。SVN リポジトリ全体は巨大です。理不尽なほどのディスク容量を消費するばかりでなく、あなたがダウンロードするために archlinux.org サーバーに大きな負担をかけることになります。サービスに過度の負担をかける行為をした場合、あなたのアドレスがブロックされる可能性もあります。何らかのスクリプトで公の SVN を使わないようにしてください。}} |
− | ''core'' |
+ | [[公式リポジトリ]]の ''core''、''extra''、''testing'' をチェックアウトするには: |
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki> |
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki> |
||
− | ''community'' |
+ | リポジトリ ''community''、''multilib'' をチェックアウトするには: |
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki> |
$ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki> |
||
− | + | 両ケースで、からのディレクトリが作成されるだけですが、svn のチェックアウトであることは分かります。 |
|
− | ==== パッケージ |
+ | ===== パッケージをチェックアウトする ===== |
− | チェックアウトした svn リポジトリ |
+ | チェックアウトした svn リポジトリのあるディレクトリ (つまり ''packages'' または ''community'') で以下のコマンドを実行してください: |
$ svn update ''package-name'' |
$ svn update ''package-name'' |
||
− | 上記のコマンド |
+ | 上記のコマンドにより、リクエストしたパッケージがチェックアウトされます。最上位のディレクトリで ''svn update'' を実行すると、アップデートされます。 |
存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合: |
存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合: |
||
− | |||
* パッケージ名のスペルを確認してください。 |
* パッケージ名のスペルを確認してください。 |
||
− | * パッケージが別のリポジトリに移っていないか確認してください |
+ | * パッケージが別のリポジトリに (例えば、community からメインのリポジトリへ) 移っていないか確認してください。 |
− | * https:// |
+ | * https://archlinux.org/packages を確認して他のベースパッケージからビルドされていないかチェックしてください (例えば {{Pkg|python-tensorflow}} は {{Pkg|tensorflow}} の PKGBUILD からビルドします)。 |
− | {{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[# |
+ | {{Tip|古いバージョンのパッケージをチェックアウトしたい場合、[[#パッケージの古いバージョンをチェックアウトする]]を参照してください。}} |
− | リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新 |
+ | リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新する必要があります。以下のコマンドで更新できます: |
$ svn update |
$ svn update |
||
+ | ===== パッケージの古いバージョンをチェックアウトする ===== |
||
− | === Git を使って PKGBUILD ソースを取得 === |
||
+ | [[#リポジトリをチェックアウトする]] で説明されている通りにチェックアウトした svn リポジトリ内では (つまり、"packages" や "community")、まずログを確かめます: |
||
− | まず最初に {{Pkg|asp}} パッケージを[[インストール]]してください。 |
||
+ | $ svn log ''package-name'' |
||
− | 特定のパッケージの svntogit リポジトリを複製するには: |
||
− | $ asp checkout ''pkgname'' |
||
+ | ヒストリを調べて目的のリビジョンを見つけ、チェックアウトしたいリビジョンを指定してください。例えば、リビジョン {{ic|r1729}} にチェックアウトするには: |
||
− | 上記のコマンドで指定したパッケージの名前が付いたディレクトリに git リポジトリが複製されます。 |
||
+ | $ svn update -r1729 ''package-name'' |
||
− | 複製した git リポジトリを更新するには {{ic|asp update}} を実行して git リポジトリの中で {{ic|git pull}} を行ってください。 |
||
+ | これは、''package-name'' の既存のコピーを、指定したリビジョンにアップデートします。 |
||
− | また、他の git コマンドを使ってパッケージの古いバージョンをチェックアウトしたり変更を追跡することもできます。git の詳しい使い方については [[git]] のページを見てください。 |
||
+ | 日付を指定することもできます。指定した日にリビジョンが存在しない場合、svn は、指定した日より前の最も最近のパッケージを使用します。以下の例では、2009-03-03 のリビジョンをチェックアウトします: |
||
− | 最新の [[PKGBUILD]] のスナップショットをコピーしたいだけの場合、以下のコマンドを使ってください: |
||
+ | |||
− | $ asp export ''pkgname'' |
||
+ | $ svn update -r'{20090303}' ''package-name'' |
||
+ | |||
+ | 他のリポジトリに移動する前のリビジョンにパッケージをチェックアウトすることもできます。ログをよくチェックし、パッケージが移動された日や最後のリビジョン番号を調べてください。 |
||
− | === パッケージ |
+ | === パッケージをビルドする === |
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。 |
チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。 |
||
− | [[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。 |
+ | [[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。 |
== ヒントとテクニック == |
== ヒントとテクニック == |
2022年10月27日 (木) 22:09時点における版
関連記事
Arch Build System とは、ports ライクなシステムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。pacman はバイナリパッケージ (ABS によってビルドされたパッケージを含む) の管理用に特殊化された Arch ツールであるに対し、ABS は、インストール可能な .pkg.tar.zst パッケージにソースをコンパイルするためのツールのコレクションです。
Ports は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。port を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。port はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの port に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で make
か make install clean
を実行すればよく、ソフトウェアのインストールがシンプルになります。
ABS も似たようなコンセプトです。ABS の一部分には、SVN リポジトリと、等価な Git リポジトリがあります。リポジトリには、Arch Linux で利用可能な各パッケージに対応するディレクトリが含まれています。リポジトリのディレクトリには PKGBUILD ファイルが含まれており (他のファイルが含まれている場合もある)、ソフトウェアのソースやバイナリは含まれていません。ディレクトリ内で makepkg を実行することで、ソフトウェアのソースがダウンロードされ、コンパイルされ、ビルドディレクトリ内にパッケージングされます。そして、pacman を使ってそのパッケージをインストールできます。
概要
'ABS' は複数のコンポーネントから構成されているので、それらをまとめて 'ABS' と呼ばれることがあります。故に、(技術的には正しくありませんが) 'ABS' は完全なツールキットとして以下のツールを指すことがあります:
- リポジトリツリー
- すべての公式パッケージのビルドに必要なファイルが含まれているディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含みません。svn と git のリポジトリで利用できます。詳細は #リポジトリツリー セクションを見てください。
- makepkg
- PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、(
makepkg.conf
のPKGEXT
に従って) .pkg.tar* を作成します。makepkg を使って AUR やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は パッケージの作成 を見て下さい。
- pacman
- pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
- AUR
- Arch User Repository は ABS と分離されていますが、AUR の (サポートされていない) PKGBUILD は、makepkg を使ってビルドされ、ソフトウェアをコンパイルしパッケージングします。単なる素の git リポジトリである ABS ツリーとは対象的に、AUR は様々なインタラクティブな機能を持つ洗練されたウェブサイトインターフェイスとして存在します。AUR には、公式の Arch パッケージとしては利用できないソフトウェアのための、ユーザによって提供されている数多くの PKGBUILD があります。公式の Arch ツリー以外のパッケージをビルドする必要がある場合、AUR にあるかもしれません。
リポジトリツリー
core、extra、testing 公式リポジトリは、チェックアウトのために packages リポジトリにあります。community と multilib リポジトリは community リポジトリに含まれています。
各パッケージにはサブディレクトリが存在します。サブディレクトリの中には repos
と trunk
ディレクトリがあります。repos
はさらにリポジトリ名 (例: core) とアーキテクチャに分かれています。公式ビルドでは repos
に入っている PKGBUILD とその他ビルドファイルが使われます。trunk
のファイルは開発者によって準備のために使われ、その後 repos
にコピーされます。
例えば、acl のツリーは以下のような見た目をしています:
acl acl/repos acl/repos/core-x86_64 acl/repos/core-x86_64/PKGBUILD acl/trunk acl/trunk/PKGBUILD
パッケージのソースコードは ABS ディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が PKGBUILD
に含まれています。
ユースケース
ABS は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります:
- パッケージを(再)コンパイルする必要があるケース。
- パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする (パッケージの作成 を見てください)。
- 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。
- (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。
- 自分のカスタムカーネルをクリーンにビルド・インストールする (カーネル#コンパイル を見てください)。
- カーネルモジュールをカスタムカーネルで動くようにする。
- PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。
使用法
PKGBUILD ソースを取得する
特定のパッケージをソースからビルドするために必要な PKGBUILD ファイルを取得するには、SVN あるいは Git ベースのアプローチのどちらかを使用できます。
Git を使って PKGBUILD ソースを取得する
asp ツールを使う
要件としては、asp パッケージをインストールしてください。Asp は、Git インターフェイスを使って Arch Linux パッケージのビルドソースファイルを取得するためのツールです。また、Arch Linux BBS フォーラムのスレッド [1] も見てください。
特定のパッケージの svntogit リポジトリをクローンするには:
$ asp checkout pkgname
これは、与えられたパッケージの git リポジトリを、パッケージと同じ名前のディレクトリにクローンします。
クローンされた git リポジトリをアップデートするには、その git リポジトリ内で git pull
とその次に asp update
を実行してください。
さらに、他の git コマンドもすべて使うことができ、パッケージの古いバージョンをチェックアウトしたり、カスタムの変更をトラックしたりすることもできます。git の使用法に関する詳細は git ページを見てください。
単に特定のパッケージの現在の PKGBUILD のスナップショットをコピーしたいだけなのであれば、以下のコマンドを使ってください:
$ asp export pkgname
git を直接使う
以下の git コマンドを使って特定のブランチだけをクローンしてください。このようにして、リポジトリ全体をコピーすることを防ぎます:
$ git clone --branch branch/package --single-branch https://github.com/archlinux/svntogit-packages.git
例えば、apache ビルドファイルをコピーするには:
$ git clone --branch packages/apache --single-branch https://github.com/archlinux/svntogit-packages.git
SVN を使って PKGBUILD ソースを取得する
要件
subversion パッケージをインストールしてください。
リポジトリをチェックアウトする
公式リポジトリの core、extra、testing をチェックアウトするには:
$ svn checkout --depth=empty svn://svn.archlinux.org/packages
リポジトリ community、multilib をチェックアウトするには:
$ svn checkout --depth=empty svn://svn.archlinux.org/community
両ケースで、からのディレクトリが作成されるだけですが、svn のチェックアウトであることは分かります。
パッケージをチェックアウトする
チェックアウトした svn リポジトリのあるディレクトリ (つまり packages または community) で以下のコマンドを実行してください:
$ svn update package-name
上記のコマンドにより、リクエストしたパッケージがチェックアウトされます。最上位のディレクトリで svn update を実行すると、アップデートされます。
存在しないパッケージを指定しても、svn は警告を表示しません。"At revision 115847" のような出力がされるだけです。ファイルは作成されません。その場合:
- パッケージ名のスペルを確認してください。
- パッケージが別のリポジトリに (例えば、community からメインのリポジトリへ) 移っていないか確認してください。
- https://archlinux.org/packages を確認して他のベースパッケージからビルドされていないかチェックしてください (例えば python-tensorflow は tensorflow の PKGBUILD からビルドします)。
リポジトリの最新のリビジョンをリビルドしたい場合、チェックアウトしたパッケージを定期的に更新する必要があります。以下のコマンドで更新できます:
$ svn update
パッケージの古いバージョンをチェックアウトする
#リポジトリをチェックアウトする で説明されている通りにチェックアウトした svn リポジトリ内では (つまり、"packages" や "community")、まずログを確かめます:
$ svn log package-name
ヒストリを調べて目的のリビジョンを見つけ、チェックアウトしたいリビジョンを指定してください。例えば、リビジョン r1729
にチェックアウトするには:
$ svn update -r1729 package-name
これは、package-name の既存のコピーを、指定したリビジョンにアップデートします。
日付を指定することもできます。指定した日にリビジョンが存在しない場合、svn は、指定した日より前の最も最近のパッケージを使用します。以下の例では、2009-03-03 のリビジョンをチェックアウトします:
$ svn update -r'{20090303}' package-name
他のリポジトリに移動する前のリビジョンにパッケージをチェックアウトすることもできます。ログをよくチェックし、パッケージが移動された日や最後のリビジョン番号を調べてください。
パッケージをビルドする
チェックアウトした PKGBUILD からパッケージをビルドするときに makepkg を設定する方法は makepkg#設定を見てください。
PKGBUILD が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。makepkg#使用方法に書かれているように makepkg を使ってパッケージを作成・インストールします。
ヒントとテクニック
修正を加えたパッケージを保護する
pacman でシステムを更新すると、ABS で作ったパッケージが、公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。
group 配列を PKGBUILD に挿入し、対象のパッケージを modified
と言う名前の group に追加してください。
PKGBUILD
groups=('modified')
そしてこのグループを /etc/pacman.conf
の IgnoreGroup
セクションに追加してください。
/etc/pacman.conf
IgnoreGroup = modified
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを ABS からビルドしなおす必要があります。
他のツール
- pbget - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。