Rev. 2.73

Cloud9은 ajax.org에서 Node.JS를 이용하여 구축한 웹기반 IDE(integrated development environment, 통합 개발 환경)입니다. GitHub와 연동되는 자체 서비스도 있긴 하지만, 오픈 소스이기 때문에 개인서버에 설치해서 사용해도 무방합니다. 얼마전 설치해서 잘 사용해 오던 Cloud9 IDE가 고장났습니다. 웍스페이스로 잡은 위치의 파일이 더이상 열리지 않는 현상입니다. 다시 설치해도 동일한 현상이 지속되길래 최신 버전으로 업데이트하는 퀘스트를 수행하기로 마음먹었습니다. 아래와 같은 방법으로 설치하는 것이 일반적이지만 이경우 0.3.0 버전이 설치 됩니다.

# npm install cloud9

그러나 GitHub에 등록되어 있는 버전은 0.5.1 입니다. Cloud9 IDE의 최신버전을 설치해 봅시다.

먼저 GitHub로 부터 Cloud9O3 프로젝트를 클론합니다.

# git clone git://github.com/ajaxorg/cloud9.git
# git clone http://github.com/ajaxorg/o3

Cloud9을 설치합니다. Cloud9이 사용하는 서브모듈들을 다운로드하고 설치하는 과정이 이루어집니다. Cloud9이 위치한 곳으로 이동해서 개발 브랜치로 변경하고 체크아웃 한다음 설치 스크립트를 실행합니다. 아래와 같이 입력하세요. 이 과정은 약 15분정도 소요됩니다.

# cd cloud9
# git branch devel origin/devel
# git checkout devel
# git submodule update --init --recursive
# bin/cloud9.sh

그다음 두 번째로 받았던 O3를 빌드합니다. 다운로드된 곳으로 이동하고 빌드 한 후 Cloud9이 설치된 경로에 복사합니다. O3는 Cloud9을 구동하는데 필요한 C++ 컴포넌트들입니다.

# cd ../o3
# ./tools/node_modules_build
# cp build/default/o3.node ../cloud9/support/jsdav/support/node-o3-xml-v4/lib/o3-xml/

그런데...

안됩니다. bin/cloud9.sh를 구동하는 과정에서 아래와같은 오류가 발생합니다.

# bin/cloud9.sh
Linux 64 bit
support/node-builds-v4/node-linux64: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory

빌드하는 과정에서 CPU 종류에 따라 필요로하는 라이브러리가 두 개 있는데 하나는 libssl.so.0.9.8 이고 다른 하나는 libcrypto.so.0.9.8입니다. 다음과 같이 whereis 명령으로 찾아보면 해당 라이브러리의 위치를 알려줍니다.

# whereis libssl.so.0.9.8
libssl.so.0.9: /lib/libssl.so.0.9.8e

64비트이므로 /lib64/ 디렉토리에 있는 것을 사용해야 합니다. 그런데 버전이 0.9.8e 입니다. 그래서 아래와 같이 심볼릭 링크를 만들었습니다.

# cd /lib64/
# ln -s libssl.so.0.9.8e libssl.so.0.9.8
# ln -s libcrypto.so.0.9.8e libcrypto.so.0.9.8
# ll libssl.so.0.* libcrypto.so.0.*
lrwxrwxrwx 1 root root      19  8월 12 17:21 libcrypto.so.0.9.8 -> libcrypto.so.0.9.8e
-rwxr-xr-x 1 root root 1366272 12월 14  2010 libcrypto.so.0.9.8e
lrwxrwxrwx 1 root root      16  8월 12 17:21 libssl.so.0.9.8 -> libssl.so.0.9.8e
-rwxr-xr-x 1 root root  315032 12월 14  2010 libssl.so.0.9.8e

이제는 다른 오류가 나타납니다.

# bin/cloud9.sh
Linux 64 bit
support/node-builds-v4/node-linux64: /lib64/libssl.so.0.9.8: no version information available (required by support/node-builds-v4/node-linux64)
support/node-builds-v4/node-linux64: /lib64/libcrypto.so.0.9.8: no version information available (required by support/node-builds-v4/node-linux64)
support/node-builds-v4/node-linux64: /lib64/libc.so.6: version `GLIBC_2.9' not found (required by support/node-builds-v4/node-linux64)
support/node-builds-v4/node-linux64: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by support/node-builds-v4/node-linux64)
support/node-builds-v4/node-linux64: /lib64/libc.so.6: version `GLIBC_2.6' not found (required by support/node-builds-v4/node-linux64)

