Compiling Node.js on Solaris – The Issues
Disclaimer: I’m not a sysadmin, better solutions are welcome.
Earlier today, I was trying to compile node.js on Solaris (x86, 64-bit), get it installed, and setup a simple OHAI server.
And as usual, installing stuffs on Solaris is never straightforward and I ended up encountering several issues. I’m sure these issues (specially the errors) will bite me again in the future, hence I’m blogging this.
First up…
nom> ./configure /usr/bin/env: No such file or directory
Oh right, I forgot to install python and all of its dependencies. From node.js home page “The build system requires Python 2.4 or better.”
obj/release/mksnapshot obj/release/snapshot.cc --logfile "~/blah/ry-node-29ca7af/build/default/obj/release/snapshot.log" --log-snapshot-positions
ld.so.1: mksnapshot: fatal: libstdc++.so.6: open failed: No such file or directory
scons: *** [obj/release/snapshot.cc] Error -9
scons: building terminated because of errors.
Waf: Leaving directory `~/blah/ry-node-29ca7af/build'
Build failed: -> task failed (err #2):
{task: libv8.a SConstruct -> libv8.a}
*** Error code 1
ldd is your friend every time you hit this kind of error.
So I inspected mksnapshot…
nom> ldd obj/release/mksnapshot
libpthread.so.1 => /lib/libpthread.so.1
libsocket.so.1 => /lib/libsocket.so.1
libnsl.so.1 => /lib/libnsl.so.1
librt.so.1 => /lib/librt.so.1
libstdc++.so.6 => (file not found)
libm.so.2 => /lib/libm.so.2
libgcc_s.so.1 => (file not found)
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
libaio.so.1 => /lib/libaio.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
Turned out that both libstdc++.so.6 and libgcc_s.so.1 were installed in /usr/local/lib but not available from /lib. So I simply created symlinks for /lib/libstdc++.so.6 and libgcc_s.so.1 pointing to /usr/local/lib . Another workaround was to set LD_LIBRARY_PATH=/usr/local/lib, but I heard it’s bad.
On to the next one…
ImportError: ld.so.1: python: fatal: relocation error: file /usr/local/lib/python2.6/lib-dynload/_socket.so: symbol inet_aton: referenced symbol not found
This one was just strange, I couldn’t figure out which library dependency was missing, and it took me a while to find out that the python binary I had wasn’t built correctly (some library links were missing from _socket.so) . At the end I used the binary from Sunfreeware which had the correct links.
I got this next error when I accidentally compiled node on a SPARC box, which I believe is not a supported architecture. c-ares only has sunos-x86 header files for Solaris.
../deps/c-ares/ares_expand_string.c:18:24: ares_setup.h: No such file or directory
And another one, on the same SPARC box…
TypeError: cannot concatenate 'str' and 'NoneType' objects:
This is a similar issue that stevel mentioned on nodejs Google Group. Basically deps/v8/SConstruct couldn’t figure out the compiler and returns ‘None’ which can’t be concatenated to a String, this line here…
the toolchain to use (' + TOOLCHAIN_GUESS + ')'
After 3-4 hours, I finally got node.js installed, and a simple server up and running on Solaris.
OHAI KTHXBYE
Related Posts:
I’m having the same issue on a Solaris 10 box. It’s a sunfire x4100 and I’m trying to install mailman-2.1.14. I’m recovering from a system crash using new hardware, I’ve been down for almost four days, and I’ve got a lot of people breathing down my neck.
I make it through ./configure, but “make install” yields:
Compiling /usr/local/mailman/Mailman/versions.py …
Traceback (most recent call last):
File “bin/update”, line 50, in
from Mailman import Utils
File “/usr/local/mailman/Mailman/Utils.py”, line 32, in
import cgi
File “/usr/local/lib/python2.6/cgi.py”, line 40, in
import urllib
File “/usr/local/lib/python2.6/urllib.py”, line 26, in
import socket
File “/usr/local/lib/python2.6/socket.py”, line 46, in
import _socket
ImportError: ld.so.1: python: fatal: relocation error: file /usr/local/lib/python2.6/lib-dynload/_socket.so: symbol inet_aton: referenced symbol not found
*** Error code 1
The following command caused the error:
(cd /usr/local/mailman ; test -n “” || bin/update)
make: Fatal error: Command failed for target `update’
I tried putting your symbolic links in /lib, but I kept getting the same error.
Hi, I want to install node.js in linux, but after execute “make”, it tells me:
“node-v0.4.12/deps/v8/src/mksnapshot.cc:29.18:error: string: No such file or directory”
could you help me please?
[...] 5, 2010 One of our happy team of code monkeys wrote up his heroic efforts on getting node.js to build on Solaris x86. Posted by csausdev Filed in Uncategorized Tags: javascript, node.js, solaris Leave a [...]