Créer un serveur de paquets

Il est possible d’avoir votre propre serveur de paquets si vous désirez diffuser vos paquets.

La configuration suivante se fera sur un serveur Apache2.

On va commencer par créer un début d’arborescence. Par exemple

/var/www/packages

On pourra ainsi avoir différentes versions comme des paquets Debian ou Ubuntu :

/var/www/packages/debian
/var/www/packages/ubuntu

Il faut également créer un dossier conf dans chaque répertoire (debian et ubuntu dans ce cas). Dans ce dossier, doit se trouver un fichier distribution de la sorte

Origin: Votre Nom
Label: Votre Nom
Suite: stable
Codename: stable
Version: all
Architectures: i386 amd64
Components: main
Description: Votre commentaire.
SignWith: [key-id]

L’instruction SignWith est nécessaire uniquement si vous souhaitez signer vos paquets (voir plus bas dans l’article).

Pour récupérer votre [key-id]

gpg --list-keys

Donne le résultat suivant

/home/.../.gnupg/pubring.gpg
-------------------------------
pub   2048R/[key-id-1] expiration-date
uid                  John Doe 
sub   2048R/[key-id-2] expiration-date

Dans notre exemple, [key-id] vaut [key-id-2] (oui, on utilise une sub-key).

Une fois fini, on va créer un vhost spécifique dans Apache :

<VirtualHost *:80>
  DocumentRoot /var/www/packages
  ServerName packages.domain.com

  <Directory "/var/www/packages/">
    Options Indexes FollowSymLinks Multiviews
    Order allow,deny
    Allow from all
  </Directory>

  <Directory "/var/www/packages/*/db/">
    Order deny,allow
    Deny from all
  </Directory>

  <Directory "/var/www/packages/*/conf/">
    Order deny,allow
    Deny from all
  </Directory>

</VirtualHost>

La suite est réalisée grace à reprepro (apt-get install reprepro), via la commande suivante :

reprepro -Vb [repertoire] includedeb [distribution] [paquet]

Par exemple

reprepro -Vb /var/www/packages/debian includedeb stable /package/myagent.deb

reprepro va s’occupper de créer et placer les fichiers correctement dans les répertoires.

Il est aussi possible de gérer le paquet pour ubuntu via la commande suivante (si le paquet est compatible)

reprepro -Vb /var/www/packages/ubuntu includedeb stable /package/myagent.deb

On peut aussi exporter la clé GPG dans le serveur

gpg --armor --output /var/www/packages/server.gpg.key --export [key-id]

Vu que l’on a signé notre dépôt avec notre clé GPG, il faut l’ajouter à l’ordinateur distant avant d’ajouter notre serveur

wget -O - http://packages.domain.com/server.gpg.key | apt-key add -

On peut ensuite ajouter un fichier /etc/apt/sources.list.d/domain.com.list avec en contenu

deb http://packages.domain.com/debian stable main

Ensuite, un petit coup de apt-get update puis apt-get install myagent et le tour est joué.