snowie2000 / geoview

A handy tool to extract information from geosite/geoip
1 stars 1 forks source link

讨论一下 #2

Open lwb1978 opened 3 days ago

lwb1978 commented 3 days ago

-regex具体怎么使用呢?

lwb1978 commented 3 days ago

使用后输出的文件包含正则表达式?

snowie2000 commented 3 days ago

geosite中有很多种不同规则,dnsmasq不支持正则,所以默认我把正则的规则屏蔽了。regex开关可以把正则输出来

lwb1978 commented 3 days ago

功能已经写完了,暂时提交在我的仓库里,我先测试一下编译,没有问题的话再提交到pw的仓库。 https://github.com/lwb1978/openwrt-passwall

lwb1978 commented 2 days ago

@snowie2000 昨天晚上测试 rockchip_armv8 的编译,报错了,编译方面我不在行,你得空研究下哪里的问题

rm -f /builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.built
touch /builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.built_check
CONFIG_GOLANG_MOD_CACHE_WORLD_READABLE="" GO_BUILD_CACHE_DIR="/builder/openwrt/tmp/go-build" GO_MOD_CACHE_DIR="/builder/openwrt/dl/go-mod-cache" GO_MOD_ARGS="-modcacherw" GO_PKG="github.com/snowie2000/geoview" GO_INSTALL_EXTRA="" GO_INSTALL_ALL="" GO_SOURCE_ONLY="" GO_BUILD_PKG="github.com/snowie2000/geoview" GO_EXCLUDES="" GO_GO_GENERATE="" GO_INSTALL_BIN_PATH="/usr/bin" BUILD_DIR="/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5" GO_BUILD_DIR="/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.go_work/build" GO_BUILD_BIN_DIR="/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.go_work/build/bin/linux_arm64" GO_BUILD_DEPENDS_PATH="/usr/share/gocode" GO_BUILD_DEPENDS_SRC="/builder/openwrt/staging_dir/target-aarch64_generic_musl/usr/share/gocode/src" GOOS="linux" GOARCH="arm64" GO386="" GOAMD64="" GOARM="" GOMIPS="" GOMIPS64="" GOPPC64="" CGO_ENABLED=1 CC="aarch64-openwrt-linux-musl-gcc" CXX="aarch64-openwrt-linux-musl-g++" CGO_CFLAGS="-Os -pipe -mcpu=generic -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5=geoview-0.0.5 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" CGO_CPPFLAGS="-I/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/usr/include -I/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/include -I/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/include/fortify" CGO_CXXFLAGS="-Os -pipe -mcpu=generic -fno-caller-saves -fno-plt -fhonour-copts -fmacro-prefix-map=/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5=geoview-0.0.5 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro" CGO_LDFLAGS="-L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/usr/lib -L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/lib -fuse-ld=bfd -znow -zrelro" GOPATH="/builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.go_work/build" GOCACHE="/builder/openwrt/tmp/go-build" GOMODCACHE="/builder/openwrt/dl/go-mod-cache" GOENV=off GOTOOLCHAIN=local /usr/bin/env bash /builder/openwrt/feeds/packages/lang/golang//golang-build.sh build -v -buildvcs=false -trimpath -ldflags "all=-buildid '1732715985' -linkmode external -extldflags '-L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/usr/lib -L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/lib -fuse-ld=bfd -Wl,-z,now -Wl,-z,relro'"        -ldflags "-s -w  -buildid '1732715985' -linkmode external -extldflags '-L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/usr/lib -L/builder/openwrt/staging_dir/toolchain-aarch64_generic_gcc-13.3.0_musl/lib -fuse-ld=bfd -Wl,-z,now -Wl,-z,relro'"  
Finding targets

Building targets
../../geoip/dat_in.go:10:2: no required module provides package github.com/snowie2000/geoview/protohelper; to add it:

    go get github.com/snowie2000/geoview/protohelper
make[3]: *** [Makefile:56: /builder/openwrt/build_dir/target-aarch64_generic_musl/geoview-0.0.5/.built] Error 1
make[3]: Leaving directory '/builder/openwrt/package/passwall-packages/v2ray-geoview'
time: package/passwall-packages/v2ray-geoview/compile#0.21#0.14#0.26
    ERROR: package/passwall-packages/v2ray-geoview failed to build.
