আমার অবশ্যই প্রকাশ করতে হবে যে multilib-build.eclassজেন্টুতে স্টাইল মাল্টিলেব ব্যবহার করার আমার খুব কম অভিজ্ঞতা আছে ।
ABI_X86একটি USE_EXPANDপরিবর্তনশীল; সেট ABI_X86="32 64"বা USE="abi_x86_32 abi_x86_64"সমতুল্য। এই লেখার (2013-09-09) হিসাবে ABI_X86 এর ডিফল্ট সেটিংটি default/linux/amd64/13.0প্রোফাইলটির জন্য উপযুক্ত বলে মনে হচ্ছে ABI_X86=64।
এই পরিবর্তনশীলটি ebuilds এ সুস্পষ্ট মাল্টিলিব সমর্থনকে নিয়ন্ত্রণ করে যা ব্যবহার করে 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-*। ফোরাম থ্রেডে সুসুমিন উল্লেখ হিসাবে আপনি উল্লেখ করেছেন :
= অ্যাপ-এমুলেশন / এমুল-লিনাক্স-x86-xlibs-20130224-r1 যা খালি প্যাকেজ যা ফাইল নেই কারণ ফাইলগুলি এখন সরাসরি এক্স 11-libs / থেকে আসে
(নোট -r1যেটির পরে নামকরণ করা হয়েছে -r2) অবশেষে, app-emulation/emul-linux-x86-xlibsনিজেই 32-বিট-প্যাকেজ হিসাবে যথাযথভাবে সরাসরি প্যাকেজের উপর নির্ভর করে যথাযথভাবে তার সঠিক প্যাকেজের উপর নির্ভর করে x11-libs, যার multilib-build.eclassসাহায্যে প্রয়োজনীয় 32-বিট libs সরবরাহ করা উচিত। এখানেই ABI_X86খেলতে আসে। কোন multilib-build.eclass-enabled প্যাকেজ লাভ অন্তত নতুন ব্যবহার-ফ্ল্যাগ abi_x86_32এবং abi_x86_64এবং সম্ভবত abi_x86_x32। EAPI=2স্টাইলের ইউএসই নির্ভরতা ব্যবহার করে প্যাকেজগুলি অন্যান্য প্যাকেজের 32-বিট সংস্করণের উপর নির্ভর করতে পারে। যদি উপস্থিত x11-libs/libX11হয় ABI_X86="32 64"তবে এটি ইউএসই-পতাকা abi_x86_32এবং abi_x86_64ইউএসই-পতাকা সেট সহ ইনস্টল করা হবে । যদি কোনও নির্দিষ্ট গ্রাফিকাল প্যাকেজটির 32-বিট সংস্করণের প্রয়োজন হয় তবে libX11এটি নির্দিষ্ট করতে পারেx11-libs/libX11[abi_x86_32]এর নির্ভরতা। এইভাবে, আপনি যদি এই গ্রাফিকাল প্যাকেজটি উত্থাপন করার চেষ্টা করেন এবং libX1132-বিট libs ইনস্টল না করেন তবে পোর্টেজ অস্বীকার করবে। 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বিভাগে প্যাকেজগুলির মতো এই জাতীয় আচরণ করে : এটি কোনও কিছু ইনস্টল করে না, বিদ্যমান ebuilds এর জন্য কেবল "ফরওয়ার্ড" নির্ভরতা।
আমরা দেখেছি কীভাবে multilib-build.eclassমাল্টিলিব সিস্টেমগুলিতে ক্লিনার নির্ভরতার জন্য পথ প্রশস্ত করে। যে প্যাকেজগুলির ABI_X86বিকল্প রয়েছে (এটি abi_x86_*ইউজফ্লেগ রয়েছে বলে একই জিনিস ) আপনি যদি USE=abi_x86_32/ নির্দিষ্ট করে থাকেন তবে নিজের একটি 32-বিট সংস্করণ ইনস্টল করে রেখেছেন ABI_X86=32। এটি কীভাবে কাজ করে (একটি উচ্চ ধারণাগত স্তরে)? আপনি নিজেই উত্সাহ পড়তে পারেন। মূলত, ধারণাটি পাইথন বা রুবি ইবিল্ডগুলির সমান, যা পাইথন এবং রুবিয়ের একাধিক সংস্করণে একসাথে ইনস্টল করার বিকল্প রয়েছে। যখন কোনও ইইবিল্ড উত্তরাধিকার সূত্রে প্রাপ্ত হয় multilib-build.eclass, এটি এবিআই_এক্স lo over এর উপরে লুপ করে এবং এবিআই_এক্স ৮ in-এ প্রতিটি প্রবেশের জন্য আনপ্যাকিং, সংকলন এবং ইনস্টলেশন প্রক্রিয়াটির প্রতিটি পদক্ষেপ করে। যেহেতু Portage মত ebuild পর্যায়ের সব মাধ্যমে যায় src_unpack(), src_compile()এবং src_install()এবং যাতে (এবং অন্যদের) শুধুমাত্র একবারmultilib-build.eclass(বর্তমানে, সহায়তার সাহায্যে multibuild.eclass) ব্যবহারগুলি এবিআই_এক্স 86 এর প্রতিটি পৃথক মানের জন্য একটি ডিরেক্টরি তৈরি করে। এটি প্রতিটি ডিরেক্টরিতে উত্সের একটি অনুলিপি আনবে। সেখান থেকে, এই ডিরেক্টরিগুলির প্রত্যেকটি একটি নির্দিষ্ট এবিআইকে লক্ষ্য হিসাবে চিহ্নিত করা শুরু করে di জন্য ডিরেক্টরি ABI_X86=32হবে ./configure --libdir=/usr/lib32পতাকার লক্ষ্য করে 32 বিট দিয়ে চালানো (যেমন, CFLAGS=-m32(নোট multilib প্রোফাইলের CFLAGS_x86 envvar থেকে আসে: Portage প্রোফাইলের বেশিরভাগই ABI_X86 = 32 পড়ুন যেমন ABI- র = x86 ও ABI_X86 = 64 যেমন ABI- র = AMD64))। সময়src_install()পর্যায়ক্রমে, বিভিন্ন সংকলিত এবিআই এর প্রত্যেকটি ইনস্টল করা হয়েছে যাতে কোনও ফাইলের 32-বিট এবং 64-বিট সংস্করণ উভয়ই থাকে, নেটিভ এবিআই জিততে পারে (যেমন, উভয় গ্রন্থাগার ইনস্টল করা এবং প্যাথএইচটিতে এক্সিকিউটেবল কেবল একটি 64 ইনস্টল করতে পারে - PATH- এ এক্সিকিউটেবল তবে 32-বিট এবং 64-বিট উভয় লাইব্রেরি অন্তর্ভুক্ত করুন)। সংক্ষিপ্তসার হিসাবে: আপনি যখন সেট আপ ABI_X86="32 64"করেন make.conf, যে কোনও প্যাকেজ সমর্থন করে multilib-build.eclassতা প্রতিটি এবিআইয়ের জন্য একবার তৈরি করা হয় এবং এর ফলে 32-বিট লাইব্রেরিতে ফলাফল সংকলন করতে কাজের পরিমাণের দ্বিগুণ (আমি সময় বলছি না ;-)) will /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।
app-emulation/emul-linux-x86লোকের উপর নির্ভরশীল এবং অন্যরা তাদের সরাসরি অংশগুলির উপর নির্ভর করে । এটি প্রচুর কী-রেকর্ডিং এবং ইউএসই ফ্ল্যাগের পরিবর্তনগুলি নিয়েছিল তবে আমি একসাথে সংকলন করতে এবং আনন্দের সাথে চালানোর জন্য সবকিছু পেয়েছি! :-D