Dépôt personnalisé de paquets .deb (Debian / Ubuntu)

Si vous avez créés vos propres paquets « .deb » pour Debian et Ubuntu, il faut un dépôt de paquets pour permettre aux machines de récupérer ces paquets et de les mettre à jour facilement.

Le format d’un paquet est le suivant « foo_VVV-RRR_AAA.deb » :

  • VVV => la version
  • RRR => la révision
  • AAA => l’architecture

Le serveur qui gère les dépôts possède un Apache configuré et qui est accessible via l’URL (HTTP ou HTTPS) :

http://depot-deb/

Le serveur Apache pointe sur le dossier suivant :

/var/www/depot-deb

Génération de la clé GPG

Pour authentifier vos paquets, vous pouvez générer une clé GPG pour les signer. Ensuite, la clé sera utilisée pour certifier votre dépôt personnel.

Pour générer la clé (il faudra définir un nom et une adresse email) :

cd /root
gpg --gen-key
5 (pour choisir RSA)
4096
O

Ce processus peut prendre du temps. Laissez la console en l’état et ouvrez une nouvelle console.

Lors de la création d’un clé GPG, il faut générer des activités systèmes pour que des chaines aléatoires soient utilisées en copiant des fichiers, lister des répertoires, etc.
Vous rencontrerez surement le message ci-dessous :

Il n'y a pas assez d'octets aléatoires disponibles. Faites autre chose
pour que l'OS puisse amasser plus d'entropie ! (il faut 277 octets de plus)

Pour connaitre le nombre d’octets aléatoires générés par votre système, ouvrez une nouvelle console SHELL :

cat /proc/sys/kernel/random/entropy_avail

Pour accélérer cette génération aléatoire, voici le petit script que j’utilise :

#!/bin/bash

while true
do
cp -rp /etc/ /tmp/.
rm -r /tmp/etc/
done

L’opération devrait se terminer au bout de plusieurs minutes. N’oubliez pas de tuer le processus du script ci-dessus car il ne se terminera jamais à cause du « while true ».

Une fois la clé générée, on peut l’afficher :

gpg --list-keys

/root/.gnupg/pubring.gpg
------------------------
pub   1024R/EA8AE8AD 2012-01-20
uid                  user-test <user-test@domaine.fr>

Il faut maintenant exporter la clé pour être rendue publique, en effet, les machines qui accéderont à ce dépôt personnel demanderont la clé car les paquets sont signés :

gpg --armor --export user-test@domaine.fr >> /var/www/depot-deb/key/depot-deb.gpg.key

Ainsi, pour récupérer la clé à partir d’une machine, elle est accessible via :

http://depot-deb/key/depot-deb.gpg.key

Installation de reprepro

Le paquet REPREPRO permet de créer son propre dépôt personnel. L’installation est rapide :

apt-get install reprepro

La configuration est à placer dans un répertoire dédié :

mkdir /var/www/depot-deb/conf/

Il faut ensuite définir tous les systèmes pour lesquels nos paquets pourront être installés. Dans mon cas, il s’agit de Debian Squeeze (pour mettre pour Lenny, ajoutez simplement le même bloc dans ce même fichier distributions en remplaçant squeeze par Lenny) :

vi /var/www/depot-deb/conf/distributions

Origin: Depot-Debian
Label: User-test
Suite: stable
Codename: squeeze
Architectures: i386 amd64 source
Components: main non-free contrib
Description: Paquets pour Debian
SignWith: yes

Le paramètre SignWith est spécifié à yes car nos paquets sont signés.

Je laisse la définition du paramètre override même s’il n’est pas activé.

vi /var/www/depot-deb/conf/override.squeeze
verbose
ask-passphrase
basedir .

Construction du dépôt

Avant de pouvoir enregistrer nos paquets, il faut construire l’arborescence du dépôt. La commande va lire le fichier /var/www/depot-deb/conf/distributions :

reprepro --ask-passphrase -Vb /var/www/depot-deb export

Voici le résultat (il faudra spécifier votre mot de passe pour la clé GPG créée précédemment) :

