Gentoo में ABI_X86 का उपयोग करना


24

मुझे Gentoo सिस्टम को अपडेट किए हुए कई महीने हो चुके हैं। और, जैसा कि आप कल्पना कर सकते हैं, इसका मतलब है कि बहुत सारे पैकेज हैं (और USE परिवर्तन) मुझे ऊपर जाने की आवश्यकता है। मेरा सिस्टम "amd64" (मल्टीबिल) है, लेकिन मेरे पास "~ amd64" से बहुत सारे मैन्युअल रूप से खोजशब्द पैकेज हैं।

वैसे भी, इस अपडेट में, मुझे "ABI_X86" USE झंडे दिखाई देते हैं। यह क्या है? यह नया है। इसके बारे में "eselect news list" में कुछ भी नहीं है।

मुझे यह विषय मिला: http://forums.gentoo.org/viewtopic-t-953900-start-0.html । यह दिखाने के लिए लग रहा था कि इसका उपयोग कैसे किया जाए, लेकिन, क्या इसके लिए कोई "वास्तविक" डॉक्स हैं? यह क्या करता है? क्या मैं "ABI_X86" सेट करने वाला हूँ ? मेरे पास मल्टीबिल सिस्टम है। मुझे लगता है कि मुझे "64" चाहिए, लेकिन फिर "32" और "x32" क्या हैं? मैं यहाँ क्या करने की आवश्यकता पर उलझन में हूँ।

