relecture et ajout apt-ftparchive

This commit is contained in:
gcolpart 2017-07-10 00:50:43 +02:00
parent 0bb4c25444
commit c8e6ba73cd

View file

@ -1,61 +1,65 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# How to 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. Ce tutoriel explique comment monter un dépôt simple à utiliser avec `reprepro`.
Il existe plusieurs manières de monter un dépôt Debian.
# Installer & configurer reprepro
## apt-ftparchive
Avant de commencer, il est nécessaire d'installer `reprepro`:
Une façon "old school" est d'avoir un répertoire avec des paquets Debian dedans, exemple `stretch/` puis de lancer les commandes suivantes :
~~~
# sudo apt install reprepro
$ 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
~~~
## Générer une clef GPG
Nous souhaitons que nos packages soient automatiquement signés lorsque l'on les ajoute à notre dépôt. Cela permet de vérifier qu'ils proviennent bel et bien de notre archive. Pour ce faire, il va être nécessaire de générer une clef GPG.
Le user avec lequel nous allons créer la clef sera celui avec lequel vous manipulerez votre dépôt. Avant de créer une clef GPG, vous devriez vous assurer de configurer GPG de manière sécuritaire. Si vous utilisez le `gpg.conf` par défaut, `apt-get` affichera des erreurs quand les gens tenteront de télécharger des packages de votre dépôt.
Un excellent guide écrit par Daniel Kahn Gillmor - maintainer GPG dans Debian - est ["disponible ici"](https://riseup.net/en/security/message-security/openpgp/best-practices). Si vous ne souhaitez pas lire le guide d'un bout à l'autre, il est possible de ["télécharger ce fichier"](https://raw.githubusercontent.com/ioerror/duraconf/master/configs/gnupg/gpg.conf) et le mettre dans `~/.gnupg/gpg.conf`. Il regroupe l'ensemble des pratiques recommandées par le guide.
Une fois que vous vous êtes assuré d'avoir une configuration adéquate, il vous faut générer votre clef. Si vous êtes connectés sur un serveur headless, il vous faut rouler les commandes suivantes pour avoir assez d'entropie:
Pour Debian 9 (Stretch), le fichier `Release` doit impérativement être signé via GPG :
~~~
# sudo apt install rng-tools
# sudo rngd -r /dev/urandom
$ gpg -abs -o Release.gpg Release
~~~
On génère par la suite notre clef. Voici quelques éléments important:
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 choisi normalement une clef de type RSA en mode signature seulement
* On choisi une clef la plus longue possible, soit 4096
~~~
# gpg2 --gen-key
$ gpg2 --gen-key
~~~
Une fois que vous avez créé votre clef, vous pouvez afficher son fingerprint (vous en aurez besoin pour continuer la configuration de `reprepro`) ainsi:
### Configuration
Nous choisissons de placer notre dépôt Debian dans `/var/www/repos` :
~~~
# gpg2 --list-secret-keys
> Key fingerprint = 677F 54F1 FA86 81AD 8EC0 BCE6 7AEA C4EC 6AAA 0A97
# mkdir -p /var/www/repos/debian/conf
~~~
## Configurations
Nous allons placer notre dépôt Debian dans `/var/www/repos`. Si vous souhaitez le placer ailleurs, il suffit d'adapter les instruction suivantes en y remplaçant l'emplacement que vous avez choisi.
~~~
# sudo mkdir -p /var/www/repos/debian/conf
~~~
On crée par la suite `/var/www/repos/debian/conf/distributions`, le fichier qui servira a `reprepro` à 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:
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
@ -94,7 +98,7 @@ Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97
~~~
Finalement, on créé `/var/www/repos/debian/conf/options`, un fichier d'options pour se simplifier la vie:
Finalement, on crée `/var/www/repos/debian/conf/options`, un fichier d'options pour se simplifier la vie :
~~~
verbose
@ -102,25 +106,22 @@ 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 clef GPG publique et de la rendre accessible:
Pour que les gens puissent profiter de votre dépôt signé, n'oubliez pas d'exporter votre clef GPG publique et de la rendre accessible :
~~~
# gpg2 --armor --output /var/www/repos/debian/ma_clef.gpg.asc --export <fingerprint>
$ gpg2 --armor --output /var/www/repos/debian/ma_clef.gpg.asc --export <fingerprint>
~~~
Et voilà! `reprepro` est prêt à être utilisé!
Et voilà, `reprepro` est prêt à être utilisé!
## Apache
Pour que votre dépôt soit disponible en ligne, nous allons ajouter un VHost à un serveur `apache`. Attention! `apache` nécessite souvent une configuration plus étoffée que celle de l'installation par défaut pour être utilisé de manière sécuritaire! Plus d'informations sur `apache` [/wiki/HowtoLAMP/Apache ici].
Pour que votre dépôt soit disponible en ligne, nous allons ajouter un VHost [Apache](HowtoApache) via `/etc/apache2/sites-available/repository.conf`:
Une fois qu'`apache` est installé, on crée un nouveau VHost dans `/etc/apache2/sites-available/repository.conf`:
~~~
~~~{.apache}
<VirtualHost *:80>
ServerName mondepot.fqdn.org
ServerName debian.example.com
ServerAdmin foo@bar.org
DocumentRoot /var/www/repos
ErrorLog ${APACHE_LOG_DIR}/error.log
@ -146,16 +147,7 @@ Une fois qu'`apache` est installé, on crée un nouveau VHost dans `/etc/apache2
</VirtualHost>
~~~
Il ne suffit plus qu'à activer le VHost et relancer `apache`:
~~~
# sudo a2ensite /etc/apache2/sites-available/repository.conf
# sudo service apache2 reload
~~~
Bien évidemment, il vous sera nécessaire de rediriger le DNS du nom de domaine que vous avez choisi vers votre serveur `apache`.
# Ajouter des packages à son dépôt
### 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:
@ -167,7 +159,7 @@ Votre dépôt est maintenant en ligne, mais est toujours vide. Pour y ajouter de
Vous avez maintenant un dépôt Debian!
# Télécharger des packages à partir du dépôt
### 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 clef GPG qui a servi à signer les packages:
@ -178,12 +170,12 @@ Pour télécharger des packages de votre archive, il est tout d'abord nécessair
Une fois que cela est fait, il ne vous reste plus qu'à ajouter votre dépôt dans `/etc/apt/sources.list`:
~~~
deb <http://mondepot.fqdn.org/debian/> jessie main
deb http://debian.example.com/debian/ jessie main
~~~
# Particularités importantes
### 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:
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.