কীভাবে এবং কেন -dbg, -dev, -doc প্যাকেজ তৈরি করবেন?


15

আমি একটি প্যাকেজটির জন্য একটি উবুন্টু প্যাকেজ লিখছি যা মূলত বেশ কয়েকটি গ্রন্থাগার এবং শিরোনাম সরবরাহ করে যা পরে অন্য সফ্টওয়্যার তৈরিতে ব্যবহৃত হয়। প্যাকেজটি ছোট ছোট সাব-প্যাকেজেও বিভক্ত হয় যা পরস্পর নির্ভরশীল; এই অর্থে প্যাকেজটি উত্সাহ দেওয়ার মতো একই রকম।

আমি লক্ষ্য করেছি যে বুস্টের মতো প্যাকেজ সরবরাহ করে

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

তবে নাম boostবা কিছু যা যায় না libboost

  • এর পিছনে কী ধারণা?
  • উদ্দেশ্যে কি কি -dbg, -devএবং -docপ্যাকেজ?
  • এই প্যাকেজগুলির জন্য বিল্ড ফাইলগুলি কীভাবে লিখতে হয় সে সম্পর্কে কোনও নির্দেশনা রয়েছে?

উত্তর:


13

আইডিয়া এবং উদ্দেশ্য

এই বিভিন্ন প্যাকেজগুলি পৃথক করার মূল কারণটি ডিস্কের স্থান এবং ডাউনলোডের গতির সাথে সম্পর্কিত। বিশেষত, এটি আয়না স্পেসের জন্য একটি বড় উদ্বেগ কারণ এর অর্থ ডেটার একাধিক অনুলিপি বিতরণ করা। করা হলে foo-common, foo-dataঅথবা foo-docপ্যাকেজ Architecture: all, আমরা কেবল এক পরিবর্তে সংরক্ষণাগারে তথ্য কপি প্রতিটি আর্কিটেকচারের সঙ্গে কপি থাকার রাখা (যেমন মধ্যে i386, AMD64, ect, ...)। ডিবাগিং প্রতীকগুলি বেশিরভাগ ব্যবহারকারীর দ্বারা প্রয়োজন হয় না এবং প্যাকেজ ডাউনলোড করতে আরও বেশি সময় নেয় making

সরকারী উবুন্টু সংরক্ষণাগারগুলিতে -dbgপ্যাকেজগুলির জন্য, ম্যানুয়ালি প্যাকেজগুলি তৈরি করার কোনও কারণ নেই । বিল্ড মেশিনগুলি ডিবাগিং প্রতীকগুলি স্বয়ংক্রিয়ভাবে বের করে দেয় এবং সেগুলি -dbgsymddebs.ubuntu.com এ হোস্ট করা প্যাকেজগুলিতে রাখে। (দেখুন: ডিবাগ সিম্বল প্যাকেজগুলি ) -dbgযে প্যাকেজগুলির অস্তিত্ব রয়েছে তা সাধারণত দেবিয়ান থেকে নেওয়া হয়।

নির্দেশনা

বাস্তবায়ন হিসাবে, এই প্রশ্নটি একবার দেখুন:

সংক্ষেপে, debian/controlপ্রতিটি প্যাকেজের জন্য নতুন স্টাঞ্জ তৈরি করা দরকার । তারপরে debian/foo-*.installফাইলগুলিও তৈরি করা দরকার। এটি dh_installসঠিক প্যাকেজগুলিতে সঠিক বিষয়বস্তু রাখার অনুমতি দেবে ।

foo.installপ্রধান বাইনারি প্যাকেজ অনুরূপ হতে পারে জন্য:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, অথবা যাই হোক না কেন:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

এবং এর জন্য foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

foo-dbgপ্যাকেজ তৈরির জন্য debian/rulesসাধারণত সম্পাদনা করা দরকার dh_stripডিবাগিং প্রতীকগুলি ছড়িয়ে দেবে। সুতরাং আমাদের সেই আচরণটি ওভাররাইড করা দরকার:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

বুস্ট একটি জটিল উদাহরণ, প্রথমে একটি সহজ সরল তাকান।

