Решение проблемы установки Cloud9 ide на Ubuntu 12.04

в 12:17, , рубрики: javascript, node.js, Веб-разработка

Решение проблемы установки Cloud9 ide на Ubuntu 12.04

Ранее я писал о проблеме установки IDE на Mac OS X. Позже разработчики подсуетились и сделали все таки процесс установки IDE Cloud9 легким и понятным. Но вот сегодня решил установить новую версию IDE на чистую систему.
Поставил последнюю версию Node.js 0.8.8 и начал делать все по инструкции, как описано на главной странице GitHub проекта, в надежде, что вот, настанет момент и смогу насладиться программированием на node.js. Как бы не так.

Ход моих действие по установке cloud9 ide

* Установил глобально sm менеджер.
* Склонировал репозиторий посредством git clone.
* И после выполнения команды sm install, увидел в guake описание ошибки:

Листинг ошибки при выполнеии команды: sm install

 * ERROR ***************************************************************************
  * Error: NPM error: npm WARN package.json packager@0.1.0 No README.md file found!
npm http GET https://registry.npmjs.org/libxml/0.0.6
npm http GET https://registry.npmjs.org/asyncjs
npm http 304 https://registry.npmjs.org/asyncjs
npm http 304 https://registry.npmjs.org/libxml/0.0.6

> libxml@0.0.6 preinstall /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml
> ./build.sh

