summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2018-09-11 20:43:48 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-09-11 20:43:48 -0400
commit8d6e8328d115c4bef9c6458cf8b3dc521ade4c0c (patch)
tree6efb09289de1b5c317a00f89dbadc532746c20a2
parente69096a30cbefc79bc1ecd791b4d8d4c1b727b33 (diff)
Update config-list-mirrors-archlinuxarm, switch to the Denmark mirrorparabola/20180920
-rwxr-xr-xconfig-list-mirrors-archlinuxarm38
-rw-r--r--config.local.archlinuxarm13
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/'