Everyday-use client-side map-aware Arch Linux mirror ranking tool

Overview

Rate Arch Mirrors

Tag Badge

This is a tool, which fetches mirrors, skips outdated/syncing Arch Linux mirrors, then uses info about submarine cables and internet exchanges to jump between countries and find fast mirrors. And it's fast enough to run it before each update:

Here is an example of the use (output truncated; running from Belarus):

~ ❯❯❯ rate-arch-mirrors --max-delay=43200
# JUMP #1
# EXPLORING US
# VISITED US
#     + NEIGHBOR GB (by HubsFirst)
#     + NEIGHBOR ID (by HubsFirst)
#     + NEIGHBOR CN (by HubsFirst)
#     + NEIGHBOR DE (by DistanceFirst)
#     + NEIGHBOR CA (by DistanceFirst)
#     + NEIGHBOR FR (by DistanceFirst)
# [GB] SpeedTestResult { speed: 1.06 MB/s; elapsed: 538.340192ms; connection_time: 881.71627ms}
# [US] SpeedTestResult { speed: 460.57 KB/s; elapsed: 177.295735ms; connection_time: 1.055605287s}
# [ID] SpeedTestResult { speed: 150.09 KB/s; elapsed: 531.388261ms; connection_time: 963.771889ms}
# [ID] SpeedTestResult { speed: 204.86 KB/s; elapsed: 669.180228ms; connection_time: 551.295751ms}
# [US] SpeedTestResult { speed: 397.77 KB/s; elapsed: 875.305259ms; connection_time: 535.300839ms}
# [GB] SpeedTestResult { speed: 2.48 MB/s; elapsed: 869.932998ms; connection_time: 628.702664ms}
# [DE] SpeedTestResult { speed: 1.22 MB/s; elapsed: 1.182854363s; connection_time: 302.571795ms}
# [DE] SpeedTestResult { speed: 6.97 MB/s; elapsed: 1.304992036s; connection_time: 195.399714ms}
# [FR] SpeedTestResult { speed: 313.91 KB/s; elapsed: 782.076292ms; connection_time: 696.641193ms}
# [FR] SpeedTestResult { speed: 473.08 KB/s; elapsed: 1.215924352s; connection_time: 251.996648ms}
#     TOP NEIGHBOR - CONNECTION TIME: DE - 195.399714ms
#     TOP NEIGHBOR - SPEED: DE - 6.97 MB/s

# JUMP #2
# EXPLORING DE
# ...
#     TOP NEIGHBOR - CONNECTION TIME: CZ - 129.078569ms
#     TOP NEIGHBOR - SPEED: SE - 7.05 MB/s

# JUMP #3
# EXPLORING CZ
#     + NEIGHBOR PL (by DistanceFirst)
#     + NEIGHBOR HU (by DistanceFirst)
#     + NEIGHBOR RO (by DistanceFirst)
# EXPLORING SE
#     + NEIGHBOR FI (by DistanceFirst)
#     + NEIGHBOR RU (by DistanceFirst)
#     + NEIGHBOR BG (by DistanceFirst)
# ...

# JUMP #7
# ...

