Projet

Général

Profil

MiroirEOLE » Historique » Version 7

Daniel Dehennin, 27/02/2015 15:44
Mise à jour pour la gestion multi-miroir d’ubumirror

1 1 Daniel Dehennin
{{toc}}
2 1 Daniel Dehennin
3 1 Daniel Dehennin
h1. Mise en place d’un miroir des dépôts de paquet
4 1 Daniel Dehennin
5 1 Daniel Dehennin
h2. Introduction
6 1 Daniel Dehennin
7 7 Daniel Dehennin
Ce document décrit comment créer un miroir local des dépôts Ubuntu et project:eole.
8 1 Daniel Dehennin
9 7 Daniel Dehennin
La méta-distribution project:eole se compose de plusieurs sources de paquets :
10 1 Daniel Dehennin
11 7 Daniel Dehennin
# Les paquets de la distribution Ubuntu, nécessite à ce jour environ 600Gio d’espace disque ;
12 7 Daniel Dehennin
# Les paquets du projet project:eole, nécessite à ce jour environ 30Gio d’espace disque, toute version confondue.
13 1 Daniel Dehennin
14 1 Daniel Dehennin
15 7 Daniel Dehennin
h2. Utilisation de l’outil "ubumirror":https://launchpad.net/ubumirror pour Ubuntu et EOLE >= 2.4
16 1 Daniel Dehennin
17 7 Daniel Dehennin
La mise en place d’un miroir de paquet *@deb@* est réalisée avec l’outil "ubumirror":https://launchpad.net/ubumirror en appliquant des patchs :
18 1 Daniel Dehennin
19 7 Daniel Dehennin
* "Arrêt si le miroir distant est en synchronisation":https://code.launchpad.net/~launchpad-baby-gnu/ubumirror/feature-abort-on-remote-update-in-progress
20 7 Daniel Dehennin
* "Définition du fichier de configuration en ligne de commande":https://code.launchpad.net/~launchpad-baby-gnu/ubumirror/feature-set-config-and-log-files-from-command-line
21 1 Daniel Dehennin
22 7 Daniel Dehennin
Cet outil se charge de faire la synchronisation en deux passes afin de ne pas avoir de paquets référencés dans des indexes qui ne sont pas encore téléchargés
23 1 Daniel Dehennin
24 7 Daniel Dehennin
# Télécharger les nouveaux paquets deb
25 7 Daniel Dehennin
# Mettre à jour les indexes (*@Releases@*, *@Packages@*, *@Sources@*...)
26 7 Daniel Dehennin
27 7 Daniel Dehennin
L’outil peut être utilisé par un utilisateur non *@root@* avec le patch "Définition du fichier de configuration en ligne de commande":https://code.launchpad.net/~launchpad-baby-gnu/ubumirror/feature-set-config-and-log-files-from-command-line.
28 7 Daniel Dehennin
29 7 Daniel Dehennin
Vous pouvez l’installer dans le répertoire de l’utilisateur qui fera la synchronisation :
30 7 Daniel Dehennin
31 7 Daniel Dehennin
* Créer les répertoires nécessaires
32 1 Daniel Dehennin
<pre>
33 7 Daniel Dehennin
ftp@server:~$ mkdir -p bin .config/ubumirror log.d src mirror
34 7 Daniel Dehennin
</pre>
35 7 Daniel Dehennin
* Télécharger le dépôt bzr
36 7 Daniel Dehennin
<pre>
37 7 Daniel Dehennin
ftp@server:~$ bzr whoami "John Snow <john.snow@example.com>"
38 7 Daniel Dehennin
ftp@server:~$ bzr init-repo src/bzr-ubumirror
39 7 Daniel Dehennin
ftp@server:~$ bzr branch lp:ubumirror src/bzr-ubumirror/jsnow
40 7 Daniel Dehennin
ftp@server:~$ cd src/bzr-ubumirror/jsnow
41 7 Daniel Dehennin
</pre>
42 7 Daniel Dehennin
* Intégrer le premier patch
43 7 Daniel Dehennin
<pre>
44 7 Daniel Dehennin
ftp@server:~/src/bzr-ubumirror/jsnow$ bzr merge lp:~launchpad-baby-gnu/ubumirror/feature-abort-on-remote-update-in-progress
45 7 Daniel Dehennin
ftp@server:~/src/bzr-ubumirror/jsnow$ bzr commit -m "Merge branch feature-abort-on-remote-update-in-progress"
46 7 Daniel Dehennin
</pre>
47 7 Daniel Dehennin
* Intégrer le second patch
48 7 Daniel Dehennin
<pre>
49 7 Daniel Dehennin
ftp@server:~/src/bzr-ubumirror/jsnow$ bzr merge lp:~launchpad-baby-gnu/ubumirror/feature-set-config-and-log-files-from-command-line
50 7 Daniel Dehennin
ftp@server:~/src/bzr-ubumirror/jsnow$ bzr commit -m "Merge branch feature-set-config-and-log-files-from-command-line"
51 7 Daniel Dehennin
ftp@server:~/src/bzr-ubumirror/jsnow$ cd
52 7 Daniel Dehennin
</pre>
53 7 Daniel Dehennin
* Faire un lien symbolique pour l’installer
54 7 Daniel Dehennin
<pre>
55 7 Daniel Dehennin
ftp@server:~$ ln -s ~/src/bzr-ubumirror/jsnow/ubuarchive ~/bin/ubuarchive
56 7 Daniel Dehennin
</pre>
57 7 Daniel Dehennin
58 7 Daniel Dehennin
Un tâche cron permet une synchronisation régulière, par exemple :
59 7 Daniel Dehennin
60 7 Daniel Dehennin
<pre>
61 7 Daniel Dehennin
root@server:~$ crontab -u ftp -l
62 7 Daniel Dehennin
PATH=${HOME}/bin:${PATH}
63 7 Daniel Dehennin
15 3 * * * ${HOME}/bin/ubuarchive --conf ${HOME}/.config/ubumirror/test.conf
64 7 Daniel Dehennin
</pre>
65 7 Daniel Dehennin
66 7 Daniel Dehennin
En environnement nécessitant un mandataire HTTP, il est nécessaire d’exporter la variable *@RSYNC_PROXY@* :
67 7 Daniel Dehennin
68 7 Daniel Dehennin
* Utilisation d’un nom d’hôte
69 7 Daniel Dehennin
<pre>
70 7 Daniel Dehennin
RSYNC_PROXY=FQDN_PROXY:PORT
71 7 Daniel Dehennin
</pre>
72 7 Daniel Dehennin
* Utilisation d’une adresse IP
73 7 Daniel Dehennin
<pre>
74 7 Daniel Dehennin
RSYNC_PROXY=IP_PROXY:PORT
75 7 Daniel Dehennin
</pre>
76 7 Daniel Dehennin
77 7 Daniel Dehennin
78 7 Daniel Dehennin
h3. Miroir Ubuntu
79 7 Daniel Dehennin
80 7 Daniel Dehennin
Nous synchroniserons le miroir une fois par jour, dans la nuit :
81 7 Daniel Dehennin
82 7 Daniel Dehennin
<pre>
83 7 Daniel Dehennin
root@server:~$ crontab -u ftp -l
84 7 Daniel Dehennin
PATH=${HOME}/bin:${PATH}
85 7 Daniel Dehennin
15 3 * * * ${HOME}/bin/ubuarchive --conf ${HOME}/.config/ubumirror/ubuntu.conf
86 7 Daniel Dehennin
</pre>
87 7 Daniel Dehennin
88 7 Daniel Dehennin
89 7 Daniel Dehennin
Vous pouvez baser votre configuration sur le modèle suivant :
90 7 Daniel Dehennin
91 7 Daniel Dehennin
<pre>
92 1 Daniel Dehennin
#
93 5 Daniel Dehennin
#   ubumirror.conf - configuration file for the ubumirror scripts.
94 1 Daniel Dehennin
#
95 1 Daniel Dehennin
96 1 Daniel Dehennin
# Please set the variables below to fit your site.
97 1 Daniel Dehennin
# Which email address/user that will receive failure notices.
98 1 Daniel Dehennin
EMAIL=mirror-admin@exemple.net
99 1 Daniel Dehennin
100 1 Daniel Dehennin
# Server's FQDN.
101 1 Daniel Dehennin
HOSTNAME=$(hostname -f)
102 1 Daniel Dehennin
103 1 Daniel Dehennin
# Bandwidth limit for all mirror scripts - set to 0 for no limit.
104 1 Daniel Dehennin
SPEED=10240
105 1 Daniel Dehennin
106 1 Daniel Dehennin
# UBUARC_DIR is the destination for the base of the archive directory
107 1 Daniel Dehennin
# The script won't run if this variable isn't set
108 1 Daniel Dehennin
UBUARC_DIR="/home/ftp/mirror/ubuntu/"
109 1 Daniel Dehennin
110 1 Daniel Dehennin
# LOGDIR is the destination directory of all the logs
111 7 Daniel Dehennin
LOGDIR="/home/ftp/log.d/ubuntu"
112 1 Daniel Dehennin
113 1 Daniel Dehennin
# UBU{ARC,CDI,REL}_MIRROR is the rsync path in the form of host::directory/ of the
114 1 Daniel Dehennin
#   upstream mirrors where the ubumirror scripts will mirror from.
115 7 Daniel Dehennin
#UBUARC_MIRROR=ftp.crihan.fr::ubuntu/
116 7 Daniel Dehennin
UBUARC_MIRROR=rsync://ftp.lip6.fr/Ubuntu/archive/
117 1 Daniel Dehennin
118 1 Daniel Dehennin
# UBU{ARC,CDI,REL}_EXCLUDE is what things you want to exclude
119 1 Daniel Dehennin
UBUARC_EXCLUDE="\
120 1 Daniel Dehennin
 --exclude binary-powerpc/ --exclude binary-sparc/ \
