diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2024-04-11 00:13:08 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-11 00:13:08 +0000 |
commit | db9e43b395799c455dd3fbd2670157683f4f3018 (patch) | |
tree | 7a47946cb57493d04388756ed69724c12a722219 /pkgs/data/misc | |
parent | 4b6f3f8e7410c280c0ae8ae5ca018bb99785c45f (diff) | |
parent | 34d3520673acbc81d5cb4fa1c878dd8ed275502b (diff) |
Merge master into haskell-updates
Diffstat (limited to 'pkgs/data/misc')
-rw-r--r-- | pkgs/data/misc/sing-geoip/default.nix | 18 | ||||
-rw-r--r-- | pkgs/data/misc/sing-geoip/main.go | 68 |
2 files changed, 80 insertions, 6 deletions
diff --git a/pkgs/data/misc/sing-geoip/default.nix b/pkgs/data/misc/sing-geoip/default.nix index b27a61ef02013..2e128c6efe362 100644 --- a/pkgs/data/misc/sing-geoip/default.nix +++ b/pkgs/data/misc/sing-geoip/default.nix @@ -8,26 +8,32 @@ let generator = buildGoModule rec { pname = "sing-geoip"; - version = "20230512"; + version = "20240312"; src = fetchFromGitHub { owner = "SagerNet"; repo = pname; rev = "refs/tags/${version}"; - hash = "sha256-Zm+5N/37hoHpH/TLNJrHeaBXI8G1jEpM1jz6Um8edNE="; + hash = "sha256-nIrbiECK25GyuPEFqMvPdZUShC2JC1NI60Y10SsoWyY="; }; - vendorHash = "sha256-ejXAdsJwXhqet+Ca+pDLWwu0gex79VcIxW6rmhRnbTQ="; + vendorHash = "sha256-WH0eMg06qCiVcy4H+vBtYrmLMA2KJRCPGXiEnatW+LU="; + + postPatch = '' + sed -i -e '/func main()/,/^}/d' main.go + cat ${./main.go} >> main.go + ''; meta = with lib; { description = "GeoIP data for sing-box"; homepage = "https://github.com/SagerNet/sing-geoip"; license = licenses.gpl3Plus; maintainers = with maintainers; [ linsui ]; + mainProgram = "sing-geoip"; }; }; in -stdenvNoCC.mkDerivation rec { +stdenvNoCC.mkDerivation { inherit (generator) pname; inherit (dbip-country-lite) version; @@ -38,8 +44,7 @@ stdenvNoCC.mkDerivation rec { buildPhase = '' runHook preBuild - ${pname} ${dbip-country-lite.mmdb} geoip.db - ${pname} ${dbip-country-lite.mmdb} geoip-cn.db cn + sing-geoip ${dbip-country-lite.mmdb} runHook postBuild ''; @@ -49,6 +54,7 @@ stdenvNoCC.mkDerivation rec { install -Dm644 geoip.db $out/share/sing-box/geoip.db install -Dm644 geoip-cn.db $out/share/sing-box/geoip-cn.db + install -Dm644 rule-set/* -t $out/share/sing-box/rule-set runHook postInstall ''; diff --git a/pkgs/data/misc/sing-geoip/main.go b/pkgs/data/misc/sing-geoip/main.go new file mode 100644 index 0000000000000..8c2ac246fba4a --- /dev/null +++ b/pkgs/data/misc/sing-geoip/main.go @@ -0,0 +1,68 @@ +func main() { + var err error + + input := os.Args[1] + ruleSetOutput := "rule-set" + + binary, err := os.ReadFile(input) + if err != nil { + panic(err) + } + metadata, countryMap, err := parse(binary) + if err != nil { + panic(err) + } + allCodes := make([]string, 0, len(countryMap)) + for code := range countryMap { + allCodes = append(allCodes, code) + } + + writer, err := newWriter(metadata, allCodes) + if err != nil { + panic(err) + } + err = write(writer, countryMap, "geoip.db", nil) + if err != nil { + panic(err) + } + + writer, err = newWriter(metadata, []string{"cn"}) + if err != nil { + panic(err) + } + err = write(writer, countryMap, "geoip-cn.db", []string{"cn"}) + if err != nil { + panic(err) + } + + err = os.MkdirAll(ruleSetOutput, 0o755) + if err != nil { + panic(err) + } + for countryCode, ipNets := range countryMap { + var headlessRule option.DefaultHeadlessRule + headlessRule.IPCIDR = make([]string, 0, len(ipNets)) + for _, cidr := range ipNets { + headlessRule.IPCIDR = append(headlessRule.IPCIDR, cidr.String()) + } + var plainRuleSet option.PlainRuleSet + plainRuleSet.Rules = []option.HeadlessRule{ + { + Type: C.RuleTypeDefault, + DefaultOptions: headlessRule, + }, + } + srsPath, _ := filepath.Abs(filepath.Join(ruleSetOutput, "geoip-"+countryCode+".srs")) + os.Stderr.WriteString("write " + srsPath + "\n") + outputRuleSet, err := os.Create(srsPath) + if err != nil { + panic(err) + } + err = srs.Write(outputRuleSet, plainRuleSet) + if err != nil { + outputRuleSet.Close() + panic(err) + } + outputRuleSet.Close() + } +} |