HowtoDebian/Repository: Document reprepro mirror mode

This commit is contained in:
David Prevot 2022-10-21 11:42:59 +02:00
parent 60c220c14b
commit f668c0fb66

View file

@ -30,7 +30,7 @@ Le répertoire doit ensuite être accessible en HTTP et l'on pourra ajouter à
deb http://pub.example.com/ stretch/
~~~
## reprepro
## reprepro
~~~
# apt install reprepro
@ -174,3 +174,102 @@ Parce que `reprepro` se veut un utilitaire simple créer des dépôts Debian (co
* 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.
### Mode miroir
Pour faire un miroir de dépôt ne proposant pas daccès rsync, `reprepro` permet de faire une partie du travail.
**TODO** : Peut-être que [debmirror](https://packages.debian.org/stable/debmirror) serait une meilleure alternative.
Nous réutiliserons les fichiers Release (y compris leur signature dorigine), donc il nest pas nécessaire de configurer une clef PGP pour ces dépôts (il est néanmoins utile dobtenir la partie publique de la clef utilisée sur le dépôt dorigine pour vérifier la signature des fichiers dorigine).
Voici un exemple de la configuration pour un miroir partiel (amd64) de eLTS pour Stretch. `ExportOptions: noexport` permet de ne pas reconstruire le répertoire `dists/`.
~~~
$ head -n-1 /var/www/repos/extended-lts/conf/*
==> /var/www/repos/extended-lts/conf/distributions <==
Origin: Freexian
Label: Freexian-Extended-LTS
Suite: wheezy
Codename: wheezy-lts
Version: 7
Architectures: amd64 source
Components: main contrib non-free
Description: Extended LTS Updates for Debian 7 Wheezy
Update: wheezy-lts
Log: /var/www/repos/extended-lts/log/wheezy-lts.log
ExportOptions: noexport
==> /var/www/repos/extended-lts/conf/options <==
basedir /var/www/repos/extended-lts/
outdir /srv/mirrors/extended-lts/
gnupghome /var/www/repos/extended-lts/.gnupg
==> /var/www/repos/extended-lts/conf/updates <==
Name: wheezy-lts
Method: http://deb.freexian.com/extended-lts
Suite: wheezy
Components: main contrib non-free
Architectures: amd64 source
VerifyRelease: A07310D369055D5A
~~~
La première synchronisation (manuelle) est longue (à faire dans un `screen`).
~~~bash
$ wget https://deb.freexian.com/extended-lts/archive-key.gpg
$ gpg --homedir /var/www/repos/extended-lts/.gnupg --import archive-key.gpg
$ umask 022; reprepro --confdir /var/www/repos/extended-lts/conf update
~~~
Mise à jour automatique (via cron):
~~~bash
$ crontab -l
1 * * * * perl -e 'sleep int(rand(1800))' && umask 022 && reprepro --silent --confdir /home/miroir/extended-lts/conf update
~~~
Enfin, comme il manque les fichiers `Release` avec cette méthode, un script comme le suivant
permet den faire une copie (à lancer en cron à la suite).
~~~bash
#!/bin/sh
#
# Recursive copy of /dists directory for mirror without rsync
#
set -e
mirror=https://deb.freexian.com/extended-lts/dists/
# Unwanted versions i.e, directories (its a full mirror)
reject=wheezy\|jessie\|stretch
# Unwanted architecures
noarch=arm64\|armel\|armhf\|i386
# Number of directories to trim: All but the last
# (3: protocol, hostname and last directory).
cutdir=$(( $(echo $mirror | tr '/' ' ' | wc -w) - 3 ))
# Should not need to be changed, might be taken from URL mirror…
target=dists
# Start from scratch
rm -rf $target/
wget \
--quiet \
--recursive \
--level=inf \
--reject *.html \
--reject-regex "(/($reject)/|$noarch)" \
--no-parent \
--no-host-directories \
--cut-dirs=$cutdir \
$mirror
# Clean up temporary files
find $target/ -name index.html.tmp -delete
~~~