+++ title = "Update your mirrors!" date = 2023-01-29 template = "blog-page.html" [taxonomies] tags = [ "foss", "advice" ] +++ Nah, I'm not talking about [bluetooth mirrors](https://www.bathshack.com/blog/bluetooth-mirrors-everything-you-need-to-know-before-you-buy/). 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](https://archlinux.org/mirrors/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](https://github.com/archlinux/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](https://xyne.dev/projects/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 ... ```