# RE-TESTING TOP MIRRORS
# [SE] SpeedTestResult { speed: 6.78 MB/s; elapsed: 1.359863331s; connection_time: 139.824ms}
# [DE] SpeedTestResult { speed: 7.95 MB/s; elapsed: 1.421512862s; connection_time: 77.633338ms}
# [BE] SpeedTestResult { speed: 5.79 MB/s; elapsed: 1.371025574s; connection_time: 128.863947ms}
# [IT] SpeedTestResult { speed: 1.13 MB/s; elapsed: 841.363582ms; connection_time: 636.626088ms}
# [BY] SpeedTestResult { speed: 8.38 MB/s; elapsed: 1.458407988s; connection_time: 42.413635ms}
# === RESULTS (top re-tested) ====
#   1. [BY] SpeedTestResult { speed: 8.38 MB/s; elapsed: 1.458407988s; connection_time: 42.413635ms} -> http://ftp.byfly.by/pub/archlinux/
#   2. [DE] SpeedTestResult { speed: 7.95 MB/s; elapsed: 1.421512862s; connection_time: 77.633338ms} -> http://mirror.f4st.host/archlinux/
#   3. [SE] SpeedTestResult { speed: 6.78 MB/s; elapsed: 1.359863331s; connection_time: 139.824ms} -> https://mirror.osbeck.com/archlinux/
#   4. [BE] SpeedTestResult { speed: 5.79 MB/s; elapsed: 1.371025574s; connection_time: 128.863947ms} -> http://mirror.tiguinet.net/arch/
#   5. [IT] SpeedTestResult { speed: 1.13 MB/s; elapsed: 841.363582ms; connection_time: 636.626088ms} -> https://archmirror.it/
Server = http://ftp.byfly.by/pub/archlinux/$repo/os/$arch
Server = http://mirror.f4st.host/archlinux/$repo/os/$arch
Server = https://mirror.osbeck.com/archlinux/$repo/os/$arch
Server = http://mirror.tiguinet.net/arch/$repo/os/$arch
Server = https://archmirror.it/$repo/os/$arch
Server = http://mirror.ihost.md/archlinux/$repo/os/$arch
# ...

Full output - https://gist.github.com/westandskif/b6abdcb00e8471a1bcd7eb93650f9fc7.

The output format is acceptable to be put in /etc/pacman.d/mirrorlist, see an example of how it may be done below.

The tool uses the following info:

Installation

Available on:

  • AUR: yay -S rate-arch-mirrors-bin - pre-built binary with statically linked musl
  • AUR: yay -S rate-arch-mirrors - build binary from sources, linking glibc dynamically

or build manually:

cargo build --release --locked

Algorithm

  1. take the next country to explore (or --entry-country option, US by default)
  2. find neighbor countries --country-neighbors-per-country, using multiple strategies, at the moment 2:
  • major internet hubs first ( first two jumps only )
  • closest by distance first ( every jump )
  1. take Arch mirrors of countries, selected at step 2, test speed and take 2 mirrors: 1 fastest and 1 with shortest connection time
  2. take countries of mirrors from step 3 and go to step 1

Example of everyday use

Few notes:

  • ua- prefix means "user alias"
  • paccache from pacman-contrib package
  • yay is an AUR helper
  • sudo true forces password prompt in the very beginning
alias ua-drop-caches='sudo paccache -rk3; yay -Sc --aur --noconfirm'
alias ua-update-all='export TMPFILE="$(mktemp)"; \
	sudo true; \
	rate-arch-mirrors --max-delay=21600 | tee -a $TMPFILE \
	  && sudo mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist-backup \
	  && sudo mv $TMPFILE /etc/pacman.d/mirrorlist \
	  && ua-drop-caches \
	  && yay -Syyu --noconfirm'

To persist aliases, add them to ~/.zshrc or ~/.bashrc (based on the shell you use)

Once done, just launch a new terminal and run:

ua-update-all

License

The tool is made available under the following Creative Commons License: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0).

