'call-with-container' fails to mount /dev/mqueue with EBUSY (on Ubuntu)

  • Open
  • quality assurance status badge
Details
4 participants
  • Ben Woodcroft
  • Konrad Hinsen
  • Leo Famulari
  • Ludovic Courtès
Owner
unassigned
Submitted by
Konrad Hinsen
Severity
normal
K
K
Konrad Hinsen wrote on 19 May 2016 17:17
Test failure on "make check" from a fresh git checkout (commit 9684e30b9b597b93ae9c797ba8f3b40eff893ebe)
(address . bug-guix@gnu.org)
573DD91E.5080702@fastmail.net
SKIP: tests/base32.scm
PASS: tests/base64.scm
PASS: tests/cpio.scm
PASS: tests/hash.scm
PASS: tests/pk-crypto.scm
PASS: tests/pki.scm
PASS: tests/sets.scm
PASS: tests/gnu-maintenance.scm
PASS: tests/substitute.scm
PASS: tests/builders.scm
PASS: tests/derivations.scm
PASS: tests/grafts.scm
PASS: tests/ui.scm
PASS: tests/records.scm
PASS: tests/upstream.scm
PASS: tests/combinators.scm
PASS: tests/utils.scm
PASS: tests/build-utils.scm
PASS: tests/packages.scm
SKIP: tests/snix.scm
PASS: tests/hackage.scm
PASS: tests/cran.scm
PASS: tests/elpa.scm
PASS: tests/store.scm
PASS: tests/monads.scm
PASS: tests/gexp.scm
PASS: tests/nar.scm
PASS: tests/union.scm
PASS: tests/profiles.scm
PASS: tests/syscalls.scm
SKIP: tests/gremlin.scm
PASS: tests/lint.scm
PASS: tests/publish.scm
PASS: tests/scripts.scm
PASS: tests/size.scm
PASS: tests/graph.scm
PASS: tests/challenge.scm
PASS: tests/cve.scm
PASS: tests/file-systems.scm
PASS: tests/system.scm
PASS: tests/services.scm
PASS: tests/scripts-build.scm
PASS: tests/containers.scm
PASS: tests/import-utils.scm
PASS: tests/pypi.scm
PASS: tests/cpan.scm
PASS: tests/gem.scm
PASS: tests/guix-build.sh
PASS: tests/guix-download.sh
PASS: tests/guix-hash.sh
PASS: tests/guix-package.sh
PASS: tests/guix-package-net.sh
PASS: tests/guix-system.sh
PASS: tests/guix-archive.sh
PASS: tests/guix-authenticate.sh
PASS: tests/guix-environment.sh
FAIL: tests/guix-environment-container.sh
PASS: tests/guix-graph.sh
PASS: tests/guix-lint.sh
PASS: tests/guix-register.sh
PASS: tests/guix-gc.sh
PASS: tests/guix-daemon.sh
============================================================================
Testsuite summary for GNU Guix 0.10.0
============================================================================
# TOTAL: 565
# PASS: 561
# SKIP: 3
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
============================================================================
See ./test-suite.log
Please report to bug-guix@gnu.org
============================================================================
Attachment: test-suite.log
L
L
Ludovic Courtès wrote on 20 May 2016 14:12
(name . Konrad Hinsen)(address . konrad.hinsen@fastmail.net)
87lh35exmv.fsf@gnu.org
Hi Konrad,

Konrad Hinsen <konrad.hinsen@fastmail.net> skribis:

Toggle quote (20 lines)
> FAIL: tests/guix-environment-container
> ======================================
>
> + set -e
> + guix environment --version
> guix environment (GNU Guix) 0.10.0
> Copyright (C) 2016 the Guix authors
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> + guile -c '((@@ (guix scripts environment) assert-container-features))'
> + tmpdir=t-guix-environment-20990
> + trap 'rm -r "$tmpdir"' EXIT
> + mkdir t-guix-environment-20990
> + guix environment --container --ad-hoc --bootstrap guile-bootstrap -- guile -c '(exit 42)'
> accepted connection from pid 21005, user hinsen
> + test 1 = 42
> + rm -r t-guix-environment-20990
> FAIL tests/guix-environment-container.sh (exit status: 1)

