মানক প্যাকেজের নিজস্ব সংস্করণটি কীভাবে ব্যবহার করবেন


10

নটিলাসের সাথে আমি একটি সমস্যার মুখোমুখি হয়েছি যার জন্য উত্স কোডটি ডাউনলোড করা, কিছু পরিবর্তন করা এবং এটি নিজেই সংকলন করা ছাড়া আমি আর কোনও সমাধান পাইনি। সুতরাং এখন আমার কাছে নটিলাসের দুটি সংস্করণ রয়েছে, কয়েকটি পরিবর্তন সহ আমার থেকে সংগ্রহস্থলগুলির সরকারী সংস্করণ এবং। আমি উভয় রাখতে চাই।

অ্যাপ্লিকেশনগুলিকে অ্যাপ্লিকেশনটির মধ্যে থেকে নটিলাস শুরু করার সময় নটিলাসের নিজস্ব সংকলিত সংস্করণটি ব্যবহার করার জন্য অ্যাপ্লিকেশনগুলিকে বলার ভাল উপায় কী হবে? (যেমন ফায়ারফক্স দিয়ে ডাউনলোড ফোল্ডারটি খোলার)

আমি ফায়ারফক্স কলগুলি খুঁজে /usr/bin/nautilusপেয়েছি যাতে আমি এটি কেবল নিজের প্রোগ্রামে একটি সিমলিংক দিয়ে প্রতিস্থাপন করতে পারি। তবে আমি বিশ্বাস করি যে নটিলাসের জন্য একটি আপডেট ইনস্টল করার সাথে সাথে এই সিমিলিংকটি ওভাররাইট করা হবে। আমি কি আর কিছু করতে পারি?

debian  apt 

1
আপনার সংস্করণটি /usr/local/binকাজ করে না? যেমন ফায়ারফক্স আপনার অনুসন্ধান করেছে $PATHএবং সংস্করণটি খুঁজে পেয়েছে /usr/bin, বা এটি (বা আপনার এক্সডিজি-ওপেন স্টাফ) হার্ড-কোডে রয়েছে /usr/bin/nautilus? স্থানীয়ভাবে / usr / স্থানীয় কিছুতে নিজের সংস্করণ ইনস্টল করা কাজ করে।
পিটার কর্ডেস

আমি এখনই এটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি। ফায়ারফক্স অভ্যন্তরীণভাবে কী করে তা আমি জানি না, তবে /usr/bin/nautilusমনে হয় এটি কোনওভাবে হার্ড-কোডড od যদি ডাউনলোড সরিয়ে ফোল্ডারটি খোলার চেষ্টা করি তবে ফায়ারফক্সটি যদি আর কিছু না করে তবে নটিলাস-এর নিজস্ব সংস্করণে একটি সিমিলিংক রয়েছে /usr/local/bin। আমার $PATHপরিবর্তনশীলটি হল/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

আপনি যদি কৌতূহলী হন তবে আপনি strace -f -efile,execve -o firefox_syscalls.txt firefoxএফএফ কী করে তা দেখতে ছুটে যেতে পারেন। আপনি যদি লগের জন্য অনুসন্ধান করেন তবে এটি nautilusআপনাকে কিছু দেখাতে পারে। ( -eএটি সিস্টেম কল করার জন্য ফিল্টার করে execveএবং ওপেন / ক্লোজ / পাথনাম স্টাফ ফাইল করে, অন্যথায় এটি futexএক্স 11 এর জন্য সকেট রিড / রাইটের বন্যা হবে )।
পিটার কর্ডেস

উত্তর:


14

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

আপনার পরিস্থিতিতে সবচেয়ে সহজ পদ্ধিতি হ'ল একটি বিবর্তন যুক্ত করা:

sudo dpkg-divert --divert /usr/bin/nautilus.original --rename /usr/bin/nautilus

এই নির্দেশ দেওয়া হবে dpkgনামান্তর করতে /usr/bin/nautilusকরতে /usr/bin/nautilus.originalএকটি প্যাকেজ এটি ইনস্টল করার চেষ্টা করে যখনই। তারপরে আপনি নিজের নিজস্ব সিমলিংক যুক্ত করতে পারেন এবং নটিলাস প্যাকেজ আপগ্রেড করা হলেও এটি অচ্ছুত থাকবে। এটি অপসারণ করতে, চালান