Comments
  • Connection problem

    Connection problem

    Thank you in advance for developing this tool.

    Executing it gives me the following output:

    thread 'main' panicked at 'called Result::unwrap() on an Err value: reqwest::Error { kind: Request, url: Url { scheme: "https", host: Some(Domain("www.archlinux.org")), port: None, path: "/mirrors/status/json/", query: None, fragment: None }, source: hyper::Error(Connect, ConnectError("dns error", Custom { kind: Other, error: "failed to lookup address information: Try again" })) }', src/mirrors.rs:140:10 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

    Doing a ping to www.archlinux.org I get this:

    PING www.archlinux.org (95.217.163.246) 56(84) bytes of data. 64 bytes from 95.217.163.246: icmp_seq=1 ttl=46 time=61.5 ms 64 bytes from 95.217.163.246: icmp_seq=2 ttl=46 time=62.9 ms 64 bytes from 95.217.163.246: icmp_seq=3 ttl=46 time=58.7 ms 64 bytes from 95.217.163.246: icmp_seq=4 ttl=46 time=59.4 ms 64 bytes from 95.217.163.246: icmp_seq=5 ttl=46 time=60.2 ms ^C --- www.archlinux.org ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 58.710/60.515/62.859/1.496 ms

    Unsure wheres the problem.

    opened by supng 8
  • Speed test panics when mirrorlist is empty

    Speed test panics when mirrorlist is empty

    I tried filtering on only https-only mirrors (--protocol https), and noticed that when setting --entry-country BE, the speed-test errors out with

    thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/speed_test.rs:200:26
    

    This is probably because the mirrorlist for https in Belgium is empty (which is wrong, but that's a different problem): https://archlinux.org/mirrorlist/?country=BE&protocol=https

    My rust is not decent enough to make a PR, but I'd guess a "when !empty" or something needs to be added somewhere.

    opened by JonasVerhofste 6
  • Error

    Error

    Getting Blank iteration though I have mirrors in my mirrolost file contents of my mirrorlist are:

    ##
    ## Arch Linux repository mirrorlist
    ## Generated on 2021-05-23
    ##
    
    ## United Kingdom
    Server = http://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch
    Server = https://archlinux.uk.mirror.allworldit.com/archlinux/$repo/os/$arch
    Server = http://mirror.bytemark.co.uk/archlinux/$repo/os/$arch
    Server = https://mirror.bytemark.co.uk/archlinux/$repo/os/$arch
    Server = http://mirrors.gethosted.online/archlinux/$repo/os/$arch
    Server = https://mirrors.gethosted.online/archlinux/$repo/os/$arch
    Server = http://mirrors.manchester.m247.com/arch-linux/$repo/os/$arch
    Server = http://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch
    Server = https://mirrors.melbourne.co.uk/archlinux/$repo/os/$arch
    Server = http://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch
    Server = https://www.mirrorservice.org/sites/ftp.archlinux.org/$repo/os/$arch
    Server = http://mirror.netweaver.uk/archlinux/$repo/os/$arch
    Server = https://mirror.netweaver.uk/archlinux/$repo/os/$arch
    Server = http://lon.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = https://lon.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = http://arch.serverspace.co.uk/arch/$repo/os/$arch
    Server = http://archlinux.mirrors.uk2.net/$repo/os/$arch
    Server = http://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch
    Server = https://mirrors.ukfast.co.uk/sites/archlinux.org/$repo/os/$arch
    
    ## United States
    Server = http://mirrors.acm.wpi.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.advancedhosters.com/archlinux/$repo/os/$arch
    Server = http://mirrors.aggregate.org/archlinux/$repo/os/$arch
    Server = https://america.mirror.pkgbuild.com/$repo/os/$arch
    Server = http://ca.us.mirror.archlinux-br.org/$repo/os/$arch
    Server = http://il.us.mirror.archlinux-br.org/$repo/os/$arch
    Server = http://archlinux.surlyjake.com/archlinux/$repo/os/$arch
    Server = https://archlinux.surlyjake.com/archlinux/$repo/os/$arch
    Server = http://mirror.arizona.edu/archlinux/$repo/os/$arch
    Server = https://mirror.arizona.edu/archlinux/$repo/os/$arch
    Server = http://arlm.tyzoid.com/$repo/os/$arch
    Server = https://arlm.tyzoid.com/$repo/os/$arch
    Server = https://mirror.ava.dev/archlinux/$repo/os/$arch
    Server = http://mirrors.cat.pdx.edu/archlinux/$repo/os/$arch
    Server = http://mirror.cc.columbia.edu/pub/linux/archlinux/$repo/os/$arch
    Server = http://arch.mirror.constant.com/$repo/os/$arch
    Server = https://arch.mirror.constant.com/$repo/os/$arch
    Server = http://mirror.cs.pitt.edu/archlinux/$repo/os/$arch
    Server = http://mirror.cs.vt.edu/pub/ArchLinux/$repo/os/$arch
    Server = http://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch
    Server = https://mirror.cybersecurity.nmt.edu/archlinux/$repo/os/$arch
    Server = http://distro.ibiblio.org/archlinux/$repo/os/$arch
    Server = http://mirror.es.its.nyu.edu/archlinux/$repo/os/$arch
    Server = http://mirror.ette.biz/archlinux/$repo/os/$arch
    Server = https://mirror.ette.biz/archlinux/$repo/os/$arch
    Server = http://mirrors.gigenet.com/archlinux/$repo/os/$arch
    Server = http://www.gtlib.gatech.edu/pub/archlinux/$repo/os/$arch
    Server = http://mirror.hackingand.coffee/arch/$repo/os/$arch
    Server = https://mirror.hackingand.coffee/arch/$repo/os/$arch
    Server = https://mirror.hodgepodge.dev/archlinux/$repo/os/$arch
    Server = http://mirror.hostup.org/archlinux/$repo/os/$arch
    Server = https://mirror.hostup.org/archlinux/$repo/os/$arch
    Server = http://arch.hu.fo/archlinux/$repo/os/$arch
    Server = https://arch.hu.fo/archlinux/$repo/os/$arch
    Server = http://repo.ialab.dsu.edu/archlinux/$repo/os/$arch
    Server = https://repo.ialab.dsu.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch
    Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
    Server = http://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = http://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = http://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = http://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = https://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = https://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = https://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = https://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
    Server = http://mirrors.liquidweb.com/archlinux/$repo/os/$arch
    Server = http://mirror.lty.me/archlinux/$repo/os/$arch
    Server = https://mirror.lty.me/archlinux/$repo/os/$arch
    Server = http://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch
    Server = https://mirrors.lug.mtu.edu/archlinux/$repo/os/$arch
    Server = http://mirror.math.princeton.edu/pub/archlinux/$repo/os/$arch
    Server = http://mirror.metrocast.net/archlinux/$repo/os/$arch
    Server = http://mirror.kaminski.io/archlinux/$repo/os/$arch
    Server = https://mirror.kaminski.io/archlinux/$repo/os/$arch
    Server = http://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
    Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
    Server = http://repo.miserver.it.umich.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.mit.edu/archlinux/$repo/os/$arch
    Server = https://mirrors.mit.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch
    Server = https://mirrors.ocf.berkeley.edu/archlinux/$repo/os/$arch
    Server = http://archmirror1.octyl.net/$repo/os/$arch
    Server = https://archmirror1.octyl.net/$repo/os/$arch
    Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch
    Server = http://arch.mirrors.pair.com/$repo/os/$arch
    Server = http://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = http://iad.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = http://ord.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = https://dfw.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = https://iad.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = https://ord.mirror.rackspace.com/archlinux/$repo/os/$arch
    Server = http://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch
    Server = https://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.rit.edu/archlinux/$repo/os/$arch
    Server = https://mirrors.rit.edu/archlinux/$repo/os/$arch
    Server = https://arch.rrig.gs/$repo/os/$arch
    Server = http://mirrors.rutgers.edu/archlinux/$repo/os/$arch
    Server = https://mirrors.rutgers.edu/archlinux/$repo/os/$arch
    Server = http://mirror.siena.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.sonic.net/archlinux/$repo/os/$arch
    Server = https://mirrors.sonic.net/archlinux/$repo/os/$arch
    Server = http://arch.mirror.square-r00t.net/$repo/os/$arch
    Server = https://arch.mirror.square-r00t.net/$repo/os/$arch
    Server = http://mirror.stephen304.com/archlinux/$repo/os/$arch
    Server = https://mirror.stephen304.com/archlinux/$repo/os/$arch
    Server = http://ftp.sudhip.com/archlinux/$repo/os/$arch
    Server = https://ftp.sudhip.com/archlinux/$repo/os/$arch
    Server = http://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch
    Server = https://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch
    Server = http://mirror.umd.edu/archlinux/$repo/os/$arch
    Server = http://mirror.vtti.vt.edu/archlinux/$repo/os/$arch
    Server = http://mirrors.xmission.com/archlinux/$repo/os/$arch
    Server = http://mirrors.xtom.com/archlinux/$repo/os/$arch
    Server = https://mirrors.xtom.com/archlinux/$repo/os/$arch
    Server = https://zxcvfdsa.com/arch/$repo/os/$arch
    
    
    
    
    opened by rubiin 5
  • Does the option exist to not print out the beginning?

    Does the option exist to not print out the beginning?

    When we run rate-mirrors we get this as output https://pastebin.com/XyYnVtxd

    Can we get / Does a switch exist to not have all these lines at the beginning?

    It messes up the application pace.

    Posted on https://gitlab.com/softwareperonista/pace/-/issues/41 too.

    opened by arcolinuxz 4
  • reuse runtime instead of spawning new ones in new Thread

    reuse runtime instead of spawning new ones in new Thread

    main spawns a new thread to fetch the correct mirrors

    https://github.com/westandskif/rate-mirrors/blob/dad9c2368ff3afea25c1aabdcef0216e8a957ea0/src/main.rs#L103-L109

    This thread then spawns a Runtime to block on an async function

    https://github.com/westandskif/rate-mirrors/blob/dad9c2368ff3afea25c1aabdcef0216e8a957ea0/src/targets/archlinux.rs#L39

    https://github.com/westandskif/rate-mirrors/blob/dad9c2368ff3afea25c1aabdcef0216e8a957ea0/src/targets/archlinux.rs#L42-L43

    Would it make sense to create a general Runtime instead to reuse in the functions that fetch mirrors instead? Or is this done by design?

    Reusing the runtime would, for instance, make sense in fetch_arch_mirrors as the Runtime currently blocks twice there, negating the pros of using tokio there in the first place.

    opened by Witcher01 4
  • rate-mirrors not work in stdin

    rate-mirrors not work in stdin

    Hello everyone,

    I am from India, recently i switch to blackarch linux so i need to update my system so i like to change my mirrors for faster connectivity speed and to avoid timeout errors. so i fed mirrorlist via stdin but i got no output on screen but the syntax was correct one

    :rate-mirrors stdin --path-to-test="blackarch-mirrorlist.backup" --comment-prefix="# " --path-to-return='$repo/os/$arch'

    working directory: /etc/pacman.d

    file:

    Worldwide

    Server = https://mirrors.fosshost.org/blackarch/$repo/os/$arch Server = https://mirrors.fossho.st/blackarch/$repo/os/$arch

    Australia

    Server = http://blackarch.mirror.digitalpacific. … o/os/$arch

    Austria

    Server = http://mirror.easyname.at/blackarch/$repo/os/$arch Server = ftp://mirror.easyname.at/blackarch/$repo/os/$arch

    China

    Server = https://mirror.sjtu.edu.cn/blackarch/$repo/os/$arch Server = https://mirrors.tuna.tsinghua.edu.cn/bl … o/os/$arch Server = https://mirrors.ustc.edu.cn/blackarch/$repo/os/$arch

    Denmark

    Server = https://mirrors.dotsrc.org/blackarch/$repo/os/$arch Server = http://mirrors.dotsrc.org/blackarch/$repo/os/$arch Server = ftp://mirrors.dotsrc.org/blackarch/$repo/os/$arch

    Ecuador

    Server = http://mirror.uta.edu.ec/blackarch/$repo/os/$arch Server = https://mirror.uta.edu.ec/blackarch/$repo/os/$arch Server = ftp://mirror.uta.edu.ec/blackarch/$repo/os/$arch Server = http://mirror.cedia.org.ec/blackarch/$repo/os/$arch Server = https://mirror.cedia.org.ec/blackarch/$repo/os/$arch

    like this [ here i not mention entire output of file blackarch-mirrorlist..backup]

    additional questions : *)what is eps and eps check which ratio is best for faster downloads? *)how to change entry country because i live in india, i want to explore near by country's to me? *)by utilizing mirror how to avoid download timeout error? whether i can test rsync protocol

    that's all my friend

    opened by Keerthivasan472 3
  • The --protocol option isn't working

    The --protocol option isn't working

    If I run the option, I'm presented with the same output I would receive if I just ran `rate-mirrors help'.

    Specifically, I've tried running rate-mirrors --protocol https arch

    I've also tried enclosing the http argument in quotes.

    I've tried the command from both fish and bash.

    The command works without the --protocol option.

    • rate-mirrors config 0.6.0
    • rate-mirrors-bin (AUR)

    Cheers

    opened by Pound-Hash 3
  • Adding support to rank and output RebornOS mirrors

    Adding support to rank and output RebornOS mirrors

    Currently the RebornOS community uses a mirrorlist file, but that does not provide satisfactory performance to all users, because they are not ranked based on individuals' networks.

    This pull request adds support for ranking RebornOS' mirrors. RebornOS currently has a text-based mirrorlist in our Gitlab organization that we update regularly. The additions in this code will fetch the mirrorlist file, extract only the URLs, and submit them to the application for ranking. The output is of the standard format used in the Arch Linux mirrorlist.

    Thanks for giving me the opportunity to work on this addition 🙂

    opened by shivanandvp 3
  • archarm borked

    archarm borked

    Server = http://gr.mirror.archlinuxarm.org/$arch/$arch/$repo Server = http://fl.us.mirror.archlinuxarm.org/$arch/$arch/$repo it gives $arch twice should be just once

    opened by Rippanda12 2
  • Twice --path-to-return

    Twice --path-to-return

    Hi,

    I'm using the rate-mirrors for arch and chaotic mirrorslist with stdin (awesome!). However, I saw that --path-to-return parameter returns 'the term before $arch' twice. I don't know if I'm using correctly or if is a real issue.

    This is an example of the command:

    curl -s "https://archlinux.org/mirrorlist/?country=BR" | sed -e "s/^#Server = //" -e "/^#/d" -e "/^$/d" -e "s/\$repo\/os\/\$arch//g" | rate-mirrors stdin --path-to-test="community/os/x86_64/community.files" --path-to-return='$repo/os/$arch' --output-prefix="Server = " | sudo tee ~/example

    And the output:

    # STARTED AT: 2022-05-17 12:28:37.448740258 -03:00
    # ARGS: rate-mirrors stdin --path-to-test=community/os/x86_64/community.files --path-to-return=$repo/os/$arch --output-prefix=Server = 
    # MIRRORS LEFT AFTER FILTERING: 10
    # JUMP #1
    # EXPLORING US
    # VISITED US
    # BLANK ITERATION
    # COUNTRY JUMPING YIELDED TOO FEW MIRRORS (0), ADDING OTHERS TO UNLABELED
    # 
    
    # TESTING UNLABELED MIRRORS
    # SpeedTestResult { speed: 374.20 KB/s; elapsed: 1.230897955s; connection_time: 145.549254ms }
    # SpeedTestResult { speed: 3.57 MB/s; elapsed: 1.390944385s; connection_time: 107.407297ms }
    # SpeedTestResult { speed: 647.21 KB/s; elapsed: 1.3991738s; connection_time: 100.782783ms }
    # SpeedTestResult { speed: 116.29 KB/s; elapsed: 1.038307777s; connection_time: 391.465037ms }
    # SpeedTestResult { speed: 444.81 KB/s; elapsed: 1.304742522s; connection_time: 184.487418ms }
    # SpeedTestResult { speed: 19.22 MB/s; elapsed: 1.375187845s; connection_time: 124.960557ms }
    # 
    
    # RE-TESTING TOP MIRRORS
    # SpeedTestResult { speed: 20.40 MB/s; elapsed: 1.31985743s; connection_time: 160.257424ms }
    # SpeedTestResult { speed: 12.97 MB/s; elapsed: 1.396621156s; connection_time: 103.172203ms }
    # SpeedTestResult { speed: 1.26 MB/s; elapsed: 1.327425885s; connection_time: 168.803158ms }
    # SpeedTestResult { speed: 670.04 KB/s; elapsed: 1.286572029s; connection_time: 204.588049ms }
    # SpeedTestResult { speed: 12.71 MB/s; elapsed: 1.347824757s; connection_time: 149.093535ms }
    # ==== RESULTS (top re-tested) ====
    #   1. SpeedTestResult { speed: 20.40 MB/s; elapsed: 1.31985743s; connection_time: 160.257424ms } -> http://mirror.ufscar.br/archlinux/$repo/os/$arch
    #   2. SpeedTestResult { speed: 12.97 MB/s; elapsed: 1.396621156s; connection_time: 103.172203ms } -> http://br.mirror.archlinux-br.org/$repo/os/$arch
    #   3. SpeedTestResult { speed: 12.71 MB/s; elapsed: 1.347824757s; connection_time: 149.093535ms } -> http://archlinux.c3sl.ufpr.br/$repo/os/$arch
    #   4. SpeedTestResult { speed: 1.26 MB/s; elapsed: 1.327425885s; connection_time: 168.803158ms } -> http://archlinux.pop-es.rnp.br/$repo/os/$arch
    #   5. SpeedTestResult { speed: 670.04 KB/s; elapsed: 1.286572029s; connection_time: 204.588049ms } -> http://mirror.ufam.edu.br/archlinux/$repo/os/$arch
    #   6. SpeedTestResult { speed: 116.29 KB/s; elapsed: 1.038307777s; connection_time: 391.465037ms } -> http://linorg.usp.br/archlinux/$repo/os/$arch
    # FINISHED AT: 2022-05-17 12:28:47.213625410 -03:00
    Server = http://mirror.ufscar.br/archlinux/$repo/os/$repo/os/$arch
    Server = http://br.mirror.archlinux-br.org/$repo/os/$repo/os/$arch
    Server = http://archlinux.c3sl.ufpr.br/$repo/os/$repo/os/$arch
    Server = http://archlinux.pop-es.rnp.br/$repo/os/$repo/os/$arch
    Server = http://mirror.ufam.edu.br/archlinux/$repo/os/$repo/os/$arch
    Server = http://linorg.usp.br/archlinux/$repo/os/$repo/os/$arch
    

    The results have "[...]$repo/os/$repo/os/$arch" in the end.

    Thanks.

    opened by arthurflor23 2
  • consistent formatting of SpeedTestResult Display

    consistent formatting of SpeedTestResult Display

    fix the formatting of SpeedTestResult to have the curly brace at the start/end have a space after/before the curly brace, respectively.

    This has been bugging me a lot, so I thought I'd open this simple PR. If this is not wanted for some reason, feel free to just deny the PR :)

    opened by Witcher01 2
