# Reflector

Related articles

- Mirrors
- Pacman

Reflector is a script which can retrieve the latest mirror list from the MirrorStatus page, filter the most up-to-date mirrors, sort them by speed and overwrite the file `/etc/pacman.d/mirrorlist`.

## Installation

Install the reflector package.

## Usage

Warning:

- In the following examples, `/etc/pacman.d/mirrorlist` will be overwritten. Make a backup before proceeding.
- Make sure the resulting `/etc/pacman.d/mirrorlist` does not contain entries that you consider untrustworthy before syncing or updating with Pacman.

To see all of the available commands, run the following command:

    # reflector --help

### Examples

Filter the first five mirrors, sort them by download rate and overwrite the file `/etc/pacman.d/mirrorlist`:

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

Verbosely rate the 200 most recently synchronized HTTP servers, sort them by download rate, and overwrite the file `/etc/pacman.d/mirrorlist`:

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

Verbosely rate the 200 most recently synchronized HTTPS servers located in the US, sort them by download rate, and overwrite the file `/etc/pacman.d/mirrorlist`:

    # reflector --verbose --country 'United States' -l 200 -p https --sort rate --save /etc/pacman.d/mirrorlist

### Systemd Service

    /etc/systemd/system/reflector.service

    [Unit]
    Description=Pacman mirrorlist update

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/reflector --protocol https --latest 30 --number 20 --sort rate --save /etc/pacman.d/mirrorlist

Then starting `reflector.service` will update your mirrorlist.

To update your mirrorlist every time your computer boots you can enable the following service definition.

    /etc/systemd/system/reflector.service

    [Unit]
    Description=Pacman mirrorlist update
    Requires=network-online.target
    After=network-online.target

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/reflector --protocol https --latest 30 --number 20 --sort rate --save /etc/pacman.d/mirrorlist

    [Install]
    RequiredBy=multi-user.target

Make sure you activate the appropriate services so that `network.target` really reflects your network status.

### Systemd Timer

If you want to run `reflector.service` on a weekly basis:

    /etc/systemd/system/reflector.timer

    [Unit]
    Description=Run reflector weekly

    [Timer]
    OnCalendar=weekly
    RandomizedDelaySec=12h
    Persistent=true

    [Install]
    WantedBy=timers.target

And then just start the `reflector.timer`.

#### Pacman Hook

You can also create a pacman hook that will run reflector and remove the `.pacnew` file created every time pacman-mirrorlist gets an upgrade.

    /etc/pacman.d/hooks/mirrorupgrade.hook

    [Trigger]
    Operation = Upgrade
    Type = Package
    Target = pacman-mirrorlist

    [Action]
    Description = Updating pacman-mirrorlist with reflector and removing pacnew...
    When = PostTransaction
    Depends = reflector
    Exec = /usr/bin/bash -c "reflector --country 'United States' -l 200 --sort rate --save /etc/pacman.d/mirrorlist && [[ -f /etc/pacman.d/mirrorlist.pacnew ]] && rm /etc/pacman.d/mirrorlist.pacnew"

Make sure to substitute in your desired arguments for reflector.

See User:Allan/Pacman Hooks and DeveloperWiki:Pacman Hooks for more info on pacman hooks.

#### AUR package

Install the reflector-timerAUR package to run reflector daily, or install the reflector-timer-weeklyAUR to run it weekly.

##### reflector-timer

The default configuration is:

    /usr/share/reflector-timer/reflector.conf

    AGE=6
    COUNTRY=Germany
    LATEST=30
    NUMBER=20
    SORT=rate

To override this configuration, edit `/etc/conf.d/reflector.conf`:

    /etc/conf.d/reflector.conf

    COUNTRY=US

Be sure to enable `reflector.timer`.

##### reflector-timer-weekly

The default configuration is:

    /etc/reflector.conf

    --save /etc/pacman.d/mirrorlist
    --country China
    --sort rate

Each line (except that begins with '#') should be valid `reflector` option.

Be sure to enable `reflector.timer`.

Category:

- Package management