Cosa fa apt-get install sotto il cofano?


60

Cosa fa il apt-get install ...comando?

Quando inserisco il apt-get install ...comando, ci sono alcuni testi che appaiono sullo schermo, ma che non hanno abbastanza informazioni per me. Voglio sapere se qualche file viene creato / modificato, qualsiasi servizio viene avviato e altre attività ...

C'è qualche .shfile eseguito durante l' apt-get install ...esecuzione? In tal caso, come posso vedere il contenuto di quel shfile?

Il motivo di questa domanda è di recente che ho provato a installare Tomcat7 con apt-get install tomcat7. Tutto funziona bene fino all'installazione tomcat7-admin(applicazione web gestore), il server non ha risposto a nessuna richiesta. Ci ho provato molte volte e questo succede sempre.




visitare wiki.debian.org/Apt per ulteriori dettagli
Pandya,

2
Dal 14.04, apt-getviene sostituito da apt. La sostituzione non è ancora completa, ma funziona per install, upgradee dist-upgradetra gli altri.
Paddy Landau,

@PaddyLandau È un sostituto corretto o un'utilità extra / wrapper?
muru,

Risposte:


49

Principalmente, apt-getfa le seguenti cose:

  • controlla le dipendenze (e chiede di installarle),
  • scarica il pacchetto, lo verifica e quindi dice dpkgdi installarlo.

dpkg volontà:

  • estrarre il pacchetto e copiare il contenuto nella posizione corretta e verificare la presenza di file preesistenti e modifiche su di essi,
  • eseguire script del manutentore del pacchetto : preinst, postinst, (e prerm, postrmprima che questi, se un pacchetto è in fase di aggiornamento)
  • eseguire alcune azioni in base ai trigger

Potresti essere interessato agli script del manutentore, che di solito si trovano in /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Questi di solito sono script di shell, ma non esiste una regola rigida. Per esempio:

$ 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

In breve : apt-get installfa tutto ciò che è necessario affinché il sistema possa eseguire correttamente la nuova applicazione software installata.

Più a lungo:

Preliminari:

Dalla manpage :

Tutti i pacchetti richiesti dai pacchetti specificati per l'installazione verranno anche recuperati e installati.

Tali pacchetti sono archiviati in un repository nella rete. Quindi, apt-getscarica tutti quelli necessari in una directory temporanea ( /var/cache/apt/archives/). Saranno scaricati da un server Web o ftp. Sono specificati nel cosiddetto sources.list; un elenco di repository. Da quel momento in poi vengono installati uno per uno in modo procedurale.

I primi sono quelli che non hanno ulteriori dipendenze; quindi nessun altro pacchetto deve essere installato per loro. In questo modo, altri pacchetti (che in precedenza avevano dipendenze) ora non hanno più dipendenze. Il sistema continua a ripetere questo processo fino a quando non vengono installati i pacchetti specificati.

Ogni pacchetto viene sottoposto a una procedura di installazione.

Installazione del pacchetto:

Nelle distribuzioni Linux basate su Debian, come Ubuntu, quei pacchetti sono in un formato standardizzato definito chiamato: deb - Il formato del pacchetto binario Debian .

Tale pacchetto contiene i file da installare sul sistema. Inoltre contengono un file di controllo . Tale file contiene script che il sistema di packaging dovrebbe eseguire in una situazione specifica; i cosiddetti script del manutentore . Tali script sono suddivisi in:

  • preinst: prima dell'installazione dei file nella gerarchia dei file di sistema
  • postinst: dopo l'installazione
  • prerm: prima della disinstallazione
  • postrm: dopo la disinstallazione

C'è un'immagine interessante, che mostra la procedura di installazione di un nuovo pacchetto:

installazione

Esistono anche più file di controllo, i più importanti sono i seguenti:

  • control: Un elenco delle dipendenze e altre informazioni utili per identificare il pacchetto
  • conffiles: Un elenco di file di configurazione (in genere quelli in /etc)
  • debian-binary: contiene la versione del pacchetto deb, attualmente 2.0
  • md5sums: Un elenco di md5sums di ciascun file nel pacchetto per la verifica
  • templates: Un file con descrizioni degli errori e finestre di dialogo durante l'installazione

11

Per le cose reali sotto il cofano , dovrai prendere la fonte Apt. Abbastanza semplice se hai i repository di origine abilitati:

apt-get source apt

Il apt-getcomando stesso vive cmdline/apt-get.cc. È un dolore da leggere ma la maggior parte delle apt-getazioni sono spiegate abbastanza ampiamente lì dentro. L'installazione tuttavia è mappata attraverso una DoInstallfunzione in cui risiede apt-private/private-install.{cc,h}.

Devi ricordare che apt-get è solo un lato della medaglia.
dpkgsta gestendo l'installazione effettiva ma DoInstallnon ne è a conoscenza dpkg. apt-getin realtà è sorprendentemente agnostico dal gestore di pacchetti. Tutta la funzionalità viene sottrattaapt-pkg/package-manager.cc

Sto solo guardando brevemente, ma anche lì non riesco a vedere dove questo si attacca effettivamente ai dpkgsistemi. Alcuni di questi sembrano essere autoconfigurati, apt-pkg/aptconfiguration.ccma questo è un pozzo profondo. Potresti passare giorni a svelare questo.

La documentazione di origine è buona. Potresti fare cose peggiori che passare attraverso ogni file e leggere l'intestazione per capire cosa sta realmente accadendo.


6

Ci sono alcune risposte fantastiche qui che sono migliori di questa breve, ma qualcosa che potresti prendere in considerazione per aiutarti a capire meglio le modifiche apportate da un gestore di pacchetti è Docker . Puoi differire le modifiche apportate in un contenitore usando docker diff <container>e ti mostrerà tutte le modifiche. Ciò è particolarmente utile per dare un'occhiata sotto il cofano per vedere cosa apt-get installfa un sistema. Una rapida ricerca ti fornirà diverse risorse per aiutarti a implementarlo.


1
Grazie per aver dato il tuo punto. Nel contenitore Docker, ho installato Firefox e in un'altra scheda terminale ho monitorato attentamente il diff del contenitore e ho appreso cosa tutti i file stanno cambiando nel contenitore. Mi ha aiutato a capire più chiaramente.
circa il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.