dotfiles/.local/bin/test-mirriros.sh
2025-05-28 18:33:04 +02:00

48 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Package pattern: "rocm-llvm-" followed by any characters and ending with ".pkg.tar.zst"
PACKAGE_PATTERN='rocm-llvm-[^"'\'' >]*\.pkg\.tar\.zst'
POOL_DIR="pool/packages"
# Iterate over each line in /etc/pacman.d/mirrorlist that starts with "Server"
grep -E '^Server' /etc/pacman.d/mirrorlist | while read -r line; do
# Extract the base URL (the part after "=")
base=$(echo "$line" | sed -E 's/.*=\s*(.*)/\1/')
# Get only the protocol and domain, discarding any extra paths
root=$(echo "$base" | sed -E 's|(https?://[^/]+).*|\1|')
# Ensure that root ends with a "/"
[[ "${root: -1}" != "/" ]] && root="${root}/"
# URL for the packages directory
dir_url="${root}${POOL_DIR}/"
echo "Listing files at: $dir_url"
# Retrieve the directory listing
listing=$(curl -s "$dir_url")
if [ -z "$listing" ]; then
echo "Could not retrieve listing from $dir_url (possibly the mirror does not allow directory listing)"
echo "-----------------------------"
continue
fi
# Search the listing for a package name matching the pattern
package=$(echo "$listing" | grep -oE "$PACKAGE_PATTERN" | head -n 1)
if [ -z "$package" ]; then
echo "No package matching the pattern was found in $dir_url"
echo "-----------------------------"
continue
fi
# Build the complete package URL
full_url="${dir_url}${package}"
echo "Testing: $full_url"
# Download the complete package (discarding the data) and measure the download speed in bytes/s
speed_bytes=$(curl -o /dev/null -s -w "%{speed_download}" "$full_url")
# Convert the speed to MB/s (1 MB = 1048576 bytes)
speed_MB=$(echo "scale=2; $speed_bytes/1048576" | bc)
echo "Download speed: $speed_MB MB/s"
echo "-----------------------------"
done