मैं सॉफ्टवेयर पैच कैसे लगाऊं?


15

मेरे पास एक एप्लिकेशन foobarहै जिसके लिए किसी ने एक पैच लिखा है जो मुझे पसंद है। मैं पैच का उपयोग कैसे कर सकता हूं?

जवाबों:


21

पैच आमतौर पर .diffफाइलों में समाहित होते हैं , क्योंकि diffकमांड का उपयोग करके पैच बनाए जाते हैं ।

एक पैच स्रोत कोड में सम्मिलन और विलोपन की एक श्रृंखला है। इस कारण से, पैच का उपयोग करने के लिए, आपको पैच लगाने के बाद स्रोत से एप्लिकेशन (जैसे, "फोब्बर") का निर्माण करना होगा। तो, चरणों में:

1. फ़ॉबर के लिए स्रोत पैकेज प्राप्त करें ।

अधिकांश लिनक्स वितरण (नायब पैचिंग लाइनक्स के लिए अद्वितीय नहीं है) "स्रोत पैकेज" आपके पास इस उद्देश्य के लिए उपयोग कर सकते हैं, लेकिन चूंकि ये विषम हैं, इसलिए मैं केवल यहां मूल स्रोत के प्रारूप का उल्लेख करूंगा। मूल स्रोत डिस्ट्रो का हिस्सा नहीं है और इसे खोजना मुश्किल हो सकता है। शुरू करने के लिए एक अच्छी जगह विकिपीडिया है, जिसमें कई लोकप्रिय अनुप्रयोगों के लिए लेख हैं, और लेख में एक स्रोत डाउनलोड के साथ एक होमपेज का लिंक होना चाहिए। आप खुद भी google कर सकते हैं, जाहिर है। स्रोत पैकेज को कुछ इस तरह कहा जाएगा foobar.0.1.tar.bz2। इसे अनपैक करें - आपके पास अब एक निर्देशिका है foobar.0.1

2. पैच जोड़ें।

कभी-कभी पैच एकल फाइलें होते हैं और कभी-कभी वे कई फाइलों का एक सेट होते हैं। उन में कॉपी foobar.0.1और cd foobar.0.1। अगला, आपको patchकमांड चलाने की आवश्यकता है । यह मानक इनपुट से पढ़ता है, इसलिए आप .diffफ़ाइल को पाइप में डालना चाहते हैं । मुश्किल हिस्सा यह निर्धारित कर रहा है कि -pविकल्प के लिए क्या उपयोग करना है (यदि पैच के साथ कोई निर्देश नहीं हैं)। ऐसा करने के लिए आपको पैच फ़ाइल की शुरुआत को देखना होगा। उदाहरण के लिए:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

इस स्थिति में, comm.cस्रोत फ़ाइल का नाम है जिसे बदल दिया जाएगा। हालाँकि, ध्यान दें कि इसमें कोई निर्देशिका संलग्न है। चूंकि ये समान निर्देशिका ("पुराने" बनाम "नए") नहीं हैं, यह एक बड़ा सुराग है कि पथ का यह हिस्सा कबाड़ है (हमारे उद्देश्यों के लिए)। -pस्विच का उद्देश्य (देखें man patch) इस उपसर्ग को खत्म करना है। यह एक संख्या लेता है, जो कि स्लैश की संख्या है ( /) को खत्म करने के लिए, बीच में सब कुछ के साथ; इस मामले में हम -p1सिर्फ सादा रास्ता कम करने के लिए उपयोग करेंगे comm.c

वह अनुमान comm.cवास्तव में उसी निर्देशिका में है, जो एक और सुराग होगा कि क्या आपकी व्याख्या सही है। यदि वे दोनों लाइनें थीं src/comm.c, और comm.cवास्तव में srcआपके बिल्ड ट्री के उपनिर्देशिका में हैं, तो आपको उपयोग करने की आवश्यकता है -p0- सावधान रहें कि बिल्कुल भी उपयोग नहीं करना -pसभी स्लैश को हटा देगा। यदि मार्ग निरपेक्ष है (यानी, के साथ शुरू होता है /), तो शायद यही आप चाहते हैं। अब पैच लागू करें:

patch -p1 < patch.diff

स्रोत को अब संशोधित किया गया है। यदि अधिक .diffफाइलें हैं, तो उसी तरह लागू करें।

3. निर्माण और स्थापित करें।

यह सामान्य प्रक्रिया आप स्रोत से निर्माण कुछ करने के लिए के माध्यम से जाना होता है - पहला ./configure, तो make, make check, make install। इससे पहले कि आप अंतिम एक करें, यदि आपके पास पहले से ही मौजूदा इंस्टॉलेशन है foobar, तो तय करें कि क्या आप नामकरण संघर्ष से निपटना चाहते हैं या इसे हटाना चाहते हैं या आप कैसे हैं। आप शायद foobarअपने नए, पैच किए गए संस्करण को संदर्भित करना चाहते हैं , और पुराने को नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.