Releases(v0.11.1)
Owner
Nikita Almakov
Nikita Almakov
Mirror of https://gitlab.com/mmstick/tv-renamer

Build Status: Features Written safely in the Rust programming language Features both a command-line and GTK3 interface Support for Templates to define

Michael Murphy 143 Sep 24, 2022
Mirror of https://gitlab.redox-os.org/redox-os/ion

Introduction Ion is a modern system shell that features a simple, yet powerful, syntax. It is written entirely in Rust, which greatly increases the ov

Redox OS 1.3k Jan 4, 2023
Linux Kernel Manager and Activity Monitor 🐧💻

Linux Kernel Manager and Activity Monitor ?? ?? The kernel is the part of the operating system that facilitates interactions between hardware and soft

Orhun Parmaksız 1.7k Jan 5, 2023
Untrusted IPC with maximum performance and minimum latency. On Rust, on Linux.

Untrusted IPC with maximum performance and minimum latency. On Rust, on Linux. When is this Rust crate useful? Performance or latency is crucial, and

null 72 Jan 3, 2023
Transform Linux Audit logs for SIEM usage

Linux Audit – Usable, Robust, Easy Logging TLDR: Instead of audit events that look like this… type=EXECVE msg=audit(1626611363.720:348501): argc=3 a0=