उभरने वाले स्लॉट संघर्षों के बारे में बहुत चिल्ला रहे हैं, और वे "ABI_X86" से संबंधित प्रतीत होते हैं (मैं त्रुटियों को बिल्कुल भूल जाता हूं, लेकिन मुझे याद है कि एक 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" फ़ाइल में "ऐप-एमुलेशन / एमुल-लिनक्स-एक्स 86" पैकेज (जो मुझे उस समय की आवश्यकता थी) पैकेजों में से अधिकांश हैं।

जवाबों:


32

मुझे यह बताना होगा कि मुझे multilib-build.eclassGentoo में -स्टाइल मल्टीलीब का उपयोग करने का बहुत कम अनुभव है ।

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-lib32-बिट सिस्टम पर 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_x32EAPI=2-स्टाइल USE निर्भरता का उपयोग करते हुए , पैकेज अन्य संकुल के 32-बिट संस्करणों पर निर्भर कर सकते हैं। यदि x11-libs/libX11यह उभर कर आता है ABI_X86="32 64", तो इसे USE- झंडे abi_x86_32और abi_x86_64USE- झंडे सेट के साथ स्थापित किया जाएगा । यदि किसी विशेष चित्रमय पैकेज को 32-बिट संस्करण की आवश्यकता है libX11, तो यह निर्दिष्ट कर सकता हैx11-libs/libX11[abi_x86_32]इसकी निर्भरता में। इस तरह, यदि आप इस चित्रमय पैकेज को उभरने की कोशिश करते हैं और libX1132-बिट लिबास स्थापित नहीं किए हैं, तो पोर्टेज मना कर देगा। multilib-build.eclassयह भी सार्वभौमिक है और 32-बिट सिस्टम के साथ संगत है: 32-बिट सिस्टम पर एक ही ग्राफिकल पैकेज स्थापित करना हमेशा काम करेगा क्योंकि इसके उपयोग के libX11बिना स्थापित किया जाना असंभव है abi_x86_32। यह app-emulation/emul-linux-x86-xlibsएक मल्टीबिल सिस्टम पर और सीधे x11-libs/libX1132-बिट-केवल सिस्टम पर निर्भर होने की आवश्यकता की समस्या को हल करता है । हम मल्टीबिल सिस्टम पर क्लीनर और समझदार अंतर-पैकेज निर्भरता वाले होने का मार्ग प्रशस्त कर रहे हैं। =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/lib32FLAGS को लक्षित 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_32useflag (उदाहरण के लिए, 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


2
मुझे पता है कि यह 3 महीने बाद है, लेकिन मैं आपको इस अद्भुत जवाब के लिए धन्यवाद देना चाहता हूं। "Amd64" और "~ amd64" पैकेज का मिश्रण होने का मतलब कुछ पर निर्भर था app-emulation/emul-linux-x86और अन्य अपने प्रत्यक्ष समकक्षों पर निर्भर थे । इसमें बहुत सारे की-रिकॉर्डिंग और USE ध्वज परिवर्तन हुए, लेकिन मुझे सब कुछ संकलित करने और एक साथ खुशी से चलाने के लिए मिला! :
रॉकेट हज़मत

2

Abi_x86_x32 भी है (यह abi_x86_32 के समान नहीं है) ध्वज का उपयोग करें। यह एक प्रयोगात्मक है और अर्ध-64 बिट अनुप्रयोगों के निर्माण का इरादा है। फर्क सिर्फ इतना है कि उनके पास 4byte पॉइंटर्स हैं। यह स्मृति उपयोग को 4GiB तक सीमित करता है और ज्यादातर मामलों में ओवरहेड को कम करता है, जबकि सभी 64 बिट निर्देशों का उपयोग करने की अनुमति देता है।


मैंने इसके लिए खोज की। क्या आपके पास x32 ध्वज के बारे में प्रलेखन में एक लिंक है?
.क्रोबे जुले

0

वर्तमान में स्थिति वास्तविक नरक है। समस्या यह है कि कई पैकेज "आधा-नकाबपोश" की तरह लगते हैं ... मुझे सटीक शब्दावली नहीं पता है, लेकिन ऐसा लगता है कि कुछ संकुल "~ amd64" "abi_x86_32" ध्वज और "dd64" का उपयोग किए बिना हैं। उस ध्वज का उपयोग करें ... परिणाम यह है कि, मेरे अद्यतन करने के दौरान, मैं "abi_x86_32" सक्षम करता हूं, लेकिन तब भी उभरता है जब तक मैं ABI_X86 = "(64) (-32)" के साथ पैकेज स्थापित करता हूं जब तक कि मैं इस तरह के प्रत्येक पैकेज में "~ amd64" नहीं जोड़ता। और अगर इसे सीधे तौर पर उभरने के बजाय एक निर्भरता के रूप में खींचा जाता है, तो उस बदलाव के लिए ऑटोनमस्क-राइट करने की कोई पेशकश नहीं है - उभरना सिर्फ आपको बताता है कि यह उस पैकेज के लिए निर्भरता को संतुष्ट नहीं कर सकता है जिसमें "abi_x86_32" उपयोग ध्वज है। इसलिए मुझे "~ amd64" के साथ प्रत्येक पैकेज को एक-एक करके संकुल। यह बहुत काम मैनुअल है ... और किस पैकेज संस्करण के लिए मुझे यह करना चाहिए? मैं यह नहीं बता सकता कि मैं वास्तव में क्या चाहता हूं, अर्थात् "संस्करणों के लिए जहां यह" amd64 "चिह्नित किया गया है उस ध्वज का उपयोग किए बिना"। मैं अपने द्वारा देखे गए विशिष्ट नवीनतम संस्करण को या तो डाल सकता हूं और इस प्रकार अपने भविष्य के अपडेट को जटिल बना सकता हूं, या सभी संस्करणों में डाल सकता हूं और फिर संभवत: ऐसे संस्करण स्थापित कर सकता हूं जो 64 बिट के लिए भी स्थिर नहीं हैं ...


2
मुझे लगता है कि आपका जवाब कुछ फिर से लिखने और / या फिर से सोचने से फायदा हो सकता है। जैसा कि यह खड़ा है, यह पहले से ही पोस्ट किए गए उत्तरों के लिए कुछ भी नहीं जोड़ता है।
सामी लाईन

के बारे में "मैं कर सकते हैं या तो अभी विशिष्ट नवीनतम संस्करण मैं देख रहा हूँ रख दिया और इस तरह अपनी भावी अपडेट को मुश्किल, या सभी संस्करणों में रखा और फिर संभवतः संस्करणों जो भी 64 बिट के लिए .. स्थिर चिह्नित नहीं कर रहे हैं स्थापित", अगर आप सिर्फ डाल my-category/packageमें package.keywords, Portage होगा स्वचालित रूप से व्याख्या करें कि किसी के रूप में स्वीकार करना ~amd64(अपना मानना ARCH=amd64)। आप केवल व्यवहार आप (मिलान संस्करणों का वर्णन मिलता है बिना एक ~amd64झंडा) यदि आप कुछ ऐसा कहना my-category/package **
बिंकी जू

सामी, यह एक टिप्पणी नहीं एक जवाब होता, यदि केवल स्टैडेक्सचेंज नीति का कोई मतलब होता। (फ्रेंकी, मुझे आश्चर्य है कि यह मुझे इस समय टिप्पणी करने देता है ...)
user73010

binki, reread ... मुझे सभी ~ amd64 संस्करण नहीं चाहिए। मैं उन संस्करणों को चाहता हूं जो "amd64" (स्थिर) होंगे यदि वे "abi_x86_32" बिना ध्वज का उपयोग करते हैं।
user73010

-1

अप्रत्यक्ष रूप से संबंधित जानकारी: आज के रूप में systemd पर पूरा केडीई डेस्कटॉप सिस्टम को शुद्ध मल्टीबिल तरीके (कोई ईएमआई पैकेज) में संकलित किया जा सकता है। एकमात्र समस्या अब मालिकाना एनवीडिया-ड्राइवर पैकेज है, लेकिन इसे अभी के लिए ओपन-सोर्स एक के साथ जाकर हल किया जा सकता है।

बिंदु कैसे शुरू करें (अन्य लिंक वहां शामिल हैं): https://forums.gentoo.org/viewtopic-t-985380-highlight-.html

Gentoo Multilib पोर्टिंग स्थिति https://wiki.gentoo.org/wiki/Multilib_porting_status


यह सिर्फ एक टिप्पणी है, कोई जवाब नहीं।
जोनास स्टीन

जोनास, जवाब के साथ इसकी समस्या नहीं है, लेकिन सवाल अगर आपको यह मिलता है :-), यह इतना सामान्य है, कि शुद्ध सभी व्याख्यात्मक उत्तर सामग्री का आकार केवल देखने के लिए यहां से नहीं है, इसलिए मैं जाने के लिए लिंक प्रदान करता हूं और अध्ययन ... क्या आप सहमत हैं? इसलिए मैं कह रहा हूं कि इस तरह के सवाल के लिए यहां पूछने के लिए यह सही जगह नहीं है, लेकिन जेंटू फोरम पर जाएं .... समझ में आता है?
केंसई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.