Created directory "/var/www/depot-deb/db"
Exporting squeeze...
Created directory "/var/www/depot-deb/dists"
Created directory "/var/www/depot-deb/dists/squeeze"
Created directory "/var/www/depot-deb/dists/squeeze/main"
Created directory "/var/www/depot-deb/dists/squeeze/main/binary-i386"
Created directory "/var/www/depot-deb/dists/squeeze/main/binary-amd64"
Created directory "/var/www/depot-deb/dists/squeeze/main/source"
Created directory "/var/www/depot-deb/dists/squeeze/non-free"
Created directory "/var/www/depot-deb/dists/squeeze/non-free/binary-i386"
Created directory "/var/www/depot-deb/dists/squeeze/non-free/binary-amd64"
Created directory "/var/www/depot-deb/dists/squeeze/non-free/source"
Created directory "/var/www/depot-deb/dists/squeeze/contrib"
Created directory "/var/www/depot-deb/dists/squeeze/contrib/binary-i386"
Created directory "/var/www/depot-deb/dists/squeeze/contrib/binary-amd64"
Created directory "/var/www/depot-deb/dists/squeeze/contrib/source"
6CCC2757EA8AE8AD user-test <user-test@domaine.fr> needs a passphrase
Please enter passphrase:
Successfully created '/var/www/depot-deb/dists/squeeze/Release.gpg.new'
6CCC2757EA8AE8AD user-test <user-test@domaine.fr> needs a passphrase
Please enter passphrase:
Successfully created '/var/www/depot-deb/dists/squeeze/InRelease.new'

Ajout d’un paquet .deb

Le dépôt est prêt à accueillir les paquets .deb pour les rendre accessible aux autres machines.

Pour notre exemple :

  • le nom logique du paquet se nomme mon-paquet
  • le nom physique est mon-paquet_1.2-1_amd64.deb

Ajouter un paquet :

reprepro --ask-passphrase -Vb /var/www/depot-deb includedeb squeeze /root/mon-paquet_1.2-1_amd64.deb

Supprimer un paquet :

reprepro --ask-passphrase -vb /var/www/depot-deb remove squeeze mon-paquet

Lister les paquets non référencés :

reprepro --ask-passphrase -vb /var/www/depot-deb dumpunreferenced

Effacer les paquets non référencés :

reprepro --ask-passphrase -vb /var/www/depot-deb deleteunreferenced

Reréférencer les paquets :

reprepro --ask-passphrase -vb /var/www/depot-deb rereference

Côté client

Comme votre serveur peut fournir les paquets .deb avec reprepro, il faut maintenant configurer vos serveurs (ou PC clients) pour les récupérer.

vi /etc/apt/sources.list.d/depot-deb.list

# depot-deb repository
deb http://depot-deb/ squeeze main

Pour éviter le message d’erreur à cause de l’absence de clé, il faut l’ajouter dans le trousseau de clés :

wget -O - http://depot-deb/key/depot-deb.gpg.key | apt-key add -

Une fois la clée ajoutée, on met à jour :

apt-get update

Puis notre paquet est déployable sur la cible :

apt-get install mon-paquet
Taggé , , , , , , .Lien pour marque-pages : Permaliens.

2 réponses à Dépôt personnalisé de paquets .deb (Debian / Ubuntu)

  1. SysOP dit :

    Salut Ludovic,

    Merci pour ce tutoriel, l’un des plus clair que j’ai pu voir. Du très bon boulot.

    Par contre, si on suit ton tutoriel pour /etc/apt/sources.list.d/depot-deb.list, ça ne fonctionne pas si on met : deb http://depot-deb/private/ squeeze main. Mettre ça c’est OK : deb http://depot-deb/ squeeze main

    Encore Merci 😉

    SysOP

  2. Ludovic dit :

    Bonjour,

    Bien vu, je corrige de suite !
    Belle coquille car je ne vois pas ce que venait faire ce « private » 😉

    Merci 🙂

Laisser un commentaire