Could you show the output of “uname -srvo” on this machine? What
distribution does it run?

Also, from the top-level build directory, could you run:

./pre-inst-env strace -f -s 234 -o log \
guix environment --container --ad-hoc --bootstrap guile-bootstrap \
-- guile -c '(exit 42)'

and send the ‘log’ file (gzipped)?

Thanks for your report!

Ludo’.
K
K
Konrad Hinsen wrote on 20 May 2016 20:42
(name . Ludovic Courtès)(address . ludo@gnu.org)
573F5A7D.4020008@fastmail.net
Hi Ludovic,

> Could you show the output of “uname -srvo” on this machine? What
Toggle quote (2 lines)
> distribution does it run?

$ uname -srvo
Linux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 GNU/Linux

The base system is Ubuntu 16.04, to which I added the Guix binary
distribution 0.10.

Toggle quote (6 lines)
> Also, from the top-level build directory, could you run:
>
> ./pre-inst-env strace -f -s 234 -o log \
> guix environment --container --ad-hoc --bootstrap guile-bootstrap \
> -- guile -c '(exit 42)'

$ guix environment guix

[dev] $ ./pre-inst-env strace -f -s 234 -o log guix environment
--container --ad-hoc --bootstrap guile-bootstrap -- guile -c '(exit 42)'
guix environment: error: failed to connect to
`/usr/local/var/guix/daemon-socket/socket': No such file or directory

The log file is attached, but I somehow suspect that the above error
message already suggests what's going on - but not to me!

Konrad.
Attachment: log.gz
L
L
Leo Famulari wrote on 21 May 2016 00:48
(name . Konrad Hinsen)(address . konrad.hinsen@fastmail.net)
20160520224810.GA4494@jasmine
On Fri, May 20, 2016 at 08:42:05PM +0200, Konrad Hinsen wrote:
Toggle quote (3 lines)
> $ uname -srvo
> Linux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 GNU/Linux

I'd guess that Ubuntu, like Debian, by default disables the unprivileged
creation of containers.

What is the value of '/proc/sys/kernel/unprivileged_userns_clone'?

Toggle quote (5 lines)
> [dev] $ ./pre-inst-env strace -f -s 234 -o log guix environment --container
> --ad-hoc --bootstrap guile-bootstrap -- guile -c '(exit 42)'
> guix environment: error: failed to connect to
> `/usr/local/var/guix/daemon-socket/socket': No such file or directory

I think this is unrelated.

If you followed the instructions in the manual while installing Guix
[0], then your daemon's socket should be in /var/guix. When building
Guix from the Git checkout, did you set the value of localstatedir like
this when configuring?

$ ./configure --localstatedir=/var

If not, it defaults to '/usr/local'. If that's what happened, can you
reconfigure as shown above, and try Ludo's command again?

[0]
K
K
Konrad Hinsen wrote on 21 May 2016 09:21
(name . Leo Famulari)(address . leo@famulari.name)
57400C83.8010208@fastmail.net
Hi Leo,

> I'd guess that Ubuntu, like Debian, by default disables the unprivileged
Toggle quote (4 lines)
> creation of containers.
>
> What is the value of '/proc/sys/kernel/unprivileged_userns_clone'?

$ cat /proc/sys/kernel/unprivileged_userns_clone
1

Toggle quote (7 lines)
> If you followed the instructions in the manual while installing Guix
> [0], then your daemon's socket should be in /var/guix. When building
> Guix from the Git checkout, did you set the value of localstatedir like
> this when configuring?
>
> $ ./configure --localstatedir=/var

No. I just followed the instructions under "contributing" blindly.

Toggle quote (3 lines)
> If not, it defaults to '/usr/local'. If that's what happened, can you
> reconfigure as shown above, and try Ludo's command again?

