「Arch build system」の版間の差分
(同期) |
細 (AshMyzk がページ「Arch Build System」を「Arch build system」に移動しました: ページ名を英語版と同じに) |
||
(6人の利用者による、間の31版が非表示) | |||
2行目: | 2行目: | ||
[[Category:パッケージ開発]] |
[[Category:パッケージ開発]] |
||
[[Category:パッケージ管理]] |
[[Category:パッケージ管理]] |
||
− | [[cs:Arch Build System]] |
||
− | [[da:Arch Build System]] |
||
[[de:Arch Build System]] |
[[de:Arch Build System]] |
||
− | [[ |
+ | [[en:Arch build system]] |
− | [[en:Arch Build System]] |
||
[[es:Arch Build System]] |
[[es:Arch Build System]] |
||
− | [[fr: |
+ | [[fr:Arch build system]] |
− | [[ |
+ | [[pt:Arch Build System]] |
− | [[ |
+ | [[ru:Arch build system]] |
− | [[ |
+ | [[zh-hans:Arch Build System]] |
− | [[ro:ABS]] |
||
− | [[ru:Arch Build System]] |
||
− | [[tr:Arch derleme sistemi]] |
||
− | [[zh-CN:Arch Build System]] |
||
− | [[zh-TW:Arch Build System]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related|ABS FAQ}} |
||
{{Related|Arch パッケージングスタンダード}} |
{{Related|Arch パッケージングスタンダード}} |
||
+ | {{Related|Arch User Repository}} |
||
{{Related|パッケージの作成}} |
{{Related|パッケージの作成}} |
||
− | {{ |
+ | {{Related|カーネル/Arch build system}} |
− | {{Related|PKGBUILD}} |
||
{{Related|makepkg}} |
{{Related|makepkg}} |
||
− | {{Related|pacman}} |
||
{{Related|公式リポジトリ}} |
{{Related|公式リポジトリ}} |
||
− | {{Related| |
+ | {{Related|pacman}} |
− | {{Related| |
+ | {{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 も Ports に似たシステムで、{{ic|/var/abs}} ディレクトリ下に、カテゴリ - パッケージ名の順番で、ツリー状のフォルダ群 (ABS ツリー) を保存しています。これには ''Arch Linux の公式ソフト'' すべてのパッケージが含まれます (Ports と同様に、ソースコードやバイナリパッケージを含んでいないのでサイズはそんなに大きくありません)。パッケージ名 (例えば、'ABS') のフォルダを開いたとします。すると、中にはソフトウェアパッケージやソースはなく、代わりに [[PKGBUILD]] というファイルが含まれています。PKGBUILD は簡潔な Bash スクリプトで、ソースコードのダウンロード元や、コンパイル、パッケージ作成に必要なコマンドが記述してあります。ABS の [[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 によって、または手動で実行される必要があります。 |
||
− | ; ABS ツリー: ABS のディレクトリ構造; あなたの(ローカル)マシンの {{ic|/var/abs/}} 下の SVN 階層のことです。{{ic|/etc/abs.conf}} で設定したリポジトリにある全ての公式 Arch Linux ソフトウェア毎にサブディレクトリが存在します。ただしパッケージ自体は含まれていません。このツリーは [[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]] を使ってダウンロードしています。}} |
||
+ | {{Warning|公式の PKGBUILD ではパッケージは[[DeveloperWiki:クリーンな chroot 内でビルドする|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}} |
||
− | ; [[PKGBUILD]]: ソースコードの URL とコンパイル・パッケージングの手順が入った [[Bash]] スクリプト。 |
||
+ | === リポジトリ構造 === |
||
− | ; [[makepkg]]: PKGBUILD を読み込む ABS のシェルコマンドツール。自動的にソースをダウンロード・コンパイルし {{ic|.pkg.tar*}} (形式は {{ic|makepkg.conf}} の {{ic|PKGEXT}} で設定) を作成します。makepkg を使って [[Arch User Repository|AUR]] やサードパーティのソースからカスタムパッケージを作成することも可能です ([[パッケージの作成]]を見て下さい)。 |
||
+ | [[公式リポジトリ]] ''core''、''extra''、''core-testing''、そして ''extra-testing'' は、[https://gitlab.archlinux.org/ Arch Linux Gitlab インスタンス]上でホストされています。 |
||
− | ; [[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}} のツリーは以下のような見た目をしています: |
||
− | {{Warning|公式の PKGBUILD ではパッケージは[[en2:DeveloperWiki:Building_in_a_Clean_Chroot|クリーンな chroot でビルド]]されることを前提としています。''汚い''ビルド環境でソフトウェアをビルドしても上手くいかなかったり、動作時に予期せぬ挙動が起こったりすることがあります。ビルドシステムは依存関係を動的に検出して、ビルド環境に存在するパッケージによって結果が変わるためです。}} |
||
+ | acl |
||
− | == ABS を使う理由 == |
||
+ | ├── keys |
||
+ | │ └── pgp |
||
+ | │ ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc |
||
+ | │ ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc |
||
+ | │ └── B902B5271325F892AC251AD441633B9FE837F581.asc |
||
+ | └── PKGBUILD |
||
+ | パッケージのソースコードはディレクトリ内には存在しません。その代わり、パッケージのビルド時にソースコードをダウンロードする URL が {{ic|PKGBUILD}} に含まれています。 |
||
− | Arch Build System の用途は以下の通りです: |
||
− | * 何らかの理由で、パッケージをコンパイル・リコンパイルする |
||
− | * パッケージがもう入手できなくなったので、ソフトウェアのソースから新しいパッケージを作成・インストールする ([[パッケージの作成]]を見て下さい) |
||
− | * ニーズにあわせて既存のパッケージをカスタマイズする (オプションを有効化・無効化、パッチをあてる) |
||
− | * FreeBSD 流に (à la FreeBSD)、自分で決めたコンパイルフラグを使ってシステム全体をリビルドする (例: [[pacbuilder]]) |
||
− | * カスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]]を見て下さい) |
||
− | * カスタムカーネルと一緒に動作するカーネルモジュールを手に入れる |
||
− | * PKGBUILD 内のバージョン番号を変えることで Arch パッケージの新しい・古い・ベータ版の・開発版のバージョンを簡単にコンパイル・インストールする |
||
+ | == ユースケース == |
||
− | ABS は Arch Linux を使うにあたって必須のものではありませんが、ソースコンパイルなどの作業の自動化に役立ちます。 |
||
+ | Arch build system は、ソースからのコンパイルに関連する特定のタスクを自動化します。ABS のユースケースとしては以下があります: |
||
− | == ABS の使用方法 == |
||
+ | * パッケージを(再)コンパイルする必要があるケース。 |
||
+ | * パッケージがまだ利用できないソフトウェアのソースから新しいパッケージを make しインストールする ([[パッケージの作成]] を見てください)。 |
||
+ | * 既存のパッケージをニーズに合わせてカスタマイズする (例: オプションを有効化/無効化する、パッチを当てる)。 |
||
+ | * (FreeBSD 風に) コンパイラフラグを指定してシステム全体をリビルドする。 |
||
+ | * 自分のカスタムカーネルをクリーンにビルド・インストールする ([[カーネル#コンパイル]] を見てください)。 |
||
+ | * カーネルモジュールをカスタムカーネルで動くようにする。 |
||
+ | * PKGBUILD 内のバージョン番号を編集して、新しい、古い、ベータ、開発バージョンの Arch パッケージを簡単にコンパイル・インストールする。 |
||
+ | == 使用法 == |
||
− | 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 で行います。 |
||
− | === |
+ | === PKGBUILD ソースを取得する === |
+ | 特定のパッケージをソースからビルドするために必要な [[PKGBUILD]] ファイルを取得するには、{{ic|pkgctl}} ツールを使うか、直接 [[Git]] を使うことができます。 |
||
− | ABS を使うには、まず[[公式リポジトリ]]から {{Pkg|abs}} を[[pacman|インストール]]する必要があります。 |
||
+ | ==== pkgctl ツールを使う ==== |
||
− | abs をインストールするだけで (その依存として) abs-sync スクリプトや様々なビルドスクリプト、そして [[rsync]] が入ります。 |
||
− | + | 前提条件として、{{Pkg|devtools}} パッケージを[[インストール]]してください。{{ic|pkgctl}} は、Git を使用して Arch Linux パッケージのビルドソースファイルを操作するためのツールです。 |
|
+ | {{ic|pkgctl}} を使用して最新のビルドファイルを含む [[git]] リポジトリを clone するには、以下のコマンドが使用されます: |
||
− | === /etc/abs.conf === |
||
+ | $ pkgctl repo clone ''pkgname'' |
||
− | root で {{ic|/etc/abs.conf}} を編集して利用するリポジトリを指定してください。 |
||
+ | 注意点として、ここではビルドソースファイルというのは [[PKGBUILD]] のことを指します (場合によっては、キーファイルなどの他の必要なファイルも含みます)。つまり、Arch Linux ビルドシステムで必要な必須のファイル群です。パッケージを作成したチームによって書かれたパッケージのソースファイル (C や Python のファイル) を指すのではありません。 |
||
− | 利用するリポジトリの前の {{ic|!}} を削除することでそのリポジトリを有効にします。例: |
||
− | REPOS=(core extra community !testing) |
||
+ | このコマンドにより、現在のソースビルドファイルのみならず、以前のバージョンもダウンロードします。さらに、古いバージョンに checkout したりカスタムの変更を追跡したりするための他の [[git]] コマンドもすべて利用できます。 |
||
− | === ABS ツリー === |
||
− | + | パッケージの特定のバージョンを入手したい場合、以下のようなことを行うことができます: |
|
+ | $ pkgctl repo clone --switch="2:1.19.5-1" go |
||
− | {{bc|<nowiki> |
||
− | | -- core/ |
||
− | | || -- acl/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- attr/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- abs/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- autoconf/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- ... |
||
− | | -- extra/ |
||
− | | || -- acpid/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- apache/ |
||
− | | || || -- PKGBUILD |
||
− | | || -- ... |
||
− | | -- community/ |
||
− | | || -- ... |
||
− | </nowiki>}} |
||
+ | 詳細や他の利用可能なコマンドは {{man|1|pkgctl-repo-clone}} を読んでください。 |
||
− | ABS ツリーはパッケージデータベースと全く同じ構造を持っています: |
||
+ | ==== 直接 git を使う ==== |
||
− | * 第一階層: リポジトリの名前 |
||
− | * 第二階層: パッケージ名のディレクトリ |
||
− | * 第三階層: PKGBUILD (パッケージのビルドに必要な情報が含まれています) とその他関連ファイル (パッチなど、パッケージのビルドに必要なファイル) |
||
+ | 以下の git コマンドでパッケージを clone できます: |
||
− | パッケージのソースコードは ABS ディレクトリには存在しません。その代わり、'''PKGBUILD''' ファイルには、パッケージをビルドする時にどこの URL からソースコードをダウンロードすればいいか書かれています。そのため、abs ツリー自体のサイズはとても小さくなっています。 |
||
+ | $ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/</nowiki>''pkgname''.git |
||
− | ==== ABS ツリーのダウンロード ==== |
||
− | root で次を実行してください: |
||
− | # abs |
||
+ | 例えば、Apache のビルドファイルをコピーするには: |
||
− | 今、あなたの ABS ツリーは {{ic|/var/abs}} 下に作成されました。ABS ツリーの適切なブランチが作られ {{ic|/etc/abs.conf}} で指定されたものと対応していることに注意してください。 |
||
+ | $ git clone <nowiki>https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git</nowiki> |
||
− | 公式リポジトリと同期し続けるために abs コマンドは定期的に実行するのがベターです。また、個々の ABS パッケージファイルをダウンロードすることもできます: |
||
+ | === パッケージをビルドする === |
||
− | # abs <repository>/<package> |
||
− | こうすれば一つのパッケージをビルドするのに abs ツリー全体をチェックする必要がなくなります。 |
||
+ | チェックアウトした [[PKGBUILD]] からパッケージをビルドするときに ''makepkg'' を設定する方法は [[makepkg#設定]]を見てください。 |
||
− | === /etc/makepkg.conf === |
||
+ | [[PKGBUILD]] が含まれたディレクトリをどこか好きなところにコピーしてください。それから必要な修正を加えてください。[[makepkg#使用方法]]に書かれているように ''makepkg'' を使ってパッケージを作成・インストールします。 |
||
− | {{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 |
||
− | }} |
||
+ | [[pacman]] でシステムを更新すると、修正を加えたパッケージが公式リポジトリにある同じ名前のパッケージで置き換えられてしまいます。これを回避するには以下の方法を見て下さい。 |
||
− | ===== リポジトリに含まれているパッケージのみを表示 ===== |
||
+ | group 配列を [[PKGBUILD]] に挿入し、対象のパッケージを {{ic|modified}} と言う名前の group に追加してください。 |
||
− | この例では {{ic|/etc/pacman.conf}} に定義されているリポジトリに含まれているパッケージだけを表示します: |
||
+ | {{hc|PKGBUILD|2= |
||
− | {{hc|<nowiki>$ . /etc/makepkg.conf; grep -xvFf <(pacman -Qqm) <(expac "%n\t%p" | grep "$PACKAGER$" | cut -f1)</nowiki>| |
||
+ | groups=('modified') |
||
− | binutils |
||
− | gcc |
||
− | gcc-libs |
||
− | glibc |
||
− | tar |
||
}} |
}} |
||
− | |||
− | === ビルドディレクトリの作成 === |
||
− | |||
− | 実際のコンパイルをするためのビルドディレクトリを作成することを推奨します。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}} セクションに追加してください。 |
そしてこのグループを {{ic|/etc/pacman.conf}} の {{ic|IgnoreGroup}} セクションに追加してください。 |
||
− | {{hc|/etc/pacman.conf| |
+ | {{hc|/etc/pacman.conf|2= |
− | + | IgnoreGroup = modified |
|
+ | }} |
||
− | システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージを |
+ | システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。 |
== 他のツール == |
== 他のツール == |
||
− | * [ |
+ | * [https://xyne.dev/projects/pbget/ pbget] - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。 |
+ | |||
− | * [https://github.com/falconindy/asp asp] - Arch Linux パッケージを作成するのに使われるビルドソースファイルを管理するツール。git インターフェイスを使用することで最新のソースを提供します。 |
||
+ | {{TranslationStatus|Arch build system|2023-05-24|779405}} |
2023年10月16日 (月) 23:30時点における最新版
関連記事
Arch build system (ABS) とは、ports ライクなシステムで、ソースコートからソフトウェアをビルドしたりパッケージングしたりするためのものです。pacman はバイナリパッケージの管理用に特殊化された Arch ツールであるに対し、Arch build system は、インストール可能な .pkg.tar.zst パッケージにソースをコンパイルするためのツールのコレクションです。
Ports は BSD 系によって採用されている、ソースコードからのソフトウェアのビルドを自動化するシステムです。port を使ってソフトウェアのダウンロード、展開、パッチの適用、コンパイル、インストールを行います。port はユーザのコンピュータ上にあるただの小さなディレクトリで、それぞれの port に対応する個々のソフト名が付けられており、中にはソフトウェアのビルド・インストールのための情報が書かれたファイルが入っています。これにより、port のディレクトリ内で make
か make install clean
を実行すればよく、ソフトウェアのインストールがシンプルになります。
Arch build system も似たようなコンセプトに基づいています。Arch build system は、Arch Linux で利用可能なそれぞれパッケージの git リポジトリのコレクションで構成されています。各リポジトリには PKGBUILD ファイル (場合によっては他のファイルも) が含まれており、ソフトウェアのソースやバイナリは含まれていません。makepkg をディレクトリ内で実行すると、ソフトウェアのソースがダウンロードされ、ソフトウェアがコンパイルされ、ビルドディレクトリ内でパッケージングされます。その後、そのパッケージを pacman でインストールできます。
目次
ツールチェイン
Arch build system には、ソースからパッケージをビルドするプロセスで使用されるいくつかのコンポーネントとツールが含まれており、それらのコンポーネントに依存しています:
- リポジトリ
- すべての公式パッケージのビルドに必要なファイルを含むディレクトリ構造。パッケージ自体やソフトウェアのソースファイルは含まれていません。Gitlab 上の Git リポジトリという形で利用できます。詳細は #リポジトリ構造 セクションを参照してください。
- makepkg
- PKGBUILD を読み込むシェルコマンドツール。自動的にソースをダウンロード・コンパイルし、(
makepkg.conf
のPKGEXT
に従って) .pkg.tar* を作成します。makepkg を使って AUR やサードパーティのソースからカスタムパッケージを作成することも可能です。詳細は パッケージの作成 を見て下さい。
- pacman
- pacman は ABS とは完全に切り離されています。しかし、ビルドしたパッケージをインストール・削除したり依存関係を解決したりするために pacman は makepkg によって、または手動で実行される必要があります。
- AUR
- Arch User Repository は PKGBUILD 群の公式リポジトリとは別々になっていますが、AUR のパッケージは同じツールを使ってビルドすることができます。AUR には、公式の Arch パッケージとして入手できないソフトウェアの PKGBUILD が数千も含まれており、ユーザによって提供されています。公式の Arch ツリー外でパッケージをビルドする必要がある場合、AUR にそのパッケージが存在する可能性があります。
リポジトリ構造
公式リポジトリ core、extra、core-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.conf
の IgnoreGroup
セクションに追加してください。
/etc/pacman.conf
IgnoreGroup = modified
システムアップデートで公式リポジトリにパッケージの新しいバージョンがあっても、pacman は IgnoreGroup セクションにパッケージがあるため更新をスキップすると表示します。部分的なアップグレードにならないようにここでパッケージをビルドしなおす必要があります。
他のツール
- pbget - Web インターフェイスから直接個々のパッケージの PKGBUILD を取得します。AUR サポートもあり。