multilib-build.eclassGentoo'da -style multilib'i kullanma konusunda çok az deneyimim olduğunu açıklamalıyım .
ABI_X86bir USE_EXPANDdeğişkendir; ayarı ABI_X86="32 64"veya USE="abi_x86_32 abi_x86_64"eşdeğerdir. ABI_X86’nın varsayılan ayarı, bu yazı itibariyle (2013-09-09), default/linux/amd64/13.0profil için aynı görünüyor ABI_X86=64.
Bu değişken multilib-build.eclass, orijinal yöntemden çok multilib yapmanın daha Gentoo benzeri bir yolu olan ebuild'lerde açık multilib desteğini kontrol eder .
Gentoo'da 32 bit kitaplıkların kurulacağı orijinal yöntem, adlandırılmış ikili anlık görüntüler aracılığıyladır app-emulation/emul-linux-*. Bu emülasyon ikili paketlerinin her biri, sizin için bir Gentoo dev tarafından derlenen bir dizi 32-bit kitaplık içerir. Her biri birlikte koordine edilmesi gereken bir kütüphaneler paketi kurduğundan, yalnızca 32 bit ebuild'lerin bağımlılıklarını izlemek daha zordur. Örneğin, media-libs/alsa-lib32 bit bir sistemde 32 bit gerekiyorsa , sadece yükleyin media-libs/alsa-lib, ancak 64 bit multilib bir sistemde, app-emulation/emul-linux-soundlibsdiğer kütüphanelerin yanı sıra 32 bitlik sürümün de yüklendiğini keşfetmeniz gerekir media-libs/alsa-lib. Ayrıca, Gentoo dev bu tür bir ikili paketi inşa etmek için her birinin multilib ve yapı sistemi tuhaflıklarını bulma işini yapmalıdır.Anlık görüntü paketindeki kitaplıklardan biri, bakımı zorlaştırır. Ve en önemlisi, Gentoo'da multilib kullanmak için tek seçenek resmi seçenek olarak ikili paketler sağlamak Gentoo'nun ruhuna aykırı. Her şeyi kendiniz derleme hakkınız olmalı !
multilib-build.eclassBireysel ebuild'leri yardım ederek bu davranıştan uzak hamle yüklemek hem 32 bit ve 64 bit sürümleri. Bu, örneğin, winepaketleri çekmeye ihtiyaç duymak yerine, yalnızca ihtiyaç duyduğu paketlere doğrudan bağımlılıklar belirtmeye ihtiyaç duymasına izin vermelidir app-emulation/emul-linux-*. Ssuominen'in bahsettiğiniz forum başlığında belirtildiği gibi :
= app-emulation / emul-linux-x86-xlibs-20130224-r1 olan ve dosyalar doğrudan boş olan x11-libs /
(O -r1zamandan beri yeniden adlandırıldığına dikkat edin -r2) Sonunda, app-emulation/emul-linux-x86-xlibsyalnızca 32-bit-paketler uygun şekilde doğrudan doğru şekilde doğru paketlere bağlı olarak bırakılabilmelidir, x11-libsbunun da multilib-build.eclassyardımı ile gerekli 32-bit kütüphaneleri sağlar. Burası ABI_X86devreye giriyor. Herhangi multilib-build.eclassetkinleştirilmiş paket en azından yeni KULLANIMI-bayraklarını kazanır abi_x86_32ve abi_x86_64muhtemelen ve abi_x86_x32. EAPI=2Stil USE bağımlılıklarını kullanarak , paketler diğer paketlerin 32 bit sürümlerine bağlı olabilir. Eğer x11-libs/libX11ortaya çıkarsa , ABI_X86="32 64"USE bayrakları abi_x86_32ve abi_x86_64USE bayrakları belirlenir. Belirli bir grafik paketin 32 bit sürümüne ihtiyacı libX11varsa, belirtebilirx11-libs/libX11[abi_x86_32]bağımlılıklarında. Bu şekilde, bu grafik paketini ortaya çıkarmaya çalışırsanız ve libX1132 bit lib'ler yüklememişseniz, portage reddedecektir. multilib-build.eclassAyrıca evrenseldir ve 32-bit sistemlerde uyumludur: o yüklemek mümkün değildir, çünkü bir 32 bit sistemde aynı grafik paketini yükleyerek her zaman çalışır libX11onun olmadan abi_x86_32useflag olmak seti. Bu, app-emulation/emul-linux-x86-xlibsmultilib bir sisteme ve doğrudan x11-libs/libX11sadece 32-bit bir sisteme ne zaman bağlı olacağınız sorununu çözer . Multilib sistemlerde daha temiz ve mantıklı bir paketler arası bağımlılığa sahip olmanın yolunu açıyoruz. =app-emulation/emul-linux-x86-xlibs-20130224-r2Bağımlı olarak kullanılan eski paketlerin app-emulation/emul-linux-x86-xlibs, örneğin doğrudan çalışmaya nasıl dayanacağını bilmeyen bir aracı olarak var x11-libs/libX11[abi_x86_32].=app-emulation/emul-linux-x86-xlibs-20130224-r2aynı 32-bit kütüphanelerin kurulmuşmuş /usr/lib32gibi olduğundan emin olur =app-emulation/emul-linux-x86-xlibs-20130224, ancak bu 32-bit kütüphaneleri bir ikili paket sağlamak yerine bağımlılıkları üzerinden oluşturarak Gentoo yöntemini yapar. Bu virtualkategorideki paketlere çok benzer şekilde davranır : hiçbir şey yüklemez, mevcut ebuild'ler için sadece "ileri" bağımlılıklar kurar.
multilib-build.eclassMultilib sistemlerdeki daha temiz bağımlılıkların nasıl önünü açtığını gördük. ABI_X86Seçenekleri olan herhangi bir paket (bunun abi_x86_*useflags olduğunu söylemekle aynı şey ), USE=abi_x86_32/ belirtmişseniz, kendisinin 32 bit sürümünü yüklemiş ABI_X86=32. Bu nasıl çalışır (üst düzeyde kavramsal düzeyde)? Ebuild'in kendisini okuyabilirsiniz. Temel olarak, fikir aynı anda birçok python ve ruby sürümü için kendilerini yükleme seçeneğine sahip python veya ruby ebuildds ile aynıdır. Bir multilib-build.eclassebuild devraldığında , ABI_X86 üzerinde dolaşır ve ABI_X86'daki her giriş için açma, derleme ve yükleme işleminin her adımını gerçekleştirir. Portage Ebuild gibi fazların her geçtiğinden src_unpack(), src_compile()ve src_install()sırayla (ve diğerleri) ve yalnızca bir kez,multilib-build.eclass(şu anda, kullanımı ile multibuild.eclass) kullanır ABI_X86 her farklı değeri için bir dizin oluşturur. Bu dizinlerin her birine kaynakların bir kopyasını açacaktır. Oradan, bu dizinlerin her biri, her biri belirli bir ABI'yı hedef aldığı için ayrılmaya başlar. Dizin ABI_X86=32olacak ./configure --libdir=/usr/lib32BAYRAKLARI 32-bit hedeflemesi ile çalıştırın (örn CFLAGS=-m32: Portage profilleri çoğunlukla ABI_X86 = 32 başvurmak gibi ABİ = x86 ve ABI_X86 ABI = amd64'tür olarak = 64) (not multilib profilin CFLAGS_x86 envvar gelir). Esnasındasrc_install()Bu aşamada, tüm farklı derlenmiş ABI'lerin hepsi birbirinin üzerine kurulur, böylece herhangi bir dosya hem 32-bit hem de 64-bit sürümlere sahip olduğunda, yerel ABI kazanır (örneğin, hem kütüphaneleri hem de PATH'de çalıştırılabilir bir ebuild, yalnızca 64 -bit PATH içine çalıştırılabilir ancak hem 32 bit hem de 64 bit kütüphaneleri içerir). Özetle: Eğer ayarladığınızda ABI_X86="32 64"içinde make.conf, hangi destekleri herhangi bir paket multilib-build.eclassher ABI için bir kez inşa edilmiş ve sonuçlar, 32-bit kütüphanelerde de ediliyor olarak derlemek (Zamanım demiyorum ;-)) kabaca işin iki katını alacak /usr/lib32.
ABI_X86Henüz resmi bir belge olup olmadığını veya ayrıntılı durumunu bilmiyorum . Ebuild'ler multilib-build.eclassşu an için çoğunlukla kararsız görünüyor. Yeni stil multilib ile ABI_X86arasındaki farkı app-emulation/emul-linux-x86-xlibs-20130224anlarsanız, deneyimlemeye ve test etmeye başlamak için bağlantılı blogdaki talimatları uygulayabilirsiniz app-emulation/emul-linux-x86-xlibs-20130224-r2. Ancak, eski stil ikili paketinde sorun yaşarsanız, bunun app-emulation/emul-linux-x86-xlibs-20130224işlevsel kalması gerektiğini düşünüyorum . Yalnızca geçmek gerekir -r2herhangi bir paket kullanıyorsanız doğrudan başka paketin bağlıdır abi_x86_32useflag (örneğin, app-emulation/emul-linux-x86-xlibs-20130224ve x1-libs/libX11[abi_x86_32]muhtemelen ikisi aynı kütüphane kurmak çünkü arada bulunamaz /usr/lib32yani /usr/lib32/libX11.so.6). bir hızlıbak wine-1.7.0.ebuildbana ihtiyaç duymadığını gösteriyor -r2.
app-emulation/emul-linux-x86diğerleri ise doğrudan meslektaşlarına bağlıydı . Keywording ve USE flag değişikliklerinin çoğunu aldı, fakat birlikte derleyip çalıştırmak için herşeyi yaptım! :-D