Login Logout

HowtoDebian/Repository

Howto Dépôt Debian

Il peut parfois être intéressant de disposer d’un dépôt Debian privé pour distribuer des packages qui ne sont pas prêts à être ajoutés à l’archive de Debian ou alors qui ne sont pas d’intérêt public.

Il existe plusieurs manières de monter un dépôt Debian.

apt-ftparchive

Une façon “old school” est d’avoir un répertoire avec des paquets Debian dedans, exemple stretch/ puis de lancer les commandes suivantes :

$ apt-ftparchive packages stretch/ > stretch/Packages
$ apt-ftparchive sources stretch/ > stretch/Sources
$ apt-ftparchive contents stretch/ > stretch/Contents
$ apt-ftparchive release kernel/ > kernel/Release
$ gzip -f stretch/Sources
$ #gzip -f stretch/Packages
$ gzip -f stretch/Contents

Pour Debian 9 (Stretch), le fichier Release doit impérativement être signé via GPG :

$ gpg -abs -o Release.gpg Release

Le répertoire doit ensuite être accessible en HTTP et l’on pourra ajouter à son sources.list :

deb http://pub.example.com/ stretch/

Note : l’erreur W: Conflicting distribution: http://pub.example.com stretch/ Release (expected stretch/ but got ) peut être ignorée

reprepro

# apt install reprepro

On a besoin d’une clé GPG pour signer le dépôt. Voici quelques éléments importants :

  • Il est important de ne pas ajouter de “Comment” quand GPG nous le demande
  • Pour un dépôt, on choisit une clé de type RSA en mode signature seulement
  • On choisi une clef la plus longue possible, soit 4096
$ gpg2 --gen-key

Configuration

Nous choisissons de placer notre dépôt Debian dans /var/www/repos :

# mkdir -p /var/www/repos/debian/conf

On crée par la suite /var/www/repos/debian/conf/distributions, le fichier qui servira à reprepro pour identifier les différentes versions de Debian à distribuer. Le fichier devrait parler de lui-même. Pour chaque version de Debian, on ajoute un bloc supplémentaire à la fin du fichier. N’oubliez pas de:

  • remplacer le fingerprint GPG par le vôtre
  • spécifier les architectures que vous souhaitez supporter
Origin: Evolix public repository
Label: Evolix public repository
Codename: jessie
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97

Origin: Evolix public repository
Label: Evolix public repository
Codename: wheezy
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97

Origin: Evolix public repository
Label: Evolix public repository
Codename: squeeze
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97

Origin: Evolix public repository
Label: Evolix public repository
Codename: kernel
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97

Finalement, on crée /var/www/repos/debian/conf/options, un fichier d’options pour se simplifier la vie :

verbose
basedir /var/www/repos/debian
ask-passphrase

Pour que les gens puissent profiter de votre dépôt signé, n’oubliez pas d’exporter votre clé GPG publique et de la rendre accessible :

$ gpg2 --armor --output /var/www/repos/debian/ma_clef.gpg.asc --export <fingerprint>

Et voilà, reprepro est prêt à être utilisé !

Apache

Pour que votre dépôt soit disponible en ligne, nous allons ajouter un VHost Apache via /etc/apache2/sites-available/repository.conf:

<VirtualHost *:80>
	ServerName debian.example.com

	DocumentRoot /var/www/repos

	ErrorLog ${APACHE_LOG_DIR}/error.log

	<Directory /var/www/repos/ >
        	# We want the user to be able to browse the directory manually
        	Options Indexes FollowSymLinks Multiviews
                Require all granted
	</Directory>

	<Directory "/var/www/repos/debian/db/">
                Require all denied
	</Directory>

	<Directory "/var/www/repos/debian/conf/">
                Require all denied
	</Directory>

	<Directory "/var/www/repos/debian/incoming/">
                Require all denied
	</Directory>

</VirtualHost>

Ajouter des packages à son dépôt

Votre dépôt est maintenant en ligne, mais est toujours vide. Pour y ajouter des packages, lancez la commande suivante :

# reprepro -b /var/www/repos/debian includedeb jessie mon_super_package.deb

reprepro vous demande alors le mot de passe de votre clé GPG, signe votre package, crée les dossiers nécessaires et génère tous les fichiers pour vous.

Vous avez maintenant un dépôt Debian !

Télécharger des packages à partir du dépôt

Pour télécharger des packages de votre archive, il est tout d’abord nécessaire d’installer la clé GPG qui a servi à signer les packages :

# apt-key adv --fetch-key <http://mondepot.fqdn.org/debian/ma_clef.gpg.asc>

Une fois que cela est fait, il ne vous reste plus qu’à ajouter votre dépôt dans votre sources.list : ~ deb http://debian.example.com/debian/ jessie main ~

Particularités importantes

Parce que reprepro se veut un utilitaire simple créer des dépôts Debian (comparé à dak ou encore mini-dak), certaines choses ne sont pas possible :

  • Il n’est pas possible d’avoir plusieurs versions du même package dans une même distribution. La version plus ancienne est automatiquement remplacée par la plus récente. Il est cependant possible d’avoir des versions différentes pour chaque distribution.
  • Un package ne peut pas avoir la même version dans plusieurs distributions tout en ayant un SHAsum différent. Dans ce cas, il est nécessaire de changer la version du package pour les distinguer (ex. 1.3.3-1+jessie sur jessie et 1.3.3-1+wheezy sur wheezy). Ceci n’est cependant pas un problème si le package est le même (même SHAsum) à travers plusieurs distributions.