Dpkg --set-select '*' से सभी डेटा और निर्भरता को बहाल करना


44

इसलिए मैं एक मशीन पर चला सकता हूं:

dpkg --get-selections '*' > selection.txt

एक अन्य मशीन पर:

dpkg --set-selections < selection.txt

... निम्नलिखित में से किसी एक के बाद:

aptitude install
apt-get -u dselect-upgrade

... संकुल को स्थापित करने के लिए।

हालांकि, ऐसा प्रतीत होता है कि इस प्रक्रिया में कुछ जानकारी खो जाती है, जैसे कि एक पैकेज (कहते हैं xyz) स्वचालित रूप से किसी अन्य पैकेज (? abc) की निर्भरता के रूप में स्थापित हो जाता है । आप देख सकते हैं कि जब भी आप ऐसा कुछ करते हैं apt-get --purge remove abc। मूल मशीन पर आपको सूचित किया जाएगा कि पैकेज xyzनिर्भरता के रूप में स्थापित किया गया था abcऔर आप apt-get autoremoveइससे छुटकारा पाने के लिए उपयोग कर सकते हैं ।

अब मैं के बारे में पता कर रहा हूँ deborphanऔर debfoster, लेकिन वे बोझिल हाथ में (सरल) कार्य दिया उपयोग करें।

ऐसा लगता है कि चयन को सहेजना और पुनर्स्थापित करना जैसा कि ऊपर दिखाया गया है, स्थापित पैकेजों की सूक्ष्म निर्भरता को पुनर्स्थापित करने के लिए पर्याप्त नहीं है।

क्या पैकेज प्रबंधन के लिए मेटाडेटा के पूरे सेट का बैकअप लेने और फिर इसे पूरी तरह से बहाल करने का कोई तरीका है?


मैं अक्सर एक ही बात सोचता हूं कि मैं अपने सभी पैकेज (माइनस लिबास) के साथ 'सूद एप्ट-गेट इंस्टॉल' के साथ एक बड़ी शेल स्क्रिप्ट उत्पन्न करता हूं। बेशक, मैं उसी समस्या में भाग रहा हूं जो आप कर रहे हैं।
चक

मुझे लगता है कि dpkg वास्तव में उस जानकारी के लिए ज़िम्मेदार है या नहीं, यह देखने के लिए सबसे अच्छी जगह है। यदि ऐसा नहीं है तो शायद यह उपयुक्त काम है।
हकल

3
यदि आप मैनुअल तरीके से जा रहे हैं, तो आप apt-markस्वचालित बनाम मैन्युअल रूप से स्थापित पैकेजों के बारे में जानकारी को सहेजने / बहाल करने के लिए इच्छुक हो सकते हैं
लीकेस्टीन

यह 10.04 पैकेज रेपो में नहीं है, क्या यह है? क्या यह कैनन रेपो या थर्ड-पार्टी का हिस्सा है?
19x पर 0xC0000022L

2
नहीं, यह सिर्फ "आपकी जानकारी के लिए" टिप्पणी है। मैं (, उपयुक्त का यह हिस्सा तो यह पहले से ही स्थापित किया जाना चाहिए) उपयुक्त चिह्न का उपयोग करना चाहते हो और संकुल के लिए अंक निर्धारित करने के लिए (देखें इसके मैनपेज जानकारी के लिए)।
12

जवाबों:


39

बैकअप:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

पुनर्स्थापित करें:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)

धन्यवाद, यह पूछने के बारे में था कि आप या लेकेनस्टेन ने उत्तर के रूप में लिखा है।
0xC0000022L

क्या ये आदेश आपको प्रोग्राम को उस सूची से पुनर्स्थापित करने की अनुमति देते हैं?
स्वेतलाना बेल्किन

क्या यह उन पैकेजों को हटा सकता है जिन्हें पुनर्स्थापन पर अतिरिक्त स्थापित किया गया है?
n611x007

1
क्या आप autoऔर के बीच अंतर समझा सकते हैं manual? धन्यवाद।
Anto

मैंने गलती से मैनुअल को अन्य पैकेजों का एक गुच्छा के रूप में चिह्नित किया है ... क्या वापस लौटने का एक तरीका है? धन्यवाद
डेन्क्स

2

इस प्रश्न का चयनित उत्तर अपूर्ण है और काम नहीं करता है (या अब नहीं)। दर्दनाक फिक्स आउटपुट * पार्सल फ़ाइलों को पार्स करने के लिए एक बैश फॉर लूप का उपयोग करना है और उन्हें फीड करना है apt install। हालांकि, बुरी पसंद, इसलिए यहां चित्रित नहीं किया जाएगा।

एक बेहतर विकल्प का उपयोग करना है apt-clone, जैसा कि यूनिक्स और लिनक्स स्टैकएक्सचेंज पर इस उत्तर में देखा गया है । यह एक छोटी फ़ाइल (मेरे सिस्टम के लिए लगभग 100K या उससे कम) बनाता है। कथित रूप से, यह थोड़ा प्रयास या दर्द के साथ संकुल को क्लोन करेगा।

तो, संक्षेप में, मूल मशीन पर:

apt-clone clone `uname -n`

फिर, क्लोन फाइल की प्रतिलिपि बनाने और चलाने के लिए मशीन पर:

apt-clone restore original-machine-name.apt-clone.tar.gz

मैं इस उत्तर को यहां शामिल करता हूं क्योंकि यह पृष्ठ प्रारंभिक वेब खोजों में बदल गया था, लेकिन अन्य उत्तर नहीं मिला। यह तरीका आसान लगता है।

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