2017-06-20 100 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 ..所以根據儀器的改變解決了它。