एक मानक पैकेज के अपने संस्करण का उपयोग कैसे करें


10

मुझे Nautilus के साथ एक समस्या का सामना करना पड़ा, जिसके लिए मुझे स्रोत कोड डाउनलोड करने, कुछ बदलाव करने और इसे अपने दम पर संकलित करने के अलावा कोई हल नहीं मिला। तो अब मेरे पास नौटिलस के दो संस्करण हैं, रिपॉजिटरी से आधिकारिक संस्करण और कुछ बदलावों के साथ मेरा। मैं दोनों को रखना चाहूंगा।

एप्लिकेशन के भीतर से Nautilus शुरू करते समय Nautilus के अपने संकलित संस्करण का उपयोग करने के लिए एप्लिकेशन को बताने का एक अच्छा तरीका क्या होगा? (उदाहरण के लिए फ़ायरफ़ॉक्स के साथ डाउनलोड फ़ोल्डर खोलना)

मुझे पता चला कि फ़ायरफ़ॉक्स कॉल करता है /usr/bin/nautilusतो मैं इसे सिंपलिंक के साथ अपने कार्यक्रम में बदल सकता हूं। हालाँकि, मेरा मानना ​​है कि जैसे ही मैं Nautilus के लिए एक अद्यतन स्थापित करता हूं, यह सिम्क्लिन अधिलेखित हो जाएगा। क्या कुछ और है जो मैं कर सकता था?

debian  apt 

1
अपना वर्जन /usr/local/binनहीं डाला? यानी फ़ायरफ़ॉक्स ने आपकी खोज की $PATHऔर संस्करण को खोजा /usr/bin, या क्या यह (या आपका xdg- खुला सामान) हार्ड-कोड है /usr/bin/nautilus? / Usr / स्थानीय में कुछ का अपना संस्करण स्थापित करना सामान्य रूप से काम करता है।
पीटर कॉर्डेस

मैंने अभी यह कोशिश की और यह काम नहीं किया। मुझे नहीं पता कि फ़ायरफ़ॉक्स आंतरिक रूप से क्या करता है, लेकिन /usr/bin/nautilusलगता है कि यह किसी भी तरह हार्ड-कोडित है। अगर इसे हटा दिया जाता है तो फ़ायरफ़ॉक्स कुछ भी नहीं करता है जब मैं डाउनलोड फ़ोल्डर को खोलने की कोशिश करता हूं, हालांकि मेरे खुद के संस्करण के लिए एक नाभि है /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और ओपन / क्लोज / पाथनाम सामान को फाइल करता है, अन्यथा यह futexX11 के लिए रीड / राइट की बाढ़ होगी )।
पीटर कॉर्डेस

जवाबों:


14

मैं Nautilus के पैकेज्ड वर्जन को ठीक करूंगा, जो पहली बार में चुनौतीपूर्ण लग सकता है लेकिन यह काफी आसान है - हालांकि यह पैकेज अपग्रेड से बच नहीं पाता है, इसलिए इसमें कुछ अनुशासन की आवश्यकता होती है। ( विवरण के लिए राउटर का जवाब देखें।)

आपकी स्थिति में सबसे सरल तरीका एक मोड़ जोड़ना है:

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

जब भी कोई पैकेज इसे स्थापित करने का प्रयास करता है, तो उसका dpkgनाम बदलने /usr/bin/nautilusका निर्देश देगा /usr/bin/nautilus.original। फिर आप अपना खुद का सिमलिंक जोड़ सकते हैं, और यह तब भी अछूता रहेगा जब Nautilus पैकेज अपग्रेड किया गया हो। इसे हटाने के लिए, भागो

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

यह आपके पैच के साथ एक नया पैकेज बनाता है, इसे स्थापित करता है, और फिर इसे dpkg में चिह्नित करता है ताकि यह अब ऑटो-अपडेट न हो।

अगली बार जब पैकेज का अपडेटेड वर्जन जारी किया जाएगा, तो एप आपको सूचित करेगा कि अपडेटेड वर्जन मौजूद है, लेकिन उसे वापस आयोजित किया जा रहा है। आपको फिर से ऊपर करने की आवश्यकता है।


apt-mark hold packagenameपैकेज रखने का आधुनिक तरीका है। (मैंने वर्षों से उपयोग की जाने वाली विधि के बजाय अपनी स्वयं की dpkg-hold/ dpkg-unholdस्क्रिप्ट का dlocateउपयोग किया था। लिपियों को उपयुक्त-चिह्न के कारण अप्रचलित है, लेकिन मेरे पास अभी भी अन्य स्क्रिप्ट हैं जो उन्हें कॉल करती हैं, और उन्हें हटाने से अन्य उपयोगकर्ताओं द्वारा लिखी गई स्क्रिप्ट को तोड़ सकती हैं। 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, इसलिए मुझे लगता है कि यह मामूली बात है
;;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.