aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authoronefang2021-11-10 02:33:07 +1000
committeronefang2021-11-10 02:33:07 +1000
commita06e989281515344c562675b8b311ae627b96661 (patch)
tree6fc508695c3a79ab51dce928d9e66aa2a868495e
parentAdd back Jessie, and promote Chimaera, and add Daedalus. (diff)
downloadapt-panopticon-a06e989281515344c562675b8b311ae627b96661.zip
apt-panopticon-a06e989281515344c562675b8b311ae627b96661.tar.gz
apt-panopticon-a06e989281515344c562675b8b311ae627b96661.tar.bz2
apt-panopticon-a06e989281515344c562675b8b311ae627b96661.tar.xz
io.popen returns nil sometimes, deal with that.
-rw-r--r--apt-panopticommon.lua19
-rwxr-xr-xapt-panopticon.lua37
2 files changed, 33 insertions, 23 deletions
diff --git a/apt-panopticommon.lua b/apt-panopticommon.lua
index 221c7e3..9de97b4 100644
--- a/apt-panopticommon.lua
+++ b/apt-panopticommon.lua
@@ -483,6 +483,17 @@ local E = APT.E
483local C = APT.C 483local C = APT.C
484 484
485 485
486APT.readCmd = function(cmd)
487 local result = {}
488 local output = io.popen(cmd)
489 if nil ~= output then
490 for l in output:lines() do
491 table.insert(result, l)
492 end
493 end
494 return result
495end
496
486APT.debians = {} 497APT.debians = {}
487APT.mirrors = {} 498APT.mirrors = {}
488 499
@@ -559,10 +570,10 @@ APT.exe = function(c)
559 I'm getting 7168 or 0. No idea what the fuck that is. 570 I'm getting 7168 or 0. No idea what the fuck that is.
560 local ok, rslt, status = os.execute(s) 571 local ok, rslt, status = os.execute(s)
561 ]] 572 ]]
562 local f = io.popen(self.cmd .. ' ; echo "$?"', 'r') 573 local f = APT.readCmd(self.cmd .. ' ; echo "$?"', 'r')
563 -- The last line will be the command's returned status, collect everything else in result. 574 -- The last line will be the command's returned status, collect everything else in result.
564 self.status = '' -- Otherwise the result starts with 0. 575 self.status = '' -- Otherwise the result starts with 0.
565 for l in f:lines() do 576 for i,l in ipairs(f) do
566 self.result = self.result .. self.status .. "\n" 577 self.result = self.result .. self.status .. "\n"
567 self.status = l 578 self.status = l
568 end 579 end
@@ -579,7 +590,9 @@ APT.exe = function(c)
579end 590end
580 591
581APT.checkExes = function (exe) 592APT.checkExes = function (exe)
582 local count = io.popen('ps x | grep "' .. exe .. '" | grep -v " grep " | grep -v "flock -n apt-panopticon.lock " | wc -l'):read("*l") 593 local count = 0
594 local ps = io.popen('ps x | grep "' .. exe .. '" | grep -v " grep " | grep -v "flock -n apt-panopticon.lock " | wc -l')
595 if nil ~= ps then count = ps:read("*l") end
583 D(count .. " " .. exe .. " commands still running.") 596 D(count .. " " .. exe .. " commands still running.")
584 return tonumber(count) 597 return tonumber(count)
585end 598end
diff --git a/apt-panopticon.lua b/apt-panopticon.lua
index 8543210..482a2ac 100755
--- a/apt-panopticon.lua
+++ b/apt-panopticon.lua
@@ -175,24 +175,21 @@ gatherIPs = function (host)
175 -- Takes about 30 seconds to look up the lot. 175 -- Takes about 30 seconds to look up the lot.
176 -- I tested using dig's -f option, it didn't seem much faster. 176 -- I tested using dig's -f option, it didn't seem much faster.
177 -- The sort -r assumes that deb.devuan.org is the first alphabetically. 177 -- The sort -r assumes that deb.devuan.org is the first alphabetically.
178 local dig = io.popen('dig +keepopen +noall +nottlid +answer ' .. host .. ' A ' .. host .. ' AAAA ' .. host .. ' CNAME ' .. host .. ' SRV | sort -r | uniq') 178 local dig = APT.readCmd('dig +keepopen +noall +nottlid +answer ' .. host .. ' A ' .. host .. ' AAAA ' .. host .. ' CNAME ' .. host .. ' SRV | sort -r | uniq')
179 repeat 179 for i,IPs in ipairs(dig) do
180 IPs = dig:read("*l") 180 for k, t, v in IPs:gmatch("([%w_%-%.]*)%.%s*IN%s*(%a*)%s*(.*)") do
181 if nil ~= IPs then 181 if "." == v:sub(-1, -1) then v = v:sub(1, -2) end
182 for k, t, v in IPs:gmatch("([%w_%-%.]*)%.%s*IN%s*(%a*)%s*(.*)") do 182 if nil == IP[k] then IP[k] = {} end
183 if "." == v:sub(-1, -1) then v = v:sub(1, -2) end 183 IP[k][v] = t
184 if nil == IP[k] then IP[k] = {} end 184 D(" DNS record " .. host .. " == " .. k .. " type " .. t .. " -> " .. v)
185 IP[k][v] = t 185 if t == "CNAME" then
186 D(" DNS record " .. host .. " == " .. k .. " type " .. t .. " -> " .. v) 186 gatherIPs(v)
187 if t == "CNAME" then 187 IP[k][v] = IP[v]
188 gatherIPs(v) 188 elseif v == "SRV" then
189 IP[k][v] = IP[v] 189 print("SVR record found, now what do we do?")
190 elseif v == "SRV" then
191 print("SVR record found, now what do we do?")
192 end
193 end 190 end
194 end 191 end
195 until nil == IPs 192 end
196 end 193 end
197 194
198 -- If this is the DNS-RR domain name, gather the IPs for the mirrors that mirror_list.txt says should be in it. 195 -- If this is the DNS-RR domain name, gather the IPs for the mirrors that mirror_list.txt says should be in it.
@@ -1179,8 +1176,8 @@ else
1179 local APT_args = APT.args 1176 local APT_args = APT.args
1180 local APT_logFile = APT.logFile 1177 local APT_logFile = APT.logFile
1181 local debians = {} 1178 local debians = {}
1182 local srvs = io.popen('ls -1 results/*.lua') 1179 local srvs = APT.readCmd('ls -1 results/*.lua')
1183 for l in srvs:lines() do 1180 for ii,l in ipairs(srvs) do
1184 local hst = l:sub(9, -5) 1181 local hst = l:sub(9, -5)
1185 if nil ~= l:find('_R%.lua') then hst = hst:sub(1, -3) end 1182 if nil ~= l:find('_R%.lua') then hst = hst:sub(1, -3) end
1186 if (hst:find('_') == nil) and (nil == APT.mirrors[hst]) then 1183 if (hst:find('_') == nil) and (nil == APT.mirrors[hst]) then
@@ -1197,8 +1194,8 @@ else
1197 end 1194 end
1198 end 1195 end
1199 end 1196 end
1200 local files = io.popen('ls -1 results/LOG_' .. hst .. '_*.html') 1197 local files = APT.readCmd('ls -1 results/LOG_' .. hst .. '_*.html')
1201 for ll in files:lines() do 1198 for iii,ll in ipairs(files) do
1202 local dn = false 1199 local dn = false
1203 for i, a in pairs(ips) do 1200 for i, a in pairs(ips) do
1204 if type(a) == 'table' then 1201 if type(a) == 'table' then