2017-06-20 39 views
2

试图用bazel和linux来测试端口隔离,并且失败。与bazel和linux的端口隔离

我ENV是如下(开始AWS):

$ cat /etc/*-release 
PRETTY_NAME="Debian GNU/Linux 8 (jessie)" 
NAME="Debian GNU/Linux" 
VERSION_ID="8" 
VERSION="8 (jessie)" 
ID=debian 
HOME_URL="http://www.debian.org/" 
SUPPORT_URL="http://www.debian.org/support" 
BUG_REPORT_URL="https://bugs.debian.org/" 

$ uname -mrs 
Linux 3.16.0-4-amd64 x86_64 

巴泽勒版本

$ bazel version 
Build label: 0.5.1 
Build target: bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar 
Build time: Tue Jun 6 10:34:11 2017 (1496745251) 
Build timestamp: 1496745251 
Build timestamp as int: 1496745251 

回购:https://github.com/ittaiz/bazel-port-isolation

运行测试: $巴泽勒测试//。 ..

____Loading package: 
____Loading package: @bazel_tools//tools/cpp 
____Loading package: @local_config_xcode// 
____Loading package: @local_jdk// 
____Loading package: @local_config_cc// 
____Loading complete. Analyzing... 
____Loading package: tools/defaults 
____Loading package: @bazel_tools//tools/test 
____Loading package: @junit_junit//jar 
____Found 2 test targets... 
____Building... 
____[0/12] Expanding template SocketIsolation2Test 
____[10/12] Building SocketIsolationTest.jar (1 source file) 
FAIL: //:SocketIsolation2Test (see /home/builduser/.cache/bazel/_bazel_builduser/a589c0f8758972ab3aadcf172c468873/execroot/bazel-port-isolation/bazel-out/local-fastbuild/testlogs/SocketIsolation2Test/test.log) 
PASS: //:SocketIsolationTest 
____Elapsed time: 11.152s, Critical Path: 7.03s 
//:SocketIsolationTest             PASSED in 5.3s 
//:SocketIsolation2Test             FAILED in 0.3s 
    /home/builduser/.cache/bazel/_bazel_builduser/a589c0f8758972ab3aadcf172c468873/execroot/bazel-port-isolation/bazel-out/local-fastbuild/testlogs/SocketIsolation2Test/test.log 

(正如你所看到的 - 没有沙箱故障或警告)

的TET日志显示“地址已在使用” - 这意味着没有端口隔离。

为什么它不起作用?

回答

3

找到了原因......

从这里:https://bazel.build/versions/master/docs/bazel-user-manual.html#sandboxing

在一些平台,如谷歌集装箱引擎集群节点或 Debian,请用户命名空间默认情况下,由于安全顾虑 停用。这可以通过查看文件 /proc/sys/kernel/unprivileged_userns_clone来检查:如果它存在且包含 a 0,则用户命名空间可以使用sudo sysctl kernel.unprivileged_userns_clone = 1来激活。

/proc/sys/kernel/unprivileged_userns_clone存在,并有0 ..所以根据仪器的改变解决了它。