সুনির্দিষ্টভাবে, ওপেনসেল উত্স প্যাকেজটি 5 বাইনারি প্যাকেজ সরবরাহ করে:

  • libssl1.0.0ওপেনএসএসএল ডায়নামিক লাইব্রেরি, সংস্করণ 1.0.0 রয়েছে। এই লাইব্রেরির সাথে লিঙ্কযুক্ত প্রোগ্রামগুলি চালানো দরকার। প্যাকেজের নামটিতে একটি সংস্করণ নম্বর রয়েছে কারণ আপনার একই সাথে লাইব্রেরির অন্যান্য সংস্করণ ইনস্টল থাকতে পারে, যদি আপনার অন্যান্য সংস্করণের সাথে লিঙ্ক করা অন্যান্য প্রোগ্রাম থাকে যা 1.0.0 এর সাথে বাইনারি-সামঞ্জস্যপূর্ণ নয়।
  • opensslকমান্ড লাইন সরঞ্জাম রয়েছে যা ওপেনএসএসএল লাইব্রেরি ব্যবহার করে। আপনার কাছে লাইব্রেরির একাধিক সংস্করণ থাকলেও, আপনার এই সরঞ্জামগুলির একাধিক সংস্করণ প্রয়োজন নেই: কেবলমাত্র একটি /usr/bin/opensslএবং সম্পর্কিত সরঞ্জাম, ডেটা এবং ডকুমেন্টেশন রয়েছে।
  • libssl-devযদি আপনি এমন কোনও প্রোগ্রাম সংকলন করতে চান যেগুলি ওপেনএসএসএল-এর সাথে লিঙ্ক করে তবে আপনার প্রয়োজনীয় ফাইলগুলি রয়েছে। সি হেডার ফাইলগুলি ( *.h), লিঙ্ক করার জন্য লাইব্রেরি ( *.a, *.so) এবং কয়েকটি সংযুক্ত ফাইল রয়েছে।
  • libssl-docওপেনএসএসএল লাইব্রেরির জন্য ডকুমেন্টেশন রয়েছে। আপনি কেবলমাত্র এই প্যাকেজটির প্রয়োজন যদি আপনি লাইব্রেরি ব্যবহার করে এমন প্রোগ্রাম লিখতে চলেছেন।
  • libssl1.0.0-dbgডিবাগিং প্রতীক রয়েছে। এটি কেবলমাত্র ওপেনএসএসএল লাইব্রেরি বা এটি ব্যবহার করে এমন প্রোগ্রামগুলিকে ডিবাগ করার জন্যই দরকারী। অ্যান্ড্রুসোমথিংয়ের উত্তরে এই -dbgপ্যাকেজগুলিতে আরও তথ্য রয়েছে ।

এছাড়াও, সুনির্দিষ্টভাবে গ্রন্থাগারের একটি পুরানো সংস্করণ রয়েছে libssl0.9.8, কারণ এমন প্রোগ্রাম রয়েছে যা এখনও পুরানো সংস্করণের সাথে যুক্ত রয়েছে।

আপনি দেখতে পাচ্ছেন যে অন্যান্য প্যাকেজগুলি হ'ল সি ব্যতীত অন্য ভাষার জন্য বাইন্ডিংগুলি রয়েছে ওপেনএসএসএল কোনওর সাথে শিপ করে না (অন্যান্য ভাষার জন্য ওপেনএসএসএল-এর বাইন্ডিং রয়েছে, তবে সেগুলি একই উত্স থেকে আসে না)। একটি উদাহরণ স্ক্লাইট 3 , যা টিসিএল বাইন্ডিং সহ জাহাজগুলি ।