121 1 Daniel Dehennin
 --exclude daily-installer-powerpc/ --exclude daily-installer-sparc/ \
122 1 Daniel Dehennin
 --exclude installer-powerpc/ --exclude installer-sparc/ \
123 1 Daniel Dehennin
 --exclude *_powerpc.deb --exclude *_powerpc.udeb \
124 1 Daniel Dehennin
 --exclude *_sparc.deb --exclude *_sparc.udeb \
125 1 Daniel Dehennin
 --exclude Contents-powerpc.gz --exclude Contents-sparc.gz \
126 1 Daniel Dehennin
 --exclude pool/local \
127 1 Daniel Dehennin
"
128 1 Daniel Dehennin
</pre>
129 1 Daniel Dehennin
130 7 Daniel Dehennin
h3. Miroir EOLE 2.4 et plus
131 5 Daniel Dehennin
132 5 Daniel Dehennin
133 7 Daniel Dehennin
Nous synchroniserons le miroir une fois par jour, dans la nuit :
134 7 Daniel Dehennin
135 7 Daniel Dehennin
<pre>
136 7 Daniel Dehennin
root@server:~$ crontab -u ftp -l
137 7 Daniel Dehennin
PATH=${HOME}/bin:${PATH}
138 7 Daniel Dehennin
30 5 * * * ${HOME}/bin/ubuarchive --conf ${HOME}/.config/ubumirror/eole.conf
139 7 Daniel Dehennin
</pre>
140 7 Daniel Dehennin
141 7 Daniel Dehennin
142 5 Daniel Dehennin
Vous pouvez baser votre configuration sur le modèle suivant :
143 5 Daniel Dehennin
<pre>
144 5 Daniel Dehennin
#
145 5 Daniel Dehennin
#   ubumirror.conf - configuration file for the ubumirror scripts.
146 5 Daniel Dehennin
#
147 5 Daniel Dehennin
148 5 Daniel Dehennin
# Please set the variables below to fit your site.
149 5 Daniel Dehennin
# Which email address/user that will receive failure notices.
150 5 Daniel Dehennin
EMAIL=mirror-admin@exemple.net
151 5 Daniel Dehennin
152 5 Daniel Dehennin
# Server's FQDN.
153 5 Daniel Dehennin
HOSTNAME=$(hostname -f)
154 5 Daniel Dehennin
155 5 Daniel Dehennin
# Bandwidth limit for all mirror scripts - set to 0 for no limit.
156 5 Daniel Dehennin
SPEED=10240
157 5 Daniel Dehennin
158 5 Daniel Dehennin
# UBUARC_DIR is the destination for the base of the archive directory
159 5 Daniel Dehennin
# The script won't run if this variable isn't set
160 5 Daniel Dehennin
UBUARC_DIR="/home/ftp/mirror/eole/"
161 5 Daniel Dehennin
162 5 Daniel Dehennin
# LOGDIR is the destination directory of all the logs
163 7 Daniel Dehennin
LOGDIR="/home/ftp/log.d/eole"
164 5 Daniel Dehennin
165 5 Daniel Dehennin
# UBU{ARC,CDI,REL}_MIRROR is the rsync path in the form of host::directory/ of the
166 5 Daniel Dehennin
#   upstream mirrors where the ubumirror scripts will mirror from.
167 5 Daniel Dehennin
UBUARC_MIRROR=rsync://eole.ac-dijon.fr/eole/
168 5 Daniel Dehennin
169 5 Daniel Dehennin
170 5 Daniel Dehennin
# UBU{ARC,CDI,REL}_EXCLUDE is what things you want to exclude
171 5 Daniel Dehennin
UBUARC_EXCLUDE=""
172 5 Daniel Dehennin
</pre>
173 5 Daniel Dehennin
174 7 Daniel Dehennin
h3. Miroir Envole 4 et plus
175 7 Daniel Dehennin
176 7 Daniel Dehennin
177 7 Daniel Dehennin
Nous synchroniserons le miroir une fois par jour, dans la nuit :
178 7 Daniel Dehennin
179 5 Daniel Dehennin
<pre>
180 7 Daniel Dehennin
root@server:~$ crontab -u ftp -l
181 7 Daniel Dehennin
PATH=${HOME}/bin:${PATH}
182 7 Daniel Dehennin
30 6 * * * ${HOME}/bin/ubuarchive --conf ${HOME}/.config/ubumirror/envole.conf
183 5 Daniel Dehennin
</pre>
184 7 Daniel Dehennin
185 7 Daniel Dehennin
186 7 Daniel Dehennin
Vous pouvez baser votre configuration sur le modèle suivant :
187 7 Daniel Dehennin
188 7 Daniel Dehennin
<pre>
189 7 Daniel Dehennin
#
190 7 Daniel Dehennin
#   ubumirror.conf - configuration file for the ubumirror scripts.
191 7 Daniel Dehennin
#
192 7 Daniel Dehennin
193 7 Daniel Dehennin
# Please set the variables below to fit your site.
194 7 Daniel Dehennin
# Which email address/user that will receive failure notices.
195 7 Daniel Dehennin
EMAIL=mirror-admin@exemple.net
196 7 Daniel Dehennin
197 7 Daniel Dehennin
# Server's FQDN.
198 7 Daniel Dehennin
HOSTNAME=$(hostname -f)
199 7 Daniel Dehennin
200 7 Daniel Dehennin
# Bandwidth limit for all mirror scripts - set to 0 for no limit.
201 7 Daniel Dehennin
SPEED=10240
202 7 Daniel Dehennin
203 7 Daniel Dehennin
# UBUARC_DIR is the destination for the base of the archive directory
204 7 Daniel Dehennin
# The script won't run if this variable isn't set
205 7 Daniel Dehennin
UBUARC_DIR="/home/ftp/mirror/envole/"
206 7 Daniel Dehennin
207 7 Daniel Dehennin
# LOGDIR is the destination directory of all the logs
208 7 Daniel Dehennin
LOGDIR="/home/ftp/log.d/envole"
209 7 Daniel Dehennin
210 7 Daniel Dehennin
# UBU{ARC,CDI,REL}_MIRROR is the rsync path in the form of host::directory/ of the
211 7 Daniel Dehennin
#   upstream mirrors where the ubumirror scripts will mirror from.
212 7 Daniel Dehennin
UBUARC_MIRROR=rsync://eole.ac-dijon.fr/envole/
213 7 Daniel Dehennin
214 7 Daniel Dehennin
215 7 Daniel Dehennin
# UBU{ARC,CDI,REL}_EXCLUDE is what things you want to exclude
216 7 Daniel Dehennin
UBUARC_EXCLUDE=""
217 7 Daniel Dehennin
</pre>
218 7 Daniel Dehennin
219 7 Daniel Dehennin
220 1 Daniel Dehennin
h2. Miroir EOLE 2.3
221 1 Daniel Dehennin
222 1 Daniel Dehennin
La mise en place d’un miroir EOLE requiert une autorisation réseau préalable à "adresser à l’équipe EOLE":http://eole.orion.education.fr/index.php/contact, vous devez donc nous communiquer l’adresse IP qui sera utilisée par votre serveur miroir. 
223 1 Daniel Dehennin
224 1 Daniel Dehennin
La récupération des paquets EOLE jusqu’à la version 2.3 se fait avec le script suivant :
225 1 Daniel Dehennin
226 1 Daniel Dehennin
<pre>
227 1 Daniel Dehennin
#!/bin/bash
228 1 Daniel Dehennin
229 1 Daniel Dehennin
set -e -u
230 1 Daniel Dehennin
231 1 Daniel Dehennin
MIRROR_SRC="eoleng.ac-dijon.fr::eoleng"
232 1 Daniel Dehennin
MIRROR_DST="/home/ftp/mirror/eoleng"
233 1 Daniel Dehennin
MIRROR_LOG_DIR="/home/ftp/mirror/log.d/eoleng"
234 1 Daniel Dehennin
MIRROR_LOG_FILE="${MIRROR_LOG_DIR}/eole.log"
235 1 Daniel Dehennin
236 1 Daniel Dehennin
RSYNC_OPTS="-v --force --recursive --times --perms --links --delete-after"
237 1 Daniel Dehennin
RSYNC_EXCLUDE="--exclude mini-dinstall --exclude *.changes"
238 1 Daniel Dehennin
239 1 Daniel Dehennin
test -d "${MIRROR_LOG_DIR}" || mkdir -p "${MIRROR_LOG_DIR}"
240 1 Daniel Dehennin
savelog -t -n -r "${MIRROR_LOG_DIR}" "${MIRROR_LOG_FILE}"
241 2 Daniel Dehennin
242 2 Daniel Dehennin
rsync ${RSYNC_OPTS} ${RSYNC_EXCLUDE} ${MIRROR_SRC} ${MIRROR_DST} | tee -a "${MIRROR_LOG_FILE}"
243 2 Daniel Dehennin
</pre>
244 2 Daniel Dehennin
245 1 Daniel Dehennin
Vous pouvez ensuite planifier une tâche cron comme suit:
246 1 Daniel Dehennin
247 1 Daniel Dehennin
<pre>
248 1 Daniel Dehennin
SHELL=/bin/bash
249 1 Daniel Dehennin
PATH=~/.bin:/usr/bin:/bin
250 1 Daniel Dehennin
MAILTO=mirror-admin@example.net
251 1 Daniel Dehennin
252 1 Daniel Dehennin
0 5 * * * mirror-eole.sh > /dev/null
253 1 Daniel Dehennin
</pre>
254 1 Daniel Dehennin
255 1 Daniel Dehennin
h2. Publication de votre miroir
256 1 Daniel Dehennin
257 1 Daniel Dehennin
Il ne vous reste plus qu’à configurer un service HTTP ou FTP afin de rendre votre miroir accessible.