GentooでABI_X86を使用する


24

Gentooシステムを更新してから数ヶ月が経ちました。そして、ご想像のとおり、これは多くのパッケージ(およびUSEの変更)があることを意味します。私のシステムは「amd64」(multilib)ですが、「〜amd64」から手動でキーワード設定されたパッケージがたくさんあります。

とにかく、このアップデートでは、「ABI_X86」USEフラグが表示され続けます。これは何ですか?これは、新しい。「eselectニュースリスト」には何もありません。

:私はこのトピック見つけhttp://forums.gentoo.org/viewtopic-t-953900-start-0.htmlを。それはそれを使用する方法を示しているように見えましたが、これに関する「本物の」ドキュメントはありますか?それは何をするためのものか?何を私は想定さにセット「ABI_X86」に?multilibシステムがあります。「64」が必要だと思いますが、「32」と「x32」とは何ですか?ここで何をする必要があるのか​​混乱しています。

Emergeはスロットの競合について多くのことを叫んでおり、それらは "ABI_X86"に関連しているようです(エラーは正確に忘れていますが、1つはzlibだったことを覚えています)。

だから、それが何でABI_X86あり、どのように使用するかについての「公式」ドキュメントはありますか?

私はリンクされたスレッドから、私はこのページが見つかりました:http://kicherer.org/joomla/index.php/en/blog/liste/29-transition-of-emul-packages-to-true-multilibを、私はしたいですキーワードに行く前に何をしているのかを知るために、たくさんのものを編集して自分のmake.conf

PS「package.keywords」ファイルには、ほとんどの「app-emulation / emul-linux-x86」パッケージ(当時必要だったと思われるパッケージ)があります。

回答:


32

multilib-build.eclassGentooで-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-lib32ビットシステムで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_32abi_x86_64、おそらくabi_x86_x32EAPI=2-style USE依存関係使用すると、パッケージは他のパッケージの32ビットバージョンに依存できます。x11-libs/libX11がwhile ABI_X86="32 64"に出現した場合、USE-flags abi_x86_32およびabi_x86_64USE-flagsが設定された状態でインストールされます。特定のグラフィカルパッケージに32ビットバージョンのが必要な場合、libX11指定できますx11-libs/libX11[abi_x86_32]その依存関係。この方法で、このグラフィカルパッケージをemergeしようとしてlibX1132ビットライブラリをインストールしていない場合、portageは拒否します。multilib-build.eclassまた、ユニバーサルであり、32ビットシステムと互換性があります。この同じグラフィカルパッケージを32ビットシステムにインストールlibX11すると、abi_x86_32useflagが設定されていないとインストールできないため、常に動作します。これapp-emulation/emul-linux-x86-xlibsにより、multilibシステムの場合とx11-libs/libX1132ビットのみのシステムの場合に直接依存する必要があるという問題が解決されます。multilibシステム上でよりクリーンで賢明なパッケージ間依存関係を持つ道を開いています。は、たとえばに直接依存する方法がわからない=app-emulation/emul-linux-x86-xlibs-20130224-r2app-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.eclassmultilibシステムへのよりクリーンな依存関係への道を開く方法を見てきました。/ を指定した場合、ABI_X86オプションがあるパッケージ(abi_x86_*useflagsがあるということと同じもの)はそれ自体の32ビットバージョンをインストールします。これはどのように機能しますか(高い概念レベルで)?ebuild自体を読むことができます。基本的に、このアイデアは、複数のバージョンのpythonとrubyを同時にインストールするオプションがあるpythonまたはruby ebuildと同じです。ebuildがを継承すると、ABI_X86をループし、ABI_X86の各エントリに対して展開、コンパイル、インストールの各ステップを実行します。Portageはebuildのような位相の全てを通過するので、と順番に(他)と一度だけ、USE=abi_x86_32ABI_X86=32multilib-build.eclasssrc_unpack()src_compile()src_install()multilib-build.eclass(現在、の助けを借りてmultibuild.eclass)は、ABI_X86の異なる値ごとにディレクトリを作成します。これらの各ディレクトリにソースのコピーを展開します。そこから、これらの各ディレクトリは、それぞれが特定のABIをターゲットにすると分岐し始めます。ディレクトリABI_X86=32きます./configure --libdir=/usr/lib32FLAGSは、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-20130224app-emulation/emul-linux-x86-xlibs-20130224-r2app-emulation/emul-linux-x86-xlibs-20130224-r2abi_x86_32app-emulation/emul-linux-x86-xlibs-20130224x1-libs/libX11[abi_x86_32]/usr/lib32/usr/lib32/libX11.so.6を見wine-1.7.0.ebuildて、それは必要ないことを私に示唆している-r2