Checking for program g++ or c++          : /usr/bin/g++ 
Checking for program cpp                 : /usr/bin/cpp 
Checking for program ar                  : /usr/bin/ar 
Checking for program ranlib              : /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for node path                   : not found 
Checking for node prefix                 : ok /usr/local 
'configure' finished successfully (0.041s)
Waf: Entering directory `/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build'
[1/3] cxx: hosts/node-o3/sh_node.cc -> build/Release/hosts/node-o3/sh_node_1.o
16:35:31 runner system command -> ['/usr/bin/g++', '-g', '-O3', '-msse2', '-ffast-math', '-fPIC', '-DPIC', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_GNU_SOURCE', '-IRelease/include', '-I../include', '-IRelease/hosts', '-I../hosts', '-IRelease/modules', '-I../modules', '-IRelease/deps', '-I../deps', '-I/usr/local/include/node', '../hosts/node-o3/sh_node.cc', '-c', '-o', 'Release/hosts/node-o3/sh_node_1.o']
[2/3] cxx: hosts/node-o3/sh_node_libs.cc -> build/Release/hosts/node-o3/sh_node_libs_1.o
16:35:32 runner system command -> ['/usr/bin/g++', '-g', '-O3', '-msse2', '-ffast-math', '-fPIC', '-DPIC', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_GNU_SOURCE', '-IRelease/include', '-I../include', '-IRelease/hosts', '-I../hosts', '-IRelease/modules', '-I../modules', '-IRelease/deps', '-I../deps', '-I/usr/local/include/node', '../hosts/node-o3/sh_node_libs.cc', '-c', '-o', 'Release/hosts/node-o3/sh_node_libs_1.o']
[3/3] cxx_link: build/Release/hosts/node-o3/sh_node_1.o build/Release/hosts/node-o3/sh_node_libs_1.o -> build/Release/o3.node
16:36:15 runner system command -> ['/usr/bin/g++', 'Release/hosts/node-o3/sh_node_1.o', 'Release/hosts/node-o3/sh_node_libs_1.o', '-o', '/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build/Release/o3.node', '-shared', '-L/usr/local/lib', '-Wl,-Bdynamic', '-lxml2']
/usr/bin/ld: cannot find -lxml2
collect2: выполнение ld завершилось с кодом возврата 1
Waf: Leaving directory `/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build'
Build failed:  -> task failed (err #1): 
	{task: cxx_link sh_node_1.o,sh_node_libs_1.o -> o3.node}
  File "/usr/local/bin/node-waf", line 16, in <module>
	Scripting.prepare(t, os.getcwd(), VERSION, wafdir)
  File "/usr/local/bin/../lib/node/wafadmin/Scripting.py", line 147, in prepare
	error(str(e))
cp: не удалось выполнить stat для «build/Release/o3.node»: Нет такого файла или каталога
npm ERR! libxml@0.0.6 preinstall: `./build.sh`
npm ERR! `sh "-c" "./build.sh"` failed with 1
npm ERR! 
npm ERR! Failed at the libxml@0.0.6 preinstall script.
npm ERR! This is most likely a problem with the libxml package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     ./build.sh
npm ERR! You can get their info via:
npm ERR!     npm owner ls libxml
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.2.0-29-generic
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "." "--production"
npm ERR! cwd /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea
npm ERR! node -v v0.8.8
npm ERR! npm -v 1.1.59
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/npm-debug.log
npm ERR! not ok code 0
 In package: /home/cyberlight/test/cloud9ide/cloud9
  * File : false @ false
  * Stack:
  *    Error: NPM error: npm WARN package.json packager@0.1.0 No README.md file found!
  *    npm http GET https://registry.npmjs.org/libxml/0.0.6
  *    npm http GET https://registry.npmjs.org/asyncjs
  *    npm http 304 https://registry.npmjs.org/asyncjs
  *    npm http 304 https://registry.npmjs.org/libxml/0.0.6
  *    
  *    > libxml@0.0.6 preinstall /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml
  *    > ./build.sh
  *    
  *    Checking for program g++ or c++          : /usr/bin/g++ 
  *    Checking for program cpp                 : /usr/bin/cpp 
  *    Checking for program ar                  : /usr/bin/ar 
  *    Checking for program ranlib              : /usr/bin/ranlib 
  *    Checking for g++                         : ok  
  *    Checking for node path                   : not found 
  *    Checking for node prefix                 : ok /usr/local 
  *    'configure' finished successfully (0.041s)
  *    Waf: Entering directory `/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build'
  *    [1/3] cxx: hosts/node-o3/sh_node.cc -> build/Release/hosts/node-o3/sh_node_1.o
  *    16:35:31 runner system command -> ['/usr/bin/g++', '-g', '-O3', '-msse2', '-ffast-math', '-fPIC', '-DPIC', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_GNU_SOURCE', '-IRelease/include', '-I../include', '-IRelease/hosts', '-I../hosts', '-IRelease/modules', '-I../modules', '-IRelease/deps', '-I../deps', '-I/usr/local/include/node', '../hosts/node-o3/sh_node.cc', '-c', '-o', 'Release/hosts/node-o3/sh_node_1.o']
  *    [2/3] cxx: hosts/node-o3/sh_node_libs.cc -> build/Release/hosts/node-o3/sh_node_libs_1.o
  *    16:35:32 runner system command -> ['/usr/bin/g++', '-g', '-O3', '-msse2', '-ffast-math', '-fPIC', '-DPIC', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_GNU_SOURCE', '-IRelease/include', '-I../include', '-IRelease/hosts', '-I../hosts', '-IRelease/modules', '-I../modules', '-IRelease/deps', '-I../deps', '-I/usr/local/include/node', '../hosts/node-o3/sh_node_libs.cc', '-c', '-o', 'Release/hosts/node-o3/sh_node_libs_1.o']
  *    [3/3] cxx_link: build/Release/hosts/node-o3/sh_node_1.o build/Release/hosts/node-o3/sh_node_libs_1.o -> build/Release/o3.node
  *    16:36:15 runner system command -> ['/usr/bin/g++', 'Release/hosts/node-o3/sh_node_1.o', 'Release/hosts/node-o3/sh_node_libs_1.o', '-o', '/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build/Release/o3.node', '-shared', '-L/usr/local/lib', '-Wl,-Bdynamic', '-lxml2']
  *    /usr/bin/ld: cannot find -lxml2
  *    collect2: выполнение ld завершилось с кодом возврата 1
  *    Waf: Leaving directory `/home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/node_modules/libxml/support/o3/build'
  *    Build failed:  -> task failed (err #1): 
  *    	{task: cxx_link sh_node_1.o,sh_node_libs_1.o -> o3.node}
  *      File "/usr/local/bin/node-waf", line 16, in <module>
  *    	Scripting.prepare(t, os.getcwd(), VERSION, wafdir)
  *      File "/usr/local/bin/../lib/node/wafadmin/Scripting.py", line 147, in prepare
  *    	error(str(e))
  *    cp: не удалось выполнить stat для «build/Release/o3.node»: Нет такого файла или каталога
  *    npm ERR! libxml@0.0.6 preinstall: `./build.sh`
  *    npm ERR! `sh "-c" "./build.sh"` failed with 1
  *    npm ERR! 
  *    npm ERR! Failed at the libxml@0.0.6 preinstall script.
  *    npm ERR! This is most likely a problem with the libxml package,
  *    npm ERR! not with npm itself.
  *    npm ERR! Tell the author that this fails on your system:
  *    npm ERR!     ./build.sh
  *    npm ERR! You can get their info via:
  *    npm ERR!     npm owner ls libxml
  *    npm ERR! There is likely additional logging output above.
  *    
  *    npm ERR! System Linux 3.2.0-29-generic
  *    npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "." "--production"
  *    npm ERR! cwd /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea
  *    npm ERR! node -v v0.8.8
  *    npm ERR! npm -v 1.1.59
  *    npm ERR! code ELIFECYCLE
  *    npm ERR! 
  *    npm ERR! Additional logging details can be found in:
  *    npm ERR!     /home/cyberlight/.sourcemint/install-cache/https/github.com/ajaxorg/packager/tarball/01597eacd22ad660977d43c44b4001107117b8ea/npm-debug.log
  *    npm ERR! not ok code 0
  *     In package: /home/cyberlight/test/cloud9ide/cloud9
  *        at ChildProcess.<anonymous> (/usr/local/lib/node_modules/sm/node_modules/sourcemint-pm-sm/node_modules/sourcemint-pm-npm/lib/npm.js:77:29)
  *        at ChildProcess.EventEmitter.emit (events.js:91:17)
  *        at Process._handle.onexit (child_process.js:674:10)
  * ERROR ***************************************************************************

после которой, стал сомневаться в том, что установка пройдет нормально.

И так, я получил сообщение об ошибке, в котором было видно, что отсутствуют некоторые каталоги. В частности build/Release/o3.node. И тогда по прошлому опыту, я решил, что нужно попытать счастье, использовав команду родного npm. Произвел запуск команды npm install и получил длинный листинг в консоли quake, свидетельствующий об успешном завершении установки необходимых пакетов. Т.е. мои надежды на npm менеджер, оправдались!

Развязка

Под впечатлением, что теперь все позади и я смогу запустить ide, в консоли набираю команду bin/cloud9.sh! И тут меня постигло разочарование! Снова ошибка!

Листинг ошибки после пробного запуска cloud9ide
cyberlight@cyberlight-dt:~/test/cloud9ide/cloud9$ bin/cloud9.sh 
mkdir -p plugins-client/lib.ace/www/worker
rm -rf /tmp/c9_worker_build
mkdir -p /tmp/c9_worker_build/ext
ln -s `pwd`/plugins-client/ext.language /tmp/c9_worker_build/ext/language
ln -s `pwd`/plugins-client/ext.codecomplete /tmp/c9_worker_build/ext/codecomplete
ln -s `pwd`/plugins-client/ext.jslanguage /tmp/c9_worker_build/ext/jslanguage
node Makefile.dryice.js worker
# cloud9 worker ---------
path.existsSync is now called `fs.existsSync`.

/home/cyberlight/test/cloud9ide/cloud9/node_modules/dryice/lib/dryice/index.js:665
      throw new Error('Each commonjs root should be a directory: ' + root);
            ^
Error: Each commonjs root should be a directory: /home/cyberlight/test/cloud9ide/cloud9/node_modules/treehugger/lib
    at CommonJsProject.<anonymous> (/home/cyberlight/test/cloud9ide/cloud9/node_modules/dryice/lib/dryice/index.js:665:13)
    at Array.map (native)
    at new CommonJsProject (/home/cyberlight/test/cloud9ide/cloud9/node_modules/dryice/lib/dryice/index.js:663:27)
    at Function.copy.createCommonJsProject (/home/cyberlight/test/cloud9ide/cloud9/node_modules/dryice/lib/dryice/index.js:936:10)
    at worker (/home/cyberlight/test/cloud9ide/cloud9/Makefile.dryice.js:43:30)
    at main (/home/cyberlight/test/cloud9ide/cloud9/Makefile.dryice.js:35:9)
    at Object.<anonymous> (/home/cyberlight/test/cloud9ide/cloud9/Makefile.dryice.js:95:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
make: *** [plugins-client/lib.ace/www/worker/worker-language.js] Ошибка 1
Linux 64 bit
path.existsSync is now called `fs.existsSync`.

/home/cyberlight/test/cloud9ide/cloud9/node_modules/architect/architect.js:265
    throw err;
          ^
Error: Can't find 'vfs-architect/local' relative to '/home/cyberlight/test/cloud9ide/cloud9/plugins-server'
    at resolvePackageSync (/home/cyberlight/test/cloud9ide/cloud9/node_modules/architect/architect.js:263:15)
    at /home/cyberlight/test/cloud9ide/cloud9/node_modules/architect/architect.js:30:34
    at Array.forEach (native)
    at Object.resolveConfig (/home/cyberlight/test/cloud9ide/cloud9/node_modules/architect/architect.js:23:12)
    at boot (/home/cyberlight/test/cloud9ide/cloud9/server.js:102:33)
    at Object.<anonymous> (/home/cyberlight/test/cloud9ide/cloud9/server.js:87:2)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

Из этого листинга видно, что не найдены следующие пакеты vfs-architect и treehugger. Поиск в Google дал ссылки на репозиторий GitHub для данного пакета. Я не стал его клонировать а скачал как zip архив и распаковал его в директорию node_modules под именем vfs-architect.
Затем я так же скачал архивом treehugger из репозитория на GitHub. И так же распаковал его в директорию node_modules под именем treehugger.

После произведенных действий, я попробовал снова запустить ide при помощи команды bin/cloud9.sh. Но теперь на экран показалась ошибка об отсутствии пакета socket.io.

Листинг ошибки после второго пробного запуска cloud9ide

cyberlight@cyberlight-dt:~/test/cloud9ide/cloud9$ bin/cloud9.sh
mkdir -p plugins-client/lib.ace/www/worker
rm -rf /tmp/c9_worker_build
mkdir -p /tmp/c9_worker_build/ext
ln -s `pwd`/plugins-client/ext.language /tmp/c9_worker_build/ext/language
ln -s `pwd`/plugins-client/ext.codecomplete /tmp/c9_worker_build/ext/codecomplete
ln -s `pwd`/plugins-client/ext.jslanguage /tmp/c9_worker_build/ext/jslanguage
node Makefile.dryice.js worker
# cloud9 worker ---------
path.existsSync is now called `fs.existsSync`.
copy.source.commonjs is deprecated, pass { project:... includes:...} directly as a source
- ext/language/worker.js has require(...) with non-string parameter. Ignoring requirement.
- ext/language/worker.js has require(...) with non-string parameter. Ignoring requirement.
cp node_modules/ace/build/src/worker* plugins-client/lib.ace/www/worker
Linux 64 bit
path.existsSync is now called `fs.existsSync`.

module.js:340
    throw err;
          ^
Error: Cannot find module 'socket.io'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/home/cyberlight/test/cloud9ide/cloud9/plugins-server/cloud9.socket/socket.js:5:16)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)

И тут я все таки решил посмотреть как можно проверить, какие пакеты у меня есть, а каких нет. Посмотрев команды sm я видел, что есть возможность запуск диагностики наличия пакетов с использованием команды sm status. Запустив ее я получил вполне себе симпатичный отчет:

Решение проблемы установки Cloud9 ide на Ubuntu 12.04

Теперь мне стали известны пакеты, которые мне нужно установить/найти. И теперь этот список состоял из:

  • packager
  • vfs
  • socket.io
  • socket.io-client

Из этого списка packager, socket.io и socket.io-client, можно поставить при помощи npm менеджера. А вот что касается пакета vfs, то его можно склонировать или скачать вот отсюда. Если будете качать архивом, то распаковать нужно будет так же в node_modules.

Заключение

После установки через npm пакетов packager, socket.io и socket.io-client, можно кричать «Уррааааа!», потому что после запуска команды bin/cloud9.sh, появляется сообщение в консоле, что сервер стартовал. При этом браузер не стартует автоматом. Сервер ide поднимается на порту 3131. Открываем браузер, у меня это Chromium и вводим localhost:3131.

После этого видим:

Решение проблемы установки Cloud9 ide на Ubuntu 12.04

Заключение

Думаю что данная статья поможет многим, кто столкнется с проблемой установки cloud9 ide под Ubuntu.

Спасибо за внимание!

Автор: CyberLight

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js