Projet

Général

Profil

MiroirDebian » Historique » Version 6

diartenyx 8CAT, 07/06/2021 19:00

1 2 Baptiste Jonglez
h1. Mise en place d'un miroir debian de type « pull » avec ftpsync
2 1 Fabien Dupont
3 1 Fabien Dupont
{{>toc}}
4 1 Fabien Dupont
5 2 Baptiste Jonglez
h2. Présentation
6 1 Fabien Dupont
7 2 Baptiste Jonglez
Un miroir de type « push » est un miroir pour lequel c'est l'upstream (debian) qui pousse les mises à jour lorsqu'elles sont disponibles. Celà permet d'avoir un miroir mis à jour très très souvent mais c'est plutôt compliqué à mettre en place et, pour un miroir non-public ou à public limité, ça ne présente pas un grand intérêt.
8 1 Fabien Dupont
9 2 Baptiste Jonglez
Un miroir de type « pull » est un miroir qui va vérifier puis piocher les mises à jours dans un autre miroir s'il y en a de disponibles. Cette vérification est exécutée régulièrement, généralement plusieurs fois par jour, à la convenance de son administrateur.
10 1 Fabien Dupont
11 2 Baptiste Jonglez
Ftpsync ("repo git":https://ftp-master.debian.org/git/archvsync.git/) est "recommandé par debian":http://www.debian.org/mirror/ftpmirror pour la mise en place de miroir partiels ou complets en push ou pull. C'est basiquement une série de scripts permettant d'exécuter rsync avec les bons paramètres pour répondre aux besoins décrits dans des fichiers de configuration.
12 1 Fabien Dupont
13 2 Baptiste Jonglez
Ici, on va voir comment installer un miroir « pull » avec ftpsync.
14 1 Fabien Dupont
15 2 Baptiste Jonglez
h2. Utilisation
16 2 Baptiste Jonglez
17 2 Baptiste Jonglez
Une fois la mise en place effectuée, l'utilisation se fait via le fichier +/etc/apt/sources.list+.
18 2 Baptiste Jonglez
19 2 Baptiste Jonglez
h3. Debian stable (wheezy)
20 2 Baptiste Jonglez
21 2 Baptiste Jonglez
+/etc/apt/sources.list+
22 2 Baptiste Jonglez
<pre>
23 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ wheezy main contrib
24 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian-security/ wheezy/updates main contrib
25 2 Baptiste Jonglez
# wheezy-updates, previously known as 'volatile'
26 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ wheezy-updates main contrib
27 2 Baptiste Jonglez
# Backports, à décommenter si besoin
28 2 Baptiste Jonglez
#deb http://apt.tetaneutral.net/debian/ wheezy-backports main contrib
29 2 Baptiste Jonglez
</pre>
30 2 Baptiste Jonglez
31 2 Baptiste Jonglez
h3. Debian oldstable (squeeze)
32 2 Baptiste Jonglez
33 2 Baptiste Jonglez
+/etc/apt/sources.list+
34 2 Baptiste Jonglez
<pre>
35 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ squeeze main contrib
36 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian-security/ squeeze/updates main contrib
37 2 Baptiste Jonglez
# squeeze-updates, previously known as 'volatile'
38 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ squeeze-updates main contrib
39 2 Baptiste Jonglez
# Long-term support (mises à jour de sécurité)
40 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ squeeze-lts main contrib
41 2 Baptiste Jonglez
</pre>
42 2 Baptiste Jonglez
43 2 Baptiste Jonglez
h3. Debian testing (jessie)
44 2 Baptiste Jonglez
45 2 Baptiste Jonglez
+/etc/apt/sources.list+
46 2 Baptiste Jonglez
<pre>
47 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ jessie main contrib
48 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian-security/ jessie/updates main contrib
49 2 Baptiste Jonglez
# jessie-updates, previously known as 'volatile'
50 2 Baptiste Jonglez
deb http://apt.tetaneutral.net/debian/ jessie-updates main contrib
51 2 Baptiste Jonglez
# Backports, à décommenter si besoin
52 2 Baptiste Jonglez
#deb http://apt.tetaneutral.net/debian/ jessie-backports main contrib
53 2 Baptiste Jonglez
</pre>
54 2 Baptiste Jonglez
55 5 diartenyx 8CAT
h3. Debian stable (Stretch) (LTS end-of-life: 30 June 2022)
56 5 diartenyx 8CAT
57 5 diartenyx 8CAT
+/etc/apt/sources.list+
58 5 diartenyx 8CAT
<pre>
59 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian/ stretch main contrib
60 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian/ stretch main contrib
61 5 diartenyx 8CAT
62 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian-security/ stretch/updates main contrib
63 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian-security/ stretch/updates main contrib
64 5 diartenyx 8CAT
65 6 diartenyx 8CAT
# stretch-updates, previously known as 'volatile'
66 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian/ stretch-updates main contrib
67 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian/ stretch-updates main contrib
68 5 diartenyx 8CAT
69 5 diartenyx 8CAT
# Backports, à décommenter si besoin
70 5 diartenyx 8CAT
#deb http://apt.tetaneutral.net/debian/ stretch-backports main contrib
71 5 diartenyx 8CAT
#deb-src http://apt.tetaneutral.net/debian/ stretch-backports main contrib
72 5 diartenyx 8CAT
</pre>
73 5 diartenyx 8CAT
74 5 diartenyx 8CAT
h3. Debian stable (Buster)
75 5 diartenyx 8CAT
76 5 diartenyx 8CAT
+/etc/apt/sources.list+
77 5 diartenyx 8CAT
<pre>
78 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian/ buster main contrib
79 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian/ buster main contrib
80 5 diartenyx 8CAT
81 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian-security/ buster/updates main contrib
82 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian-security/ buster/updates main contrib
83 5 diartenyx 8CAT
84 5 diartenyx 8CAT
# buster-updates, previously known as 'volatile'
85 5 diartenyx 8CAT
deb http://apt.tetaneutral.net/debian/ buster-updates main contrib
86 5 diartenyx 8CAT
deb-src http://apt.tetaneutral.net/debian/ buster-updates main contrib
87 5 diartenyx 8CAT
88 5 diartenyx 8CAT
# Backports, à décommenter si besoin
89 5 diartenyx 8CAT
#deb http://apt.tetaneutral.net/debian/ buster-backports main contrib
90 5 diartenyx 8CAT
#deb-src http://apt.tetaneutral.net/debian/ buster-backports main contrib
91 5 diartenyx 8CAT
</pre>
92 5 diartenyx 8CAT
93 1 Fabien Dupont
h2. Installation
94 1 Fabien Dupont
95 2 Baptiste Jonglez
Afin de sécuriser un poil l'installation, ftpsync doit être exécuté en tant qu'utilisateur sans privilèges. Ici, l'utilisateur s'appelera _mirror_ et son home directory sera dans /pub/mirror. Il faut prévoir quelques centaines de Go d'espace libre pour un miroir complet.
96 1 Fabien Dupont
97 1 Fabien Dupont
<pre>
98 1 Fabien Dupont
# adduser --home=/pub/mirror --no-create-home --disabled-password mirror
99 1 Fabien Dupont
</pre>
100 1 Fabien Dupont
101 2 Baptiste Jonglez
L'installation de ftpsync se fait bêtement en clonant le répostitory git dans le home de l'utilisateur mirror.
102 1 Fabien Dupont
103 1 Fabien Dupont
<pre>
104 1 Fabien Dupont
# git clone https://ftp-master.debian.org/git/archvsync.git/ /pub/mirror
105 1 Fabien Dupont
# chown -R mirror: mirror /pub/mirror
106 1 Fabien Dupont
# ls -l /pub/mirror
107 1 Fabien Dupont
total 36
108 1 Fabien Dupont
drwxr-xr-x 2 mirror mirror  4096 May  2 07:42 bin
109 1 Fabien Dupont
drwxr-xr-x 3 mirror mirror  4096 May  5 19:12 etc
110 1 Fabien Dupont
drwxr-xr-x 2 mirror mirror 12288 May 11 13:30 log
111 1 Fabien Dupont
drwxr-xr-x 4 mirror mirror  4096 Mar 14 11:49 mirrorcheck
112 1 Fabien Dupont
-rw-r--r-- 1 mirror mirror 10882 Mar 14 11:49 README
113 1 Fabien Dupont
</pre>
114 1 Fabien Dupont
115 1 Fabien Dupont
h2. Configuration
116 1 Fabien Dupont
117 2 Baptiste Jonglez
La configuration se passe dans ~mirror/etc. Ce répertoire contient plusieurs fichiers, certains pour les miroirs en mode « pull » (ftpsync*.conf), d'autres pour les miroirs en mode « push » (le reste). On ne va donc éditer que ftpsync*.conf.
118 1 Fabien Dupont
119 2 Baptiste Jonglez
Un fichier d'exemple (ftpsync.conf.sample) est fourni pour détailler tous les paramètres possibles. Voilà déjà un fichier de configuration minimaliste mais « qui juste marche » pour cloner un miroir debian :
120 1 Fabien Dupont
121 1 Fabien Dupont
<pre>
122 1 Fabien Dupont
# cat ~mirror/etc/ftpsync-debian.conf
123 1 Fabien Dupont
MIRRORNAME="apt.tetaneutral.net"
124 1 Fabien Dupont
TO="/pub/mirror/debian"
125 1 Fabien Dupont
RSYNC_HOST="ftp.nl.debian.org"
126 1 Fabien Dupont
RSYNC_PATH="debian"
127 1 Fabien Dupont
RSYNC_EXTRA="-6"
128 1 Fabien Dupont
RSYNC_OPTIONS2="--max-delete=40000 --delay-updates --delete --delete-after --delete-excluded"
129 1 Fabien Dupont
MAILTO="sysadmin@wtf.net"
130 1 Fabien Dupont
ERRORSONLY="true"
131 4 Julien Aubé
ARCH_EXCLUDE="alpha arm hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mipsel mips powerpc s390 s390x sh sparc"
132 1 Fabien Dupont
LOGROTATE=14
133 1 Fabien Dupont
LOCK="${TO}/Archive-Update-in-Progress-debian-${MIRRORNAME}"
134 1 Fabien Dupont
</pre>
135 1 Fabien Dupont
136 2 Baptiste Jonglez
Les paramètres sont les suivants :
137 1 Fabien Dupont
138 2 Baptiste Jonglez
* MIRRORNAME: le nom du miroir (interne à ftpsync, sans importance donc).
139 2 Baptiste Jonglez
* TO: le chemin vers le répertoire où sera cloné le miroir.
140 1 Fabien Dupont
* RSYNC_HOST: l'adresse du serveur rsync depuis lequel on va cloner le miroir.
141 1 Fabien Dupont
* RSYNC_PATH: le chemin que l'on va cloner sur le serveur rsync.
142 2 Baptiste Jonglez
* RSYNC_EXTRA: des options qui seront passées à rsync lors des deux passes du clonage (ici, on va utiliser IPv6).
143 2 Baptiste Jonglez
* RSYNC_OPTIONS1: des options qui seront passées à rsync lors de la première passe du clonage (ici, y'en a pas).
144 2 Baptiste Jonglez
* RSYNC_OPTIONS2: des options qui seront passées à rsync lors de la deuxième passe du clonage (ici, on supprime ce qui ne sert plus).
145 2 Baptiste Jonglez
* MAILTO: l'adresse mail à laquelle envoyer le log du clonage.
146 2 Baptiste Jonglez
* ERRORSONLY: si « true », le log du clonage ne sera envoyé qu'en cas d'erreur.
147 4 Julien Aubé
* ARCH_EXCLUDE: les architectures que l'on veut exclure (ici, il ne restera que i686, amd64 , armhf et armel).
148 1 Fabien Dupont
* LOGROTATE: le nombre de fichiers de log que l'on veut garder dans ~mirror/log/.
149 2 Baptiste Jonglez
* LOCK: le chemin vers un fichier de lock pour éviter que deux clonages soient exécutés en simultané.
150 1 Fabien Dupont
151 2 Baptiste Jonglez
Pour les autres paramètres, se référer à ~mirror/etc/ftpsync.conf.sample.
152 1 Fabien Dupont
153 2 Baptiste Jonglez
Un autre exemple minimal pour le clonage du miroir « debian-security » (mises à jour de sécurité) :
154 1 Fabien Dupont
155 1 Fabien Dupont
<pre>
156 1 Fabien Dupont
# cat ~mirror/etc/ftpsync-security.conf
157 1 Fabien Dupont
MIRRORNAME="apt.tetaneutral.net"
158 1 Fabien Dupont
TO="/pub/mirror/debian-security"
159 1 Fabien Dupont
RSYNC_HOST="ftp.nl.debian.org"
160 1 Fabien Dupont
RSYNC_PATH="debian-security"
161 1 Fabien Dupont
RSYNC_EXTRA="-6"
162 1 Fabien Dupont
RSYNC_OPTIONS2="--max-delete=40000 --delay-updates --delete --delete-after --delete-excluded"
163 1 Fabien Dupont
MAILTO="sysadmin@kafe-in.net"
164 1 Fabien Dupont
ERRORSONLY="true"
165 4 Julien Aubé
ARCH_EXCLUDE="alpha arm hppa hurd-i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mipsel mips powerpc s390 s390x sh sparc"
166 1 Fabien Dupont
LOGROTATE=14
167 1 Fabien Dupont
LOCK="${TO}/Archive-Update-in-Progress-security-${MIRRORNAME}"
168 1 Fabien Dupont
</pre>
169 1 Fabien Dupont
170 2 Baptiste Jonglez
h2. Exécution périodique
171 1 Fabien Dupont
172 2 Baptiste Jonglez
L'exécution du clonage d'un miroir se fait avec la commande ~mirror/bin/ftpsync. Sans paramètres, le fichier de configuration ~mirror/etc/ftpsync.conf est utilisé. Il est toutefois possible de spécifier le fichier de configuration utilisé en ajoutant un paramètre « sync:archive:nomfichier ». Dans ce cas, le fichier de configuration ~mirror/etc/ftpsync-nomfichier.conf sera utilisé.
173 1 Fabien Dupont
174 2 Baptiste Jonglez
Ici, nous avons deux fichiers de configuration (ftpsync-debian.conf et ftpsync-security.conf) pour deux miroirs à cloner. Le miroir debian sera cloné toutes les 4 heures (en différentiel, bien sûr) et le miroir security toutes les heures.
175 1 Fabien Dupont
176 1 Fabien Dupont
<pre>
177 1 Fabien Dupont
# crontab -u mirror -l
178 1 Fabien Dupont
30 * * * * /pub/mirror/bin/ftpsync sync:archive:security
179 1 Fabien Dupont
0 */4 * * * /pub/mirror/bin/ftpsync sync:archive:debian
180 1 Fabien Dupont
</pre>
181 1 Fabien Dupont
182 2 Baptiste Jonglez
La bonne exécution de ftpsync peut être contrôlée par le code d'erreur du script (0 = tout va bien) ou en regardant les fichiers de logs dans ~mirror/log.
183 1 Fabien Dupont
184 1 Fabien Dupont
h2. Rendre le miroir accessible en HTTP
185 1 Fabien Dupont
186 1 Fabien Dupont
Pour rendre le miroir accessible en HTTP, il suffit de configurer un serveur web en incluant /pub/mirror/debian et /pub/mirror/debian-security dans sa racine.
187 1 Fabien Dupont
188 1 Fabien Dupont
Par exemple, pour lighttpd :
189 1 Fabien Dupont
190 1 Fabien Dupont
<pre>
191 3 Baptiste Jonglez
# grep document-root /etc/lighttpd/lighttpd.conf 
192 3 Baptiste Jonglez
server.document-root        = "/pub/mirror"
193 3 Baptiste Jonglez
</pre>
194 3 Baptiste Jonglez
195 3 Baptiste Jonglez
Ou, si il y a plusieurs virtualhosts sur le serveur web:
196 3 Baptiste Jonglez
197 3 Baptiste Jonglez
<pre>
198 1 Fabien Dupont
# cat /etc/lighttpd/lighttpd.conf
199 1 Fabien Dupont
*snip*
200 1 Fabien Dupont
$HTTP["host"] =~ "apt.tetaneutral.net" {
201 1 Fabien Dupont
    alias.url += (
202 1 Fabien Dupont
        "/debian/" => "/pub/mirror/debian/",
203 1 Fabien Dupont
        "/debian-security/" => "/pub/mirror/debian-security/",
204 1 Fabien Dupont
    )
205 1 Fabien Dupont
}
206 1 Fabien Dupont
*snip*
207 1 Fabien Dupont
</pre>
208 1 Fabien Dupont
209 1 Fabien Dupont
210 1 Fabien Dupont
h2. Quelques conseils
211 1 Fabien Dupont
212 1 Fabien Dupont
Pour finir, quelques petits conseils concernant la mise en place d'un miroir debian :
213 1 Fabien Dupont
214 4 Julien Aubé
* Il faut prévoir pas mal de stockage pour un miroir complet. Sur http://apt.tetaneutral.net/ qui contient les versions stable, testing et unstable pour les architectures i686, amd64, armhf et armel, les deux miroirs (debian et security) occupent environ 370Go d'espace disque.
215 2 Baptiste Jonglez
* Le téléchargement de ces 350Go coûte cher à votre FAI ! Si c'est Free, Orange ou SFR, on s'en fout. Mais si c'est tetaneutral.net, il faut privilégier le clonage d'un miroir accessible en IPv6. Le transit IPv6 est gratuit.
216 2 Baptiste Jonglez
* Cloner un miroir trop souvent ne sert pas à grand chose...autant faire du push. C'est toutefois assez utile pour le miroir des mises à jour de sécurité.
217 2 Baptiste Jonglez
* Cloner un miroir trop peu souvent ne sert pas à grand chose non plus. Ça ne rendra l'exécution de ftpsync que plus longue. Autant lisser la bande passante utilisée.