Reflector

De ArchwikiFR


Reflector est un script qui permet de récupérer la liste des miroirs depuis la page MirrorStatus, puis de les filtrer selon diverses règles et de les ordonner dans un certain ordre. Enfin, le résultat peut être sauvé dans /etc/pacman.d/mirrorlist.

Installation

Installez reflector depuis les dépôts officiels.

pacman -S reflector

Usage

Attention:
  • Créez une sauvegarde de /etc/pacman.d/mirrorlist avant de continuer :
cp -vf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
  • Assurez-vous toujours que /etc/pacman.d/mirrorlist ne contienne que des miroirs que vous considérez sûrs avant de lancer pacman pour une opération de synchronisation ou de mise à jour.

Pour obtenir l'ensemble des options supportées par reflector :

reflector --help

Exemples

Exemple 1

Cette commande filtre les 5 miroirs qui ont été mis à jour tout récemment, les trie par vitesse puis écrase /etc/pacman.d/mirrorlist avec ces nouveaux miroirs :

reflector --verbose -l 5 --sort rate --save /etc/pacman.d/mirrorlist

Exemple 2

Cette commande va trier les 200 miroirs http synchronisés récemment puis les trier par vitesse dans /etc/pacman.d/mirrorlist :

reflector --verbose -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist

Exemple 3

Cette commande va trier les 5 miroirs http les plus récemment synchronisés en France puis les trier par vitesse et enfin sauvegarder le résultat dans /etc/pacman.d/mirrorlist :

reflector --verbose --country 'France' -l 5 -p http --sort rate --save /etc/pacman.d/mirrorlist

Avec systemd-timer

On peut lancer reflector régulièrement grâce à systemd grâce aux unités suivantes. Voir le wiki anglophone : systemd/cron functionality.

Note: L'unité reachable-retry@ utilise un biais moche : utiliser forking au lieu de simple. Il n'y a cependant à la date de rédaction rien d'autre qui permette de faire ce que fait cette unité.

On crée un timer pour reflector.

Fichier: /etc/systemd/system/timer-reflector.timer
[Unit]
Description=Timer for reflector

[Timer]
# OnCalendar prend hourly, daily, weekly, monthly, yearly ou d'autres considération plus précises
OnCalendar=daily
Unit=reflector.service

[Install]
WantedBy=multi-user.target

On n'oublie pas de l'activer au démarrage :

systemctl enable timer-reflector.timer

L'unité suivante sera lancée avant reflector et reflector attendra que l'hôte précisé après le '@' soit ping-able.

Fichier: /etc/systemd/system/reachable-retry@.service
[Unit]
Description=Test if %i is reachable
# Customize to your own needs, with network.target or whatever works less worse with you
After=systemd-networkd-wait-online.service
 
[Service]
Type=forking
ExecStart=/usr/bin/ping -c1 %i
Restart=on-failure

[Install]
WantedBy=multi-user.target
Fichier: /etc/systemd/system/reflector.service
[Unit]
Description=Update mirorlist
# Fire up the tester
Requires=reachable-retry@www.archlinux.org.service
# Wait for it to return SUCCESS
After=reachable-retry@www.archlinux.org.service

[Service]
# Copied from wiki
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Type=oneshot
# Customize to your own needs
ExecStart=/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist

De cette façon, on a un minuteur qui lance reflector régulièrement mais reflector ne se lancera que dès qu'il peut effectivement atteindre la page MirrorStatus : ça évite les soucis d'échec à cause du réseau qui n'est pas disponible lors du lancement de reflector (et donc reflector n'entre pas en Failed State, entraînant avec lui le timer).

Alternatives

Script pour télécharger depuis le générateur de mirrorlist

Se baser sur les miroirs les plus rapides uniquement n'est pas une bonne idée, car ils peuvent être incomplets et ne pas être à jour. Utiliser les miroirs triés par vitesse puis par leur statut est une meilleure idée pour mettre à jour un système depuis des miroirs 100% synchros, rapides et à jour.

armrr est un script pour sauvegarder le /etc/pacman.d/mirrorlist précédent puis installer une version à jour depuis le générateur de mirrorlist Pacman. Le générateur de mirrorlist Pacman (Pacman Mirrorlist Generator) trie les miroirs par pays, disponibilité et vitesse.

Pour l'installer, utilisez le paquet AUR armrr-git, ou téléchargez-le avec curl -O https://raw.githubusercontent.com/Gen2ly/armrr/master/armrr. Lancez-le avec armrr <country code> (armrr CA pour le Canada par exemple) ou simplement armrr pour obtenir une liste des code pays dispos. Tapez armrr -h,--help pour plus de détails.