it-swarm.it

Come impostare un repository APT?

Vorrei impostare un repository APT su un server che fornirà un paio di pacchetti.

C'è un modo per configurarne uno senza installare alcun software sul server?

Come devono essere organizzati i file?


Modifica: Devo fare qualcosa di sbagliato ... qualcuno può aiutarmi, per favore? Ho il repository su http://quickmediasolutions.com/apt/dists

Non sono sicuro di dove o cosa, ma qualcosa non è configurato correttamente. Al momento ho solo un pacchetto ed è per tutte le architetture.

Ecco cosa è stato aggiunto al mio /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

Configurare un repository banale è molto semplice usando dpkg-scanpackages. Questa pagina spiega come impostare un repository banale e questo spiega come usarlo (scorrere fino all'esempio 4).

26
Michael Crenshaw

Basta impostare un repository semplice ma firmato su un server web. Poiché la maggior parte degli altri tutorial è in qualche modo datata o ingombrante, proverò a replicare la procedura qui. La configurazione iniziale richiede un po 'di sforzo, ma il semplice script di build ne semplifica la gestione. E puoi semplicemente inserire nuovi file *.deb, quindi aggiornare o lasciare che un processo cron lo gestisca.

Genera alcune chiavi di firma

Innanzitutto è necessario creare una chiave di firma gpg per i pacchetti e il repository. Renderlo una (4) chiave di firma RSA, nessuna password e dargli un unico $KEYNAME quando richiesto. (Altri esempi assumono "dpkg1" come nome chiave.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Ho detto nessuna password, perché il tuo server web non ha una scimmia integrata per digitarla ripetutamente. E i pacchetti firmati e il repository sono pensati solo per soddisfare i reclami dei gestori degli aggiornamenti. Carica entrambe le chiavi nella nuova directory del repository /apt/ sul tuo server web, ma elimina la chiave secret.gpg dopo l'inizializzazione.

Aggiorna script CGI

Questo è il semplice aggiornamento dello script Shell/CGI per questo:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

Le tre righe gpg devono essere eseguite una sola volta, per inizializzare la configurazione GPG in alcune directory $GNUPGHOME (sopra la radice del documento). Elimina solo il secret.gpg dopo il successo.

Una caratteristica unica di questo piccolo script Shell è che accetta tutti i file *.deb che si inseriscono, ma cerca anche in modo ricorsivo (a partire da un livello superiore) per gli altri e li collega in modo simbolico. (Richiede .htaccess Options FollowSymLinks infine.)

È possibile eseguire questo script manualmente come CGI o per cron-job. Ma nascondilo, o meglio ancora spostalo fuori dalla radice del documento.

Perché è un repository apt "banale" ha bisogno della seguente voce apt-sources.list:

deb http://example.org/deb/  ./    # Simple signed repo

È adatto per repository a architettura singola e se non ti aspetti centinaia di pacchetti.

Firma del pacchetto

Anche la firma dei singoli pacchetti è banale, una volta configurate le chiavi gpg:

dpkg-sig -k dpkg1 -s builder *.deb

(Questo dovrebbe essere fatto sulla workstation su cui sono creati i pacchetti, non sul server web del repository.)

Archivio non firmato

Se non hai bisogno di pacchetti firmati, puoi ridurre lo script di aggiornamento a solo:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Che può ancora essere utilizzato da utenti medi, ma necessita di un flag personalizzato per apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

Ma per favore non usare la bandiera trusted=yes abitualmente per tutto, o se in realtà non sei sicuro del pacchetto Origin.

Per usabilità

Per gli utenti finali, basta inserire un HEADER.html nella directory del repository. Apaches mod_auto_index anteporrà tale nota:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | Sudo apt-key add -</kbd>
</dl>

Alternative

Al giorno d'oggi ci sono alcuni strumenti per automatizzare la gestione dei repository. E ci sono anche hoster online di repository e servizi di creazione di pacchetti ( gemfury , packagecloud , bintray ecc.)

  • Un'alternativa piuttosto conveniente è prm . È uno script Ruby, che crea repository complessi APT e YUM. (Ma speriamo solo che RPM alla fine si esaurisca presto ..) - È meglio installarlo per gem install prm.

  • E ho anche scritto una piccola sceneggiatura per automatizzare allo stesso modo: http://apt.include-once.org/apt-phparchive - Per favore, non che sia eccessivamente robusto e scritto in PHP (per una volta, questo è un caso), ed era originariamente pensato per i bundle DEB, RPM-over-APT e Phar.

Poiché questo è strettamente correlato alla domanda originale, ci sono anche strumenti per costruire pacchetti Debian più facilmente. Un po 'obsoleto: EPM . Molto più contemporaneo: FPM . E il mio personale fork di ciò: XPM (approccio più pigro per impacchettare le app del linguaggio di scripting.)

40
mario

Sì. Puoi farlo. Hai solo bisogno di organizzare i file nel modo giusto e creare i file di indice. Se si inserisce la struttura della directory nella radice del documento del server Web, è possibile accedere ai pacchetti tramite il server Web.

Qui è una descrizione dettagliata di come i file devono essere organizzati e come vengono creati i file indice.

Puoi anche usare uno strumento chiamato reprepro se sei disposto a installare quel pacchetto. Ciò renderà l'amministrazione un po 'più comoda.

7
txwikinger

Forse puoi anche considerare un Launchpad PPA

2
ups

Per chiunque si trovi ad affrontare questo errore dopo aver seguito la risposta di Mario:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

fai quanto segue:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Ho inserito i miei file *.deb nella cartella debs.

0
theeminence