Merge pull request #96958 from servalcatty/v2ray

v2ray: 4.26.0 -> 4.27.5 and add tests
This commit is contained in:
Robert Scott 2020-09-07 21:29:51 +01:00 committed by GitHub
commit 61525137fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 146 additions and 63 deletions

View File

@ -363,6 +363,7 @@ in
unit-php = handleTest ./web-servers/unit-php.nix {};
upnp = handleTest ./upnp.nix {};
uwsgi = handleTest ./uwsgi.nix {};
v2ray = handleTest ./v2ray.nix {};
vault = handleTest ./vault.nix {};
victoriametrics = handleTest ./victoriametrics.nix {};
virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {};

83
nixos/tests/v2ray.nix Normal file
View File

@ -0,0 +1,83 @@
import ./make-test-python.nix ({ lib, pkgs, ... }: let
v2rayUser = {
# A random UUID.
id = "a6a46834-2150-45f8-8364-0f6f6ab32384";
alterId = 4;
};
# 1080 [http proxy] -> 1081 [vmess] -> direct
v2rayConfig = {
inbounds = [
{
tag = "http_in";
port = 1080;
listen = "127.0.0.1";
protocol = "http";
}
{
tag = "vmess_in";
port = 1081;
listen = "127.0.0.1";
protocol = "vmess";
settings.clients = [v2rayUser];
}
];
outbounds = [
{
tag = "vmess_out";
protocol = "vmess";
settings.vnext = [{
address = "127.0.0.1";
port = 1081;
users = [v2rayUser];
}];
}
{
tag = "direct";
protocol = "freedom";
}
];
routing.rules = [
{
type = "field";
inboundTag = "http_in";
outboundTag = "vmess_out";
}
{
type = "field";
inboundTag = "vmess_in";
outboundTag = "direct";
}
];
};
in {
name = "v2ray";
meta = with lib.maintainers; {
maintainers = [ servalcatty ];
};
machine = { pkgs, ... }: {
environment.systemPackages = [ pkgs.curl ];
services.v2ray = {
enable = true;
config = v2rayConfig;
};
services.httpd = {
enable = true;
adminAddr = "foo@example.org";
};
};
testScript = ''
start_all()
machine.wait_for_unit("httpd.service")
machine.wait_for_unit("v2ray.service")
machine.wait_for_open_port(80)
machine.wait_for_open_port(1080)
machine.succeed(
"curl --fail --max-time 10 --proxy http://localhost:1080 http://localhost"
)
'';
})

View File

@ -1,24 +1,24 @@
{ callPackage, fetchFromGitHub, fetchurl
{ lib, fetchFromGitHub, fetchurl, linkFarm, buildGoModule, runCommand, makeWrapper, nixosTests
, assetOverrides ? {}
, ... } @ args:
}:
callPackage ./generic.nix (rec {
version = "4.26.0";
let
version = "4.27.5";
src = fetchFromGitHub {
owner = "v2ray";
repo = "v2ray-core";
rev = "v${version}";
sha256 = "069wm0n44i4l9pnrhwf60ssld65p6gfj4wfc68hrhj4zi4jvlyds";
sha256 = "168kz8hq7mcfy6h758mmrky550p04bi9jsfqhy67jcxq81874m2k";
};
vendorSha256 = "1520h69z0inbsrw5505cxbinqakvwcrdx3pisrwnp9lv4jsrzzsr";
vendorSha256 = "0m889byxw70vv1mzlivalq444byp0y182nqqzdr458gfifvpc7s7";
assets = {
# MIT licensed
"geoip.dat" = let
geoipRev = "202007080004";
geoipSha256 = "1j4qg831dhxdy7brgxn4ca69cvwr3zsgizidlzasbkdn2rwai17y";
geoipRev = "202009020005";
geoipSha256 = "1xsy678cpqv6ycnhzl3pms76ic40aggq46q9dsd5ghj94mcx9837";
in fetchurl {
url = "https://github.com/v2ray/geoip/releases/download/${geoipRev}/geoip.dat";
sha256 = geoipSha256;
@ -26,8 +26,8 @@ callPackage ./generic.nix (rec {
# MIT licensed
"geosite.dat" = let
geositeRev = "20200708125309";
geositeSha256 = "1pr4137ri3v3r880yx5sqf2p7qfn8g7s555q51x3smkjzkyrskcy";
geositeRev = "20200901194123";
geositeSha256 = "0fjx1wrq14d9v326k4fjwca3h5nv8ghk11kprf6jkjncjszwvgby";
in fetchurl {
url = "https://github.com/v2ray/domain-list-community/releases/download/${geositeRev}/dlc.dat";
sha256 = geositeSha256;
@ -35,4 +35,55 @@ callPackage ./generic.nix (rec {
} // assetOverrides;
} // args)
assetsDrv = linkFarm "v2ray-assets" (lib.mapAttrsToList (name: path: {
inherit name path;
}) assets);
core = buildGoModule rec {
pname = "v2ray-core";
inherit version src;
inherit vendorSha256;
doCheck = false;
buildPhase = ''
runHook preBuild
go build -o v2ray v2ray.com/core/main
go build -o v2ctl v2ray.com/core/infra/control/main
runHook postBuild
'';
installPhase = ''
install -Dm755 v2ray v2ctl -t $out/bin
'';
};
in runCommand "v2ray-${version}" {
inherit version;
buildInputs = [ assetsDrv core ];
nativeBuildInputs = [ makeWrapper ];
meta = {
homepage = "https://www.v2ray.com/en/index.html";
description = "A platform for building proxies to bypass network restrictions";
license = with lib.licenses; [ mit ];
maintainers = with lib.maintainers; [ servalcatty ];
};
passthru = {
updateScript = ./update.sh;
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}
done
''

View File

@ -1,52 +0,0 @@
{ lib, linkFarm, buildGoModule, runCommand, makeWrapper
# Version specific args
, version, src, assets, vendorSha256
, ... }:
let
assetsDrv = linkFarm "v2ray-assets" (lib.mapAttrsToList (name: path: {
inherit name path;
}) assets);
core = buildGoModule rec {
pname = "v2ray-core";
inherit version src;
inherit vendorSha256;
doCheck = false;
buildPhase = ''
runHook preBuild
go build -o v2ray v2ray.com/core/main
go build -o v2ctl v2ray.com/core/infra/control/main
runHook postBuild
'';
installPhase = ''
install -Dm755 v2ray v2ctl -t $out/bin
'';
};
in runCommand "v2ray-${version}" {
inherit version;
buildInputs = [ assetsDrv core ];
nativeBuildInputs = [ makeWrapper ];
meta = {
homepage = "https://www.v2ray.com/en/index.html";
description = "A platform for building proxies to bypass network restrictions";
license = with lib.licenses; [ mit ];
maintainers = with lib.maintainers; [ servalcatty ];
};
} ''
for file in ${core}/bin/*; do
makeWrapper "$file" "$out/bin/$(basename "$file")" \
--set-default V2RAY_LOCATION_ASSET ${assetsDrv}
done
''