আমার অবশ্যই প্রকাশ করতে হবে যে 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-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-*
। ফোরাম থ্রেডে সুসুমিন উল্লেখ হিসাবে আপনি উল্লেখ করেছেন :
= অ্যাপ-এমুলেশন / এমুল-লিনাক্স-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]
এর নির্ভরতা। এইভাবে, আপনি যদি এই গ্রাফিকাল প্যাকেজটি উত্থাপন করার চেষ্টা করেন এবং libX11
32-বিট libs ইনস্টল না করেন তবে পোর্টেজ অস্বীকার করবে। 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
বিভাগে প্যাকেজগুলির মতো এই জাতীয় আচরণ করে : এটি কোনও কিছু ইনস্টল করে না, বিদ্যমান 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_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
লোকের উপর নির্ভরশীল এবং অন্যরা তাদের সরাসরি অংশগুলির উপর নির্ভর করে । এটি প্রচুর কী-রেকর্ডিং এবং ইউএসই ফ্ল্যাগের পরিবর্তনগুলি নিয়েছিল তবে আমি একসাথে সংকলন করতে এবং আনন্দের সাথে চালানোর জন্য সবকিছু পেয়েছি! :-D