2
これは3か月後ですが、このすばらしい答えに感謝します。「amd64」パッケージと「〜amd64」パッケージを混在させるapp-emulation/emul-linux-x86と、一部のパッケージが依存し、他のパッケージが直接のパッケージに依存することになります。多くのキーワードとUSEフラグの変更が必要でしたが、一緒にコンパイルして実行するためのすべてを手に入れました!:-D
ロケット危険物

2

abi_x86_x32(abi_x86_32とは異なります)使用フラグもあります。これは実験的なもので、セミ64ビットアプリケーションの構築を目的としています。唯一の違いは、4バイトのポインターがあることです。これにより、メモリ使用量が4GiBに制限され、ほとんどの場合オーバーヘッドが削減されますが、すべての64ビット命令を使用できます。


これを探しました。x32フラグに関するドキュメントへのリンクはありますか?
ikrabbe

0

現在、状況は本当に地獄です。問題は、多くのパッケージが「ハーフマスク」のようなものであるようです...正確な用語はわかりませんが、一部のパッケージには「〜amd64」と「abi_x86_32」使用フラグ、「amd64」のキーワードが付けられているようですその結果、更新中に「abi_x86_32」が有効になりますが、emergeは各パッケージごとに「〜amd64」を追加しない限り、ABI_X86 = "(64)(-32)"でパッケージをインストールします。そして、emergeが直接emergeではなく依存関係としてプルされる場合、その変更をautounmask-writeすることはできません。emergeは、必要な「abi_x86_32」使用フラグでそのパッケージの依存関係を満たすことができないことを示します。そのため、「〜amd64」を使用してpackage.keywordsに各パッケージを1つずつ追加する必要があります。それは多くの手作業です... そして、どのパッケージバージョンに対してそれを行うべきですか?私が実際に欲しいもの、つまり「その使用フラグなしで「amd64」とマークされているバージョンの場合」を伝えることができません。私が現在見ている特定の最新バージョンを入れて将来の更新を複雑にするか、すべてのバージョンを入れてから64ビットでも安定とマークされていないバージョンをインストールすることができます...


2
あなたの答えは、書き直しや考え直しの恩恵を受けるかもしれないと思います。現状では、既に投稿された回答には何も追加されません。
サミレイン14年

「私はどちらか私が今見る特定の最新バージョンを入れて、したがって、その将来のアップデートを複雑に、またはすべてのバージョンに入れ、その後、おそらくは64ビット用の安定をマークされていないバージョンをインストールすることができます..」、あなただけ置く場合についてmy-category/packagepackage.keywords、Portageの意志をを受け入れると自動的に解釈~amd64します(を想定ARCH=amd64)。のようなことを言う場合にのみ、記述した動作(フラグなしのバージョンの一致)を取得します。~amd64my-category/package **
ビンキ

サミ、これはスタック交換ポリシーだけが意味をなすのであれば、答えではなくコメントだっただろう。(
率直に

binki、再読...すべての〜amd64バージョンは必要ありません。「abi_x86_32」使用フラグがない場合、「amd64」(安定)になるバージョンが必要です。
user73010 14年

-1

間接的に関連する情報:今日現在、systemd上の完全なKDEデスクトップシステムは、純粋なmultilib方式でコンパイルできます(エミュレーションパッケージなし)。唯一の問題は現在、プロプライエタリなnvidia-driversパッケージですが、これは今のところオープンソースのもので解決することができます。

開始点(そこに含まれる他のリンク):https : //forums.gentoo.org/viewtopic-t-985380-highlight-.html

Gentoo Multilibの移植ステータスhttps://wiki.gentoo.org/wiki/Multilib_porting_status


これは単なるコメントであり、回答はありません。
ジョナススタイン

ジョナス、答えには問題ありませんが、あなたがそれを手に入れた場合の質問:-)、それは非常に一般的であり、答えのコンテンツサイズを説明する純粋なものは単にここに置くという観点からではないので、勉強...あなたは同意しますか?だから私はここでこの種の質問をするのにふさわしくない場所だと言っているが、gentooフォーラムに行く。
ケンサイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.