diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2018-09-11 20:43:48 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-09-11 20:43:48 -0400 |
commit | 8d6e8328d115c4bef9c6458cf8b3dc521ade4c0c (patch) | |
tree | 6efb09289de1b5c317a00f89dbadc532746c20a2 | |
parent | e69096a30cbefc79bc1ecd791b4d8d4c1b727b33 (diff) |
Update config-list-mirrors-archlinuxarm, switch to the Denmark mirrorparabola/20180920
-rwxr-xr-x | config-list-mirrors-archlinuxarm | 38 | ||||
-rw-r--r-- | config.local.archlinuxarm | 13 |
2 files changed, 27 insertions, 24 deletions
diff --git a/config-list-mirrors-archlinuxarm b/config-list-mirrors-archlinuxarm index 58c2557..63f1814 100755 --- a/config-list-mirrors-archlinuxarm +++ b/config-list-mirrors-archlinuxarm @@ -25,6 +25,7 @@ unless ARGV.empty? exit 2 end +# Get a listing of hostnames that have HTTP Arch Linux ARM mirrors data = JSON::parse(Net::HTTP.post( URI("https://archlinuxarm.org/data/mirrors/list"), "", { 'Referer' => 'https://archlinuxarm.org/about/mirrors', @@ -33,31 +34,34 @@ data = JSON::parse(Net::HTTP.post( hosts = data["data"].map{|m|m[2]} -# Get a listing of rsync modules for each host +# Get a listing of rsync URLs for each host modulelist_procs = {} hosts.each do |host| - modulelist_procs[host] ||= IO.popen(["timeout", "2s", "rsync", "#{host}::"], :err => devnull) + modulelist_procs[host] ||= IO.popen(["timeout", "2s", "rsync", "--password-file", "/dev/null", "#{host}::"], :err => devnull) end -modulelists = {} +rsync_urls = Set.new() modulelist_procs.each do |host,modulelist_proc| - modulelists[host] = modulelist_proc.read + modules = modulelist_proc.read.lines.map{|line| line.chomp.sub(/\s.*/, '') } modulelist_proc.close + rsync_urls.merge(modules.map{|m| "rsync://#{host}/#{m}/"}) end -# Look for modules that look like ALARM mirrors -modules = Set.new() -modulelists.each do |host,listing| - hostmodules = listing.lines.select{|line| line =~ /(alarm|arch.*arm)/i }.map{|line| line.chomp.sub(/\s.*/, '') } - modules.merge(hostmodules.map{|m| "rsync://#{host}/#{m}"}) -end -# Filter the ones that we have read access for + +# Get a listing of the top-level files in each listing_procs = {} -modules.each do |m| - listing_procs[m] ||= IO.popen(["rsync", "--no-motd", "--list-only", "--", m], :err => devnull) +rsync_urls.each do |url| + listing_procs[url] ||= IO.popen(["rsync", "--password-file", "/dev/null", "--no-motd", "--list-only", "--", url], :err => devnull) end +listings = {} listing_procs.map.each do |url,listing_proc| - listing_proc.read + listings[url] = listing_proc.read.lines.map{|line|line.chomp.sub(/.*\s/,'')} listing_proc.close - if $?.exitstatus == 0 - puts url - end +end + +# Filter for listings that look like Arch Linux ARM mirrors +requires = ['aarch64', 'arm', 'armv6h', 'armv7h', 'os'] +rsync_urls = rsync_urls.select{|url| requires.all?{|file|listings[url].include?(file)} } + +# Print the results +rsync_urls.sort.each do |url| + puts url end diff --git a/config.local.archlinuxarm b/config.local.archlinuxarm index 7c8af4f..8947f5c 100644 --- a/config.local.archlinuxarm +++ b/config.local.archlinuxarm @@ -17,12 +17,11 @@ INHERIT=( # Of the ALARM mirrors that have public rsync: # # $ ./config-list-mirrors-archlinuxarm -# rsync://nl.mirror.archlinuxarm.org/alarmro -# rsync://dk.mirror.archlinuxarm.org/archlinuxarm -# rsync://de3.mirror.archlinuxarm.org/archlinux-arm -# rsync://sg.mirror.archlinuxarm.org/archlinuxarm -# rsync://ru.mirror.archlinuxarm.org/archlinuxarm +# rsync://de3.mirror.archlinuxarm.org/archlinux-arm/ +# rsync://dk.mirror.archlinuxarm.org/archlinuxarm/ +# rsync://ru.mirror.archlinuxarm.org/archlinuxarm/ +# rsync://sg.mirror.archlinuxarm.org/archlinuxarm/ # -# the ones in Denmark and the Netherlands have the best ping time from +# 'dk' (Denmark) has the best ping time from # winston.parabola.nu (Iceland). -ARCHMIRROR='rsync://nl.mirror.archlinuxarm.org/alarmro/' +ARCHMIRROR='rsync://dk.mirror.archlinuxarm.org/archlinuxarm/' |