मैं एक डेबियन सिस्टम से दूसरे में स्थापित पैकेज चयन को कैसे दोहराऊं? (डेबियन व्हीज़ी)


18

मैं अपने मुख्य सिस्टम में लागू करने से पहले अपडेट का परीक्षण करने के लिए, VM में एक मंचन वातावरण स्थापित करने का प्रयास कर रहा हूं।

ऐसा करने के लिए, मैंने VM में डेबियन व्हीज़ी (मुख्य प्रणाली पर समान) की एक बुनियादी स्थापना की है, फिर VM के भीतर से रूट के रूप में चला गया:

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
  dpkg --set-selections

I386 वास्तुकला दुर्भाग्य से मेरे मामले में आवश्यक है; प्रणाली amd64 देशी है।

समस्या dpkg --set-selectionsVM में चलाने के साथ है । मेरे पास कुछ पैकेज हैं, जिन्हें विशेष हैंडलिंग की आवश्यकता होती है (वे वास्तव में मुख्य कारण है कि मैं पहली जगह में एक मंचन का माहौल क्यों चाहता हूं) लेकिन जब मैं ऊपर अंतिम कमांड चलाता हूं, तो मुझे आउटपुट की एक गजियन लाइनें मिलती हैं:

dpkg: warning: package not in database at line NNN: package-name

उन पैकेजों के लिए जो वास्तव में आधार प्रणाली में उपलब्ध होने चाहिए। उदाहरणों में शामिल हैं xterm, yelpऔर zip

अब मेरे सवाल के लिए:

पैकेज चयन सूची को एक डेबियन सिस्टम से दूसरे (समान डेबियन रिलीज स्तर मानकर, व्हीजी में) और फिर बाद में उन परिवर्तनों को लागू करने के लिए विशिष्ट प्रक्रिया क्या है ? लक्ष्य यह है कि दोनों के पास एक ही पैकेज की सूची है, आदर्श रूप में ऐसा है कि diffदोनों के आउटपुट के बीच dpkg --get-selectionsया dpkg --listदोनों में कोई अंतर नहीं दिखाई देता है।

grep -v deinstallभाग से लिया गया है करने के बाद निकाले जाने से रोकने के संकुलdpkg --set-selections उबंटू पूछें पर अधिक।

मैंने VM में स्रोत को मुख्य प्रणाली के समान ही बदल दिया है, यह भी स्थापित कर रहा है apt-transport-https:

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

--सेट-चयन आउटपुट को देखते हुए, मैं देख रहा हूं:

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

पंक्ति संख्या विषम दिखती है, और इसके परिणाम --गट-चयन का संबंधित भाग है:

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

ध्यान दें कि बीच में aclऔर aglfnहैं acpi-support-base, acpidऔर adduser जिसके लिए कोई त्रुटि नहीं बताई जा रही है । ऐसा लगता है कि जिन पैकेजों के लिए त्रुटियां बताई जा रही हैं , वे या तो उनके unअनुसार हैं या उनके बारे में बिल्कुल भी पता नहीं है ( )। मुझे पता है कि कुछ स्थानीय रूप से स्थापित पैकेज हैं, लेकिन कई नहीं हैं। जब तक सूची से बहुत नीचे नहीं आ जाता है (लाइन - the -get-selections आउटपुट में 342)।dpkg -ldpkg -ldpkg-query: no packages found matching ...i386gcc-4.7-base:i386 install


dpkg --get-selections … | … dpkg --set-selectionsपैकेज चयनों को दोहराने का तरीका है। यदि यह आपके लिए विफल हो रहा है, तो आपको अधिक जानकारी प्रदान करने की आवश्यकता है क्योंकि क्यों। अपने सिस्टम, आउटपुट से dpkg --get-selectionsऔर पूर्ण प्रतिलेख दोनों स्रोतों पर अपना पूरा सेट पोस्ट करें dpkg --get-selections(हो सकता है कि हम क्या काम करता है और क्या नहीं, यह देखकर एक पैटर्न की व्याख्या कर सकता है)। यदि मुख्य प्रणाली amd64 या i386 है? यदि आप i386 आर्किटेक्चर को नहीं जोड़ते हैं तो क्या यह काम करता है?
गाइल्स

@ क्या यह वास्तव में (और मैं आपको प्रतिलेख का मतलब है ?) से पूर्ण उत्पादन होने की आवश्यकता है ? यहां तक ​​कि सिर्फ पूर्व में 3,600 से अधिक लाइनें और लगभग 100 KB है। dpkg --get-selectionsdpkg --set-selections
बजे एक CVn

आपको हमारे लिए पर्याप्त पोस्ट करने की जरूरत है कि कौन सा पैकेज त्रुटियों को ट्रिगर करता है और कौन सा नहीं (जब तक आप खुद से पता नहीं लगा सकते)। की एक प्रति /var/lib/dpkg/Packages(जो और भी लंबी है) उपयोगी हो सकती है, भी - यह टूटी हुई पैकेज फ़ाइल का एक लक्षण हो सकता है।
गाइल्स

@ गिल्स दिलचस्प बिंदु। मैं वास्तव में संभावना पर विचार नहीं किया था, लेकिन मैं इन पर विभिन्न दर्पणों का उपयोग करता हूं। मुझे देखने दें कि क्या यह अभी भी होता है अगर मैं एक ही डेबियन दर्पण पर वीएम को इंगित करता हूं। समर्थन करना।
एक CVn

@ गिल्स जो वास्तव में कोई फर्क नहीं पड़ता था, लेकिन मुझे कुछ और मिला। अद्यतन प्रश्न देखें।
बजे एक CVn

जवाबों:


16

