fw876 / helloworld

GNU General Public License v3.0
3.69k stars 2.65k forks source link

update.lua还是没有处理好新版本dnsmasq的问题 #1585

Open qwerttvv opened 1 day ago

qwerttvv commented 1 day ago

上次把因为新dnsmasq配置改变引起的无法启动的问题修了,见 https://github.com/fw876/helloworld/commit/8c362ba2cdb11aa26acbe93789ce76ad76705f85 感谢

后来发现你去web页面手动更新gfw列表会报错 can't create '/dnsmasq-ssrplus.d/gfw_list.conf': No such file or directory

所以就是这个更新还得修修 https://github.com/fw876/helloworld/commit/8c362ba2cdb11aa26acbe93789ce76ad76705f85

@zxlhhyccc

当前如果你想手动更新列表,那么你更新完了如果列表有变化,你就手动重启一下ssrp,或者去换个节点再保存并应用,这样就可以了

qwerttvv commented 1 day ago

看见了这么一段

-- gfwlist转码至dnsmasq格式
local function generate_gfwlist(type)
    local domains = {}
    local out = io.open("/tmp/ssr-update." .. type, "w")
    for line in io.lines("/tmp/ssr-update.tmp") do
        if not (string.find(line, comment_pattern) or string.find(line, ip_pattern) or check_excluded_domain(line)) then
            local start, finish, match = string.find(line, domain_pattern)
            if (start) then
                domains[match] = true
            end
        end
    end
    for k, v in pairs(domains) do
        out:write(string.format("server=/%s/%s#%s\n", k, mydnsip, mydnsport))
        out:write(string.format("ipset=/%s/%s\n", k, ipsetname))
    end
    out:close()
    os.remove("/tmp/ssr-update.tmp")
end

这样会改变原list的内容列表的顺序吧?我给改了一下……

因为现在有些列表会优化list内容的顺序,使dnsmasq遍历匹配效率更高

所以不如大师你一并改了好了,改成下边这样,就可以按原始顺序生成内容了

并且以下代码和原始代码比较,增加的开销微乎其微,现在的列表基本都在4000到6000条的模样,可以说0性能开销增加吧

-- gfwlist转码至dnsmasq格式
local function generate_gfwlist(type)
    local domains, domains_map = {}, {}
    local out = io.open("/tmp/ssr-update." .. type, "w")
    for line in io.lines("/tmp/ssr-update.tmp") do
        if not (string.find(line, comment_pattern) or string.find(line, ip_pattern) or check_excluded_domain(line)) then
            local start, finish, match = string.find(line, domain_pattern)
            if start and not domains_map[match] then
                domains_map[match] = true
                table.insert(domains, match)
            end
        end
    end
    for _, domain in ipairs(domains) do
        out:write(string.format("server=/%s/%s#%s\n", domain, mydnsip, mydnsport))
        out:write(string.format("ipset=/%s/%s\n", domain, ipsetname))
    end
    out:close()
    os.remove("/tmp/ssr-update.tmp")
end

不知道gfw列表在别的地方还有没有相关处理,一并改改吧……

zxlhhyccc commented 1 day ago

后来发现你去web页面手动更新gfw列表会报错 can't create '/dnsmasq-ssrplus.d/gfw_list.conf': No such file or directory

经多次并各种方式测试(包括使用smartdns、dnsmasq方式),没有发现你说的问题,一切正常更新,包括:web页面手动更新、ssh登录命令执行:/update.sh 更新。

这样会改变原list的内容列表的顺序吧?我给改了一下……

因为现在有些列表会优化list内容的顺序,使dnsmasq遍历匹配效率更高

所以不如大师你一并改了好了,改成下边这样,就可以按原始顺序生成内容了

并且以下代码和原始代码比较,增加的开销微乎其微,现在的列表基本都在4000到6000条的模样,可以说0性能开销增加吧

这个修改感觉不错,准备合并到仓库。

qwerttvv commented 23 hours ago

image

这个按钮功能失效了,只能把更新的文件更新到etc对应目录,没办法把更新后的文件替换到tmp的目录去给dnsmasq用,并且系统日志会报错can't create '/dnsmasq-ssrplus.d/gfw_list.conf': No such file or directory

临时解决办法是更新list后重启软件

qwerttvv commented 21 hours ago

https://github.com/fw876/helloworld/commit/8f3b7ea66cdb9fa36f8468de330c65be3cd383a7

已解决

qwerttvv commented 17 hours ago

你这改的还是不对吧,点更新现在根目录多了个文件夹

Image