1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
diff --git a/tools/cli/main.js b/tools/cli/main.js
index 84f94bc..4fbda17 100644
--- a/tools/cli/main.js
+++ b/tools/cli/main.js
@@ -484,6 +484,45 @@ var springboard = function (rel, options) {
process.exit(ret.wait());
}
+ // BEGIN HACK
+ // patch shebang:
+ var fs = require('fs');
+ var path = require("path")
+ var Future = require("fibers/future")
+ var srcOld = fs.readFileSync(executable, 'utf8');
+ srcNew = srcOld.replace(/^#!\/bin\/bash/, '#!/bin/sh');
+ if (srcOld !== srcNew) {
+ fs.writeFileSync(executable, srcNew, 'utf8');
+ }
+ // patch elfs:
+ var dir = path.dirname(executable);
+ var interpreter = "@INTERPRETER@";
+ var rpath = "@RPATH@";
+ function spawnSync(/*...*/) {
+ var args = Array.prototype.slice.call(arguments);
+ var proc = require("child_process").spawn.apply(null, args);
+ var future = new Future();
+ proc.on('close', function (code) {
+ future.return();
+ });
+ return future.wait();
+ }
+ function patchelf(/*...*/) {
+ var pathParts = Array.prototype.slice.call(arguments);
+ var p = path.join.apply(null, [dir, "dev_bundle"].concat(pathParts));
+ spawnSync('@PATCHELF@', [
+ "--set-interpreter",
+ interpreter,
+ "--set-rpath",
+ rpath,
+ p
+ ], {stdio: 'inherit'});
+ }
+ patchelf("bin", "node");
+ patchelf("mongodb", "bin", "mongo");
+ patchelf("mongodb", "bin", "mongod");
+ // END HACK
+
// Now exec; we're not coming back.
require('kexec')(executable, newArgv);
throw Error('exec failed?');
|