2011-09-13 13 views
25

अनइंस्टॉल करता है मैं अपने प्रोजेक्ट आरपीएम को अपग्रेड कर रहा हूं। समस्या तब होती है जब मैं प्रोजेक्टनाम-1.0-0 से प्रोजेक्टनाम-1.0-1 में अपग्रेड करता हूं, यह पहले नई प्रोजेक्ट इंस्टॉल करता है और पुरानी प्रोजेक्ट को अनइंस्टॉल करता है, जो समग्र रूप से मेरी परियोजना को पूरी तरह से हटा देता है। मैंने अपग्रेड करते समय "vv" विकल्प का उपयोग किया है और आउटपुट ने इंस्टॉलेशन के बाद अनइंस्टॉलेशन किया है।आरपीएम अपग्रेड आरपीएम

कोई इस समस्या से मदद करें। क्या मुझे कुछ भी विशेष रूप से RPM spec या rpmbuild विकल्पों में बदलना चाहिए?

उत्तर

5

हां। आरपीएम अधिष्ठापन के दौरान,% संस्थापन और% पोस्ट स्क्रिप्ट को बुलाया जाएगा। सफल स्थापना के बाद,% preun और% postun स्क्रिप्ट को आरपीएम के पिछले संस्करण को अनइंस्टॉल करने के लिए बुलाया जाएगा। यदि सही तरीके से संभाला नहीं जाता है, तो इन% preun और% postun स्क्रिप्ट% इंस्टॉल और% पोस्ट स्क्रिप्ट द्वारा लाए गए परिवर्तनों में हेरफेर कर सकते हैं।

आरपीएम स्थापित मूल्यों के साथ $ 1 तर्क सेट करता है ताकि आरपीएम संस्करणों की संख्या को अलग किया जा सके। प्रोजेक्टनाम-1.0-0 की ताजा स्थापना के दौरान,% इंस्टॉल और% पोस्ट स्क्रिप्ट को 1 सेट 1 से 1 के साथ बुलाया जाएगा, यह दर्शाता है कि यह एकमात्र सक्रिय संस्करण है। प्रोजेक्टनाम-1.0-1 में अपग्रेड किए जाने पर,% इंस्टॉल और% पोस्ट स्क्रिप्ट को $ 1 से 2 सेट के साथ बुलाया जाएगा। उसके बाद,% preun और% postun स्क्रिप्ट को $ 1 से 1 सेट के साथ कॉल किया जाएगा ताकि प्रोजेक्टनाम की सामग्री को साफ किया जा सके। -1.0-0। इस प्रकार $ 1 मूल्य के आधार पर spec फ़ाइल लिखकर, हम उन्नयन को प्रभावी ढंग से संभाल सकते हैं।

+0

'% install' आरपीएम स्थापना के दौरान लेकिन दौरान * निर्माण * भाग गया नहीं है (हाँ, नाम बहुत भ्रामक हो सकता है)। मुझे लगता है कि आपका मतलब '% pre' है। –

56

हां, जब कोई RPM अपग्रेड होता है, RPM पहले पैकेज के नए संस्करण को स्थापित करता है और फिर पैकेज के पुराने संस्करण को अनइंस्टॉल करता है। पुराने पैकेज की केवल फाइलें हटा दी गई हैं। लेकिन आपकी स्क्रिप्ट्स (यानी% pre,% post,% preun,% postun) को यह जानने की आवश्यकता है कि वे अपग्रेड कर रहे हैं या सिर्फ एक सादा इंस्टॉल या अनइंस्टॉल कर रहे हैं।

आरपीएम कमांड आपकी स्क्रिप्ट्स पर एक तर्क पारित करेगा, यानी $ 1, जो कि स्थापित किए गए पैकेज के संस्करणों की संख्या की गणना है। नीचे दी गई तालिका (एरिक फोस्टर-जॉनस्टन द्वारा रेडहाट आरपीएम गाइड से) संभावित मूल्यों का नमूना प्रदान करती है।

Install the first time:   1 
Upgrade:       2 or higher 
           (depending on the number of versions installed) 
Remove last version of package: 0 

तो, आपके% preun में, शायद आप किसी भी सेवा को हटाने से पहले "$ 1 = 0" जांचना चाहते हैं।

अधिक जानकारी (और एक बेहतर तालिका) के लिए देखें: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html

+1

क्या होगा यदि आपके पास पहले से ही उत्पादन में पैकेज 1.0.0 है और आप अपने प्रीन या पोस्टन को संशोधित नहीं कर सकते हैं और वे गलत काम करते हैं? ओवरराइड के रूप में क्या पैकेज 1.0.1 बस स्थापित किया गया है। – DavidG

+0

आरपीएम में किसी भी पूर्व या पोस्ट स्क्रिप्ट को चलने से रोकने के लिए '- नोस्क्रिप्ट्स' ध्वज है। यकीन नहीं है कि, अगर कुछ भी, यम के बराबर है। –

4

आप एक RPM पैकेज अपग्रेड करने पर, स्क्रिप्ट निम्न क्रम में क्रियान्वित कर रहे हैं:

1. %Pre of new package 
2. %Post of new package 
3. %Preun of old package 
4. %Postun of old package 

चाहे स्थापना ताजा है या उन्नयन, वहाँ प्रत्येक स्क्रिप्ट को पारित एक तर्क है जो विभिन्न संस्करणों के साथ एक ही पैकेज के स्थापित RPM की संख्या का प्रतिनिधित्व करता है। पूर्व & पोस्ट स्क्रिप्ट के लिए यह पहली स्थापना के मामले में 1 होगा। प्रीन & पोस्टन स्क्रिप्ट के लिए यह अंतिम अनइंस्टॉल करने के लिए 0 होगा।

आपके मामले में क्या हो रहा है यह है कि प्रीन या पोस्टन स्क्रिप्ट नए पैकेज के लिए उपयोगी फ़ाइलों को हटा सकती हैं। आपको पोस्टन स्क्रिप्ट में मैन्युअल फ़ाइल हटाने के बारे में चिंता करने की आवश्यकता नहीं है, इसे बुद्धिमानी से RPM स्वयं ही संभाला जाएगा।

रेफरी: Upgrading & uninstalling

संबंधित मुद्दे