sudo dpkg-divert --rename --remove /usr/bin/nautilus

ডাইভার্ট করার সময় সঠিকভাবে পরিচালনা করা হয় না এমন কিছু কনফিগারেশন ফাইল বাদে আপনাকে অনুরূপ ফ্যাশনে প্রতিস্থাপন করতে হবে এমন অন্য যে কোনও ফাইলের জন্য একই কৌশলটি প্রয়োগ করতে পারেন।


7

দীর্ঘমেয়াদী সমাধানটি হল নটিলাস বিকাশকারীদের সাথে যোগাযোগ করা এবং তাদের সাথে অফিসিয়াল নটিলাস কোডে একটি প্যাচে কাজ করা, যাতে নটিলাসের আপডেট হওয়া সংস্করণটি একবার আপনার সিস্টেমে আঘাত হানে, আপনাকে আর এটিকে মোকাবেলা করার দরকার পড়বে না।

ধরে নিই যে আপনি এটি করেছেন, যতক্ষণ না আপনার সিস্টেমে এই পরিবর্তনটি কমে যায়, আপনাকে এখনও নটিলাসের নিজস্ব প্যাচ সংস্করণ ব্যবহার করার ইচ্ছার বিষয়টি মোকাবেলা করতে হবে।

সবচেয়ে সহজ উপায় হ'ল ইতিমধ্যে প্রয়োগ করা আপনার প্যাচটি দিয়ে নটিলাসের একটি প্যাকেজ তৈরি করা এবং এটি এমনভাবে ইনস্টল করা যাতে এটি স্বয়ংক্রিয়ভাবে আপগ্রেড হয় না।

ডেবিয়ানে (আপনি যে প্রশ্নটি ব্যবহার করছেন এটির ট্যাগ অনুসারে) এটি সম্পাদন করার সহজতম উপায়:

apt-get install devscripts
apt-get build-dep nautilus # note, this also pulls in build-essential
apt-get source nautilus
cd nautilus-*
# apply your patch
dch -i
# Set the version number of the new changelog entry to something like x.y.z-a.local,
# where "x.y.z-a" is the version of the package as it existed prior to your patch,
# add a description of the change after the '*', then save and exit the editor
debuild -uc -us -i && sudo debi --upgrade
echo "nautilus hold" | sudo dpkg --set-selections

এটি আপনার প্যাচ সহ একটি নতুন প্যাকেজ তৈরি করে, এটি ইনস্টল করে এবং তারপরে এটি ডিপি কেজিতে চিহ্নিত করে যাতে এটি আর স্বয়ংক্রিয়ভাবে আপডেট হয় না।

পরের বার প্যাকেজের একটি আপডেট সংস্করণ প্রকাশিত হবে, অ্যাপ্ট আপনাকে আপডেট সংস্করণ উপস্থিত রয়েছে তা অবহিত করবে, তবে তা পিছনে রাখা হচ্ছে। তারপরে আপনাকে আবার উপরেরটি করতে হবে।


apt-mark hold packagenameপ্যাকেজ ধারণ করার আধুনিক উপায়। (এমনকি আমি তাদের নিজের dpkg-hold/ dpkg-unholdস্ক্রিপ্টগুলি বছরের পর বছর ধরে ব্যবহার করা পদ্ধতির পরিবর্তে dlocateব্যবহারে তৈরি করেছি pt স্ক্রিপ্টগুলি এপ-চিহ্নের কারণে অচল, তবে আমার কাছে এখনও অন্য স্ক্রিপ্ট রয়েছে যা তাদের কল করে এবং তাদের অপসারণের ফলে অন্যান্য ব্যবহারকারীদের দ্বারা লিখিত স্ক্রিপ্টগুলি ভেঙে যেতে পারে) dlocate প্যাকেজ)apt-markdpkg --set-selections
সি এ এস

অধিষ্ঠিত বিভাগটি man apt-markবলে The command is only a wrapper around dpkg --set-selections and the state is therefore maintained by dpkg(1) and not affected by the --file option, সুতরাং আমি মনে করি এটি একটি গৌণ বিষয় ;-)
ওয়াউটার ভারহেলস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.