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 *.deb
file, quindi aggiornare o lasciare che un processo cron lo gestisca.
Genera alcune chiavi di firma
Per prima cosa devi creare una gpg
chiave di firma per i pacchetti e il tuo repository. Renderlo un (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 /apt/
directory del repository sul tuo server web, ma elimina la secret.gpg
chiave dopo l' inizializzazione.
Aggiorna script CGI
Questo è il semplice script di shell / CGI di aggiornamento per esso:
#!/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 gpg
righe 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
successo successivo.
Una caratteristica unica di questo piccolo script di shell è che accetta tutti i *.deb
file in cui ci si lancia, ma cerca anche in modo ricorsivo (a partire da un livello superiore) per gli altri e li collega simbolicamente. (Richiede .htaccess Options FollowSymLinks
alla fine.)
È 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 apt-sources.list
voce:
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 in cui sono creati i pacchetti, non sul server web del repository.)
Repository 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 trusted=yes
bandiera abitualmente per tutto, o se in realtà non sei sicuro dell'origine del pacchetto.
Per usabilità
Per gli utenti finali, rilasciare a HEADER.html
nella directory del repository. Apache mod_auto_index
anticiperà quella 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 persino repository online hoster e servizi di creazione di pacchetti ( gemfury , packagecloud , bintray ecc.)
Un'alternativa piuttosto conveniente è prm . È uno script Ruby, che crea repository APT e YUM complessi. (Ma speriamo solo che RPM finisca presto prima o poi ..) - È meglio installato per gem install prm
.
E ho anche scritto una piccola sceneggiatura per automatizzare questo in modo simile: 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 DEB e bundle 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.)