সহজেই ডিইবি আনপ্যাক করুন, পোস্টইনস্ট সম্পাদনা করুন এবং ডিইবি পুনরায় জমা দিন


129

আমি ইন্টেলের ওপেনসিএল এসডিকে ইনস্টল করার চেষ্টা করছি তবে ডিইবি ফাইলগুলি আরপিএম থেকে বগি রূপান্তর (কৌতূহলের জন্য এখানে দেখুন )। আমাকে postinstতারা সরবরাহ করে এমন DEB তে স্ক্রিপ্টটি সম্পাদনা করতে হবে ।

আমি কীভাবে একটি বিদ্যমান ডিইবি নিতে পারি, বিষয়বস্তুগুলি (নিয়ন্ত্রণ তথ্য সহ) এক্সট্র্যাক্ট করতে পারি, তারপরে একটি নতুন ডিইবি তৈরির জন্য সামগ্রীগুলি পুনরায় প্যাকেজ করতে পারি? আমি কেবল ফাইলগুলি সম্পাদনা করব, কোনও ফাইল যুক্ত বা সরানো হবে না।

উত্তর:


202

ডিবে প্যাকেজগুলি পরিচালনা করার জন্য প্রাথমিক কমান্ডটি dpkg-deb

প্যাকেজটি আনপ্যাক করার জন্য, একটি খালি ডিরেক্টরি তৈরি করুন এবং এতে স্যুইচ করুন, তারপরে dpkg-debএটির নিয়ন্ত্রণ তথ্য এবং প্যাকেজ ফাইলগুলি বের করার জন্য চালান । dpkg-deb -bপ্যাকেজটি পুনর্নির্মাণ করতে ব্যবহার করুন ।

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

সাবধানতা অবলম্বন করুন যে আপনার স্ক্রিপ্টটি রুট হিসাবে চালিত না হওয়া পর্যন্ত ফাইলগুলির অনুমতি এবং মালিকানা নিষ্কাশন পর্যায়ে দূষিত হবে। এটি এড়ানোর একটি উপায় হ'ল আপনার স্ক্রিপ্টটি এর অধীনে চালানো fakeroot। নোট করুন যে আপনার সম্পূর্ণ ক্রমটি fakerootপ্রতিটি dpkg-debস্বতন্ত্রভাবে নয়, চালানো দরকার , কারণ এটি এমন fakerootপ্রক্রিয়া যা ফাইলগুলি যেভাবে তৈরি করা যায় না তার অনুমতিগুলির স্মৃতি রেখে দেয়।

fakeroot sh -c '
  mkdir tmp
  dpkg-deb -R original.deb tmp
  # edit DEBIAN/postinst
  dpkg-deb -b tmp fixed.deb
'

অনুমতিগুলি নিয়ে গোলযোগের পরিবর্তে, আপনি ডেটা সংরক্ষণাগারটি অক্ষত রাখতে পারেন এবং কেবল নিয়ন্ত্রণ সংরক্ষণাগারকেই সংশোধন করতে পারেন। dpkg-debএটি করার কোনও উপায় সরবরাহ করে না। ভাগ্যক্রমে, দেব প্যাকেজগুলি একটি স্ট্যান্ডার্ড ফর্ম্যাটে রয়েছে: সেগুলি arসংরক্ষণাগার। সুতরাং আপনি arনিয়ন্ত্রণ সংরক্ষণাগারটি নিষ্কাশন করতে, এর ফাইলগুলি সংশোধন arকরতে এবং নিয়ন্ত্রণ সংরক্ষণাগারটিকে নতুন সংস্করণে প্রতিস্থাপন করতে আবার ব্যবহার করতে পারেন।

mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz

আপনার যদি প্যাকেজে কোনও কিছু পরিবর্তন করে তবে আপনার চেঞ্জলগ এন্ট্রি যুক্ত করা উচিত এবং সংস্করণ নম্বরটি পরিবর্তন করা উচিত । দেবিয়ান প্যাকেজগুলি পরিচালনা করার জন্য অবকাঠামো ধরে নেয় যে দুটি প্যাকেজের যদি একই নাম এবং সংস্করণ থাকে তবে তারা একই প্যাকেজ। সংস্করণ নম্বর শেষে ডেবিয়ান_রিভিশন অংশে একটি প্রত্যয় যুক্ত করুন ; কারণ প্রত্যয় সঙ্গে শুরু করা উচিত বাছাইয়ের জন্য ~, যেমন 1.2.3-4.1হয়ে 1.2.3-4.1~johnjumper1

শেল সরঞ্জাম ব্যবহারের পরিবর্তে, আপনি ইমাস ব্যবহার করতে পারেন। dpkg-dev-elপ্যাকেজ (যা তার নিজস্ব মূল প্রজেক্টের এই একটি নেটিভ ডেবিয়ান প্যাকেজ হিসাবে) মোড সম্পাদনা করতে রয়েছে .debফাইল এবং ডেবিয়ান changelogs সম্পাদনা করতে। ইম্যাকস ইন্টারেক্টিভ বা স্ক্রিপ্টযুক্ত ব্যবহার করা যেতে পারে।


4
এছাড়াও আপনি ব্যবহার করতে পারেন -eএর সুইচ FPM নিয়ন্ত্রণ ফাইল পরিবর্তন করতে: fpm -e -s deb -t deb ../old.deb। এটি আপনার সম্পাদকটিতে নিয়ন্ত্রণ ফাইলটি খুলবে।
আর্টেফ্যাক্টো

1
বিটিডব্লিউ, fakeroot bashএবং আদেশগুলি দেওয়ার চেষ্টা করুন মালিকানা সম্পর্কে কাজ করবে না, এবং arপদ্ধতি বড় অলঙ্কৃত ফাইলের জন্য অবিশ্বাস্যভাবে দ্রুত!
কুম্ভ শক্তি পাওয়ার

1
ধন্যবাদ। এটি দরকারী ছিল। dpkg-deb -Rমোডগুলি ব্যবহার করে রাখা হয়েছিল এবং এক্সট্রাক্ট করা ফাইলগুলিতে dpkg-deb -bপুনরায় সেট করুন । ফেকারুট দরকার পড়েনি (আমার মনে হয় আর্কাইভের ভিতরে {u, g} id ফাইল স্থাপন করা থাকলে সমস্যা হতে পারে তবে আমার পরিস্থিতি তেমন ছিল নাuid:gid0:0
PSkocik

2
@ পিএসসিওকিক কেবল সেটেক্সিড ফাইল নয়, উদাহরণস্বরূপ ফাইল এবং ডিরেক্টরিগুলি নির্দিষ্ট গ্রুপের অন্তর্গত /etcবা এটির /varপ্রয়োজন।
গিলস

8

স্ক্রিপ্টটি প্রতিস্থাপনের জন্য বিকল্পের সাথে আপনি এফএম ব্যবহার করতে পারেন :--after-installpostinst

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb

2
ডেবিয়ান / উবুন্টুতে এফএমপি ইনস্টল করতে: রুবি-ডেভ বিল্ড-আবশ্যক ইনস্টল করুন; sudo রত্ন এফএম এ ইনস্টল করুন
ক্রেগ এস অ্যান্ডারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.