Nah, I’m not talking about bluetooth mirrors. Mirrors are what powers all distros: they’re a (de)centralized solution for downloading pre-compiled binaries and scripts for your operating system.
Suspicion
I like always having the most current version of packages, so I usually update my system several times a day. When, after a day, I ran sudo pacman -Syu
and it reported the system being up to date, I was pretty weirded out.
Another day passed, and the system was still up to date. It was not a connection problem, I was connecting to my mirrors and they were reporting absolutely zero updates for my system.
Problem
At the third day of stagnation, I was sure something was up. I looked up the Mirror Status page on ArchLinux’s website and saw that loads of mirrors were out of sync.
I had never touched my mirrorlist before, it was just generated by the archinstall script a few months ago; a lot of Arch-based distros by default ship tools to update your mirrorlist, but I honestly thought I’d never need that.
Pacman’s mirrorlist is located in /etc/pacman.d/mirrorlist
. You can filter out uncommented lines with this command:
grep -v "^#" /etc/pacman.d/mirrorlist
And check the actual status of your mirror(s) on the Mirror Status page linked above.
Solution
This will overwrite your mirrorlist, so you’re advised to make a backup before proceeding:
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
I decided to use reflector to fix this problem. I didn’t want to have to deal with this again, so I enabled the provided systemd timer.
First, install it.
sudo pacman -S reflector
Then, edit /etc/xdg/reflector/reflector.conf
. I only needed to edit the --country
parameter and select countries next to the one where I reside; you can list available countries by running reflector --list-countries
.
--save /etc/pacman.d/mirrorlist
--protocol https
--country Italy,Switzerland,France,Germany,Austria
--latest 5
--sort age
Finally, start the service and check if it worked.
sudo systemctl start reflector.service
cat /etc/pacman.d/mirrorlist
If everything went smoothly, enable reflector’s timer so it runs weekly.
sudo systemctl enable reflector.timer
Done!
Now, by default pacman does update its mirrorlist. It creates a file called mirrorlist.pacnew
and it expects you to pick your favorite mirrors each time its generated. You can disable this (now unneeded) behavior by uncommenting and setting NoExtract
in /etc/pacman.conf
:
...
NoExtract = /etc/pacman.d/mirrorlist
# Misc options
Color
ILoveCandy
ParallelDownloads = 3
...