diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-10-04 22:40:26 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-10-05 10:41:59 +0200 |
commit | b68d4106518abed20ba308831b65dcc69bf120a5 (patch) | |
tree | b20b8d4542ec2363cb47c9deb86788e440f1757c | |
parent | 5aa7d764be7018ef3e5bef34857970c103c6abaf (diff) | |
download | guix-b68d4106518abed20ba308831b65dcc69bf120a5.tar guix-b68d4106518abed20ba308831b65dcc69bf120a5.tar.gz |
environment: Turn "lo" up in network-less containers.
This is a followup to 0f53c801b91919380a924b402d1ff822bb1dc6ea.
* guix/scripts/environment.scm (launch-environment/container): Add call
to 'set-network-interface-up'.
* tests/guix-environment-container.sh: Add test.
-rw-r--r-- | guix/scripts/environment.scm | 6 | ||||
-rw-r--r-- | tests/guix-environment-container.sh | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm index 9698111cd2..085f11a9d4 100644 --- a/guix/scripts/environment.scm +++ b/guix/scripts/environment.scm @@ -34,6 +34,7 @@ #:use-module (guix scripts build) #:use-module (gnu build linux-container) #:use-module (gnu build accounts) + #:use-module ((guix build syscalls) #:select (set-network-interface-up)) #:use-module (gnu system linux-container) #:use-module (gnu system file-systems) #:use-module (gnu packages) @@ -554,7 +555,10 @@ WHILE-LIST." ;; to resolve "localhost". (call-with-output-file "/etc/hosts" (lambda (port) - (display "127.0.0.1 localhost\n" port)))) + (display "127.0.0.1 localhost\n" port))) + + ;; Allow local AF_INET communications. + (set-network-interface-up "lo")) ;; For convenience, start in the user's current working ;; directory or, if unmapped, the home directory. diff --git a/tests/guix-environment-container.sh b/tests/guix-environment-container.sh index 3674aa6026..f2d15c8d0c 100644 --- a/tests/guix-environment-container.sh +++ b/tests/guix-environment-container.sh @@ -48,6 +48,17 @@ fi guix environment --container --ad-hoc --bootstrap guile-bootstrap \ -- guile -c '(exit (pair? (getaddrinfo "localhost" "80")))' +# We should get ECONNREFUSED, not ENETUNREACH, which would indicate that "lo" +# is down. +guix environment --container --ad-hoc --bootstrap guile-bootstrap \ + -- guile -c "(exit (= ECONNREFUSED + (catch 'system-error + (lambda () + (let ((sock (socket AF_INET SOCK_STREAM 0))) + (connect sock AF_INET INADDR_LOOPBACK 12345))) + (lambda args + (pk 'errno (system-error-errno args))))))" + # Make sure '--preserve' is honored. result="`FOOBAR=42; export FOOBAR; guix environment -C --ad-hoc --bootstrap \ guile-bootstrap -E ^FOO -- guile -c '(display (getenv \"FOOBAR\"))'`" |