I did:

$ ./configure --localstatedir=/var
$ make check

The environment test case still fails. Then again

[dev]$ ./pre-inst-env strace -f -s 234 -o log guix environment
--container --ad-hoc --bootstrap guile-bootstrap -- guile -c '(exit 42)'
substitute: warning: failed to install locale: Invalid argument
substitute: updating list of substitutes from
'https://mirror.hydra.gnu.org'... substitute: updating list of
substitutes from 'https://mirror.hydra.gnu.org'... substitute: updating
list of substitutes from 'https://mirror.hydra.gnu.org'... substitute:
updating list of substitutes from 'https://mirror.hydra.gnu.org'... 100.0%
substitute: updating list of substitutes from 'https://hydra.gnu.org'...
100.0%
The following derivations will be built:
/gnu/store/n1mv18v7dvjx3zz6xwryqw6mvfjj68ls-profile.drv
/gnu/store/90b3v64bp7rjpsd841bxflh7a2h544f9-module-import.drv
/gnu/store/sc9w2yza3af4p0vjgkkwf7jmdh1m05n6-module-import-compiled.drv
The following file will be downloaded:
/gnu/store/aiz8db2gni401wc9fgidmcggxyb1czis-guile-bootstrap-2.0
warning: failed to install locale: Invalid argument

Found valid signature for
/gnu/store/aiz8db2gni401wc9fgidmcggxyb1czis-guile-bootstrap-2.0
From
Downloading aiz8db...-guile-bootstrap-2.0 (12.1MiB installed)...
1.1MiB/s 00:03 | 3.4MiB transferred


No error message this time. The log is attached.

Konrad.
Attachment: log.gz
B
B
Ben Woodcroft wrote on 21 May 2016 12:37
57403A7D.3090002@uq.edu.au
On 21/05/16 17:21, Konrad Hinsen wrote:
Toggle quote (2 lines)
> No error message this time. The log is attached.

From teh log:
> 10526 mkdir("/tmp/guix-directory.2EiFxS/dev/mqueue", 0775) = 0
> 10526 mount("mqueue", "/tmp/guix-directory.2EiFxS//dev/mqueue",
"mqueue", MS_NOSUID|MS_NODEV|MS_NOEXEC, NULL) = -1 EBUSY (Device or
resource busy)

This then might be the same issue as discussed previously

I managed to reproduce this using a binary download too on a different
machine, I suspect that there is something Ubuntu/Xenial-specific at play.
ben
L
L
Leo Famulari wrote on 21 May 2016 17:19
(name . Ben Woodcroft)(address . b.woodcroft@uq.edu.au)
20160521151910.GA25589@jasmine
On Sat, May 21, 2016 at 08:37:49PM +1000, Ben Woodcroft wrote:
Toggle quote (11 lines)
> On 21/05/16 17:21, Konrad Hinsen wrote:
> > No error message this time. The log is attached.
>
> From teh log:
> > 10526 mkdir("/tmp/guix-directory.2EiFxS/dev/mqueue", 0775) = 0
> > 10526 mount("mqueue", "/tmp/guix-directory.2EiFxS//dev/mqueue", "mqueue",
> MS_NOSUID|MS_NODEV|MS_NOEXEC, NULL) = -1 EBUSY (Device or resource busy)
>
> This then might be the same issue as discussed previously
> http://lists.gnu.org/archive/html/help-guix/2016-05/msg00006.html

A quick scan through the mqueue man pages suggests mq_notify(3):

"mq_notify - register for notification when a message is available

[...]

EBUSY Another process has already registered to receive
notification for this message queue."
L
L
Ludovic Courtès wrote on 21 May 2016 20:25
retitle
(address . request@debbugs.gnu.org)
87zirjtgio.fsf@gnu.org
retitle 23582 'call-with-container' fails to mount /dev/mqueue with EBUSY (on Ubuntu)
thanks
?