এটির মতো প্যাকেজগুলি বিভক্ত করার মূল কারণ হ'ল বিভিন্ন প্যাকেজের আলাদা লক্ষ্যবস্তু শ্রোতা রয়েছে। এমন একটি সিস্টেম যেখানে কেউ কখনও কোনও কিছু সংকলন করে না কেবল কেবল মূল libপ্যাকেজটির প্রয়োজন হয় এবং সম্ভবত কমান্ড লাইন সরঞ্জামগুলি; প্রয়োজনে এগুলি নির্ভরতা থেকে স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে যাবে। যদি কেউ লাইব্রেরি ব্যবহার করে এমন একটি প্রোগ্রাম সংকলন করতে চায় তবে তাদের -devপ্যাকেজটি দরকার । যদি কেউ লাইব্রেরি ব্যবহার করে এমন কোনও প্রোগ্রাম লিখতে চান তবে তাদের -docপ্যাকেজটি দরকার ।

তাহলে বুস্টের কী হবে? এটি একই কাঠামোটি অনুসরণ করে, তবে বুস্ট একটি বিশাল গ্রন্থাগার হওয়ায় এটি অনেকগুলি ছোট প্যাকেজগুলিতে বিভক্ত হয়েছে: libboost-*1.46.1এবং libboost-*1.46-dev। সুনির্দিষ্টভাবে, বুস্টের কেবলমাত্র একটি সংস্করণ রয়েছে, 1.46 , তবে একেরিকের 1.42 এবং 1.46 উভয়ই রয়েছে । একটি মেটাপ্যাকেজ বুস্ট-ডিফল্টও রয়েছে যা নির্ভরযোগ্যতা হিসাবে সংস্করণযুক্ত প্যাকেজে টান দেয়।

গতিশীল লাইব্রেরি প্যাকেজ এবং বিকাশ প্যাকেজ ছাড়াও লাইভাঙ্গুলের দিকে তাকিয়ে একটি প্যাকেজ রয়েছে । এই প্যাকেজটিতে লাইব্রেরির জন্য প্রয়োজনীয় অতিরিক্ত ডেটা রয়েছে। আপনার কাছে লাইব্রেরির একাধিক সংস্করণ থাকলেও তারা প্যাকেজটি ভাগ করতে পারে । এছাড়াও, প্যাকেজটি আর্কিটেকচার-স্বতন্ত্র। যে সফ্টওয়্যারটিতে প্রচুর পরিমাণে আর্কিটেকচার-স্বতন্ত্র ডেটা রয়েছে তা বিতরণ সাইটগুলিতে স্থান বাঁচাতে আর্কিটেকচার-নির্ভর এবং আর্কিটেকচার-স্বতন্ত্র প্যাকেজগুলিতে বিভক্ত হয়। অনুরূপ অর্থ সহ আরও একটি প্রত্যয় ।libhangul1libhangul-devlibhangul-data-data-common

উবুন্টু এবং ডেবিয়ান প্যাকেজিংয়ের নিয়মগুলি একইরকম, সুতরাং দেবিয়ান প্যাকেজ তৈরির উপাদানগুলিও উবুন্টুর ক্ষেত্রে প্রযোজ্য। আসলে, আপনি ডিবিয়ান এবং উবুন্টুর জন্য একই উত্স প্যাকেজ রাখতে পারেন; একমাত্র জিনিস যা দেবিয়ান এবং উবুন্টু প্যাকেজগুলিকে আলাদা করে তোলে তা তাদের বিভিন্ন লাইব্রেরির সংস্করণের বিপরীতে সংকলন করে, এবং এটি উবুন্টুর বিভিন্ন প্রকাশের মধ্যে পার্থক্য ছাড়া আর কিছু নয়। আছে ডেবিয়ান ডেভেলপার ডকুমেন্টেশন হাতে, বিশেষ করে ডেবিয়ান নীতি ম্যানুয়াল এবং উন্নয়নকারীর রেফারেন্স ; দেখতে নিউ রক্ষণাবেক্ষণকারী নির্দেশিকা একটি ভূমিকা জন্য। দেবিয়ান প্রকল্পের সাথে কাজ করার অংশগুলি উপেক্ষা করুন এবং আরও, কেবল প্যাকেজ তৈরির অংশগুলি পড়ুন।dh_make একটি ডেব প্যাকেজ দিয়ে শুরু করার একটি ভাল উপায় (আপনি "লাইব্রেরি" নির্বাচন করতে চান)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.