GentooでABI_X86を使用する

GentooでABI_X86を使用する

私は数ヶ月間Gentooシステムを更新していません。そして想像できるように、これは多くのパッケージ(およびUSEの変更)をチェックする必要があることを意味します。私のシステムは「amd64」(multilib)ですが、「~amd64」の手動キーワードパッケージがたくさんあります。

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

私が見つけたトピックは次のとおりです。http://forums.gentoo.org/viewtopic-t-953900-start-0.html。これはそれを使用する方法を示すようです。しかし、「本当の」文書はありますか?それは何をしますか?私は何ですかしなければならない「ABI_X86」を?に設定してください。複数のストレージシステムがあります。私は「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"パッケージ(当時必要と思われるパッケージ)を持っています。

ベストアンサー1

私はGentooで-style multilibを使った経験がほとんどないことを明らかにする必要がありますmultilib-build.eclass

ABI_X86USE_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

この変数は、multilib-build.eclass元のアプローチよりGentooに似たmultilibアプローチを使用して、ebuildで明示的なmultilibサポートを制御します。

Gentooに32ビットライブラリをインストールする元の方法はapp-emulation/emul-linux-*。これらのシミュレートされたバイナリパッケージのそれぞれには、いくつかのGentoo開発者があなたのためにコンパイルした完全な32ビットライブラリセットが含まれています。 32ビット専用ebuildの依存関係を追跡することは、各ebuildが一緒に調整する必要があるライブラリのセットをインストールするため、より困難です。たとえば、media-libs/alsa-lib32ビットシステムに32ビットバージョンが必要な場合は、media-libs/alsa-lib簡単にインストールできます。さらに、これらのバイナリパッケージを構築するGentoo開発者は、次の問題を解決する必要があります。multilibとビルドシステムの欠点を特定するapp-emulation/emul-linux-soundlibsmedia-libs/alsa-libスナップショットパッケージに含まれるライブラリの数により、メンテナンスがより困難になります。そして最も重要なのは、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後で名前が変更されました。)必要な32ビットライブラリを提供することによって、32ビットパッケージのみが正しいパッケージに直接依存するため、-r2最終的にapp-emulation/emul-linux-x86-xlibsそれ自体を削除する必要があります。これが働くところです。アクティブなすべてのパッケージは、少なくとも新しいUSEフラグと。x11-libsmultilib-build.eclassABI_X86multilib-build.eclassabi_x86_32abi_x86_64abi_x86_x32EAPI=2-スタイルUSE依存性、パッケージは他のパッケージの32ビットバージョンに依存する可能性があります。x11-libs/libX11存在する場合は、USE-flagsおよびUSE-flags設定をABI_X86="32 64"使用してインストールする必要があります。特定のグラフィックパッケージに32ビットバージョンが必要な場合は、依存関係でそれを指定できます。これにより、このグラフィックパッケージを新しくしようとしますが、32ビットライブラリがインストールされていない場合はPortageが拒否されます。また、汎用的で32ビットシステムと互換性があります。 32ビットシステムに同じグラフィックパッケージをインストールすると、useフラグを設定しないとインストールできないため、常に機能します。これはマルチストレージシステムへの依存関係を必要としますが、32ビット専用システムへの直接的な依存関係を必要とする問題を解決します。私たちは、マルチリポジトリシステムでより明確で論理的なパッケージ間の依存関係を持つことができる方法を磨いています。abi_x86_32abi_x86_64libX11x11-libs/libX11[abi_x86_32]libX11multilib-build.eclasslibX11abi_x86_32app-emulation/emul-linux-x86-xlibsx11-libs/libX11=app-emulation/emul-linux-x86-xlibs-20130224-r2仲介者として存在するので、以前は依存していたが直接依存する方法がわからない以前のapp-emulation/emul-linux-x86-xlibsパッケージ(たとえば)がまだ機能するようにします。同じ32ビットライブラリがインストールされているかのように存在することを確認してください。ただし、バイナリパッケージを提供するのではなく、Gentoo方式で依存関係を介してライブラリを構築します。x11-libs/libX11[abi_x86_32]=app-emulation/emul-linux-x86-xlibs-20130224-r2/usr/lib32=app-emulation/emul-linux-x86-xlibs-20130224これはこのカテゴリのパッケージと非常によく似ていますvirtual。何もインストールせずに既存のebuildの依存関係を「転送」するだけです。

multilib-build.eclass私たちは、マルチライブラリシステムへのより明確な依存関係のための道を磨く方法を見ました。 /を指定すると、ABI_X86オプション(abi_x86_*useflagsがあるのと同じ)を持つすべてのパッケージに独自の32ビットバージョンがインストールされます。これはどのように機能しますか(高い概念レベルで)? ebuild自体を読むことができます。デフォルトでは、アイデアは複数のバージョンのPythonとRubyを同時にインストールするオプションを持つPythonまたはRuby ebuildと同じです。 ebuild が継承されたら、ABI_X86 を繰り返して、ABI_X86 の各エントリに対して解凍、コンパイル、インストールプロセスの各ステップを実行します。 Portageは、、(他の中で)などのすべてのebuildステップを順番に実行し、一度だけ実行するため、を使用してABI_X86のそれぞれ異なる値に対してディレクトリが作成されます(現在の助けを借りて)。各ディレクトリにソースコードのコピーが抽出されます。ここでは、各ディレクトリは特定のABIをターゲットにしているため、各ディレクトリが分かれ始めます。このディレクトリは32ビットのFLAGSを使用して実行されます(例:multilibプロファイルのCFLAGS_x86環境変数他のすべてのビルドABIがインストールされているため、ファイルに32ビットバージョンと64ビットバージョンの両方がある場合、デフォルトのABIが勝ちます(たとえば、PATHにライブラリと実行可能ファイルの両方をインストールするebuildは64ビットのみをインストールします)。 PATHに移動しますが、32ビットライブラリと64ビットライブラリの両方を含みます。USE=abi_x86_32ABI_X86=32multilib-build.eclasssrc_unpack()src_compile()src_install()multilib-build.eclassmultibuild.eclassABI_X86=32./configure --libdir=/usr/lib32CFLAGS=-m32src_install()ABI_X86="32 64"要約すると、これを設定するときにmake.confサポートされているすべてのパッケージはmultilib-build.eclass各ABIに対して一度ビルドされ、32ビットライブラリを作成するため、コンパイルには約2倍の作業(時間を意味しません;-)が必要です/usr/lib32

ABI_X86公式文書や詳細な状態があるかどうかはわかりません。現在使用中のEbuildはmultilib-build.eclassほとんど不安定なようです。 multilibとnew multilibの違いを理解したら、ABI_X86リンクされたブログのガイドに従って体験とテストを始めることができます。app-emulation/emul-linux-x86-xlibs-20130224app-emulation/emul-linux-x86-xlibs-20130224-r2しかし、従来のバイナリパッケージに満足している場合は、引き続き機能する必要app-emulation/emul-linux-x86-xlibs-20130224があると思います。-r2パッケージを使用している場合は、次に進んでください。abi_x86_32他のパッケージのuseflagに直接依存(たとえば、および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

おすすめ記事