
Вы наверняка слышали о проблеме установки IDE на Mac OS X. Позже разработчики подсуетились и сделали все таки процесс установки IDE Cloud9 легким и понятным. Но вот сегодня решил установить новую версию IDE на чистую систему.
Поставил последнюю версию Node.js 0.8.8 и начал делать все по инструкции, как описано на главной странице GitHub проекта, в надежде, что вот, настанет момент и смогу насладиться программированием на node.js. Как бы не так.
Ход моих действие по установке Cloud9 IDE:
- Установил глобально sm менеджер.
- Склонировал репозиторий посредством git clone.
- И после выполнения команды sm install, увидел в guake описание ошибки:
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
* 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 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 * 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. (/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! И тут меня постигло разочарование! Снова ошибка!
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 |
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. (/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. (/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. (/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:
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 |
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. (/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. Запустив ее я получил вполне себе симпатичный отчет:
Теперь мне стали известны пакеты, которые мне нужно установить/найти. И теперь этот список состоял из:
- packager
- vfs
- socket.io
- socket.io-client
На картинке ниже, я сделал акцент на вывод данных, о недостающих модулях, командой:
1 |
sm status |
Как оказалось, очень полезная команда:
Из этого списка, packager, socket.io и socket.io-client, можно поставить при помощи npm менеджера. А вот что касается пакета vfs, то его можно склонировать или скачать вот отсюда. Если будете качать архивом, то распаковать нужно будет так же в node_modules.
Итог
После установки пакетов packager, socket.io и socket.io-client посредством npm и при этом не забыв про vfs, можно кричать "Уррааааа!", потому что после запуска команды bin/cloud9.sh, появляется сообщение в консоле, что сервер стартовал. При этом, браузер не стартует автоматом. Сервер IDE поднимается на порту 3131. Открываем браузер, у меня это Chromium и вводим localhost:3131.
После этого видим:
Заключение
Думаю что данная статья поможет многим, кто столкнется с проблемой установки Cloud9 IDE под Ubuntu. Спасибо за внимание!
Учтите, что хоть в документации и указано "NodeJS >= 0.6.16 (node 0.8.x will not work at the moment!)", IDE прекрасно работает на 0.8.8 версии Node.js.
Я проверил, что работает: отладка, intellisense и строка команд. Вроде бы пока сбоев в работе не наблюдаю. Если что то будет обнаружено, то обязательно отпишусь в этой статье.
Прикладываю скриншоты в качестве доказательств своих утверждений.
- Работает intellisense (пока что по Ctrl + Space)
- Работает отладка
- Работает интерактивная подсказка в командой строке