मुझे यह बताना होगा कि मुझे multilib-build.eclass
Gentoo में -स्टाइल मल्टीलीब का उपयोग करने का बहुत कम अनुभव है ।
ABI_X86
एक USE_EXPAND
चर है; सेटिंग ABI_X86="32 64"
या USE="abi_x86_32 abi_x86_64"
समकक्ष हैं। default/linux/amd64/13.0
प्रोफ़ाइल के लिए ABI_X86 की डिफ़ॉल्ट सेटिंग, इस लेखन (2013-09-09) के रूप में प्रतीत होती है ABI_X86=64
।
यह चर ईबिल्ड्स में स्पष्ट मल्टीबिल समर्थन को नियंत्रित करता है जो multilib-build.eclass
कि मूल विधि की तुलना में मल्टीबिल को करने का एक और जेंटू-जैसा तरीका है।
जेंटू में 32-बिट लाइब्रेरी स्थापित की जाने वाली मूल विधि बाइनरी स्नैपशॉट्स के माध्यम से है app-emulation/emul-linux-*
। इनमें से प्रत्येक एमुलेशन बाइनरी पैकेज में आपके लिए कुछ गेंटू देव द्वारा संकलित 32-बिट पुस्तकालयों का एक पूरा सेट है। क्योंकि हर एक पुस्तकालयों का एक बंडल स्थापित करता है जिसे एक साथ समन्वित किया जाना चाहिए, 32-बिट-केवल ईबिल्ड्स की निर्भरता को ट्रैक करना कठिन है। उदाहरण के लिए, यदि आपको media-libs/alsa-lib
32-बिट सिस्टम पर 32-बिट की आवश्यकता है, तो आप बस इंस्टॉल करते हैं media-libs/alsa-lib
, लेकिन 64-बिट मल्टीबिल सिस्टम पर, आपको app-emulation/emul-linux-soundlibs
अन्य लाइब्रेरी के बीच, 32-बिट संस्करण के साथ, उस इंस्टॉल की खोज करनी होगी media-libs/alsa-lib
। इसके अलावा, ऐसे बाइनरी पैकेज का निर्माण करने वाले जेंटू देव को प्रत्येक के मल्टीबिल और बिल्डसिस्टम क्वैस्क का पता लगाने का काम करना चाहिएस्नैपशॉट पैकेज में शामिल लाइब्रेरीज़, रखरखाव को कठिन बना रही हैं। और, सबसे महत्वपूर्ण बात यह है कि जेंटू में मल्टीलिब का उपयोग करने के लिए एकमात्र विकल्प आधिकारिक विकल्प के रूप में बाइनरी पैकेज प्रदान करना जेंटू की भावना के खिलाफ जाता है। आपको सब कुछ खुद संकलन करने का अधिकार होना चाहिए !
multilib-build.eclass
व्यक्तिगत ebuilds की मदद से इस व्यवहार से चलता रहता है दूर स्थापित दोनों 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-बिट लिबास प्रदान करें। यह वह जगह है जहाँ ABI_X86
खेलने में आता है। किसी भी multilib-build.eclass
-सक्षम पैकेज लाभ कम से कम नए प्रयोग-झंडे abi_x86_32
और abi_x86_64
और शायद abi_x86_x32
। EAPI=2
-स्टाइल USE निर्भरता का उपयोग करते हुए , पैकेज अन्य संकुल के 32-बिट संस्करणों पर निर्भर कर सकते हैं। यदि x11-libs/libX11
यह उभर कर आता है ABI_X86="32 64"
, तो इसे USE- झंडे abi_x86_32
और abi_x86_64
USE- झंडे सेट के साथ स्थापित किया जाएगा । यदि किसी विशेष चित्रमय पैकेज को 32-बिट संस्करण की आवश्यकता है libX11
, तो यह निर्दिष्ट कर सकता हैx11-libs/libX11[abi_x86_32]
इसकी निर्भरता में। इस तरह, यदि आप इस चित्रमय पैकेज को उभरने की कोशिश करते हैं और libX11
32-बिट लिबास स्थापित नहीं किए हैं, तो पोर्टेज मना कर देगा। multilib-build.eclass
यह भी सार्वभौमिक है और 32-बिट सिस्टम के साथ संगत है: 32-बिट सिस्टम पर एक ही ग्राफिकल पैकेज स्थापित करना हमेशा काम करेगा क्योंकि इसके उपयोग के libX11
बिना स्थापित किया जाना असंभव है abi_x86_32
। यह app-emulation/emul-linux-x86-xlibs
एक मल्टीबिल सिस्टम पर और सीधे x11-libs/libX11
32-बिट-केवल सिस्टम पर निर्भर होने की आवश्यकता की समस्या को हल करता है । हम मल्टीबिल सिस्टम पर क्लीनर और समझदार अंतर-पैकेज निर्भरता वाले होने का मार्ग प्रशस्त कर रहे हैं। =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-बिट पुस्तकालयों का निर्माण करके जेंटू तरीका है। यह virtual
इस तरह से श्रेणी में पैकेजों की तरह व्यवहार करता है : यह कुछ भी स्थापित नहीं करता है, बस मौजूदा फॉरवर्ड के लिए "फॉरवर्ड" निर्भरताएं हैं।
हमने देखा है कि multilib-build.eclass
मल्टीबिल सिस्टम पर क्लीनर निर्भरता का मार्ग कैसे प्रशस्त करता है। किसी भी पैकेज है जो है ABI_X86
(और कहा कि यह है के रूप में एक ही बात विकल्पों abi_x86_*
useflags) का ही एक 32-बिट संस्करण स्थापित किया गया है आपके द्वारा निर्दिष्ट USE=abi_x86_32
/ ABI_X86=32
। यह कैसे काम करता है (उच्च वैचारिक स्तर पर)? आप स्वयं ही पुनर्निर्माण को पढ़ सकते हैं। मूल रूप से, विचार अजगर या रूबी एबिल्ड्स के समान है जो कि अजगर और रूबी के कई संस्करणों के लिए खुद को स्थापित करने का विकल्प है। जब एक निर्माण विरासत में मिलता है multilib-build.eclass
, तो यह ABI_X86 पर लूप करता है और ABI_X86 में प्रत्येक प्रविष्टि के लिए अनपैकिंग, संकलन और इंस्टॉलेशन प्रक्रिया के प्रत्येक चरण को करता है। के बाद से Portage तरह ebuild सभी चरणों के माध्यम से चला जाता है 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
(नोट multilib प्रोफ़ाइल के CFLAGS_x86 envvar से आता है: Portage प्रोफाइल ज्यादातर ABI_X86 = 32 का उल्लेख के रूप में ABI = x86 और ABI_X86 = 64 के रूप में ABI = amd64))। दौरानsrc_install()
चरण, सभी अलग-अलग संकलित ABI को प्रत्येक अभिगम पर स्थापित किया जाता है ताकि जब किसी भी फ़ाइल में 32-बिट और 64-बिट दोनों संस्करण हों, तो मूल ABI जीतता है (उदाहरण के लिए, दोनों लाइब्रेरी स्थापित करने और PATH में एक निष्पादन योग्य एक 64 ही स्थापित होगा) PATH में -bit निष्पादन योग्य लेकिन दोनों 32-बिट और 64-बिट लाइब्रेरी शामिल हैं)। योग करने के लिए: जब आप सेट करते ABI_X86="32 64"
हैं make.conf
, तो कोई भी पैकेज जो समर्थन करता है multilib-build.eclass
वह लगभग दोगुना काम लेगा (मैं समय नहीं कह रहा हूं; ;-)) संकलन करने के लिए क्योंकि यह प्रत्येक एबीआई के लिए एक बार बनाया जा रहा है और 32-बिट पुस्तकालयों में परिणाम /usr/lib32
।
मुझे नहीं पता कि ABI_X86
अभी तक आधिकारिक दस्तावेज है या इसकी विस्तृत स्थिति नहीं है। का उपयोग कर Ebuilds multilib-build.eclass
अब के लिए ज्यादातर अस्थिर लग रहे हैं। ABI_X86
यदि आप अनुभव और परीक्षण शुरू करने के लिए जुड़े ब्लॉग पर दिए गए निर्देशों का पालन कर सकते हैं, यदि आप 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
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
।
app-emulation/emul-linux-x86
और अन्य अपने प्रत्यक्ष समकक्षों पर निर्भर थे । इसमें बहुत सारे की-रिकॉर्डिंग और USE ध्वज परिवर्तन हुए, लेकिन मुझे सब कुछ संकलित करने और एक साथ खुशी से चलाने के लिए मिला! :