2010-02-16 21 views
8

क्या किसी अन्य मशीन पर स्थापित किए जाने वाले संकुल को डुप्लिकेट करने के लिए दूसरी मशीन पर स्थापित करने की आवश्यकता वाले संकुलों की सूची बनाने के लिए dpkg, apt-get या योग्यता प्राप्त करने का कोई तरीका है?स्थापित पैकेजों का एक सेट फिर से बनाने के लिए आवश्यक डेबियन पैकेजों के न्यूनतम सेट को मैं कैसे सूचीबद्ध कर सकता हूं?

यानी मैं एक सादे उबंटू सर्वर स्थापित किया है, समय स्थापित पर sshd विकल्प को चुनते हैं, तो स्थापित निर्माण आवश्यक मैं उत्पादन की तरह कुछ देखने के लिए उम्मीद करेंगे: जहाँ तक मैं कर सकते हैं

#ubuntu 9.10 server 
openssh-sshd 
build-essential 

देखें, सभी उपलब्ध पैकेजिंग टूल बॉक्स पर संकुल की वर्बोज़ सूची तैयार करेंगे। मुझे openssh libs, ld, gcc, और sshd और build-required द्वारा खींचे गए सभी अन्य संकुलों में रूचि नहीं है, क्योंकि जब मैं sshd और build-required स्थापित करता हूं तो उन्हें इंस्टॉल किया जाएगा।

मैं केवल उस पैकेज की सूची देखना चाहता हूं जिसे मुझे किसी अन्य मशीन पर संकुल के वर्तमान सेट को फिर से बनाने के लिए स्थापित करने की आवश्यकता है।

क्या यह संभव है?

उत्तर

11

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

deborphan -anp required --no-show-section

-a सभी पैकेज (न सिर्फ पुस्तकालयों)
-n पर ध्यान नहीं देता "पता चलता है" या "की सिफारिश की" निर्भरता जाँच (यानी सिर्फ "निर्भर करता है")
-p required सूचियों सभी संकुल के बावजूद निर्दिष्ट करता है: मुझे यह पसंद है चलाने प्राथमिकता
--no-show-section यह इंगित नहीं करता कि डेबियन का कौन सा हिस्सा है, बस एक अच्छी प्रारूपण सुविधा जो आपको सूची बनाने के लिए उपयोगी हो सकती है।

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

+0

'डिफॉर्फन -एएनपी आवश्यक - नो-शो-सेक्शन' में 'आउटपुट' में 'gcc' शामिल है, जब 'apt-rdepends build-essential' दिखाता है कि 'बिल्ड-आवश्यक' 'gcc' पर निर्भर करता है? – fadedbee

+0

क्या यह जीसीसी का एक विशिष्ट संस्करण दिखा रहा है, जैसे जीसीसी-4.3, या जीसीसी पैकेज स्वयं? यदि यह 'gcc' पैकेज है, तो शायद निर्माण-आवश्यक वास्तव में स्थापित नहीं है? ... कोई अच्छा अनुमान नहीं, क्षमा करें। मेरे आउटपुट में, मैं बिल्ड-जरूरी लेकिन कोई जीसीसी नहीं देखता हूं। –

1

तो, आप संकुलों की सूची चाहते हैं जो स्पष्ट रूप से स्थापित किए गए थे (जैसे, कहते हैं, उबंटू-डेस्कटॉप और openssh), और ऑटो-निर्भरता नहीं? मैं सकारात्मक नहीं हूं, लेकिन मुझे लगता है कि dpkg --get-selections करता है। तो, आप

dpkg --get-selections > file 

कर सकते हैं और फिर, अन्य कंप्यूटर पर, का उपयोग एक ही "फाइल" और चलाने

dpkg --set-selections < file 
apt-get dselect-upgrade 

मैं बिल्कुल सकारात्मक कि उन आदेशों बस मैन्युअल रूप से चुने हैं नहीं कर रहा हूँ संकुल, हालांकि, और मैं वर्तमान में किसी भी डेबियन-आधारित सिस्टम से सत्यापित करने के लिए दूर हूं। :)

+0

नहीं, ऐसा लगता है कि यह संकुल सूचीबद्ध करता है जो निर्भरताओं के रूप में खींचा गया था। मेरी मशीन पर, सूची में जी ++, जी ++ - 4.4, जीसीसी जैसे पैकेज शामिल हैं ... जो मुझे पता है कि बिल्ड-जरूरी द्वारा स्थापित किया गया था। – fadedbee

2

कोड जो डैनिसॉयर पोस्ट किया गया है वह एक शुरुआत है। एक बार आपके पास संकुलों की एक सूची है जिसमें निर्भरता शामिल है, आप किसी विशेष पैकेज के लिए निर्भरताओं को खोजने के लिए apt-rdepends का उपयोग कर सकते हैं (उदाहरण के लिए उपयोग और आउटपुट के लिए this page देखें)।

प्रक्रिया रूपरेखा

  1. संकुल की सूची प्रत्येक
  2. पर dannysauer के कोड
  3. कॉल apt-rdepends द्वारा लौटाए के माध्यम से दोहराएं किसी भी संकुल की सूची है कि apt-rdepends
के उत्पादन में दिखाने से हटाएँ
+0

मुझे लगता है कि यह भी एक व्यावहारिक दृष्टिकोण है, लेकिन यह deborphan की तुलना में धीमी और अधिक काम लगता है। क्या डिबॉर्फन का उपयोग करने में कोई समस्या है जो apt-rdepends हल करता है? – fadedbee

+0

आईआईआरसी, 'डिबॉर्फन' बस स्थापित पैकेजों की एक सूची बनाता है जिनमें कुछ भी नहीं है जो उन पर निर्भर करता है। यह वही नहीं हो सकता है जो आप चाहते हैं (एरिक की टिप्पणी 'डेबोरफ़ान' संभवतः गायब पैकेजों के बारे में देखें)। यदि आपको समस्याएं हैं, तो मैंने 'apt-rdepends' का उल्लेख किया है क्योंकि आप हमेशा दोनों मशीनों के सभी स्थापित संकुलों की पूरी सूची प्राप्त कर सकते हैं, दोनों सूचियों के लिए सामान्य पैकेज हटा सकते हैं, और शेष पैकेजों को' apt-rdepends 'के साथ उत्पन्न करने के लिए जांच सकते हैं पैकेज की सबसे छोटी संभावित सूची जो आपके वर्तमान पैकेज को दूसरी मशीन पर सेट करेगा। यह आसानी से पटकथा भी होना चाहिए। – bta

0

इसके बारे में क्या:

#!/bin/bash 

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}') 

for pkg in $packages 
do 
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l) 
    if [ "$nr_lines" = "2" ] 
    then 
     echo $pkg 
    fi 
done 

क्या यह अच्छी तरह से काम करता है? क्या इसे किसी भी तरह से सुधार किया जा सकता है?