multilib-build.eclass
Gentooで-style multilib を使用した経験がほとんどないことを開示する必要があります。
ABI_X86
あるUSE_EXPAND
変数は、設定ABI_X86="32 64"
またはUSE="abi_x86_32 abi_x86_64"
同等です。この記事の執筆時点(2013-09-09)でのdefault/linux/amd64/13.0
プロファイルのABI_X86のデフォルト設定は、ちょうどのようですABI_X86=64
。
この変数は、ebuildでの明示的なmultilibサポートを制御します。multilib-build.eclass
これは、元の方法よりもGentooに似たmultilibの実行方法です。
Gentooに32ビットライブラリをインストールする元の方法は、という名前のバイナリスナップショットを使用することapp-emulation/emul-linux-*
です。これらのエミュレーションバイナリパッケージにはそれぞれ、Gentoo開発者がコンパイルした32ビットライブラリのセットがすべて含まれています。それぞれが一緒に調整する必要があるライブラリのバンドルをインストールするため、32ビットのみのebuildの依存関係を追跡するのはより困難です。たとえば、media-libs/alsa-lib
32ビットシステムで32 ビットが必要な場合、インストールするだけですmedia-libs/alsa-lib
が、64ビットmultilibシステムでapp-emulation/emul-linux-soundlibs
は、他のライブラリの中でも32ビットバージョンのをインストールすることを発見する必要がありmedia-libs/alsa-lib
ます。また、そのようなバイナリパッケージを1つ作成するGentoo開発者は、それぞれの multilibとbuildsystemの癖を把握する作業を行う必要があります。スナップショットパッケージに含まれるライブラリのことで、メンテナンスが難しくなります。そして、最も重要なのは、Gentooでmultilibを使用するための唯一の公式オプションとしてバイナリパッケージを提供することは、Gentooの精神に反することです。すべてを自分でコンパイルする権利が必要です!
multilib-build.eclass
個々のebuildを助けることによって、この挙動から離れるインストール両方、32ビットおよび64ビットバージョン。これにより、たとえば、wine
パッケージをプルするのではなく、必要なパッケージに対して直接依存関係を指定するだけで済みapp-emulation/emul-linux-*
ます。ssuominenがあなたが参照したフォーラムスレッドで言及しているように:
= app-emulation / emul-linux-x86-xlibs-20130224-r1これは空のパッケージであり、ファイルはx11-libs /から直接取得されるため、ファイルはありません
(注-r1
以降に変更された-r2
)最終的に、app-emulation/emul-linux-x86-xlibs
それ自体が32ビットのみパッケージが適切で正しいパッケージに直接依存するようにドロップすることができなければならないx11-libs
と、そのmultilib-build.eclass
必要な32ビットLIBSを提供する、の助け。これは、ABI_X86
遊びに出てくるところです。どれmultilib-build.eclass
少なくとも-enabledパッケージの向上、新たなUSEフラグabi_x86_32
とabi_x86_64
、おそらくabi_x86_x32
。EAPI=2
-style USE依存関係を使用すると、パッケージは他のパッケージの32ビットバージョンに依存できます。x11-libs/libX11
がwhile ABI_X86="32 64"
に出現した場合、USE-flags abi_x86_32
およびabi_x86_64
USE-flagsが設定された状態でインストールされます。特定のグラフィカルパッケージに32ビットバージョンのが必要な場合、libX11
指定できますx11-libs/libX11[abi_x86_32]
その依存関係。この方法で、このグラフィカルパッケージをemergeしようとしてlibX11
32ビットライブラリをインストールしていない場合、portageは拒否します。multilib-build.eclass
また、ユニバーサルであり、32ビットシステムと互換性があります。この同じグラフィカルパッケージを32ビットシステムにインストールlibX11
すると、abi_x86_32
useflagが設定されていないとインストールできないため、常に動作します。これapp-emulation/emul-linux-x86-xlibs
により、multilibシステムの場合とx11-libs/libX11
32ビットのみのシステムの場合に直接依存する必要があるという問題が解決されます。multilibシステム上でよりクリーンで賢明なパッケージ間依存関係を持つ道を開いています。は、たとえばに直接依存する方法がわからない=app-emulation/emul-linux-x86-xlibs-20130224-r2
、app-emulation/emul-linux-x86-xlibs
以前は依存していた古いパッケージを動作させるための仲介者として存在しますx11-libs/libX11[abi_x86_32]
。=app-emulation/emul-linux-x86-xlibs-20130224-r2
同じ32ビットライブラリがインストールされている/usr/lib32
かのように存在することを確認しますが=app-emulation/emul-linux-x86-xlibs-20130224
、バイナリパッケージを提供するのではなく、依存関係を介してこれらの32ビットライブラリを構築することでGentooの方法を実行します。virtual
この方法では、このカテゴリのパッケージのように動作します。何もインストールせず、既存のebuildの依存関係を「転送」するだけです。
multilib-build.eclass
multilibシステムへのよりクリーンな依存関係への道を開く方法を見てきました。/ を指定した場合、ABI_X86
オプションがあるパッケージ(abi_x86_*
useflagsがあるということと同じもの)はそれ自体の32ビットバージョンをインストールします。これはどのように機能しますか(高い概念レベルで)?ebuild自体を読むことができます。基本的に、このアイデアは、複数のバージョンのpythonとrubyを同時にインストールするオプションがあるpythonまたはruby ebuildと同じです。ebuildがを継承すると、ABI_X86をループし、ABI_X86の各エントリに対して展開、コンパイル、インストールの各ステップを実行します。Portageはebuildのような位相の全てを通過するので、と順番に(他)と一度だけ、USE=abi_x86_32
ABI_X86=32
multilib-build.eclass
src_unpack()
src_compile()
src_install()
multilib-build.eclass
(現在、の助けを借りてmultibuild.eclass
)は、ABI_X86の異なる値ごとにディレクトリを作成します。これらの各ディレクトリにソースのコピーを展開します。そこから、これらの各ディレクトリは、それぞれが特定のABIをターゲットにすると分岐し始めます。ディレクトリABI_X86=32
きます./configure --libdir=/usr/lib32
FLAGSは、32ビットをターゲットにして実行します(たとえば、CFLAGS=-m32
:portageのプロファイルはほとんどABI_X86 = 32を参照してくださいとしてABI = x86とABI_X86 ABI = AMD64など= 64)(注multilibのプロファイルのCFLAGS_x86のENVVARから来ています)。間にsrc_install()
フェーズでは、すべての異なるコンパイル済みABIが相互にインストールされるため、ファイルに32ビットバージョンと64ビットバージョンの両方がある場合、ネイティブABIが勝ちます(たとえば、PATHにライブラリと実行可能ファイルの両方をインストールするebuildは64 -32ビットと64ビットの両方のライブラリを含むPATHに実行可能ファイル。まとめると、を設定ABI_X86="32 64"
するとmake.conf
、サポートmultilib-build.eclass
するパッケージは、ABIごとに1回ビルドされるため、コンパイルにおよそ2倍の作業量がかかります(時間とは言いません;-))/usr/lib32
。
ABI_X86
まだ公式のドキュメントがあるのか、詳細なステータスがあるのかわかりません。現在使用してmultilib-build.eclass
いるEbuild はほとんど不安定なようです。新しいスタイルのmultilibとのABI_X86
違いを理解していれば、リンクしているブログの指示に従って、体験とテストを開始できます。しかし、古いスタイルのバイナリパッケージに問題がなければ、機能を維持する必要があると思います。あなただけに移動する必要があるでしょうあなたはどのパッケージを使用する場合、直接他のパッケージの依存するuseflag(たとえば、と彼らはおそらく両方に同じライブラリをインストールするために共存することはできませんつまり、)。速いですapp-emulation/emul-linux-x86-xlibs-20130224
app-emulation/emul-linux-x86-xlibs-20130224-r2
app-emulation/emul-linux-x86-xlibs-20130224
-r2
abi_x86_32
app-emulation/emul-linux-x86-xlibs-20130224
x1-libs/libX11[abi_x86_32]
/usr/lib32
/usr/lib32/libX11.so.6
を見wine-1.7.0.ebuild
て、それは必要ないことを私に示唆している-r2
。
app-emulation/emul-linux-x86
と、一部のパッケージが依存し、他のパッケージが直接のパッケージに依存することになります。多くのキーワードとUSEフラグの変更が必要でしたが、一緒にコンパイルして実行するためのすべてを手に入れました!:-D