null 465 Jan 1, 2023
MILD - Minimal Install Linux Desktop

MILD - Minimal Install Linux Desktop MILD is a simple and straightforward text-mode installer that aims to install a "D.E."(Desktop Environment) with

Pedro Rosendo 3 Jul 23, 2022
A customisable client for Discord rich presence using simple Lua configuration.

Installation | Usage | Configuration | Example Disco Disco is a customisable client for Discord rich presence using simple Lua configuration. Installa

KaitlynEthylia 5 Aug 7, 2023
Terminal bandwidth utilization tool

bandwhich This is a CLI utility for displaying current network utilization by process, connection and remote IP/hostname How does it work? bandwhich s

Aram Drevekenin 7.5k Dec 31, 2022
A tool to simplify reprovisioning a fresh OS. Installs packages and manages dotfiles.

[[TOC]] Comtrya This is better, yes? Warning This tool is ridiculously early in its development. I'm building out features as I migrate my dotfiles ov

David McKay 2 Dec 29, 2022
A tool to simplify reprovisioning a fresh OS. Installs packages and manages dotfiles.

Comtrya This is better, yes? Warning This tool is ridiculously early in its development. I'm building out features as I migrate my dotfiles over. Thos

Comtrya 272 Jan 7, 2023
idf-env tool helps set up and manage ESP-IDF installations

