Binary package guide/ja

Article description:: は、通常のソースからの ebuild のほかに、バイナリーパッケージの作成とインストールにも対応しています. このガイドでは、バイナリーパッケージの作成方法、インストール方法、バイナリーパッケージサーバーのセットアップ方法について説明します.

Gentoo 上にソフトウェアをインストールするために、システム管理者がバイナリパッケージを使用するのを好む場合には、多くの理由があります:


 * 複数の同様のシステムを更新された状態に維持するときに、時間を節約する. ソースからすべてをコンパイルする必要があるのは、時間の浪費になりえます. もし、ただひとつのシステムですべてをコンパイルして他のシステムでバイナリパッケージを利用できれば、いくつかの似たようなシステム (そのうちいくらかには古いハードウェアがあるかもしれません) を管理するのはとても楽になるでしょう.
 * 安全な更新を行う. 実稼働用のミッションクリティカルなシステムのためには、使用可能な状態で可能な限りありつづけることが重要です. これは、すべての更新を一番最初に自分自身に行うステージングサーバーによって実現できます. ステージングサーバが良好な状態になると、その次に更新が重要なシステムに適用することができます. このアプローチの変化形として、同じシステムの chroot 環境で更新を行い、そこで作成されたバイナリを実際のシステムで用いるという方法もあります.
 * バックアップとして. 多くの場合、バイナリパッケージが壊れたシステム (すなわち、壊れたコンパイラ) を回復する唯一の方法です. 事前にコンパイルされたバイナリをバイナリパッケージサーバ上やローカルで持つことは、ツールチェーンが壊れた場合には大きな助けになるでしょう.
 * 非常に古いシステムを更新する助けにもなります. 非常に古いシステムを更新する作業は、バイナリパッケージを使用することで大幅に楽になります. バイナリパッケージではビルド時の依存関係を更新/インストールする必要がないので、通常は古いシステムにバイナリパッケージをインストールするのは助けになります. また、バイナリパッケージは事前にコンパイルされているので、ビルド工程での失敗も避けられます.

このガイドでは、次のトピックに焦点を当てます. :


 * バイナリパッケージを作成する.
 * バイナリパッケージをクライアントへ配信する.
 * バイナリパッケージを実装する.
 * バイナリパッケージを保守する.

最後に、バイナリパッケージの扱い方に関するいくつかの高度な話題を扱います.

バイナリパッケージフォーマット
Portage バージョン 3.0.31 から、新しいバイナリパッケージフォーマット (GPKG) への対応が追加されました. 新しいフォーマットは、旧設計の問題を解決して新しい機能を導入するために完全に再設計されており、そのため後方互換性は提供されていません. これより古いのバージョンの Portage を利用するシステムに向けたバイナリパッケージを作成する必要がある場合は、従来の XPAK フォーマットを使用し続けてください.

新しい GPKG フォーマットの設計動機は GLEP 78: Gentoo binary package container format で確認することができます. と も参照してください.

新しい GPKG フォーマットを使用するためには、 で BINPKG_FORMAT の値を設定してください. デフォルト値は xpak です.

このガイドは両方のフォーマットを適用対象としています. バイナリパッケージフォーマットについてのさらなる情報については、バイナリパッケージの形式を理解するの節を参照してください.

バイナリパッケージを作成する
バイナリパッケージを作成する主な方法は3つあります：


 * 1) 通常のインストール後、 のアプリケーションを使用する
 * 2)  時に    オプションを明示する
 * 3) Portage の FEATURES 変数の値   (すべてのパッケージについてバイナリパッケージをビルドする) または   (についてのみバイナリパッケージをビルドする) を使用して自動的に作成する

これらの三つの方法のうちいずれをとっても PKGDIR 変数よって指定されるディレクトリにバイナリパッケージが作成されます. (デフォルトではです)

quickpkg を利用する
(Portage に含まれています) は一つ以上の dependency atom (あるいはパッケージ集合) を取り、その atom と一致するインストールされたパッケージに対するバイナリパッケージを作成します.

例えば、インストールされているすべての GCC のバージョンのバイナリパッケージを作るには:

system 集合に含まれるパッケージのバイナリパッケージを作成するには:

システム上のインストールされたすべてのパッケージに対してバイナリパッケージを作成する場合は、 globを以下のように使います:

emerge のオプションに --buildpkg を使用する
でソフトウェアをインストールするときに、 Portageに オプションを通すことによってバイナリパッケージを同時に作成することもできますː

システムにはソフトウェアをインストールせずに、バイナリパッケージのみを作成することもできます. この場合は オプションを通してください:

しかしながら、後者のアプローチでは、すべてのビルド時依存が事前にインストールされている必要があります.

buildpkg を Portage の機能として実行する
パッケージがPortageによってインストールされるたびにバイナリパッケージを自動的に作成するもっとも一般的な方法は、以下のようにしてで設定できる 機能を利用することです:

この機能を有効にすると、Portageがソフトウェアをインストールするたびに、同様にバイナリパッケージも作成します.

いくつかのパッケージの作成を除外する
Portageに、いくつかの選択したパッケージやカテゴリについてバイナリパッケージを作成しないよう通知することができます. これは、 オプションをemergeに渡すことにより行います:

これは、バイナリパッケージを利用可能にすることにほとんど、あるいはまったく利益がないパッケージについて使用できます. 例として、Linuxカーネルソースパッケージやアップストリームのバイナリパッケージ(のように-binで終わるもの)があります.

バイナリパッケージの圧縮フォーマット
バイナリパッケージについて、圧縮タイプを指定して利用することができます. 現在サポートされているフォーマットは、 、 、 、 、 、 、そして  です. デフォルトは  です. 最新の情報については を確認し、 BINPKG_COMPRESS を検索してください.

圧縮フォーマットは から指定できます.

使用する圧縮タイプによっては、追加の依存関係をインストールする必要がある場合があります. 例えば上の場合は が必要です.

バイナリパッケージの OpenGPG 署名
GPG signature allows users to check the creator and integrity of a binary package, and to perform trust management based on keys. The binary package signing feature is disabled by default, to use it users need to enable the  feature. Note that whether this feature is enabled does not affect the signature verification feature.

Users also need to set the BINPKG_GPG_SIGNING_GPG_HOME and BINPKG_GPG_SIGNING_KEY variables for Portage to find the signing key.

Portage will only try to unlock the GPG private key at the beginning. If the user's key will expire over time, then consider enabling  to prevent signing failures.

バイナリパッケージホストを構成する
Portageは、バイナリパッケージのダウンロードのための多くのプロトコルをサポートしています: FTP、FTPS、HTTP、HTTPSおよびSSH/SFTP. このことは、多くのバイナリパッケージホストの実装を可能にする余地を与えます.

しかしながら Portage は、バイナリパッケージを配布するための"すぐ使える"方法を提供していません. 決めた構成によって、追加のソフトウェアのインストールが必要になるでしょう.

ウェブベースのバイナリパッケージホスト
バイナリパッケージを配布する一般的なアプローチの一つは、ウェブベースのバイナリパッケージホストを作成することです.

のようなウェブサーバーを使用し、 の PKGDIR ディレクトリへの読み込みアクセスを提供するよう設定します.

そして、クライアントシステムで、それに対応する PORTAGE_BINHOST 変数を設定します:

SSH バイナリパッケージホスト
バイナリパッケージミラーへの認証されたアプローチを提供するために、バイナリパッケージにアクセスするために SSH プロトコルを利用するように Portage を設定することできます.

SSHを使用する場合、LinuxのrootユーザーのSSH鍵(インストールはバックグラウンドで行われる必要があるため、パスフレーズなしのもの)をリモートのバイナリパッケージホストへの接続に使用できます.

これを実現するには、rootユーザーのSSH鍵がサーバーで許可されていることを確認してください. これは、SSHに対応したバイナリホストに接続する各マシンのために行う必要があります:

そして、 PORTAGE_BINHOST 変数は以下のようになります:

NFS エクスポート
内部ネットワークでバイナリパッケージを使用する場合、パッケージをNFSを通じてエクスポートし、クライアントでそれをマウントするのがより簡単かもしれません.

ファイルは以下のようになります:

その後、クライアントでその場所をマウント可能です. エントリーの例は以下のようになります:

The NFS share is mounted on the local filesystem, so there is no need to set PORTAGE_BINHOST or use the  option. Instead, follow the normal procedures for installing binary packages, remembering to point PKGDIR to the NFS share so that portage knows where to find the packages:

バイナリーパッケージを使用する
バイナリパッケージが他のシステムで利用可能であるためには、いくつかの要件を満たす必要があります:


 * クライアントとサーバーのアーキテクチャおよび は一致していなければなりません.
 * バイナリパッケージのビルドに使用された CFLAGS および CXXFLAGS 変数は、すべてのクライアントとの間で互換性がなければなりません.
 * プロセッサ特有の命令セット機能 (たとえば、MMX、SSEなど) のための USE フラグは注意深く選択しなければなりません: すべてのクライアントがそれらをサポートしている必要があります.

サーバとクライアントの両方でサポートされている CFLAGS のサブセットを探すために、 ユーティリティを利用することができます. 例えば、ホストが次を返すとします:

一方でクライアントが返すのは:

この例では、 CFLAGS は  に設定することができます、これは   は   の完全なサブセットであるためです. と  は、クライアントでサポートされていないため、含まれません. しかしながら、クライアントが  をサポートしていないため、   は含まれます. どの  がどの   のサブセットであるかを調べるには、[//gcc.gnu.org/onlinedocs/gcc/x86-Options.html gcc マニュアル]を確認してください. 適切なサブセットが無い場合は、例えば  を設定してください.

追加で、gcc に特定のアーキテクチャ向けにコードをチューンするように指示する  または   を設定することもできます. とは対照的に、 引数によってコードが他のプロセッサで実行できなくなることはありません. 例えば、ivybridge 以降と互換性を持たせつつ、skylake 上で最高の性能で実行できるようにチューンされたコードをコンパイルするには、 CFLAGS を  に設定してください. が設定されていない場合は、デフォルトとして  が設定されている値に設定されます.

クライアントでバイナリパッケージを利用するために  をより低いサブセットに変更したときには、すべてのバイナリがクライアントのプロセッサと互換性があることを確実にするために、システム全体の再コンパイルをが必要です. 時間を節約するために、gcc/clang などによってコンパイルされないパッケージを除外することができます:

同様に、プロセッサ固有の命令セット USE フラグの適切なサブセットを探すために、 を利用することができます. 例えば、ホストが次を返すとします:

一方でクライアントが返すのは:

この例では、 内で CPU_FLAGS_X86 を  に設定することができます. これらのフラグはクライアントとホストの両方でサポートされているからです.

次に、Portageは、バイナリパッケージがクライアントにおいて期待されるのと同じUSEフラグを用いてビルドされているかチェックします. パッケージが異なるUSEフラグの組み合わせでビルドされている場合、実行の際にコマンドに渡されたオプションによって、Portageはそのバイナリパッケージを無視する(そしてソースベースのビルドを使用する)か、あるいは失敗します(バイナリーパッケージをインストールするを参照してください).

クライアントでは、バイナリパッケージが使用されるようにするために、いくつかの設定の変更が必要です.

バイナリーパッケージをインストールする
に渡せる、Portageにバイナリパッケージの使用について通知するオプションがいくつかあります:

バイナリパッケージによるインストールを自動的に利用するために、適切なオプションを EMERGE_DEFAULT_OPTS 変数に追加することができます:

EMERGE_DEFAULT_OPTS 変数を という値を用いて更新しなくても、 と同様のことを自動的に実行するPortageの機能があります:

バイナリパッケージの OpenGPG 署名を検証する
この機能は GPKG フォーマットでのみ利用可能です.

Portage will try to verify the binary package's signature whenever possible, but users must first set up trusted local keys. A GPG key management tool for portage is in the plan, but for now, users have to manage it manually.

The GPG database of portage is stored in by default.

The following script will create a local trusted master key, import key  from keys.openpgp.org, and trust it. Please modify it to a key trusted by the user.

Make sure is global readable, portage will drop root privileges when verifying binary packages.

By default, Portage will only verify GPG signatures when a signature file is found in a package, which allows the user to mix signed and unsigned GPKG binary packages from different sources, and allows to use of old XPAK format binary packages.

If the user needs to force signature verification, the  feature needs to be enabled. This feature assumes that all packages should be signed and rejects any unsigned package. Note that this feature does not support per binhost configuration.

パッケージをバイナリパッケージホストから取得する
バイナリパッケージホストを使用する場合、クライアントでは 内で変数 PORTAGE_BINHOST がセットされているか、または  内で 変数 sync-uri がセットされている必要があります. 後者のオプションのほうが PORTAGE_BINHOST を設定するよりも望ましいです. この設定がされていないと、クライアントはバイナリパッケージがどこに保管されているかわからず、Portage がそれらを取得できないという結果をもたらします.

PORTAGE_BINHOST 変数は、スペースで区切られたURIのリストを使用します. これにより、管理者は複数のバイナリパッケージサーバーを同時に使用できます. URIは、ファイルが存在するディレクトリを常に指していなければなりません.

バイナリパッケージホストごとに、名前を角かっこでくくって設定することができます. sync-uri は、ファイルが存在するディレクトリを指していなければなりません. 追加で、優先度 ( priority ) を設定することができます. パッケージが複数のバイナリパッケージリポジトリに存在する場合、 もっとも高い優先度を持つバイナリパッケージホストからパッケージが取得されます. このようにして、より優先されるバイナリパッケージホストを構成することができます.

改変したバイナリーパッケージを再インストールする
オプションをに渡すと、パッケージがインストールされた後に再ビルドされたすべてのバイナリが再インストールされます. これは、のような再ビルドツールがバイナリパッケージサーバー上で実行された場合に有用です.

関連するオプションの1つが です. これにより、emergeは与えられたタイムスタンプよりも前にビルドされたバイナリパッケージを再インストールにおいて考慮しなくなります. これは、バイナリパッケージサーバーはいちから再ビルドする必要があるが、その他の点で が使用される場合に、全てのパッケージが再インストールされるのを回避するために有用です.

追加のクライアント設定
機能に次いで、Portageは 機能にも対応します. この機能は、成功したバイナリパッケージのインストールについてのログファイルを保持するかどうかを制御します. これは PORT_LOGDIR 変数がセットされている場合のみ意味があり、またデフォルトでは有効化されています.

特定のパッケージやカテゴリのセットについてバイナリパッケージを除外するのと同様に、クライアントにおいて、特定のパッケージやカテゴリのセットについてバイナリパッケージのインストールを除外するように設定することができます.

これを実現するには、 オプションを使用します:

こうした追加の設定をemergeの実行ごとに有効にするには、ファイル内の EMERGE_DEFAULT_OPTS 変数にオプションを追加します:

バイナリーパッケージを管理する
バイナリパッケージのリストが活発に管理されていない場合、バイナリパッケージのエクスポートや配布はストレージの無駄な消費につながります.

不要なバイナリーパッケージを削除する
パッケージでは、というアプリケーションが提供されています. これにより、ダウンロードされたソースコードファイルのようなPortageに関する可変ファイルだけでなく、バイナリパッケージも管理することができます.

以下のコマンドは、該当するebuildがインストール済みebuildのリポジトリの中にないバイナリパッケージをすべて削除します:

詳細は の記事を読んでください.

もう一つの利用可能なツールは、パッケージのツールです. しかしながら、このツールはやや設定可能性において劣ります.

使用されていないバイナリパッケージ(バイナリパッケージが保管されているサーバーによって使用されているかという意味で)をクリーンアップするには:

Packages のファイルを管理する
パッケージディレクトリ内には、と呼ばれるマニフェストファイルが存在します. このファイルは、パッケージディレクトリ内のすべてのバイナリパッケージのメタデータのキャッシュとして機能します. このファイルは、Portageがバイナリパッケージをディレクトリに追加するたびに更新されます. 同様に、はバイナリパッケージを削除する際にこのファイルを更新します.

なんらかの理由でパッケージが単に削除されたりパッケージディレクトリにコピーされたりした場合、またはファイルが破損したり削除されたりした場合には、ファイルを再作成する必要があります. これにはコマンドを利用します:

他のアーキテクチャ向けにビルドする
はクロスコンパイル用のツールチェーンを簡単にビルドするツールで、これを利用することで、例えば のようなデバイス向けによりパワフルなデスクトップ PC でビルドして提供する、という風に、異なるアーキテクチャ向けのバイナリホストを構成することができます.

このパッケージのインストールガイドは ページで見つかります.

クロスコンパイラをビルドする
次のコマンドで crossdev を使用することで、希望するシステム向けのツールチェーンをビルドすることができます:

このセクションではこれ以降、ターゲットとして Raspberry Pi 4 を例に取ります:

ビルドが完了したら、素の Gentoo インストールと同じような見た目をしたツールチェーンが に作成され、そこでは通常通りに  設定を編集することができます.

基本的なセットアップ
このようなセットアップでは、 内の USE の行から  フラグを削除することが一般的に推奨されます:

プロファイル
次を実行して、デバイスで利用可能なプロファイルを一覧表示してください:

次に、最適なプロファイルを選択してください:

単一のパッケージをビルドする
デバイス上で使用するために単一のバイナリパッケージをビルドするには、次を使用してください:

world ファイルをビルドする
world ファイル内のすべてのパッケージをビルドするには、次のコマンドが必要です:

バイナリの場所
デフォルトでは、すべてのバイナリパッケージは に保存されるので、ここがバイナリパッケージホストを構成するときに選択する必要のある場所です.

パッケージディレクトリのスナップショットを作成する
多数のクライアントシステムへ向けてバイナリパッケージを配置する場合、パッケージディレクトリのスナップショットを作成する価値が出てきます. そうすると、クライアントシステムはパッケージディレクトリを直接使わず、バイナリパッケージのスナップショットを使用します.

スナップショットは、またはツールを使用して作成できます. このツールは4つの引数をとります:


 * 1) ソースディレクトリ(パッケージディレクトリへのパス)
 * 2) ターゲットディレクトリ(存在しないディレクトリである必要があります)
 * 3) URI
 * 4) バイナリパッケージサーバーディレクトリ