make[2]: *** [package/Makefile:185: package/passwall-packages/v2ray-geoview/compile] Error 1
make[2]: Leaving directory '/builder/openwrt'
make[1]: *** [package/Makefile:179: /builder/openwrt/staging_dir/target-aarch64_generic_musl/stamp/.package_compile] Error 2
make[1]: Leaving directory '/builder/openwrt'
make: *** [/builder/openwrt/include/toplevel.mk:248: world] Error 2
lwb1978 commented 2 days ago

看了下好像是缺少模块 github.com/snowie2000/geoview/protohelper

lwb1978 commented 2 days ago

确实是少提供了模块,我在geoip/dat_in.go中看到了有引用

import (
    "fmt"
    "io"
    "net"
    "os"
    "runtime"

    "github.com/snowie2000/geoview/protohelper"
    "github.com/snowie2000/geoview/srs"
    "google.golang.org/protobuf/proto"
)
snowie2000 commented 2 days ago

确实是少传了文件,已经补上了,不好意思~

lwb1978 commented 2 days ago

已通过编译,在rockchip上也可以正常工作了,准备提交到PW仓库

snowie2000 commented 2 days ago

good to know, good to go.

snowie2000 commented 2 days ago

为什么仅限chinadns和smartdns才能用geosite啊?dnsmasq不是也可以吗?

lwb1978 commented 2 days ago

为什么仅限chinadns和smartdns才能用geosite啊?dnsmasq不是也可以吗?

这个也挺无奈的,Dnsmasq不支持直接读取域名列表,必须用脚本生成它的固定格式,单单gfw和中国域名列表生成它的格式就有10多m,如果再加上geosite分析出来的最终生成的文件几十m都有可能,而且效率很低,所以只能放弃Dnsmasq的支持了。

snowie2000 commented 2 days ago

其实我不是很明白为什么要同时生成gfw列表和中国域名列表。如果用了中国域名列表那不就是绕过cn模式了? 如果用gfw列表,那不再列表中的不是本来就是直连吗?为什么还需要中国列表?

我看了下我这边gfw列表是两个300k+的文件,并不大

lwb1978 commented 2 days ago

列表是不大,但是生成的文件大,因为每条域名在Dnsmasq进行分流需要在两个文件里写参数,一个文件是标明这个域名是要用哪个dns进行解析,另外一个文件是标明这个域名解析后应该写到哪个ipset中,而且都是明文格式的,所以生成的文件就相当大

snowie2000 commented 2 days ago

我说的就是生成后的dnsmasq文件,两个300kb

lwb1978 commented 2 days ago

另外你的makefile是否还应该加上PKG_BUILD_FLAGS:=no-mips16 ? 还有就是今天中午我提交你的makefile到openwrt-passwall-packages中进行检查时发现有几个类型的内核无法编译通过: mips_24kc mips_4kec mipsel_24kc mipsel_74kc 你看是否能解决?

snowie2000 commented 2 days ago

我对openwrt的编译不是很熟悉,go肯定是支持mips的。

lwb1978 commented 2 days ago

我说的就是生成后的dnsmasq文件,两个300kb

那是因为你用了iptables和gfw,ipset的写法简单字数不多,而且gfw本来就不大,但如果用了nft和中国域名的话就大了,nftset的路径很长

snowie2000 commented 2 days ago

我忘了还有nft了

另外什么情况下会使用中国域名列表?

lwb1978 commented 2 days ago

中国列表以外就需要中国域名啊,gfw模式就用gfw

snowie2000 commented 2 days ago

中国以外不是一般用chnroute嘛?

lwb1978 commented 2 days ago

chnroute是已经内置有中国ip的ipset,也就是方便系统提前加载而已,但是中国列表目的是要让dns工具先知道哪些域名需要用国内的dns进行解析啊,解析出来ip会再次写入chnroute

snowie2000 commented 2 days ago

明白了,但gfw和cn列表似乎没有一起用的场景吧

lwb1978 commented 2 days ago

现在比较头疼的是geoview在mips和mipsel下编译不了,这会导致pw在发布的时候这4个类型的core发布失败,但同样是go的xray和sing-box都能在pw中编译通过

snowie2000 commented 2 days ago

我不会写makefile……应该是我的makefile写的不对,我需要去模仿下他们的

lwb1978 commented 2 days ago

明白了,但gfw和cn列表似乎没有一起用的场景吧

