diff options
| -rw-r--r-- | apt-panopticommon.lua | 31 | ||||
| -rwxr-xr-x | apt-panopticon.lua | 34 |
2 files changed, 53 insertions, 12 deletions
diff --git a/apt-panopticommon.lua b/apt-panopticommon.lua index d9293f6..b1f39d7 100644 --- a/apt-panopticommon.lua +++ b/apt-panopticommon.lua | |||
| @@ -26,6 +26,19 @@ APT.keep = false | |||
| 26 | 26 | ||
| 27 | APT.options = | 27 | APT.options = |
| 28 | { | 28 | { |
| 29 | bandwidth = | ||
| 30 | { | ||
| 31 | typ = "number", | ||
| 32 | help = ' 0 = low - HTTP tests for all IPs of all mirrors (HEAD tests), but not URL sanity tests.\n' .. | ||
| 33 | ' 1 = medium - Also HTTP(S) redirect tests, other protocols, download Release files over HTTP, and check them.\n' .. | ||
| 34 | ' 2 = high - Also download Packages.xz files that changed, unpack and check them.\n' .. | ||
| 35 | ' Also download and check InRelease files\n.' .. | ||
| 36 | ' Pick a few small packages, download them, check their SHA512.\n' .. | ||
| 37 | ' 3 = more - Also pick more packages, some for each arch.\n' .. | ||
| 38 | ' 4 = all - Do absolutely everything.\n' .. | ||
| 39 | ' Actually download some Contents files, and some more Packages.xz, and package files.', | ||
| 40 | value = 2, | ||
| 41 | }, | ||
| 29 | referenceSite = | 42 | referenceSite = |
| 30 | { | 43 | { |
| 31 | typ = "string", | 44 | typ = "string", |
| @@ -127,6 +140,24 @@ APT.parseArgs = function(args) | |||
| 127 | elseif "-r" == a then | 140 | elseif "-r" == a then |
| 128 | APT.redir = true | 141 | APT.redir = true |
| 129 | sendArgs = sendArgs .. a .. " " | 142 | sendArgs = sendArgs .. a .. " " |
| 143 | elseif "--low" == a then | ||
| 144 | APT.options.bandwidth.value = 0 | ||
| 145 | APT.options.timeout.value = 2 | ||
| 146 | APT.options.timeouts.value = 1 | ||
| 147 | APT.options.retries.value = 1 | ||
| 148 | sendArgs = sendArgs .. a .. " " | ||
| 149 | elseif "--medium" == a then | ||
| 150 | APT.options.bandwidth.value = 1 | ||
| 151 | sendArgs = sendArgs .. a .. " " | ||
| 152 | elseif "--high" == a then | ||
| 153 | APT.options.bandwidth.value = 2 | ||
| 154 | sendArgs = sendArgs .. a .. " " | ||
| 155 | elseif "--more" == a then | ||
| 156 | APT.options.bandwidth.value = 3 | ||
| 157 | sendArgs = sendArgs .. a .. " " | ||
| 158 | elseif "--all" == a then | ||
| 159 | APT.options.bandwidth.value = 4 | ||
| 160 | sendArgs = sendArgs .. a .. " " | ||
| 130 | elseif "--" == a:sub(1, 2) then | 161 | elseif "--" == a:sub(1, 2) then |
| 131 | local s, e = a:find("=") | 162 | local s, e = a:find("=") |
| 132 | if nil == s then e = -1 end | 163 | if nil == s then e = -1 end |
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index c2b44ee..b45ca45 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
| @@ -350,7 +350,7 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
| 350 | end | 350 | end |
| 351 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) | 351 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) |
| 352 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. | 352 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. |
| 353 | if nil ~= location then | 353 | if (1 <= APT.options.bandwidth.value) and (nil ~= location) then |
| 354 | pu = url.parse(location, defaultURL) | 354 | pu = url.parse(location, defaultURL) |
| 355 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. | 355 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. |
| 356 | if APT.testing("Protocol") then | 356 | if APT.testing("Protocol") then |
| @@ -397,7 +397,7 @@ end | |||
| 397 | local checkTimeouts = function(host, scheme, URL) | 397 | local checkTimeouts = function(host, scheme, URL) |
| 398 | totalTimeouts = totalTimeouts + timeouts; timeouts = 0 | 398 | totalTimeouts = totalTimeouts + timeouts; timeouts = 0 |
| 399 | checkHEAD(host, scheme .. "://" .. URL) | 399 | checkHEAD(host, scheme .. "://" .. URL) |
| 400 | if APT.testing("URLSanity") then | 400 | if (1 <= APT.options.bandwidth.value) and APT.testing("URLSanity") then |
| 401 | URL = URL:gsub("/", "///") | 401 | URL = URL:gsub("/", "///") |
| 402 | URL = URL:gsub("///", "/", 1) | 402 | URL = URL:gsub("///", "/", 1) |
| 403 | checkHEAD(host, scheme .. "://" .. URL, 0, 0, true) | 403 | checkHEAD(host, scheme .. "://" .. URL, 0, 0, true) |
| @@ -424,21 +424,31 @@ local checkFiles = function (host, ip, path, file) | |||
| 424 | if checkTimeouts(host, "https", ip .. path .. "/" .. file) then return end | 424 | if checkTimeouts(host, "https", ip .. path .. "/" .. file) then return end |
| 425 | else | 425 | else |
| 426 | I(" Checking IP " .. host .. " -> " .. ip .. " " .. path) | 426 | I(" Checking IP " .. host .. " -> " .. ip .. " " .. path) |
| 427 | if 1 <= APT.options.bandwidth.value then | ||
| 428 | -- Do these first, coz they are likely to fork off a different server. | ||
| 429 | for i, s in pairs(referenceDebs) do | ||
| 430 | if checkTimeouts(host, "http", ip .. path .. "/" .. s) then return end | ||
| 431 | if checkTimeouts(host, "https", ip .. path .. "/" .. s) then return end | ||
| 432 | end | ||
| 433 | end | ||
| 427 | for i, s in pairs(releases) do | 434 | for i, s in pairs(releases) do |
| 428 | for j, k in pairs(releaseFiles) do | 435 | for j, k in pairs(releaseFiles) do |
| 429 | if repoExists(s .. k) then | 436 | if repoExists(s .. k) then |
| 430 | if checkTimeouts(host, "http", ip .. path .. "/merged/dists/" .. s .. '/' .. k) then return end | 437 | if checkTimeouts(host, "http", ip .. path .. "/merged/dists/" .. s .. '/' .. k) then return end |
| 431 | if checkTimeouts(host, "https", ip .. path .. "/merged/dists/" .. s .. '/' .. k) then return end | 438 | if 1 <= APT.options.bandwidth.value then |
| 439 | if checkTimeouts(host, "https", ip .. path .. "/merged/dists/" .. s .. '/' .. k) then return end | ||
| 440 | else | ||
| 441 | break | ||
| 442 | end | ||
| 432 | end | 443 | end |
| 433 | end | 444 | end |
| 445 | if 0 == APT.options.bandwidth.value then break end | ||
| 434 | end | 446 | end |
| 435 | for i, s in pairs(referenceDebs) do | 447 | if 1 <= APT.options.bandwidth.value then |
| 436 | if checkTimeouts(host, "http", ip .. path .. "/" .. s) then return end | 448 | for i, s in pairs(referenceDevs) do |
| 437 | if checkTimeouts(host, "https", ip .. path .. "/" .. s) then return end | 449 | if checkTimeouts(host, "http", ip .. path .. "/" .. s) then return end |
| 438 | end | 450 | if checkTimeouts(host, "https", ip .. path .. "/" .. s) then return end |
| 439 | for i, s in pairs(referenceDevs) do | 451 | end |
| 440 | if checkTimeouts(host, "http", ip .. path .. "/" .. s) then return end | ||
| 441 | if checkTimeouts(host, "https", ip .. path .. "/" .. s) then return end | ||
| 442 | end | 452 | end |
| 443 | end | 453 | end |
| 444 | end | 454 | end |
| @@ -843,7 +853,7 @@ local parseRelease = function(host) | |||
| 843 | -- TODO - like we do with debs, pick just the smallest Packages.xz that has changed. | 853 | -- TODO - like we do with debs, pick just the smallest Packages.xz that has changed. |
| 844 | -- Though we are sorting Release by name, so we can do the diff with the one from results_old, so we'll need to sort by size to. | 854 | -- Though we are sorting Release by name, so we can do the diff with the one from results_old, so we'll need to sort by size to. |
| 845 | -- pkgmaster still needs to download all the changed Packages.xz files though. | 855 | -- pkgmaster still needs to download all the changed Packages.xz files though. |
| 846 | if updated or APT.testing("Integrity") or (APT.options.referenceSite.value == host) then | 856 | if (2 <= APT.options.bandwidth.value) and (updated or APT.testing("Integrity") or (APT.options.referenceSite.value == host)) then |
| 847 | local dfile, e = io.open(outFile, "r") | 857 | local dfile, e = io.open(outFile, "r") |
| 848 | if nil == dfile then W("opening " .. outFile .. " file - " .. e) else | 858 | if nil == dfile then W("opening " .. outFile .. " file - " .. e) else |
| 849 | for l in dfile:lines() do | 859 | for l in dfile:lines() do |
| @@ -1024,7 +1034,7 @@ if 0 < #arg then | |||
| 1024 | end | 1034 | end |
| 1025 | 1035 | ||
| 1026 | if not APT.redir then | 1036 | if not APT.redir then |
| 1027 | if APT.testing("Integrity") or APT.testing("Updated") then | 1037 | if (1 <= APT.options.bandwidth.value) and (APT.testing("Integrity") or APT.testing("Updated")) then |
| 1028 | if APT.origin and (APT.options.roundRobin.value ~= pu.host) then | 1038 | if APT.origin and (APT.options.roundRobin.value ~= pu.host) then |
| 1029 | I("Starting file downloads for " .. pu.host) | 1039 | I("Starting file downloads for " .. pu.host) |
| 1030 | D('*>* About to create coroutine.') | 1040 | D('*>* About to create coroutine.') |
