[Issue 17838] New: rdmd file-descriptor issues with snap packages
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Sep 18 20:02:36 UTC 2017
https://issues.dlang.org/show_bug.cgi?id=17838
Issue ID: 17838
Summary: rdmd file-descriptor issues with snap packages
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: tools
Assignee: nobody at puremagic.com
Reporter: joseph.wakeling at webdrake.net
rdmd uses spawnProcess to launch the D compiler of choice, and passes a custom
`File` instance to the `stdout` parameter.
This means that the D compiler has to inherit a file-descriptor from rdmd. For
traditional Linux packages, this is not a problem. However, where snap
packages are concerned, this creates an issue: when the D compiler is itself a
snap package, its confinement rules prevent it from inheriting the file
descriptor, and rdmd will exit with an error message:
```
$ rdmd --compiler=ldc2 hello.d
Failed to flush stdout: Permission denied
Failed: ["ldc2", "-v", "-o-", "hello.d", "-I."]
```
Some extended discussion of this issue can be found in this thread on the
snapcraft forums:
https://forum.snapcraft.io/t/failed-to-flush-stdout-permission-denied/485
This is considered at least partly a bug in snapd, hence I've held off on
reporting it as an rdmd issue, but it looks like this is going to be long-lived
enough for me to think it might be worth addressing in rdmd itself if possible.
A recent patch to rdmd
(https://github.com/dlang/tools/commit/f7e6f4ed925f6a8f97b4c0f02cfce2620489357a)
partially addresses this issue, as it ensures that when rdmd is invoking a D
compiler within the same snap package as itself, the confinement rules do not
come into play (because the compiler executable is launched directly, instead
of indirectly via the wrapper script that the snap package exposes to the host
system).
However, this still leaves unaddressed the broader issue of rdmd invoking a
compiler provided by a separate snap package (e.g. the ldc2 snap package).
So: can rdmd be either patched or invoked in order to avoid the D compiler it
invokes needing to inherit a file descriptor from it? :-)
--
More information about the Digitalmars-d-bugs
mailing list