有的,比如chinadns是要求两个同时提供,dnsmasq的话用了中国列表以外也可以勾选gfw(不用也行),目的就是给默认的dns是用(远程、直连)时更精准。 比如你用了中国列表以外、默认dns是直连的话,不在中国列表内的域名就用国内的dns来解析,这对国内的网站是好事,但是国外网站就容易被污染了;相反你用了中国列表以外、默认dns是远程的话,对国外网站是好事,但是对国内不在列表内的网站就可以被解析到国外的ip去。这时如果加上gfw的话就可以多一道过滤,减少一些漏网之鱼。

lwb1978 commented 2 days ago

另外dnsmasq没有像chinadns和smartdns他们有优先级的说法,所以生成dnsmasq的专用列表的时候需要保证域名的唯一性,比如一个域名同时存在gfw和中国域名列表中,要找出来,看是是gfw模式还是中国域名列表模式,然后确定这个域名应该使用远程还是直连dns来解析,应该写到哪个ipset,所以相当的繁琐,域名越多、列表越多生成速度越慢,毕竟是脚本运行的。chinadns和smartdns就好多了,他们有优先级,列表按照需要先后加入就行,简单高效多了。所以新版本我直接推荐用户使用chinadns。

snowie2000 commented 2 days ago

但pw不是一直都声称强制依赖dnsmasq吗,好像还把smartdns模式都改没了。现在又回过头去用回来了

lwb1978 commented 2 days ago

我已经剥离出来了,现在chinadns不再依赖dnsmasq,已经成了上游,smartdns一直都有,是放在测试分支的,但并不好用,后来我几乎重写了,前两周已经合并到主分支。

snowie2000 commented 2 days ago

我一直都用adguard配合dnsmasq作为它的上游……

lwb1978 commented 2 days ago

从原理上来讲,dnsmasq做分流效果并不好,因为处理的效率不高,所以建议你还是用chinadns或者smartdns,adg可以继续作为他们的上游。

lwb1978 commented 2 days ago

我不会写makefile……应该是我的makefile写的不对,我需要去模仿下他们的

GO_PKG_LDFLAGS:=-s -w 是否不支持mipsel ?

snowie2000 commented 2 days ago

这个是不包含调试符号的意思,不影响

我没有mips环境,编译报了什么错?

lwb1978 commented 2 days ago

解决了。 makefile在 PKG_USE_MIPS16:=0 下面添加 PKG_BUILD_FLAGS:=no-mips16 mips就可以通过了

snowie2000 commented 1 day ago

我看了下xray和singbox的makefile,singbox对mips没有任何额外处理,xray实际上也没有,它只是检查GOARCH是否包含mips,然后会额外编译一个softfloat版本出来,对原有的编译没有作出任何修改。

你可以提供编译不通过时的错误日志吗?

lwb1978 commented 1 day ago

因为是actions自动编译的,没有详细的错误日志

 make[1] package/feeds/passwall_packages/v2ray-geoview/compile
 make[2] -C feeds/packages/lang/golang/golang host-compile
 make[2] -C package/toolchain compile
 make[2] -C feeds/passwall_packages/v2ray-geoview compile
    ERROR: package/feeds/passwall_packages/v2ray-geoview failed to build.
make -r package/feeds/passwall_packages/v2ray-geoview/compile: build failed. Please re-run make with -j1 V=s or V=sc for a higher verbosity level to see what's going on
make: *** [/home/runner/work/openwrt-passwall-packages/openwrt-passwall-packages/sdk/include/toplevel.mk:225: package/feeds/passwall_packages/v2ray-geoview/compile] Error 1
lwb1978 commented 1 day ago

不过已经解决了,加上PKG_BUILD_FLAGS:=no-mips16就行了

snowie2000 commented 1 day ago

arm的toolchain我是自己编译好的,如果都是action的话,那只能改成V=s显示详细信息去看了。

加上no-mips16是不是就不会编译mips相关的版本了?

snowie2000 commented 1 day ago

我搜索了下,貌似v2ray之类也存在相同的问题,也是用no-mips16来规避的 https://github.com/fw876/helloworld/issues/1283

lwb1978 commented 1 day ago

对啊,具体原理不懂,反正能搞掂就行😂

snowie2000 commented 1 day ago

https://github.com/openwrt/packages/blob/3f35e9c06566af1783ced236ea31f05b68c5a823/net/overture/Makefile#L17

确实在一些go的项目中都看到了这个flag,但我不知道是什么意思。。。