multilib-build.eclass
Gentoo'da -style multilib'i kullanma konusunda çok az deneyimim olduğunu açıklamalıyım .
ABI_X86
bir USE_EXPAND
değ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.0
profil 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-lib
32 bit bir sistemde 32 bit gerekiyorsa , sadece yükleyin media-libs/alsa-lib
, ancak 64 bit multilib bir sistemde, app-emulation/emul-linux-soundlibs
diğ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.eclass
Bireysel ebuild'leri yardım ederek bu davranıştan uzak hamle yüklemek hem 32 bit ve 64 bit sürümleri. Bu, örneğin, wine
paketleri ç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 -r1
zamandan beri yeniden adlandırıldığına dikkat edin -r2
) Sonunda, app-emulation/emul-linux-x86-xlibs
yalnızca 32-bit-paketler uygun şekilde doğrudan doğru şekilde doğru paketlere bağlı olarak bırakılabilmelidir, x11-libs
bunun da multilib-build.eclass
yardımı ile gerekli 32-bit kütüphaneleri sağlar. Burası ABI_X86
devreye giriyor. Herhangi multilib-build.eclass
etkinleştirilmiş paket en azından yeni KULLANIMI-bayraklarını kazanır abi_x86_32
ve abi_x86_64
muhtemelen ve abi_x86_x32
. EAPI=2
Stil USE bağımlılıklarını kullanarak , paketler diğer paketlerin 32 bit sürümlerine bağlı olabilir. Eğer x11-libs/libX11
ortaya çıkarsa , ABI_X86="32 64"
USE bayrakları abi_x86_32
ve abi_x86_64
USE bayrakları belirlenir. Belirli bir grafik paketin 32 bit sürümüne ihtiyacı libX11
varsa, belirtebilirx11-libs/libX11[abi_x86_32]
bağımlılıklarında. Bu şekilde, bu grafik paketini ortaya çıkarmaya çalışırsanız ve libX11
32 bit lib'ler yüklememişseniz, portage reddedecektir. multilib-build.eclass
Ayrı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 libX11
onun olmadan abi_x86_32
useflag olmak seti. Bu, app-emulation/emul-linux-x86-xlibs
multilib bir sisteme ve doğrudan x11-libs/libX11
sadece 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-r2
Bağı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-r2
aynı 32-bit kütüphanelerin kurulmuşmuş /usr/lib32
gibi 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 virtual
kategorideki 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.eclass
Multilib sistemlerdeki daha temiz bağımlılıkların nasıl önünü açtığını gördük. ABI_X86
Seç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.eclass
ebuild 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=32
olacak ./configure --libdir=/usr/lib32
BAYRAKLARI 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.eclass
her 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_X86
Henü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_X86
arasındaki farkı app-emulation/emul-linux-x86-xlibs-20130224
anlarsanı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-20130224
işlevsel kalması gerektiğini düşünüyorum . Yalnızca geçmek gerekir -r2
herhangi bir paket kullanıyorsanız doğrudan başka paketin bağlıdır abi_x86_32
useflag (örneğin, app-emulation/emul-linux-x86-xlibs-20130224
ve x1-libs/libX11[abi_x86_32]
muhtemelen ikisi aynı kütüphane kurmak çünkü arada bulunamaz /usr/lib32
yani /usr/lib32/libX11.so.6
). bir hızlıbak wine-1.7.0.ebuild
bana ihtiyaç duymadığını gösteriyor -r2
.
app-emulation/emul-linux-x86
diğ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