From 6f363379466965b095b8eb4db92901ca5946a6b2 Mon Sep 17 00:00:00 2001 From: oxalica Date: Wed, 21 Sep 2022 14:48:31 +0800 Subject: [PATCH 1/3] v2ray-domain-list-community: 20220908131416 -> 20220921050909 --- pkgs/data/misc/v2ray-domain-list-community/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/data/misc/v2ray-domain-list-community/default.nix b/pkgs/data/misc/v2ray-domain-list-community/default.nix index 78d7a3005f16..e80aef513ac3 100644 --- a/pkgs/data/misc/v2ray-domain-list-community/default.nix +++ b/pkgs/data/misc/v2ray-domain-list-community/default.nix @@ -3,12 +3,12 @@ let generator = pkgsBuildBuild.buildGoModule rec { pname = "v2ray-domain-list-community"; - version = "20220908131416"; + version = "20220921050909"; src = fetchFromGitHub { owner = "v2fly"; repo = "domain-list-community"; rev = version; - sha256 = "sha256-LXtdyLINmUcyT2x9w7KCoLLifcYrSq6JN+2J9wbKjCI="; + sha256 = "sha256-ujslsVqUQ16LFdCwwKmY2SnoqNTRenI5cEreupt/6c4="; }; vendorSha256 = "sha256-CCY3CgjA1w4svzmkaI2Jt272Rrt5UOt5sbVDAWRRfzk="; meta = with lib; { From 4f962f65c4294267574801c986d61ece84c8ff8d Mon Sep 17 00:00:00 2001 From: oxalica Date: Wed, 21 Sep 2022 14:29:54 +0800 Subject: [PATCH 2/3] v2ray: 4.45.0 -> 5.1.0 and refactor --- pkgs/tools/networking/v2ray/default.nix | 92 ++++++++++++------------- pkgs/tools/networking/v2ray/update.sh | 49 ------------- 2 files changed, 43 insertions(+), 98 deletions(-) delete mode 100755 pkgs/tools/networking/v2ray/update.sh diff --git a/pkgs/tools/networking/v2ray/default.nix b/pkgs/tools/networking/v2ray/default.nix index 630ea8ada8e6..58743eeb766f 100644 --- a/pkgs/tools/networking/v2ray/default.nix +++ b/pkgs/tools/networking/v2ray/default.nix @@ -1,69 +1,63 @@ -{ lib, fetchFromGitHub, fetchurl, symlinkJoin, buildGoModule, runCommand, makeWrapper, nixosTests -, v2ray-geoip, v2ray-domain-list-community, assets ? [ v2ray-geoip v2ray-domain-list-community ] +{ lib, fetchFromGitHub, symlinkJoin, buildGoModule, makeWrapper, nixosTests +, nix-update-script +, v2ray-geoip, v2ray-domain-list-community +, assets ? [ v2ray-geoip v2ray-domain-list-community ] }: -let - version = "4.45.0"; +buildGoModule rec { + pname = "v2ray-core"; + version = "5.1.0"; src = fetchFromGitHub { owner = "v2fly"; repo = "v2ray-core"; rev = "v${version}"; - sha256 = "sha256-vVCWCppGeAc7dwY0fX+G0CU3Vy6OBPpDBUOBK3ykg60="; + hash = "sha256-87BtyaJN6qbinZQ+6MAwaK62YzbVnncj4qnEErG5tfA="; }; - vendorSha256 = "sha256-TbWMbIT578I8xbNsKgBeSP4MewuEKpfh62ZbJIeHgDs="; + # `nix-update` doesn't support `vendorHash` yet. + # https://github.com/Mic92/nix-update/pull/95 + vendorSha256 = "sha256-RuDCAgTzqwe5fUwa9ce2wRx4FPT8siRLbP7mU8/jg/Y="; + + ldflags = [ "-s" "-w" "-buildid=" ]; + + subPackages = [ "main" ]; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + install -Dm555 "$GOPATH"/bin/main $out/bin/v2ray + install -Dm444 release/config/systemd/system/v2ray{,@}.service -t $out/lib/systemd/system + install -Dm444 release/config/*.json -t $out/etc/v2ray + runHook postInstall + ''; assetsDrv = symlinkJoin { name = "v2ray-assets"; paths = assets; }; - core = buildGoModule rec { - pname = "v2ray-core"; - inherit version src; - - inherit vendorSha256; - - doCheck = false; - - buildPhase = '' - buildFlagsArray=(-v -p $NIX_BUILD_CORES -ldflags="-s -w") - runHook preBuild - go build "''${buildFlagsArray[@]}" -o v2ray ./main - go build "''${buildFlagsArray[@]}" -o v2ctl -tags confonly ./infra/control/main - runHook postBuild - ''; - - installPhase = '' - install -Dm755 v2ray v2ctl -t $out/bin - ''; - - meta = { - homepage = "https://www.v2fly.org/en_US/"; - description = "A platform for building proxies to bypass network restrictions"; - license = with lib.licenses; [ mit ]; - maintainers = with lib.maintainers; [ servalcatty ]; - }; - }; - -in runCommand "v2ray-${version}" { - inherit src version; - inherit (core) meta; - - nativeBuildInputs = [ makeWrapper ]; + postFixup = '' + wrapProgram $out/bin/v2ray \ + --suffix XDG_DATA_DIRS : $assetsDrv/share + substituteInPlace $out/lib/systemd/system/*.service \ + --replace User=nobody DynamicUser=yes \ + --replace /usr/local/bin/ $out/bin/ \ + --replace /usr/local/etc/ /etc/ + ''; passthru = { - inherit core; - updateScript = ./update.sh; - tests = { - simple-vmess-proxy-test = nixosTests.v2ray; + updateScript = nix-update-script { + attrPath = "v2ray"; }; + tests.simple-vmess-proxy-test = nixosTests.v2ray; }; -} '' - for file in ${core}/bin/*; do - makeWrapper "$file" "$out/bin/$(basename "$file")" \ - --set-default V2RAY_LOCATION_ASSET ${assetsDrv}/share/v2ray - done -'' + meta = { + homepage = "https://www.v2fly.org/en_US/"; + description = "A platform for building proxies to bypass network restrictions"; + license = with lib.licenses; [ mit ]; + maintainers = with lib.maintainers; [ servalcatty ]; + }; +} diff --git a/pkgs/tools/networking/v2ray/update.sh b/pkgs/tools/networking/v2ray/update.sh deleted file mode 100755 index 9b8e4cef13a4..000000000000 --- a/pkgs/tools/networking/v2ray/update.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl jq -set -eo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -version_nix=./default.nix -deps_nix=./deps.nix -nixpkgs=../../../.. - -old_core_rev=$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$version_nix") -echo "Current version:" >&2 -echo "core: $old_core_rev" >&2 - -function fetch_latest_rev { - curl "https://api.github.com/repos/v2fly/$1/releases" | - jq '.[0].tag_name' --raw-output -} - -core_rev=$(fetch_latest_rev 'v2ray-core') -core_rev=${core_rev:1} -echo "Latest version:" >&2 -echo "core: $core_rev" >&2 - -if [[ $core_rev != $old_core_rev ]]; then - echo "Prefetching core..." >&2 - { read hash; read store_path; } < <( - nix-prefetch-url --unpack --print-path "https://github.com/v2fly/v2ray-core/archive/v$core_rev.zip" - ) - - sed --in-place \ - -e "s/\bversion = \".*\"/version = \"$core_rev\"/" \ - -e "s/\bsha256 = \".*\"/sha256 = \"$hash\"/" \ - -e "s/\bvendorSha256 = \".*\"/vendorSha256 = \"0000000000000000000000000000000000000000000000000000\"/" \ - "$version_nix" -fi - -echo "Prebuilding..." >&2 -set +o pipefail -vendorSha256=$( - nix-build "$nixpkgs" -A v2ray --no-out-link 2>&1 | - tee /dev/stderr | - sed -nE 's/.*got:\s*(sha256\S+)$/\1/p' -) -[[ "$vendorSha256" ]] -sed --in-place \ - -e "s#vendorSha256 = \".*\"#vendorSha256 = \"$vendorSha256\"#" \ - "$version_nix" - -echo "vendorSha256 updated" >&2 From 07a9b7b1d83f1cde5544063351d6886a2ca9607c Mon Sep 17 00:00:00 2001 From: oxalica Date: Wed, 21 Sep 2022 14:39:00 +0800 Subject: [PATCH 3/3] nixos/{test/,}v2ray: fix for new CLI and use upstream systemd units --- nixos/modules/services/networking/v2ray.nix | 18 ++++++++++-------- nixos/tests/v2ray.nix | 12 ++++++++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/nixos/modules/services/networking/v2ray.nix b/nixos/modules/services/networking/v2ray.nix index 1ff1feed8f47..ba2aa5bc1de7 100644 --- a/nixos/modules/services/networking/v2ray.nix +++ b/nixos/modules/services/networking/v2ray.nix @@ -34,7 +34,7 @@ with lib; Either `configFile` or `config` must be specified. - See . + See . ''; }; @@ -56,7 +56,7 @@ with lib; Either `configFile` or `config` must be specified. - See . + See . ''; }; }; @@ -71,7 +71,7 @@ with lib; name = "v2ray.json"; text = builtins.toJSON cfg.config; checkPhase = '' - ${cfg.package}/bin/v2ray -test -config $out + ${cfg.package}/bin/v2ray test -c $out ''; }; @@ -83,13 +83,15 @@ with lib; } ]; + environment.etc."v2ray/config.json".source = configFile; + + systemd.packages = [ cfg.package ]; + systemd.services.v2ray = { - description = "v2ray Daemon"; - after = [ "network.target" ]; + restartTriggers = [ config.environment.etc."v2ray/config.json".source ]; + + # Workaround: https://github.com/NixOS/nixpkgs/issues/81138 wantedBy = [ "multi-user.target" ]; - serviceConfig = { - ExecStart = "${cfg.package}/bin/v2ray -config ${configFile}"; - }; }; }; } diff --git a/nixos/tests/v2ray.nix b/nixos/tests/v2ray.nix index fb36ea8557d5..9eee962c64e4 100644 --- a/nixos/tests/v2ray.nix +++ b/nixos/tests/v2ray.nix @@ -20,7 +20,7 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: let port = 1081; listen = "127.0.0.1"; protocol = "vmess"; - settings.clients = [v2rayUser]; + settings.clients = [ v2rayUser ]; } ]; outbounds = [ @@ -30,7 +30,7 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: let settings.vnext = [{ address = "127.0.0.1"; port = 1081; - users = [v2rayUser]; + users = [ v2rayUser ]; }]; } { @@ -49,6 +49,14 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: let inboundTag = "vmess_in"; outboundTag = "direct"; } + + # Assert assets "geoip" and "geosite" are accessible. + { + type = "field"; + ip = [ "geoip:private" ]; + domain = [ "geosite:category-ads" ]; + outboundTag = "direct"; + } ]; };