En présence d’un parc de machines Linux, il peut être utile d’avoir un miroir Debian sur un serveur afin de rendre plus rapide n’importe quelle installation de Debian et de nouveaux paquets par la suite.
L’on profitera alors idéalement d’un bon réseau gigabit pour rendre les apt-get update, upgrade et install d’une célérité fortement appréciable.
I – Présentation
L’outil utilisé ici est un script python du nom d’Apt-Mirror. Simple d’utilisation, sa seule contrainte : avant de tester, va falloir patienter un peu (une bonne soixantaine de Go par ex pour Debian Wheezy, et sans les sources).
On le couple à Apache2 pour desservir les fichiers et « roule ma poule », à vous les « Install Party ».
II – Installation et configuration
Allez, vous connaissez la procédure :
# apt-get update && apt-get upgrade # apt-get install apt-mirror apache2
Par défaut, apt-mirror stocke les dépôts dans /var/spool/. Perso, je préfère avoir ça sur un autre disque que j’ai monté dans /stock.
De plus, je souhaite avoir différents sous répertoires car je ne ferais pas que miroir Debian (mais aussi Raspberry)
Donc :
# rm /var/spool/apt-mirror/ -r # cd /stock # mkdir apt-mirror/debian # cd apt-mirror/debian # mkdir var # mkdir skel # mkdir mirror # cd var/ # touch clean.sh # touch postmirror.sh # cd /stock # chown apt-mirror:apt-mirror apt-mirror/ -R
Et voila !
La configuration de ce script passe par le fichier /etc/apt/mirror.list.
On va sauvegarder celui par défaut au cas ou :
#cp /etc/apt/mirror.list /etc/apt/mirror.list.back
Et pour l’exemple, voila le mien :
set base_path /stock/apt-mirror/debian set mirror_path $base_path/mirror set skel_path $base_path/skel set var_path $base_path/var set cleanscript $var_path/clean.sh set defaultarch <running host architecture> set postmirror_script $var_path/postmirror.sh set run_postmirror 1 set nthreads 30 set _tilde 0 deb http://ftp.fr.debian.org/debian/ wheezy main contrib non-free deb http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free deb http://ftp.fr.debian.org/debian/ wheezy-proposed-updates main contrib non-f$ deb http://ftp.fr.debian.org/debian/ wheezy-backports main contrib non-free deb http://security.debian.org wheezy/updates main contrib non-free clean http://ftp.fr.debian.org/debian clean http://security.debian.org/
Très simplement :
- on définit l’endroit ou sont stockés des données.
- clean.sh est crée automatiquement par les commandes clean à la fin du fichier.
- postmirror.sh est un script appelé après la mise à jour et dans lequel on appellera justement clean.sh
- ensuite, on donne les dépôts à répliquer
- puis les commandes clean afin de purger les paquets obsolètes.
Optionnellement, l’option set limit_rate permet de limiter le débit :
set limit_rate 500k
par exemple, limitera le débit à 500ko/s.
III – Postmirror.sh et clean.sh
On va éditer le fichier postmirror.sh
# cd /stock/apt-mirror/debian/var # nano postmirror.sh
Et ajouter ceci :
/stock/apt-mirror/debian/var/clean.sh
Puis :
# chmod u+x clean.sh # chmod u+x postmirror.sh
IV – Création des liens symboliques
Il faut rendre ça accessible depuis apache afin que les clients puissent y accéder.
# ln -s /stock/apt-mirror/debian/mirror/ftp.fr.debian.org/debian/ /var/www/debian # ln -s /stock/apt-mirror/debian/mirror/security.debian.org/ /var/www/secudebian
Rien de plus côté apache. On pourrait pousser plus loin la configuration des directory apache mais ce n’est pas le propos de ce tuto.
V – Bug des traductions
Tel quel, vous allez prendre des erreur 404 sur les packages de traduction sur une machine cliente car apt-mirror ne les synchronise pas.
Deux solutions pour le résoudre (j’ai pris perso l’option 1)
A – Modification du script apt-mirror
Il faut modifier directement /usr/bin/apt-mirror, au niveau des lignes 350-360.
Trouvez :
foreach (@components) { add_url_to_download($url . $_ . "/binary-" . $arch . "/Release"); add_url_to_download($url . $_ . "/binary-" . $arch . "/Packages.gz"); add_url_to_download($url . $_ . "/binary-" . $arch . "/Packages.bz2");
et rajouter ceci juste après, bien dans la boucle foreach
my $lang; foreach $lang ("ast", "bg", "bs", "ca", "cs", "da", "de", "el", "en", "en_AU", "en_CA", "en_GB", "eo", "es", "eu", "fa", "fi", "fr", "fr_FR", "gl", "hr", "hu", "id", "is", "it", "ja", "ka", "km", "ko", "lt", "ms", "my", "nb", "nl", "no_NB", "oc", "pl", "pt", "pt_BR", "ro", "ru", "si", "sk", "sl", "sq", "sr", "sv", "th", "tr", "uk", "vi", "zh_CN", "zh_HK", "zh_TW", "zh") { add_url_to_download($url . $_ . "/i18n/Translation-" . $lang); add_url_to_download($url . $_ . "/i18n/Translation-" . $lang . ".gz"); add_url_to_download($url . $_ . "/i18n/Translation-" . $lang . ".bz2"); }
B – Intégration dans le script postmirror.sh
Ajoutez ceci dans postmirror.sh :
rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/main/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/contrib/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy/non-free/i18n/ # rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/main/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/contrib/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-proposed-updates/non-free/i18n/ # rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/main/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/contrib/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-backports/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-backports/non-free/i18n/ # rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/main/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/main/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/contrib/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/contrib/i18n/ rsync --recursive --times --links --hard-links --delete --delete-after rsync://ftp.fr.debian.org/debian/dists/wheezy-updates/non-free/i18n/ /depot/mirror/ftp.fr.debian.org/debian/dists/wheezy-updates/non-free/i18n/
Pensez à ouvrir, le cas échéant, le port 873, utilisé par rsync.
VI – Lancement d’apt-mirror
Rien de complexe :
# apt-mirror /etc/apt/mirror.list
Et la, vous patientez !
Bien sur, il convient de faire un cron de tout ça par ex :
# crontab -e * */2 * * * /usr/bin/apt-mirror /etc/apt/mirror.list
pour une mise à jour toute les deux heures.
VII – Configuration des clients
Rien de bien compliqué la aussi :
deb http://10.1.1.1/debian/ wheezy main #deb-src http://ftp.fr.debian.org/debian/ wheezy main deb http://10.1.1.1/secudebian/ wheezy/updates main #deb-src http://security.debian.org/ wheezy/updates main # wheezy-updates, previously known as 'volatile' deb http://10.1.1.1/debian/ wheezy-updates main #deb-src http://ftp.fr.debian.org/debian/ wheezy-updates main
VIII – Compléments
A – Derrière un proxy
En cas de proxy en amont, il est nécessaire de configurer wgetrc:
# nano /etc/wgetrc
Et ajoutez ceci :
http_proxy = http://user:pwd@proxy:port use_proxy = on
IX – Conclusion
Et voila, vous avez un joli miroir Debian (ou ce que vous voulez). Dans cet autre article, je fais un miroir Raspberry (ce qui était mon besoin initial, mais il fallait mieux commencer par le début).
Bonjour
Si je puis me permettre le blanc sur fond gris pour les commandes, c’est illisible. Mais j’ai pu avancer dans mon miroir local. Après les corections que vous indiquez faut il lancer un script ou un fichier?
Bonjour
tuto excellent qui m’a aidé à installer mon miroir debian pour jessie et raspberry pi.
Par contre les commandes en police blanche sur fond gris clair avec un arrière-plan blanc…
Bref, c’est illisible, et c’est bien dommage.
Bonjour 😉
En effet, problème de css, je vais corriger cela rapidement.
salut je cherchea fair un mirroir pour raspbian sur mon syno combien de place faut il?
De mémoire, une trentaine de Go…
Hello,
Est-tu certain de cette limitation ?
– set limit_rate 500k
Car d’après ce que je lis ici :
http://serverfault.com/questions/88780/how-can-i-limit-the-bandwidth-of-apt-mirror
ça dépend du nombre de « threads », as-tu fait des tests, peux-tu me dire plus ?
Je suis en train de déployer un miroir pour une PME avec une connexion internet faible et cette information est pertinente et je n’ai trouvé que peux d’aide à ce sujet.
Merci
Ahhhhhh, meeeeeeerci !!!!! 😀
Plus clair et concis que ce tuto, tu meurs !!! Merci encore !!!
petite erreur :
deb http://ftp.fr.debian.org/debian/ wheezy-proposed-updates main contrib non-f$
-> contrib non-f$