reprepro repository debian

Ciao,

stavo cercando un software che mi permettesse di creare un repository su debian.

Conslutando l’ elenco di quelli disponibili ho deciso di provarne alcuni: dal piu’ spicciolo apt-ftparchive al piu’ completo dak ma alla fine, ho scelto di usare reprepro
Questo perchè, per le mie esigenze, dak offre troppo mentre apt-ftparchive è un po’ troppo ‘macchinoso’ specie nella generazione dei file di configurazione anche se ha il grande vantaggio di essere già incluso nel pacchetto apt-utils e quindi, se avessi optato per quello, non avrei dovuto installare nient’ altro.
Ma veniamo a reprepro: mi serviva un repository locale, remoto e consultabile via web e per installaro è stato sufficiente un

apt-get install reprepro

Una volta installato, ho creato la directory /var/www/packages

mkdir -p /var/www/packages

All’ interno della stessa, ho creato la directory conf

mkdir /var/www/packages/conf

Dentro questa directory, è necessario creare il file distributions nel quale, inseriremo

Origin: Fabrizio Regalli <fabreg@fabreg.it>
Label: Debian personal and test packages
Suite: unstable
Codename: sid
Architectures: i386 source
Components: main
Description: Unofficial Debian packages: use at your own risk.
SignWith: <mykey>

Nel dettaglio:

Origin: Il vostro nome
Label: una etichetta che distnguerà il vostro repository. Potete scrivere quello che volete.
Suite: potete scegliere tra stable,testing o unstable
Architectures: le architetture dei vostri pacchetti
Components: corrisponde alla radice
Description: una descrizione, anche qui ci potete scrivere quello che volete.
SignWith: <il vostro KEYID>

Inoltre, se volete evitare di specificare ogni volta dei parametri di configurazione, potete inserirli nel file conf/options Il mio è cosi’ configurato:

verbose
ask-passphrase
basedir .

Che in dettaglio significa:

vebose: mostra le operazioni che svolge
ask-passphrase: chiede la password della chiave pgp
basedir . : viene utilizzata la directory corrente

Ora che è tutto pronto per ospitare i nostri file, non ci resta che eseguire l’ upload degli stessi nel repository. Io preferisco portare *sempre* il file .changes perchè in questo modo, vengono importati anche i .dsc ed i .deb.

Portiamoci ora all’ interno della directory precedentemente creata (/var/www/packages) e digitiamo

reprepro include unstable /tmp/piwik_1.1.1-1_i386.changes
Ci verrà chiesta due volte la password della chiave pgp: una per firmare il file .change l’ altra per firmare il .dsc e a video vedremo

Exporting indices...
<myidkey> Fabrizio Regalli (Unix system administrator) <fabreg@fabreg.it> needs a passphrase
Please enter passphrase:
<myidkey> Fabrizio Regalli (Unix system administrator) <fabreg@fabreg.it> needs a passphrase
Please enter passphrase:

In questo modo il pacchetto piwik_1.1.1-1_all.deb verrà inserito nelle apposite directory. La struttura completa quindi, sarà cosi’ suddivisa:

:/var/www/packages# find . -type f
./db/checksums.db
./db/release.caches.db
./db/contents.cache.db
./db/packages.db
./db/references.db
./db/version
./conf/options
./conf/distributions
./pool/main/p/piwik/piwik_1.1.1-1_all.deb
./pool/main/p/piwik/piwik_1.1.1-1.debian.tar.gz
./pool/main/p/piwik/piwik_1.1.1-1.dsc
./pool/main/p/piwik/piwik_1.1.1.orig.tar.gz
./dists/unstable/main/source/Sources.gz
./dists/unstable/main/source/Release
./dists/unstable/main/binary-i386/Release
./dists/unstable/main/binary-i386/Packages
./dists/unstable/main/binary-i386/Packages.gz
./dists/unstable/Release.gpg
./dists/unstable/Release
./dists/unstable/InRelease

Per aggiungere invece un solo pacchetto:
reprepro includedeb unstable /tmp/piwik_1.1.1-1_all.deb

Per conoscere la versione del pacchetto
reprepro list unstable piwik</pre>

Per rimuovere un pacchetto
reprepro remove unstable piwik

Per verificare la consistenza
reprepro check unstable

Vi suggerisco una lettura della manpage di reprepro per una lista di comandi completa.

Uso del repository

Sui vari client sarà necessario inserire in /etc/apt/sources.list la seguente riga:

deb http://packages.fabreg.it unstable main

Ricordiamoci di aggiungere la chiave del repository:

gpg --keyserver subkeys.pgp.net --recv <keyID>
gpg --export --armor <keyID> | sudo apt-key add -

Per poter utilizzare i nuovi pacchetti presenti nel repository è sufficiente un
apt-get update

Configurare Apache2

Ora che abbiamo terminato con l’ installazione e la configurazione di reprepro, non ci resta che configurare apache2 per rendeve visibile il nostro repository dal web.

Per me che uso apache2, è stato sufficiente crare un VirtulHosts mettendo all’ interno di /etc/apache2/sites-available/packages le seguenti righe:

<VirtualHost *:80>
ServerAdmin fabreg@fabreg.it
ServerName packages.fabreg.it
DocumentRoot /var/www/packages
# Nego l' accesso alla directory conf
<Directory "/var/www/packages/conf">
Order allow,deny
Deny from all
Satisfy all
</Directory>
# Nego l' accesso alla dirctory db
<Directory "/var/www/packages/db">
Order allow,deny
Deny from all
Satisfy all
</Directory>
ErrorLog /var/log/apache2/packages_error.log
CustomLog /var/log/apache2/packages_access.log combined
</VirtualHost>

Abilitare il VirtulHost con a2ensite packages e caricare nuovamente apache con /etc/init.d/apache2 reload

Se tutto è andato a buon fine, collegandovi ad http://packages.vostrosito.it dovreste visualizzare le varie cartelle del vostro repository ed i relativi pacchetti.

About Fabrizio Regalli

Mi occupo d'informatica che è anche la mia passione. Attualmente lavoro presso Fastweb S.p.A. come consulente. Nel tempo libero, quando posso, mi dedico alla creazione di siti web, blog, e in generale mi piace sperimentare tutto ciò che riguarda l' opensource. Inoltre, offro consulenza sui principali CMS (jooomla, wodrpress, drupal) Per qualsiasi altra informazione non scritta in queste poche righe di presentazione, non esitate a contattarmi.