Установка $ npm install grunt-jsdos не проходит с такой ошибкой: npm ERR! Error: EPERM, chmod '/home/lav/.npm/_git-remotes/https-github-com-hegemonic-taffydb-git-386cf83c/hooks/applypatch-msg.sample' npm ERR! { [Error: EPERM, chmod '/home/lav/.npm/_git-remotes/https-github-com-hegemonic-taffydb-git-386cf83c/hooks/applypatch-msg.sample'] npm ERR! stack: 'Error: EPERM, chmod \'/home/lav/.npm/_git-remotes/https-github-com-hegemonic-taffydb-git-386cf83c/hooks/applypatch-msg.sample\'', npm ERR! errno: 50, npm ERR! code: 'EPERM', npm ERR! path: '/home/lav/.npm/_git-remotes/https-github-com-hegemonic-taffydb-git-386cf83c/hooks/applypatch-msg.sample' } npm ERR! npm ERR! Please try running this command again as root/Administrator.
Причина в следующей функции function addRemoteGit (u, parsed, name, silent, cb_) { ... checkGitDir(p, u, co, origUrl, silent, function(er, data) { chmodr(p, npm.modes.file, function(erChmod) { if (er) return cb(er, data) return cb(erChmod, data) }) где вызывает chmodr на все файлы git-каталога. В ALTLinux hooks в репозитории создаются ссылками на файлы в /usr/share, и применение к ним chmodr вызывает ошибку доступа.
Проблема вызвана ошибкой в chmodr (рекурсивный chmod), которая решила ходить по ссылкам, хотя не должна.
Команда /bin/chmod ведёт себя более удобно: $ mkdir /tmp/chsymlink $ ln -s /bin/sh /tmp/chsymlink $ chmod 644 /tmp/chsymlink/sh chmod: изменение прав доступа для «/tmp/chsymlink/sh»: Операция не позволена $ chmod -R 644 /tmp/chsymlink chmod: невозможно получить доступ к «/tmp/chsymlink/sh»: Отказано в доступе $ chmod -R 755 /tmp/chsymlink $ chmod 755 /tmp/chsymlink/sh chmod: изменение прав доступа для «/tmp/chsymlink/sh»: Операция не позволена
Тоже на это нарвался :(
Поднимаю Severity т.к. связанное с этим пакетом ПО можно собрать только в крайне специфичном чруте.
В принципе, патч давно готов: https://github.com/isaacs/chmodr/pull/5 но его что-то тормозят принимать, хотя мы исправили все замечания. И есть ещё проблема с внешним libv8 не той версии, что надо: https://bugzilla.altlinux.org/show_bug.cgi?id=30289 У нас проявляется при установке contextify, нужно для jsmod. Вот с этим что делать...
(В ответ на комментарий №6) > В принципе, патч давно готов: > https://github.com/isaacs/chmodr/pull/5 > но его что-то тормозят принимать, хотя мы исправили все замечания. Это можно пока патчем тащить у нас. > И есть ещё проблема с внешним libv8 не той версии, что надо: > https://bugzilla.altlinux.org/show_bug.cgi?id=30289 > У нас проявляется при установке contextify, нужно для jsmod. Вот с этим что > делать... Я сегодня пытался обновить nodejs и наткнулся, что новый nodejs не собирается с libv8-3.24. В принципе его можно собрать с внутренней версией, но тут тонкий момент если nodejs будет собран с внутренней, а какой-либо из модулей слинкуется с чем-то из сизифа (некоторые модули несут биндинги к библиотекам).
(В ответ на комментарий №6) > В принципе, патч давно готов: > https://github.com/isaacs/chmodr/pull/5 > но его что-то тормозят принимать, хотя мы исправили все замечания. Кстати, такая же проблема с chownr. И решение такое же.
(В ответ на комментарий №8) ... > Кстати, такая же проблема с chownr. И решение такое же. Да, она проявилась в новой версии npm. Делаем. Патчи приложу сюда.
Created attachment 6178 [details] chmodr fix
Created attachment 6179 [details] chownr fix
А я пытался собрать nodejs 0.11.x, и столкнулся с тем, что несмотря на приложенные патчи, проблема повторяется (видимо, в другом месте?), а отладить не могу, потому что в новой версии перестали писаться логи. Если же собирать стабильную 0.10.x, я вижу только выход собраться с внутренней libv8, потому что состыковаться с внешней очень проблематично, разработчики на другие версии не рассчитывали.
(В ответ на комментарий №12) > А я пытался собрать nodejs 0.11.x, и столкнулся с тем, что несмотря на > приложенные патчи, проблема повторяется (видимо, в другом месте?), а отладить > не могу, потому что в новой версии перестали писаться логи. Я столкнулся с иной проблемой: некоторые модули в зависимостях хотят npm той или иной версии. В этом случае выкачивается апстримный баганутый и происходит падение уже ниже. Может у тебя подобная проблема вылезает ? > Если же собирать стабильную 0.10.x, я вижу только выход собраться с внутренней > libv8, потому что состыковаться с внешней очень проблематично, разработчики на > другие версии не рассчитывали. Для себя я собственно так и сделал. Я тоже не вижу другого выхода.
(В ответ на комментарий №13) > В этом случае выкачивается апстримный баганутый и происходит падение Наверное, придётся публиковать в более приоритетном репозитории? Или может можно заставить наш git не создавать символьные ссылки в репозиториях, может это настраивается? > Может у тебя подобная проблема вылезает ? Наверняка
(В ответ на комментарий №14) > Наверное, придётся публиковать в более приоритетном репозитории? Или может > можно заставить наш git не создавать символьные ссылки в репозиториях, может > это настраивается? У нас в /usr/share/git-core/templates/hooks лежат симлинки. При клонировании весь каталог /usr/share/git-core/templates переносится в .git как есть. Об этом написано в git-init(1) в разделе "TEMPLATE DIRECTORY". Если бы у нас там были файлы, то проблемы бы не возникало. НО они там правомерны. Я не нашёл никаких настроек, чтобы копировать эти ссылки с разыменновыванием. Правда с точки зрения создателей git я не вижу в таких настройках большого смысла т.к. после клонирования есть возможность с делать с hooks что угодно. Другое дело, что что-то сделать не даёт npm.
(В ответ на комментарий №15) ... > написано в git-init(1) в разделе "TEMPLATE DIRECTORY". Если бы у нас там были > файлы, то проблемы бы не возникало. НО они там правомерны. > > Я не нашёл никаких настроек, чтобы копировать эти ссылки с разыменновыванием. Меня бы устроило GIT_TEMPLATE_DIR=/var/empty npm install на первое время, но оно почему-то не срабатывает (хотя при GIT_TEMPLATE_DIR=/var/empty git init создаётся репозиторий без hooks). А вот удаление ~/.npm/_git-remotes/*/hooks и повторный запуск npm install решает проблему. > Я столкнулся с иной проблемой: некоторые модули в зависимостях хотят npm той Может быть это решается сборкой npm последней версии? Вообще как-то странно в модулях хотеть npm...
В новом npm другой код, всё работает * Вт фев 09 2016 Vitaly Lipatov <lav@altlinux.ru> 4.2.6-alt1 - 2016-01-21 Node.js v4.2.6 "Argon" (LTS) Release (ALT bug #30191) - build with system openssl 1.0.2 - split doc subpackage