summary refs log tree commit diff stats
path: root/content/blog/reflector.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/blog/reflector.md')
-rw-r--r--content/blog/reflector.md78
1 files changed, 78 insertions, 0 deletions
diff --git a/content/blog/reflector.md b/content/blog/reflector.md
new file mode 100644
index 0000000..609afdc
--- /dev/null
+++ b/content/blog/reflector.md
@@ -0,0 +1,78 @@
++++
+title = "Update your mirrors!"
+date = 2023-01-29
+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
+...
+```