Come creare rapidamente un repository apt locale per pacchetti casuali usando una distribuzione Linux basata su Debian?


20

Alcune situazioni richiedono l'installazione manuale di un pacchetto locale tramite dpkg -i <packagename>. A volte può essere ulteriormente utile sfruttare la funzionalità di aptquel pacchetto, quindi la domanda è:

Come si crea rapidamente un repository locale per pacchetti casuali usando una distribuzione linux basata su Debian - come Xubuntu 13.04 / Ubuntu?


Cordiali saluti. La solita cosa è seguire dpkg -i <packagename>con apt-get -f installdi tirare in pacchetti richiesti. Inoltre, la solita cosa per creare un repository apt per Debian è reprepro.
Faheem Mitha,

Ho trovato utile reprepro
Gilles 'SO- smetti di essere malvagio' il

Grazie per i vostri commenti. @Faheem Mitha: puoi per favore espandere brevemente il motivo per cui sarebbe necessario correre aptcon --fix-brokendopo l'installazione di un pacchetto locale con dpkg -i? Dpkg non se ne occuperebbe? Ho letto che potrebbe essere richiesto la prima volta che viene eseguito apt? @ FM & Gilles: Informazioni su reprepro . Sembra utile se riuscissi a farlo funzionare (non sono sicuro di dir struct, contenuto di 3 file o parametri in fase di esecuzione). Riproverò e aggiornerà o pubblicherà la domanda completa.

1
@ illuminÉ: dpkgnon risolve le dipendenze, ma lo aptfa. dpkgavviserà delle dipendenze rotte, ma è di livello basso, quindi non tenterà di risolverle. Il dpkg -i *.debseguita da apt-get -f installuna procedura standard. Esiste un bug nella lista dei desideri per aptgestire se stesso il caso dell'installazione del pacchetto locale, e c'è anche una patch, penso, ma non è ancora stata implementata. Vedere apt-get install potrebbe installare anche file di pacchetto locali , originariamente archiviati nel 1999.
Faheem Mitha,

@ illuminÉ Esprimere interesse per questa funzione non farà male. Penso che più persone esprimono (educatamente) interesse, più è probabile che venga implementato. Nota anche che gdebi è un'alternativa, come indicato nella segnalazione di bug. Questo è parte del motivo per cui non è stato implementato, credo. Sebbene avere una tale funzionalità di base parte di apt sarebbe meglio che avere questa funzionalità come parte di un altro pacchetto.
Faheem Mitha,

Risposte:


29

Ciò dovrebbe essere distinto dalla situazione in cui si sta tentando di replicare un albero pacchetto completo da un repository ufficiale e la priorità delle fonti di ottimizzazione . Per pacchetti casuali si intendono pacchetti virtuali, pacchetti che vengono compilati localmente o copiati in modo frammentario a scopo di test. Ecco una semplice configurazione basata su documentazione ormai obsoleta .

Innanzitutto, crea una directory per ospitare i pacchetti:

mkdir <packagedir>

Quindi sposta i file del pacchetto .deb lì. Esegui questo comando dalla directory sopra quella appena creata (assicurati che le autorizzazioni lo consentano!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Ora creare un file con estensione .lista /etc/apt/sources.list.d/con il contenuto:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

e aggiorna il database apt:

apt-get update

A questo punto i pacchetti nel nostro repository locale possono essere installati come qualsiasi altro pacchetto utilizzando apt-get install <packagename>. Quando vengono aggiunti nuovi pacchetti al repository locale, il dpkg-scanpackagescomando prescritto deve essere emesso nuovamente per aggiornare il file Packages.gz e aptdeve essere aggiornato prima che i nuovi pacchetti siano resi disponibili. Speriamo che questo possa essere utile a scopo di test .


6
Con il nuovo apt 1.1, è necessario [trusted=yes]tra debe l' file:///URI (vedere la sources.list(5)pagina man), altrimenti apt-get updatefallisce a causa della mancanza di firma.
vinc17,

2

Se vuoi creare un repository con la struttura completa di cui hai bisogno per strumenti come debootstrap, il modo più semplice che ho trovato è:

  1. Creare una directory del repository.

    # mkdir -p /opt/debian
    
  2. Crea una sottodirectory conf.

    # mkdir /opt/debian/conf
    
  3. Creare un file / opt / debian / conf / distributions con contenuti come questo (regolare in base alla distribuzione che si sta utilizzando):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Importa il tuo pacchetto con reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Importa un sacco di pacchetti con una shell for-loop, ad esempio tutto dalla cache APT:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Questo creerà un archivio non firmato. Può essere usato con debootstrap con l'opzione --no-check-gpg.

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.