idf-env Tool for maintaining ESP-IDF environment. Quick start Install serial drivers for ESP boards on Windows. Execute following command in PowerShel

Espressif Systems 19 Dec 4, 2022
It is a backup tool that creates backups and stores them on an object storage

Hold My Backup It is a backup tool that creates backups and stores them on an object storage. By default it uses minio but you can use AWS: S3 as well

Taylan Dogan 13 Feb 17, 2022
Another tool you didn't know you want

colorful-uname Another tool you didn't know you want Examples: Default operation: "All" operation: Help message: Building and installation: Build proc

S0ra 4 Oct 5, 2022
A tool for quickly switching between different file configurations, using symbolic links.

config-loader A tool for quickly switching between different file configurations, using symbolic links. Usage To use it, download the latest release f

Zacchary Dempsey-Plante 3 Aug 22, 2022
A simple rust-based tool for fetching system information

?? azf a simple rust-based tool for fetching system information you need a patched nerd font and the material design icons font ?? compiling you can c

Pedro Henrique 3 Dec 17, 2022
enum-map enum-map xfix/enum-map [enum-map] — An optimized map implementation for enums using an array to store values.

enum-map A library providing enum map providing type safe enum array. It is implemented using regular Rust arrays, so using them is as fast as using r

Konrad Borowski 57 Dec 19, 2022
A utility like pkg-audit for Arch Linux. Based on Arch Security Team data.

arch-audit pkg-audit-like utility for Arch Linux. Based on data from security.archlinux.org collected by the awesome Arch Security Team. Installation

Andrea Scarpino 316 Nov 22, 2022
A utility like pkg-audit for Arch Linux. Based on Arch Security Team data.

arch-audit pkg-audit-like utility for Arch Linux. Based on data from security.archlinux.org collected by the awesome Arch Security Team. Installation

Andrea Scarpino 316 Nov 22, 2022
Check the reproducibility status of your Arch Linux packages (read-only mirror)

arch-repro-status A CLI tool for querying the reproducibility status of the Arch Linux packages using data from a rebuilderd instance such as reproduc

Arch Linux 12 Nov 16, 2022
Authenticate the cryptographic chain-of-custody of Linux distributions (like Arch Linux and Debian) to their source code inputs

backseat-signed Authenticate the cryptographic chain-of-custody of Linux distributions (like Arch Linux and Debian) to their source code inputs. This

null 25 Apr 17, 2024