「Arch build system」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(修正)
27行目: 27行目:
 
ABS も似たようなコンセプトです。ABS の一部分には、SVN リポジトリと、等価な Git リポジトリがあります。リポジトリには、Arch Linux で利用可能な各パッケージに対応するディレクトリが含まれています。リポジトリのディレクトリには [[PKGBUILD]] ファイルが含まれており (他のファイルが含まれている場合もある)、ソフトウェアのソースやバイナリは含まれていません。ディレクトリ内で [[makepkg]] を実行することで、ソフトウェアのソースがダウンロードされ、コンパイルされ、ビルドディレクトリ内にパッケージングされます。そして、[[pacman]] を使ってそのパッケージをインストールできます。
 
ABS も似たようなコンセプトです。ABS の一部分には、SVN リポジトリと、等価な Git リポジトリがあります。リポジトリには、Arch Linux で利用可能な各パッケージに対応するディレクトリが含まれています。リポジトリのディレクトリには [[PKGBUILD]] ファイルが含まれており (他のファイルが含まれている場合もある)、ソフトウェアのソースやバイナリは含まれていません。ディレクトリ内で [[makepkg]] を実行することで、ソフトウェアのソースがダウンロードされ、コンパイルされ、ビルドディレクトリ内にパッケージングされます。そして、[[pacman]] を使ってそのパッケージをインストールできます。
   
== ABS の概要 ==
+
== 概要 ==
   
'ABS' という言葉は総称 (umbrella term) として使われることがあります。ABS は複数のものから構成されているからす; のため、技術的には正確ではありませんが'ABS' はツールキットとして以下のツールを意味します:
+
'ABS' は複数のコンポーネントから構成されているれらをまとて 'ABS' と呼ばれることがあります。故に(技術的には正しくありませんが) 'ABS' は完全なツールキットとして以下のツールを指すことがあります:
   