이런 젠장, 망했어요. 이게 뭐에요; 이틀동안 개삽질했어요. 헬프~

2011-08-14: 해결했습니다. ^^; 걍 실행해도 돌아가네요. 무시해도 되는 오류인가봐요. 꺄~ 0.5.1 이다~
2011-09-10: connect-basic-auth 모듈 기반 계정 인증 추가

Comments

여느때와 같이 Socket.IO를 열심히 가져놀다가 노드 패키지들을 너무 많이 설치했는지 ssh 콘솔이 버벅이는 느낌을 받았습니다. npm list 했더니 뭔가 위험해 보이는 시뻘건 글씨가 몇개 보여서 해당 패키지들을 지우고 가뿐한 마음으로 npm update를 날렸죠. 그런데 왠 오류가 주르륵 나타납니다. 패키즈를 지우고 설치하고 수십번 반복한 끝에 드디어 올게 온거구나, 저는 서버를 망가트린줄 알고 밀어버리려는 각오를 하고 있었습니다. 구글님과 한참을 상담한 끝에 Socket.IO가 최근 0.7.8로 업데이트 되었고, 뭔가가 변경된 모양이니라 하시더군요.

# npm update
...
npm ERR! tar "-mvxpf" "-" "-C" 
"/tmp/npm-1300363452274/1300363452274-0.9306141722481698/contents" 
tar: Ignoring unknown extended header keyword `SCHILY.dev' 
npm ERR! tar "-mvxpf" "-" "-C" 
"/tmp/npm-1300363452274/1300363452274-0.9306141722481698/contents" 
tar: Ignoring unknown extended header keyword `SCHILY.ino' 
npm ERR! tar "-mvxpf" "-" "-C" 
"/tmp/npm-1300363452274/1300363452274-0.9306141722481698/contents" 
tar: Ignoring unknown extended header keyword `SCHILY.nlink'

제 실수가 아니라는 희망을 가지고 더욱 깊은 상담에 빠져들었습니다. 저와 비슷한 상황을 겪은 분의 하소연을 발견하고 황급히 찾은 답변은 "tar --version 해서 나온거 올려라" 헐, 그렇습니다. 시스템에 설치된 tar의 버전이 낮아서 그랬던 것이었습니다. 그래서 아래와 같이 업데이트 했죠.

# w-get http://files1.directadmin.com/services/all/tar-1.26.tar.gz
# tar xvzf tar-1.26.tar.gz
# cd tar-1.26
# FORCE_UNSAFE_CONFIGURE=1
# export FORCE_UNSAFE_CONFIGURE
# ./configure
# make
# mv /bin/tar /bin/tar.old
# cp src/tar /bin/tar

tar 업데이트 이후 npm은 시원하게 작동했습니다. 아 참, Socket.IO 0.7.8 업데이트 내용은 이렇답디다.

Server
0.7.8 / 2011-08-08
==================
* Changed; make sure sio#listen passes options to both HTTP server and socket.io manager.
* Added docs for sio#listen.
* Added options parameter support for Manager constructor.
* Added memory leaks tests and test-leaks Makefile task.
* Removed auto npm-linking from make test.
* Make sure that you can disable heartbeats. [3rd-Eden]
* Fixed rooms memory leak [3rd-Eden]
* Send response once we got all POST data, not immediately [Pita]
* Fixed onLeave behavior with missing clientsk [3rd-Eden]
* Prevent duplicate references in rooms.
* Added alias for `to` to `in` and `in` to `to`.
* Fixed roomClients definition.
* Removed dependency on redis for installation without npm [3rd-Eden]
* Expose path and querystring in handshakeData [3rd-Eden]

Client
0.7.5 / 2011-08-08
==================
* Added querystring support for `connect` [3rd-Eden]
* Added partial Node.JS transports support [3rd-Eden, josephg]
* Fixed builder test.
* Changed `util.inherit` to replicate Object.create / __proto__.
* Changed and cleaned up some acceptance tests.
* Fixed race condition with a test that could not be run multiple times.
* Added test for encoding a payload.
* Added the ability to override the transport to use in acceptance test [3rd-Eden]
* Fixed multiple connect packets [DanielBaulig]
* Fixed jsonp-polling over-buffering [3rd-Eden]
* Fixed ascii preservation in minified socket.io client [3rd-Eden]
* Fixed socket.io in situations where the page is not served through utf8.
* Fixed namespaces not reconnecting after disconnect [3rd-Eden]
* Fixed default port for secure connections.

BOOM!

Comments