हूड के नीचे एप्ट-गेट इंस्टॉल क्या करता है?


60

apt-get install ...कमांड क्या करता है?

जब मैं apt-get install ...कमांड दर्ज करता हूं , तो स्क्रीन पर कुछ टेक्स्ट दिखाई देते हैं, लेकिन मेरे लिए इसकी पर्याप्त जानकारी नहीं होती है। मैं जानना चाहता हूं कि क्या कोई फ़ाइल बनाई गई है / संपादित की गई है, कोई भी सेवा शुरू की गई है और अन्य गतिविधियाँ ...

क्या रन .shहोने पर कोई फ़ाइल निष्पादित होती है apt-get install ...? यदि हां, तो मैं उस shफ़ाइल की सामग्री कैसे देख सकता हूं ?

इस प्रश्न का कारण हाल ही में मैंने tomcat7 को स्थापित करने का प्रयास किया है apt-get install tomcat7। जब तक मैं स्थापित tomcat7-admin(प्रबंधक वेब अनुप्रयोग) सब कुछ ठीक काम करता है , सर्वर किसी भी अनुरोध के लिए अनुत्तरदायी बन गया। मैंने कई बार यह कोशिश की, और यह हमेशा होता है।


इसे भी देखें: askubuntu.com/questions/110988/…
lesmana


यात्रा wiki.debian.org/ आगे के विवरण के लिए देखें
पंड्या

2
14.04 से, apt-getद्वारा प्रतिस्थापित किया जा रहा है apt। प्रतिस्थापन अभी तक पूरा नहीं किया जा रहा है, लेकिन इसके लिए काम करता है install, upgradeऔर dist-upgradeदूसरों के बीच में।
धान लैंडौ

@PaddyLandau क्या यह एक प्रतिस्थापन उचित है या एक अतिरिक्त / आवरण उपयोगिता है?
मूरू

जवाबों:


49

ज्यादातर, apt-getनिम्नलिखित बातें करता है:

  • निर्भरता के लिए जाँच (और उन्हें स्थापित करने के लिए कहता है),
  • पैकेज डाउनलोड करता है, इसे सत्यापित करता है और फिर dpkgइसे इंस्टॉल करने के लिए कहता है।

dpkg मर्जी:

  • पैकेज निकालें और सामग्री को सही स्थान पर कॉपी करें, और उन पर पहले से मौजूद फ़ाइलों और संशोधनों के लिए जाँच करें,
  • रन पैकेज मेंटेनर स्क्रिप्ट : preinst, postinst, (और prerm, postrmइन से पहले, एक पैकेज उन्नत किया जा रहा है)
  • ट्रिगर के आधार पर कुछ कार्यों को अंजाम देते हैं

आपको अनुचर लिपियों में रुचि हो सकती है, जो आमतौर पर स्थित होती हैं /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}। ये आमतौर पर शेल स्क्रिप्ट हैं, लेकिन कोई कठिन नियम नहीं है। उदाहरण के लिए:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm

30

संक्षेप में : apt-get installक्या वह सब कुछ आवश्यक है जो आपके सिस्टम को नए इंस्टॉल किए गए सॉफ़्टवेयर एप्लिकेशन को सफलतापूर्वक निष्पादित कर सकता है।

लंबे समय तक:

प्रारंभिक:

से मैनपेज :

स्थापना के लिए निर्दिष्ट पैकेज (ओं) के लिए आवश्यक सभी पैकेजों को भी पुनः प्राप्त और स्थापित किया जाएगा।

उन पैकेजों को नेटवर्क में भंडार पर संग्रहीत किया जाता है। इसलिए, apt-getसभी आवश्यक लोगों को एक अस्थायी निर्देशिका में डाउनलोड करें ( /var/cache/apt/archives/)। वे एक वेब या एक ftp- सर्वर से डाउनलोड किया जाएगा। वे तथाकथित में निर्दिष्ट हैं sources.list; रिपॉजिटरी की एक सूची। तब से वे एक के बाद एक प्रक्रियात्मक रूप से स्थापित होते जाते हैं।

पहले वाले ही हैं, जिनकी आगे कोई निर्भरता नहीं है; इसलिए उनके लिए कोई अन्य पैकेज नहीं लगाया जाना चाहिए। उसके माध्यम से, अन्य पैकेज (जो पहले निर्भरता थे) अब कोई निर्भरता नहीं है। सिस्टम उस प्रक्रिया को तब तक करता रहता है जब तक कि निर्दिष्ट पैकेज स्थापित नहीं हो जाते।

प्रत्येक पैकेज एक इंस्टॉलेशन प्रक्रिया से गुजरता है।

पैकेज स्थापना:

उबंटू के रूप में डेबियन-आधारित लिनक्स वितरण में, उन पैकेजों को एक निर्दिष्ट मानकीकृत प्रारूप में कहा जाता है: डीब - डेबियन बाइनरी पैकेज प्रारूप

इस तरह के पैकेज में सिस्टम पर स्थापित की जाने वाली फाइलें होती हैं। इसके अलावा उनके पास एक कंट्रोल फाइल है । उस फ़ाइल में स्क्रिप्ट होती है जिसे पैकेजिंग सिस्टम को एक विशिष्ट स्थिति में निष्पादित करना चाहिए; तथाकथित अनुचर लिपियाँ । उन लिपियों को विभाजित किया गया है:

  • preinst: सिस्टम में फाइल की स्थापना से पहले फाइलहाइरार्की
  • postinst: स्थापना के बाद
  • prerm: स्थापना रद्द करने से पहले
  • postrm: स्थापना रद्द करने के बाद

एक दिलचस्प तस्वीर है, एक नए पैकेज की स्थापना की प्रक्रिया दिखा रही है:

स्थापना

अधिक नियंत्रण-फाइलें भी हैं, सबसे महत्वपूर्ण इस प्रकार हैं:

  • control: पैकेज की पहचान करने के लिए निर्भरता की सूची , और अन्य उपयोगी जानकारी
  • conffiles: कॉन्फिग फाइलों की सूची (आमतौर पर उन में /etc)
  • debian-binary: इसमें डेब-पैकेज संस्करण शामिल है, वर्तमान में 2.0
  • md5sums: सत्यापन के लिए पैकेज में प्रत्येक फ़ाइल के md5sums की एक सूची
  • templates: स्थापना के दौरान त्रुटि विवरण और संवाद के साथ एक फ़ाइल

11

वास्तविक अंडर-हुड सामान के लिए, आपको Apt स्रोत को हथियाने की आवश्यकता होगी। यदि आपके पास स्रोत रिपॉजिटरी सक्षम है तो काफी सरल:

apt-get source apt

apt-getआदेश अपने आप में रहता है cmdline/apt-get.cc। यह पढ़ने के लिए एक दर्द है, लेकिन अधिकांश apt-getकार्यों को वहां काफी व्यापक रूप से लिखा गया है। हालाँकि, स्थापना को एक DoInstallफ़ंक्शन के माध्यम से मैप किया जाता है जो अंदर रहता है apt-private/private-install.{cc,h}

आपको यह याद रखना होगा कि उपयुक्त-सिक्का सिक्के का केवल एक पक्ष है।
dpkgवास्तविक स्थापना को संभाल रहा है, लेकिन सीधे DoInstallइसके बारे में नहीं जानता है dpkgapt-getवास्तव में आश्चर्यजनक रूप से पैकेज-मैनेजर अज्ञेय है। सभी कार्यक्षमता के माध्यम से सार हैapt-pkg/package-manager.cc

मैं केवल संक्षेप में देख रहा हूं, लेकिन वहां भी मैं यह नहीं देख सकता कि यह वास्तव में dpkgसिस्टम से कैसे जुड़ता है । इसमें से कुछ के माध्यम से autoconfigured लगता है apt-pkg/aptconfiguration.ccलेकिन यह एक गहरा कुआँ है। आप इसे जानने के लिए दिन बिता सकते हैं।

स्रोत प्रलेखन हालांकि अच्छा है। आप प्रत्येक फ़ाइल के माध्यम से जाने और वास्तव में क्या हो रहा है यह जानने के लिए शीर्ष लेख को पढ़ने की तुलना में बदतर काम कर सकते हैं।


6

वहाँ कुछ शानदार जवाब यहां जो इस छोटे से एक से बेहतर कर रहे हैं, लेकिन कुछ आप आप एक पैकेज प्रबंधक द्वारा किए गए परिवर्तनों का एक बेहतर समझ प्राप्त करने में मदद करने की सोच सकते है डोकर । आप एक कंटेनर में किए गए बदलावों का उपयोग कर सकते हैं docker diff <container>और यह आपको सभी परिवर्तनों को दिखाएगा। यह विशेष रूप से हुड के तहत एक नज़र रखने के लिए उपयोगी है कि apt-get installयह देखने के लिए कि सिस्टम क्या करता है। त्वरित खोज से आपको इसे लागू करने में सहायता के लिए कई संसाधन मिलेंगे ।


1
अपनी बात देने के लिए धन्यवाद। डॉकटर कंटेनर में, मैंने फ़ायरफ़ॉक्स स्थापित किया और दूसरे टर्मिनल टैब में मैंने कंटेनर के अंतर की बारीकी से निगरानी की और सीखा कि कंटेनर में सभी फाइलें क्या बदल रही हैं। इसने मुझे और अधिक स्पष्ट रूप से समझने में मदद की।
अभ्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.