summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-10-04 22:40:26 +0200
committerLudovic Courtès <ludo@gnu.org>2020-10-05 10:41:59 +0200
commitb68d4106518abed20ba308831b65dcc69bf120a5 (patch)
treeb20b8d4542ec2363cb47c9deb86788e440f1757c
parent5aa7d764be7018ef3e5bef34857970c103c6abaf (diff)
downloadguix-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.scm6
-rw-r--r--tests/guix-environment-container.sh11
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\"))'`"