दो मेजबानों पर स्थापित पैकेजों के बीच अंतर की एक सूची की गणना करें


11

मैं सिर्फ अपने डेबियन वर्चुअल सर्वर के साथ कुछ समस्याएं जोड़ता हूं और उन सभी को खरोंच से पुनर्स्थापित करने के लिए जोड़ता हूं। हालाँकि, मेरे पास अभी भी पुराने संस्करण की पहुंच थी और मैं स्थापित पैकेजों की सूची को पुनः प्राप्त कर सकता था।

भविष्य में वर्चुअल सर्वर को पुनर्स्थापित करने की प्रक्रिया को सुविधाजनक बनाने के लिए, मैं अपने प्रत्येक सर्वर के लिए विशिष्ट पैकेजों की एक सूची बनाना चाहूंगा।

बेहतर ढंग से समझाने के लिए कि मैं क्या हासिल करना चाहता हूं। मेरे पास पहले से ही हर जगह उपयोग किए जाने वाले कुछ बुनियादी पैकेज और कॉन्फ़िगरेशन के साथ एक नया वर्चुअल सर्वर बनाने के लिए एक स्वचालित प्रक्रिया है। अब मैं किसी विशेष सर्वर के पुनर्स्थापना को आसान बनाने के लिए इस "कंकाल" के साथ डेल्टा को बचाना चाहता हूं।

एक वास्तविक प्लस को डिफ़ॉल्ट से परिवर्तित कॉन्फ़िगरेशन फ़ाइलों को भी सहेजना होगा, लेकिन मैं केवल पैकेज सूची के साथ रह सकता हूं।

संक्षेप में, मैं मेजबान पर स्थापित पैकेजों की सूची बनाने का एक तरीका चाहता हूं, लेकिन दूसरे पर नहीं।

यह वास्तव में बहुत अच्छा होगा यदि सूची में केवल मैन्युअल रूप से स्थापित पैकेज होते हैं और सभी निर्भरताओं की सूची नहीं होती है।

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


बस एक विचार है, लेकिन यह विपरीत दिशा से इस पर काम करना शुरू करने का समय हो सकता है। जानकारी को खींचने की कोशिश करने के बजाय, कॉन्फ़िगरेशन प्रबंधन प्रणाली (कठपुतली) को क्यों सेटअप करना है। फिर चीजों को अपने प्रबंधित सिस्टम से बाहर धकेलें।
Zoredache

ओह, BTW, इस सवाल को देखते हैं। serverfault.com/questions/3852/…
Zoredache

@Zoredache मैं वर्तमान में यह सब प्रबंधित करने के लिए कुछ बेहतर तरीके से देख रहा हूं, लेकिन इस बीच मैं बस मामले में सर्वर की स्थिति को बचाने के लिए कुछ त्वरित तरीका खोजना चाहता था। लिंक के लिए धन्यवाद!
krtek

जवाबों:


12

संदर्भ स्थापना पर (केवल एक बार):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(निम्नलिखित अनुमान bash)

संदर्भ स्थापना से जोड़े गए पैकेजों को प्राप्त करने के लिए (यह वह नहीं दिखाता जो हटा दिया गया था):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

इससे भी बेहतर, की नकल से बचना baselist.txt:

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)

2

पुराने सर्वर पर, चलाएं:

dpkg --get-selections> पुराने-संकुल-सूची

उपरोक्त फ़ाइल को नए सर्वर पर कॉपी करें और नए सर्वर पर चलाएं:

dpkg --सेट-चयन <पुराने-संकुल-सूची

apt-get update

अद्यतन अद्यतन करें

/etc/apt/sources.listपैकेज के इस माइग्रेशन से पहले पुराने सर्वर से नए सर्वर में भी सभी अतिरिक्त रिपॉजिटरी को जोड़ना याद रखें , जैसे कि यदि आप नहीं करते हैं, तो अधिकांश पैकेज अन-इंस्टॉल्ड रह जाएंगे।


यह पैकेज की पूरी सूची को बचाएगा, और सर्वर को पुनर्स्थापित करने के लिए मेरे द्वारा उपयोग किया जाने वाला समाधान है। लेकिन अब, भविष्य में प्रक्रिया को आसान बनाने के लिए, मैं केवल उन पैकेजों की सूची को बचाना चाहता हूं जो आधार सर्वर से अलग हैं।
krtek

1
ठीक है, यह बहुत आसान है और साथ ही, पहले "dpkg --get-selections> पुराने-संकुल-सूची" द्वारा पुराने सर्वर से सूची का बैकअप लें, फिर "dpkg --get-selections" द्वारा नए सर्वर पर संकुल की सूची प्राप्त करें। > नया-संकुल-सूची ",,, इस कमांड को चलाएँ" कैट पुराना-संकुल-सूची | awk '{प्रिंट $ 1}'> पुरानी-सूची ",,, नए सर्वर पर समान कमांड, लेकिन पुराने को नए के साथ बदलें। दोनों फ़ाइलों पर एक अंतर चलाएँ, जो आपको अंतर दिखाएगा। द्वारा -w पुरानी सूची नई सूची में
फरहान

1
cut -f1प्रोबेल्ज़ जाग की तुलना में तेज़ होगा, और खालिद जवाब पर टिप्पणी की तरह, अंतर हमेशा एक सही परिणाम नहीं देगा। commवास्तव में अब के लिए कृपया के साथ समाधान ... हालांकि मैं एक संस्करण याद कर रहा हूँ जो केवल मैन्युअल रूप से स्थापित संकुल को सूचीबद्ध करता है।
krtek

1

दोनों सर्वर पर पैकेज की पूरी सूची प्राप्त करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं:

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

फिर, आप अंतर का उपयोग कर प्राप्त कर सकते हैं:

     diff -Nur old_file new_file > changes.txt

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


डिफरेंट आउटपुट के साथ समस्या यह है कि इसे सीधे-सीधे फीड नहीं किया जा सकता है ताकि सब कुछ ऑटोमैटिक तरीके से रीइनस्टॉल किया जा सके ... और प्रस्तावित शेलहोलिक की तरह, कॉम का उपयोग करना इस विशेष मामले में बेहतर है, अगर गलत परिणाम मिल सकता है पैकेज सूची वास्तव में लंबी है।
krtek

एक और समस्या यह है कि dpkg आउटपुट के कॉलम को स्वत: आकार देता है। तो एक dpkg -l एक लंबे पैकेज नाम वाले सर्वर से हार्ड को अलग करता है।
पाओलो

1

खाका आपकी जरूरत के लिए बनाया गया है। यह स्थापित किए गए विवरण पैकेज को कॉन्फ़िगर करता है और उन फ़ाइलों को कॉन्फ़िगर करता है जिन्हें बदल दिया गया है। इन विवरणों को पपेट या शेफ स्क्रिप्ट में बदलने में सक्षम है ताकि उन्हें साफ बॉक्स में लागू किया जा सके।


0

यह सहायक पैकेज भी मिला, जिसका विवरण निम्नानुसार है:

एक बैश लिपि जो डेबियन पैकेज के फाइलसिस्टम ट्री की तुलना मौजूदा फाइलसिस्टम ट्री से करती है, यूनिफाइड प्रिंटिंग अलग-अलग फाइलों के लिए अलग-अलग होती है।

https://code.google.com/p/dpkg-diffs/

बस एक एकल बैश फ़ाइल आप अपने पेट में कहीं भी चिपका सकते हैं और चला सकते हैं - मेरे लिए काम करने लगता है और यह बहुत पुराना नहीं है।

आशा है कि यह किसी की मदद करता है।

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