Opened 9 years ago
Closed 7 years ago
#1218 closed defect (fixed)
chicken-install may fail if TMPDIR is mounted noexec (depending on setup-file details)
Reported by: | Ivan Raikov | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 5.0 |
Component: | extensions | Version: | 4.10.x |
Keywords: | coops | Cc: | |
Estimated difficulty: | hard |
Description
chicken-install coops results in the following error:
installing coops:1.93 ...
changing current directory to /tmp/temp4661.6142/coops
'/home/igr/bin/chicken/bin/csi' -bnq -setup-mode -e "(require-library setup-api)" -e "(import setup-api)" -e "(setup-error-handling)" -e "(extension-name-and-version '(\"coops\" \"1.93\"))" 'coops.setup'
'/home/igr/bin/chicken/bin/csc' -feature compiling-extension -setup-mode -s -O3 -d1 coops-module.scm -JS -o coops.so
'/home/igr/bin/chicken/bin/csc' -feature compiling-extension -setup-mode -s -O3 -d0 coops.import.scm
'/home/igr/bin/chicken/bin/csc' -feature compiling-extension -setup-mode -s -O3 -d1 coops-primitive-objects -JS
Error: (load) during expansion of (import ...) - unable to load compiled module - ./coops.import.so: failed to map segment from shared object: Operation not permitted: "./coops.import.so"
Change History (13)
comment:1 follow-ups: 2 3 Changed 9 years ago by
comment:2 Changed 9 years ago by
Ubuntu Linux 14.04 / gcc 4.8.4
Replying to evhan:
Unable to replicate on Linux or OpenBSD. On what platform did this occur?
comment:3 Changed 9 years ago by
One more thing, did you try a fresh CHICKEN installation, or did you already have coops installed?
Replying to evhan:
Unable to replicate on Linux or OpenBSD. On what platform did this occur?
comment:4 follow-up: 5 Changed 9 years ago by
This sounds like a noexec
mount of /tmp
.
I don't know whether that's fixable (I don't know much about coops and its installation procedure), but this causes trouble with several other eggs, IIRC. So perhaps it's not really a coops bug (though one could argue it's a bug in chicken-install
, if a very difficult one to fix)
comment:5 Changed 9 years ago by
True, /tmp is mounted noexec on this system. I remember now that I ran into this issue with an unrelated piece of software a few weeks ago.
I was able to find a workaround by changing the first line in coops.setup
(compile -s -O3 -d1 coops-module.scm -JS -o coops.so)
to
(compile -s -O3 -d1 coops.scm -JS)
And switching around the files coops-module.scm and coops.scm so that now coops.scm includes coops-module.scm.
Is it the -o option to chicken-install that does not work with noexec-mounted /tmp? If so, I will re-title this issue accordingly.
Replying to sjamaan:
This sounds like a
noexec
mount of/tmp
.
I don't know whether that's fixable (I don't know much about coops and its installation procedure), but this causes trouble with several other eggs, IIRC. So perhaps it's not really a coops bug (though one could argue it's a bug in
chicken-install
, if a very difficult one to fix)
comment:6 Changed 9 years ago by
I tried to reproduce what you said you did to the files, but I keep getting the same error message.
However, it worked if I simply moved the import files to the end (even with the orignal versions of coops.scm
and coops-module.scm
), so they're compiled after all the other files. That's because the (import foo)
statements will then fall back to simply loading the source files instead. This may be a good "solution" for coops and similar eggs (perhaps 90% of our eggs, in fact), but it won't work in the general case:
If you have an egg consisting of two modules, let's say module A and B, where A depends on B at compile-time (perhaps B offers some important macros), it must be able to load it. If module B contains FFI calls, it must be compiled.
Of course this is a pretty contrived example: most eggs are not this complicated. So I guess this "bug" should be considered to be in coops after all.
comment:7 Changed 9 years ago by
Summary: | Cannot install coops with CHICKEN 4.10 → chicken-install may fail if TMPDIR is mounted noexec (depending on setup-file details) |
---|
comment:8 Changed 9 years ago by
Milestone: | 4.11.0 → 5.0 |
---|
I'd say this is a setup-file problem specific to the egg. We may be able to fix this in a general way with the new setup file language in CHICKEN 5, but I doubt it; it's a fundamental problem that you can't load a library at compile time that you've just generated but not yet installed.
In any case, not something that we can fix with CHICKEN 4.
comment:9 Changed 8 years ago by
Estimated difficulty: | → hard |
---|
comment:10 Changed 8 years ago by
The new setup language cleanly separates build from install, which means the problem still exists.
I think the clean separation is desirable because you want to be able to build separately, and also because if the building of coops works and is installed, but coops-primitive-objects fails, this means the egg would be half-installed.
I don't know if it's even something we can fix (or even should fix?). Perhaps it should be documented as a limitation. I think even detecting this situation is difficult.
comment:11 follow-up: 12 Changed 8 years ago by
Note that in C5, building of eggs takes place in the cache (usually ~/.chicken-install-cache
, or $CHICKEN_EGG_CACHE
), so $TMPDIR
is irrelevant in this case.
comment:12 Changed 8 years ago by
Oh, it does sound like this might make the issue irrelevant. Apologies for not trying out C5 earlier. Let me just build it and see if I can install eggs with it.
Replying to felix:
Note that in C5, building of eggs takes place in the cache (usually
~/.chicken-install-cache
, or$CHICKEN_EGG_CACHE
), so$TMPDIR
is irrelevant in this case.
comment:13 Changed 7 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Should work with C5. Please reopen if it's not working
Unable to replicate on Linux or OpenBSD. On what platform did this occur?