Come funziona apt-get?


34

Bene, capisco come posso usare apt-get {install|upgrade|remove} mypackagesper installare, aggiornare o rimuovere i binari, nonché i loro file di dati di configurazione e dipendenze (in realtà, removerimuoverò solo i binari a meno che non vengano forniti flag aggiuntivi).

Non sto cercando come viene usato come mandescrive questo, ma ad alto livello quello che sta facendo. Il mio obiettivo finale è quello di creare un mezzo per installare e gestire alcuni software personalizzati (creati da un file make) su più macchine remote, e ho bisogno di saperne di più sul processo. Se le risposte a questa domanda si basano sulla distribuzione utilizzata, si prega di personalizzare Debian.

Oltre a come funziona, ho le seguenti domande specifiche:

  1. In che modo il client che sta accedendo al repository apt tiene traccia dei file?
  2. Il repository deve essere ospitato sullo stesso sistema operativo (ad es. Il repository apt può essere ospitato su redhat)?
  3. Come vengono specificati i percorsi per installare i file? Questo è specificato dal .debfile?
  4. In che modo una macchina remota accede al repository? È solo ftp (s) o http (s)?
  5. La macchina che ospita il repository esegue software speciali (come gitlab per un repository git) o ​​è solo un file system strutturato?

Risposte:


47

Devi dare un'occhiata a https://wiki.debian.org/Packaging : il tutorial sul packaging ti aiuterà molto, così come parti della nuova guida per i manutentori.

Per quanto riguarda le tue domande, al fine di:

  1. Il repository contiene file "list". Ad esempio, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatescarica questi file di elenco e li archivia /var/lib/apt/lists. I file dell'elenco elencano tutti i pacchetti inclusi un mucchio di metadati e un URL relativo per trovare il .deb in. (Sono file di testo semplice leggibili dall'uomo, quindi puoi semplicemente guardarlo).

  2. Il sistema operativo non ha importanza. Potresti ospitarlo su Windows, se lo desideri. (Beh, potresti avere problemi con i nomi dei file che a Windows non piacciono.) (Vedi anche # 4 e # 5).

  3. Sì, è all'interno del file deb. Un file deb è in realtà un archivio (usando ar). All'interno sono presenti alcuni file tar; uno di questi viene (essenzialmente) estratto /.

  4. È solo HTTP (o HTTPS, o FTP, o ... apt-get supporta molti protocolli). Niente di speciale, però. Si noti che ci sono file di rilascio, firmati con gpg, che garantiscono l'integrità anche senza HTTPS. I mirror Debian usano principalmente HTTP, non HTTPs. (Alcuni supportano HTTPS anche per la riservatezza).

  5. È solo un filesystem strutturato.

Una rapida panoramica di alto livello su come apt-get interagisce con una fonte di pacchetti:

  1. Configura quali fonti guardare nel tuo file sources.list. Considera una linea come:

    deb http://http.us.debian.org/debian/ stretch main
    

    debdice che questa è una fonte per ottenere file .deb (binari); poi c'è il prefisso URL, suite / release ("stretch") e componente ("main").

  2. apt-get ha un elenco di architetture, lo ottiene da dpkg. Diciamo che lo dpkg --print-architectureè amd64. apt-get può ora creare gli URL da cui sta per essere scaricato, combinando il prefisso URL, la parola "dists", la suite, il componente e l'architettura. Quindi applica alcuni nomi di file fissi, come "Packages.xz". Questo dà l'URL sopra (nel n. 1). Ci sono alcuni altri file con nomi / percorsi definiti, come il file di rilascio http://http.us.debian.org/debian/dists/stretch/Release e la sua firma (lo stesso, con .gpg aggiunto). Questi sono tutti file di testo normale (eventualmente compressi). Il file di rilascio contiene checksum per altri file che apt-get sta per scaricare, come Packages.xz.

  3. Il file Packages.xz elenca tutti i pacchetti in quella suite / nome in codice / architettura. Fornisce inoltre il percorso in cui si trova quel file; per esempio pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Quando chiedi a apt-get di scaricare un pacchetto, usa quella posizione + l'URL di base per scaricare il pacchetto, quindi quel pacchetto è su http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. L'altra directory interessante è sourceinvece di binary-amd64. È usato per le tue deb-srcvoci; contiene informazioni sui pacchetti sorgente (ed è altrimenti abbastanza simile).

  6. Ci sono alcune altre cose (tutte facoltative, credo) che possono far parte del repository (cioè disponibili via HTTP): differenze tra le diverse versioni del file Packages.xz; traduzioni delle descrizioni dei pacchetti, un elenco completo di ogni file installabile e del pacchetto a cui appartiene (Contents-amd64.gz, utilizzato ad esempio da apt-file, non da apt-get) ecc. Probabilmente questi non sono rilevanti per te, ma puoi vederli tutti sfogliando http://http.us.debian.org/debian/dists/stretch/ ; la maggior parte di essi sono file di testo semplice.

Tutti questi file sono in chiaro. In teoria possono essere creati a mano. In pratica, tutti usano uno di questi strumenti di generazione del repository . Qui - e avverto che questa è stata una scelta fatta molto tempo fa, quindi potrebbe essere obsoleta - usiamo mini-dinstall. L'output di questi strumenti sono file ordinari o, nel peggiore dei casi, collegamenti simbolici. Puoi risincronizzarli su qualunque server web desideri.


Sconfiggimi ;-). unix.stackexchange.com/q/285635/86440 copre l'aspetto integrità delle cose (punto 4). Il supporto FTP sul lato mirror è stato disattivato di recente IIRC.
Stephen Kitt,

Per quanto riguarda il numero 2, debian.org/doc/manuals/distribute-deb/… afferma diversamente. Grazie
user1032531 l'

Per quanto riguarda il n. 5, qual è lo scopo di wiki.debian.org/DebianRepository/…
user1032531

1
@ user1032531 # 2. La creazione di pacchetti viene eseguita al meglio su Debian. Ma il tuo server web può essere qualsiasi cosa. (In genere, si crea il pacchetto sul proprio host di build, possibilmente anche l'intera struttura del repository, quindi lo si carica sul server web.) # 5. Questi strumenti ti aiutano a costruire il filesystem strutturato, inclusi tutti i file delle liste, i file delle versioni firmate, ecc. (Probabilmente sono anche i più facili da eseguire su Debian).
derobert l'

2
I pacchetti @FaheemMitha (di alcuni tipi di compressione, i moderni apt preferiscono .xz) sono definitivamente scaricati, finiscono qui /var/lib/apt/lists/. Il contenuto è scaricato da apt-file e auto-apt.
derobert,
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.