パッケージディレクトリのファイルはターゲットディレクトリへコピーされます. そして、ファイルが、バイナリパッケージサーバーディレクトリ(第四引数)内に、提供されたURIを用いて作成されます.

クライアントシステムは、バイナリパッケージサーバーディレクトリを指すURIを使う必要があります. そこから、に与えられたURIへとリダイレクトされます. このURIはターゲットディレクトリを参照していなければなりません.

XPAK フォーマット
Portage によって作成された XPAK フォーマットのバイナリパッケージは、 で終わるファイル名を持ちます. これらのファイルは 2 つの部分から成ります:


 * 1) システムへインストールされるファイルを含むアーカイブ
 * 2) パッケージのメタデータ、ebuild、そしてenvironmentファイルを含むアーカイブ

形式の詳細については、を参照してください.

に、およびファイルを分割、作成できるいくつかのツールがあります.

以下のコマンドは、をおよびファイルに分割します:

ファイルは、を使用して調査することができます.

内容をリストアップするには:

次のコマンドは、このパッケージについて有効化されているUSEフラグを含む、と呼ばれるファイルを抽出します:

GPKG フォーマット
Portage によって作成された GPKG フォーマットのバイナリパッケージは、 で終わるファイル名を持ちます. これらのファイルは少なくとも 4 つの部分から成ります:


 * 1) フォーマットを特定するために使用される、 空ファイル.
 * 2) パッケージメタデータ、ebuild、そして環境ファイルを含む、 アーカイブ.
 * 3) システム上にインストールされるファイルを含む、 アーカイブ.
 * 4) ファイルの破損をチェックするために使用される、すべてのファイルのチェックサムを含む、 ファイル.
 * 5) 整合性チェックと信頼管理のために使用される OpenGPG 署名を含む、複数の任意の  ファイル.

このフォーマットは、追加ツールの必要なく tar によって展開することができます.

PKGDIR の構成
現在使用されているバージョン2形式は、以下のような構成になっています:

ファイルは、最初のバイナリパッケージディレクトリ形式(バージョン1)からの主要な改善点です(また、Portageが、バイナリパッケージディレクトリがバージョン2を採用していると判断するためのトリガーでもあります). バージョン1では、すべてのバイナリパッケージは単一のディレクトリ内で提供されており、カテゴリのディレクトリにはディレクトリ内のバイナリパッケージへのシンボリックリンクのみが含まれていました.

portage-3.0.15 以降は、FEATURES=binpkg-multi-instance がデフォルトで有効化されています:

quickunpkg を用いて展開する
Zoobab氏が、ファイルを素早く展開するためのシンプルなシェルツールquickunpkgを作成しました.

External resources
quickpkg man page.