एक डेबियन स्थापना को क्लोन करने के लिए, apt-cloneउपयोगिता का उपयोग करें । यह 12.04 के बाद से मट्ठे में और उबंटू में डेबियन में एक अलग पैकेज के रूप में उपलब्ध है, डिफ़ॉल्ट स्थापना का हिस्सा नहीं है)। मौजूदा मशीन पर, चलाएं

apt-clone clone foo

यह एक फ़ाइल बनाता है foo.apt-clone.tar.gz। इसे गंतव्य मशीन पर कॉपी करें, और चलाएं

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

यदि आप एक पुराने सिस्टम के साथ काम कर रहे हैं apt-clone, जहां उपलब्ध नहीं है, या यदि आप बस स्थापित पैकेजों की सूची को दोहराना चाहते हैं, लेकिन कोई कॉन्फ़िगरेशन फ़ाइल नहीं है, तो यहां मैन्युअल चरण हैं।

  • स्रोत मशीन पर:

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • लक्ष्य मशीन पर:

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

मेरा मानना ​​है कि आप dpkg में एक असंगत परिवर्तन से प्रभावित हैं जिसने पहले इसे मट्ठा में बनाया था। पृष्ठभूमि के लिए बग # 703092 देखें ।

लघुकथा यह है कि dpkg --set-selectionsअब केवल उन पैकेज नामों को स्वीकार करता है जो फ़ाइल में मौजूद हैं /var/lib/dpkg/statusया /var/lib/dpkg/available। यदि आप ज्यादातर लोगों की तरह पैकेज को प्रबंधित करने के लिए केवल एपीटी का उपयोग करते हैं, तो /var/lib/dpkg/availableअप-टू-डेट नहीं रखा जाता है।

दौड़ने apt-get updateसे पहले dpkg --set-selectionsऔर apt-get -u dselect-upgradeदौड़ने के बाद, निम्नलिखित कमांड चलाएँ:

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

जेसी से, आप इसे सरल कर सकते हैं

apt-cache dumpavail | dpkg --merge-avail

वैकल्पिक रूप से, भागो

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

या और भी सरल

apt-get install dctrl-tools
sync-available

एक और सरल विधि जिसे अतिरिक्त पैकेज स्थापित करने की आवश्यकता नहीं है, लेकिन पैकेज सूचियों को फिर से डाउनलोड करेगा

dselect update

देखें dpkg पूछे जाने वाले प्रश्न अधिक जानकारी के लिए। (यह dpkg मैन पेज में उल्लिखित है, लेकिन एक तरह से और अधिक है जो आपको इस मुद्दे की याद दिलाएगा यदि आप पहले से ही जागरूक थे, इस तरह से नहीं जो यह बताता है कि समस्या को कैसे हल किया जाए!)

ध्यान दें कि dpkg --set-selectionsAPT में स्वत: / मैन्युअल चिह्न को पुनर्स्थापित नहीं करता है। अधिक विवरण के लिए सभी डेटा और निर्भरता को dpkg --set-selections '*' से पुनर्स्थापित करना देखें । आप स्रोत सिस्टम पर मौजूद निशानों को सहेज सकते हैं

apt-mark showauto >auto.list

और लक्ष्य प्रणाली पर उन्हें पुनर्स्थापित करें

xargs apt-mark auto <auto.list

3
यह समस्या जितनी होनी चाहिए, उससे कहीं अधिक दिखाई दे रही है। मुझे विश्वास नहीं हो रहा है कि मैंने इसके बारे में पहले नहीं सुना है!
फहीम मीठा

दिलचस्प। यह एक शॉट देने के लिए जा रहे हैं। धन्यवाद!
बजे एक CVn

@FaheemMitha हाँ, मुझे आश्चर्य है कि मैंने आज से पहले ऐसा कभी नहीं सुना। मुझे विश्वास नहीं हो रहा है कि मैंने dpkg --set-selectionsपूर्व-मट्ठे का उपयोग नहीं किया है !
गाइल्स

ठीक है, कि चेतावनी की एक बहुत छोटी सूची दी --set-selections। अब मैं परिवर्तनों को कैसे लागू करूं? यहां तक ​​कि apt-get -u dist-upgradeकेवल मुट्ठी भर पैकेज (सभी ZFS से संबंधित) का उल्लेख है जहां हजारों पैकेज प्रभावित नहीं होने पर सैकड़ों होना चाहिए।
एक CVn

@ माइकलकॉर्जलिंग यही हैapt-get -u dselect-upgrade
गाइल्स

0

मैंने यह कैसे किया

  1. पर स्रोत मेजबान:

    apt-get update && apt-get dist-upgrade
    dpkg --get-selection >/tmp/source.sel
    cat /etc/apt/sources.list
    

    के बारे में परवाह /etc/apt/sources.list.dहै, तो इस्तेमाल किया ...

    फिर source.selफाइल को डेस्टिनेशन होस्ट पर कॉपी करें ।

  2. पर गंतव्य मेजबान:

    vi /etc/apt/sources.list 
    

    विभिन्न स्रोतों के साथ भी, लेकिन एक ही घटक सूची को अनुकूलित करें ।

    apt-get update
    dselect upgrade
    dpkg --set-selection </tmp/source.sel
    dselect install
    

    और अब, मेरा गंतव्य होस्ट वर्तमान में बहुत सारी चीजें स्थापित कर रहा है, तो मुझे इसे पोस्ट करने के लिए कुछ समय लग सकता है।


शायद 'हाउज़ अपग्रेड' को 'हाउ आई डू इट इट' विवरण में 'डसेलेक्ट अपडेट' होना चाहिए।
जोनाथन किम्मिट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.