; SVN ツリー: ABS のディレクトリ構造; あなたの(ローカル)マシンの {{ic|/var/abs/}} 下の SVN 階層のことで。{{ic|/etc/abs.conf}} で設定したリポジトリにある全ての公式 Arch Linux ソトウェア毎にサブディレクトリが存在しますただしパッケージ自体は含まれていません。[https://www.archlinux.jp/svn/ svn] と [https://projects.archlinux.org/svntogit/packages.git/ git] リポジトリから利用可能です。
+
; リポジトリツリー: すての公式パッケージのビルドに必要なァイルが含まれているディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含ません。[https://archlinux.org/svn/ svn] と [https://github.com/archlinux/svntogit-packages git] リポジトリ利用できま。詳細は [[#リポジトリツリー]] セクションを見てください
   
; [[PKGBUILD]]: ソースコードの URL とコンパイルパッケージングの手順入った [[Bash]] スクリプト。
+
; [[PKGBUILD]]: ソースコードの URL とコンパイルパッケージングの命令記述されている [[Bash]] スクリプト。
   
; [[makepkg]]: PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし {{ic|.pkg.tar*}} (形式は {{ic|makepkg.conf}} の {{ic|PKGEXT}} で設定) を作成します。makepkg を使って [[Arch User Repository|AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です ([[パッケージの作成]]を見て下さい)
+
; [[makepkg]]: PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし({{ic|makepkg.conf}} の {{ic|PKGEXT}} に従って) ''.pkg.tar*'' を作成します。makepkg を使って [[AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は [[パッケージの作成]] を見て下さい。
   
; [[pacman]]: pacman は abs とは完全に切り離されています。ただし、ビルドしたパッケージをインストール・削除したり依存関係を解決する pacman が必要になります。pacman は makepkg によって実行されることもあります。
+
; [[pacman]]: pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
   
; [[Arch User Repository|AUR]]: Arch User Repository は勿論 ABS とは別物ですが、AUR の(サポートない) PKGBUILD をビルドするときに makepkg を使ってパッケージをコンパイル・作成します。ローカルマシン上の ABS ツリーと対的に、AUR はウェブインターフェがあります。AUR にはユーザーによって投稿された沢山の PKGBUILD が含まれておりその PKGBUILD を使うことで公式の Arch リポトリにないソフトウェアをインストルできます。公式の Arch ツリーにないパッケージをビルドする必要がある場合、AUR を使うことなり
+
; [[AUR]]: Arch User Repository は ABS と分離されていますが、AUR の (サポートされていない) PKGBUILD はmakepkg を使ってビルドされ、ソフトウェアをコンパイルしパッケージングします。単なる素 git リポジトリである ABS ツリーと的に、AUR は様々なインタラクティブな機能を持つ洗練されたウェブサイトインターフェとして存在します。AUR には、公式の Arch パッケーとしては利用できないソフトウェアのための、ユザによって提供されている数多くの PKGBUILD があります。公式の Arch ツリー以外のパッケージをビルドする必要がある場合、AUR にあるかもしれせん
   
 
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
 
{{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}}
   
=== SVN ツリー ===
+
=== リポジトリツリー ===
   
''core'', ''extra'', ''testing'' [[リポジトリ]]は ''packages'' SVN リポジトリから[[#非再帰的なチェックアウト|チェックアウト]]できます。''community'' と ''multilib'' リポジトリは ''community'' SVN リポジトリに含まれています。
+
''core''''extra''''testing'' [[公式リポジトリ]]は[[#非再帰的なチェックアウト|チェックアウト]]のために ''packages'' リポジトリにあります。''community'' と ''multilib'' リポジトリは ''community'' リポジトリに含まれています。
   
各パッケージにはサブディレクトリが存在します。サブディレクトリの中には {{ic|repos}} と {{ic|trunk}} ディレクトリがあります。{{ic|repos}} はリポジトリ名 (例: ''core'') とアーキテクチャ分かれています。公式ビルドでは {{ic|repos}} に入っている PKGBUILD とその他ビルドファイルが使われます。{{ic|trunk}} のファイルは開発者によって使われ、その後 {{ic|repos}} にコピーされます。
+
各パッケージにはサブディレクトリが存在します。サブディレクトリの中には {{ic|repos}} と {{ic|trunk}} ディレクトリがあります。{{ic|repos}} はさらにリポジトリ名 (例: ''core'') とアーキテクチャ分かれています。公式ビルドでは {{ic|repos}} に入っている PKGBUILD とその他ビルドファイルが使われます。{{ic|trunk}} のファイルは開発者によって準備のために使われ、その後 {{ic|repos}} にコピーされます。
   
例えば、{{pkg|acl}} のツリーは以下のようます:
+
例えば、{{pkg|acl}} のツリーは以下のような見た目をしています:
   
 
acl
 
acl
 
acl/repos
 
acl/repos
acl/repos/core-i686
 
acl/repos/core-i686/PKGBUILD
 
 
acl/repos/core-x86_64
 
acl/repos/core-x86_64
 
acl/repos/core-x86_64/PKGBUILD
 
acl/repos/core-x86_64/PKGBUILD
60行目: 58行目:
 
acl/trunk/PKGBUILD
 
acl/trunk/PKGBUILD
   
パッケージのソースコードは ABS ディレクトリに入っていません。わりに {{ic|PKGBUILD}} にはパッケージビルドするときにソースコードの取得先となる URL が記述されています。
+
パッケージのソースコードは ABS ディレクトリは存在しません。その代わりパッケージビルドにソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。
   
 
== ABS を使う理由 ==
 
== ABS を使う理由 ==

2022年10月27日 (木) 20:18時点における版

関連記事

Arch Build System とは、ports ライクなシステムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。pacman はバイナリパッケージ (ABS によってビルドされたパッケージを含む) の管理用に特殊化された Arch ツールであるに対し、ABS は、インストール可能な .pkg.tar.zst パッケージにソースをコンパイルするためのツールのコレクションです。

Ports は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。port を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。port はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの port に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で makemake install clean を実行すればよく、ソフトウェアのインストールがシンプルになります。

ABS も似たようなコンセプトです。ABS の一部分には、SVN リポジトリと、等価な Git リポジトリがあります。リポジトリには、Arch Linux で利用可能な各パッケージに対応するディレクトリが含まれています。リポジトリのディレクトリには PKGBUILD ファイルが含まれており (他のファイルが含まれている場合もある)、ソフトウェアのソースやバイナリは含まれていません。ディレクトリ内で makepkg を実行することで、ソフトウェアのソースがダウンロードされ、コンパイルされ、ビルドディレクトリ内にパッケージングされます。そして、pacman を使ってそのパッケージをインストールできます。

概要

'ABS' は複数のコンポーネントから構成されているので、それらをまとめて 'ABS' と呼ばれることがあります。故に、(技術的には正しくありませんが) 'ABS' は完全なツールキットとして以下のツールを指すことがあります:

リポジトリツリー
すべての公式パッケージのビルドに必要なファイルが含まれているディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含みません。svngit のリポジトリで利用できます。詳細は #リポジトリツリー セクションを見てください。
PKGBUILD
ソースコードの URL と、コンパイルやパッケージングの命令が記述されている Bash スクリプト。
makepkg
PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、(makepkg.confPKGEXT に従って) .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 にあるかもしれません。
警告: 公式の PKGBUILD ではパッケージはクリーンな chroot でビルドされることを前提としています。汚いビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。

リポジトリツリー

coreextratesting 公式リポジトリは、チェックアウトのために packages リポジトリにあります。communitymultilib リポジトリは community リポジトリに含まれています。

各パッケージにはサブディレクトリが存在します。サブディレクトリの中には repostrunk ディレクトリがあります。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 を使う理由

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

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

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

ABS の使用方法

ソースからパッケージをビルドするのに必要な PKGBUILD を取得する際、svntogit リポジトリのラッパーである asp パッケージを使って SVN あるいは Git で取得できます。以下では svn による方法と git による方法の両方を説明します。

SVN を使って PKGBUILD ソースを取得

要件

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 リポジトリなど)。
  • https://www.archlinux.jp/packages を確認して他のベースパッケージからビルドされていないかチェックしてください (例えば python-tensorflowtensorflow の PKGBUILD からビルドします)。
ヒント: 古いバージョンのパッケージをチェックアウトしたい場合、#旧リビジョンのパッケージをチェックアウトを参照してください。

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

$ svn update

Git を使って PKGBUILD ソースを取得

まず最初に asp パッケージをインストールしてください。

特定のパッケージの svntogit リポジトリを複製するには:

$ asp checkout pkgname

上記のコマンドで指定したパッケージの名前が付いたディレクトリに git リポジトリが複製されます。

複製した git リポジトリを更新するには asp update を実行して git リポジトリの中で git pull を行ってください。

また、他の git コマンドを使ってパッケージの古いバージョンをチェックアウトしたり変更を追跡することもできます。git の詳しい使い方については git のページを見てください。

最新の PKGBUILD のスナップショットをコピーしたいだけの場合、以下のコマンドを使ってください:

$ asp export pkgname

パッケージのビルド

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

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

ヒントとテクニック

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

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 - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。