Che cosa fa apt-get install sotto i cofani?

55

Che cosa fa il comando apt-get install ... ?

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

Esiste un file .sh eseguito quando viene eseguito apt-get install ... ? In tal caso, come posso vedere il contenuto di quel file sh ?

Il motivo di questa domanda è che recentemente ho provato ad installare tomcat7 con apt-get install tomcat7 . Tutto funziona bene finché non installo tomcat7-admin (applicazione web manager), il server non risponde a nessuna richiesta. Ho provato questo molte volte, e questo succede sempre.

    
posta TrungDQ 24.10.2014 - 12:20
fonte

4 risposte

47

Per lo più, apt-get esegue le seguenti operazioni:

  • controlla le dipendenze (e chiede di installarle),
  • scarica il pacchetto, lo verifica e poi dice a dpkg di installarlo.

dpkg :

  • estrai il pacchetto e copia il contenuto nella posizione corretta e controlla i file e le modifiche preesistenti,
  • esegui script di manutentore del pacchetto : preinst , postinst , (e prerm , postrm prima di questi, se un pacchetto è in fase di aggiornamento)
  • esegue 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 sono in genere script di shell, ma non esiste una regola complessa. Ad 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
    
risposta data muru 24.10.2014 - 12:30
fonte
29

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

Più lungo:

Preliminari:

Dalla manpage :

  

Tutti i pacchetti richiesti dai pacchetti specificati per l'installazione   sarà anche recuperato e installato.

Questi pacchetti sono memorizzati su un repository nella rete. Quindi, apt-get scarica tutti i file necessari in una directory temporanea ( /var/cache/apt/archives/ ). Verranno scaricati da un server Web o ftp. Sono specificati nel cosiddetto sources.list ; una lista di repository. Da quel momento in poi vengono installati uno per uno proceduralmente.

I primi sono quelli che non hanno altre dipendenze; quindi nessun altro pacchetto deve essere installato per loro. Attraverso questo, altri pacchetti (che prima avevano dipendenze) ora non hanno più dipendenze. Il sistema continua a ripetere il processo più e più volte fino a quando non vengono installati i pacchetti specificati.

Ogni pacchetto viene sottoposto a una procedura di installazione.

Installazione pacchetto:

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

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

  • preinst : prima dell'installazione dei file nel file fileshierarchy
  • 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:

Ci sono 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 (di solito quelli in /etc )
  • debian-binary : contiene la versione del pacchetto deb, attualmente 2.0
  • md5sums : un elenco di md5sum di ciascun file nel pacchetto per la verifica di
  • templates : un file con descrizioni degli errori e finestre di dialogo durante l'installazione
risposta data chaos 24.10.2014 - 13:44
fonte
10

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

apt-get source apt

Il comando apt-get vive in cmdline/apt-get.cc . È un problema da leggere, ma la maggior parte delle azioni di apt-get sono spiegate abbastanza estesamente. L'installazione, tuttavia, è mappata attraverso una funzione DoInstall che vive in apt-private/private-install.{cc,h} .

Devi ricordare che apt-get è solo un lato della medaglia.
dpkg sta gestendo l'effettiva installazione ma DoInstall non sa circa dpkg direttamente. apt-get è in realtà sorprendentemente agnostico di gestore di pacchetti. Tutte le funzionalità sono astratte tramite apt-pkg/package-manager.cc

Sto solo guardando brevemente, ma anche lì non riesco a vedere dove ciò si attesti effettivamente ai sistemi dpkg . Alcuni di questi sembrano essere autoconfigurati tramite apt-pkg/aptconfiguration.cc ma questo è un pozzo profondo. Potresti passare giorni a sbrogliarlo.

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

    
risposta data Oli 24.10.2014 - 13:04
fonte
6

Qui ci sono alcune risposte fantastiche che sono meglio di questa breve, ma qualcosa che potresti prendere in considerazione per aiutarti a comprendere meglio le modifiche apportate da un gestore di pacchetti è Docker . Puoi diffare le modifiche apportate in un contenitore usando docker diff <container> e mostrerà tutte le modifiche. Questo è particolarmente utile per dare un'occhiata sotto il cofano per vedere cosa fa apt-get install a un sistema. Una ricerca rapida ti porterà diversi risorse per aiutare a implementare questo.

    
risposta data L0j1k 25.10.2014 - 22:52
fonte

Leggi altre domande sui tag