Bug 30281 - Попытка выполнить chmod на ссылки, ведущие на файлы, недоступные для записи
Summary: Попытка выполнить chmod на ссылки, ведущие на файлы, недоступные для записи
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: node (show other bugs)
Version: unstable
Hardware: all Linux
: P3 blocker
Assignee: Vitaly Lipatov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 30289
  Show dependency tree
 
Reported: 2014-09-04 03:00 MSK by Vitaly Lipatov
Modified: 2016-02-18 01:41 MSK (History)
2 users (show)

See Also:


Attachments
chmodr fix (1.38 KB, patch)
2014-11-21 15:32 MSK, Vitaly Lipatov
no flags Details | Diff
chownr fix (1.29 KB, patch)
2014-11-21 15:33 MSK, Vitaly Lipatov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2014-09-04 03:00:14 MSK
Установка
$ 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.
Comment 1 Vitaly Lipatov 2014-09-04 03:21:08 MSK
Причина в следующей функции
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 вызывает ошибку доступа.
Comment 2 Vitaly Lipatov 2014-09-04 12:48:06 MSK
Проблема вызвана ошибкой в chmodr (рекурсивный chmod), которая решила ходить по ссылкам, хотя не должна.
Comment 3 Vitaly Lipatov 2014-09-04 14:29:11 MSK
Команда /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»: Операция не позволена
Comment 4 Alexey Gladkov 2014-11-18 20:44:42 MSK
Тоже на это нарвался :(
Comment 5 Alexey Gladkov 2014-11-19 01:31:48 MSK
Поднимаю Severity т.к. связанное с этим пакетом ПО можно собрать только в крайне специфичном чруте.
Comment 6 Vitaly Lipatov 2014-11-19 20:05:19 MSK
В принципе, патч давно готов:
https://github.com/isaacs/chmodr/pull/5
но его что-то тормозят принимать, хотя мы исправили все замечания.

И есть ещё проблема с внешним libv8 не той версии, что надо:
https://bugzilla.altlinux.org/show_bug.cgi?id=30289
У нас проявляется при установке contextify, нужно для jsmod. Вот с этим что делать...
Comment 7 Alexey Gladkov 2014-11-19 20:21:55 MSK
(В ответ на комментарий №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 будет собран с внутренней, а какой-либо из модулей слинкуется с чем-то из сизифа (некоторые модули несут биндинги к библиотекам).
Comment 8 Alexey Gladkov 2014-11-21 14:00:51 MSK
(В ответ на комментарий №6)
> В принципе, патч давно готов:
> https://github.com/isaacs/chmodr/pull/5
> но его что-то тормозят принимать, хотя мы исправили все замечания.

Кстати, такая же проблема с chownr. И решение такое же.
Comment 9 Vitaly Lipatov 2014-11-21 14:22:07 MSK
(В ответ на комментарий №8)
...
> Кстати, такая же проблема с chownr. И решение такое же.
Да, она проявилась в новой версии npm. Делаем. Патчи приложу сюда.
Comment 10 Vitaly Lipatov 2014-11-21 15:32:45 MSK
Created attachment 6178 [details]
chmodr fix
Comment 11 Vitaly Lipatov 2014-11-21 15:33:09 MSK
Created attachment 6179 [details]
chownr fix
Comment 12 Vitaly Lipatov 2014-11-26 13:44:29 MSK
А я пытался собрать nodejs 0.11.x, и столкнулся с тем, что несмотря на приложенные патчи, проблема повторяется (видимо, в другом месте?), а отладить не могу, потому что в новой версии перестали писаться логи.

Если же собирать стабильную 0.10.x, я вижу только выход собраться с внутренней libv8, потому что состыковаться с внешней очень проблематично, разработчики на другие версии не рассчитывали.
Comment 13 Alexey Gladkov 2014-11-26 13:54:35 MSK
(В ответ на комментарий №12)
> А я пытался собрать nodejs 0.11.x, и столкнулся с тем, что несмотря на
> приложенные патчи, проблема повторяется (видимо, в другом месте?), а отладить
> не могу, потому что в новой версии перестали писаться логи.

Я столкнулся с иной проблемой: некоторые модули в зависимостях хотят npm той или
иной версии. В этом случае выкачивается апстримный баганутый и происходит падение
уже ниже.
Может у тебя подобная проблема вылезает ?

> Если же собирать стабильную 0.10.x, я вижу только выход собраться с внутренней
> libv8, потому что состыковаться с внешней очень проблематично, разработчики на
> другие версии не рассчитывали.

Для себя я собственно так и сделал. Я тоже не вижу другого выхода.
Comment 14 Vitaly Lipatov 2014-11-26 20:19:07 MSK
(В ответ на комментарий №13)
> В этом случае выкачивается апстримный баганутый и происходит падение
Наверное, придётся публиковать в более приоритетном репозитории? Или может можно заставить наш git не создавать символьные ссылки в репозиториях, может это настраивается?

> Может у тебя подобная проблема вылезает ?
Наверняка
Comment 15 Alexey Gladkov 2014-11-26 20:41:01 MSK
(В ответ на комментарий №14)
> Наверное, придётся публиковать в более приоритетном репозитории? Или может
> можно заставить наш git не создавать символьные ссылки в репозиториях, может
> это настраивается?

У нас в /usr/share/git-core/templates/hooks лежат симлинки. При клонировании весь каталог /usr/share/git-core/templates переносится в .git как есть. Об этом написано в git-init(1) в разделе "TEMPLATE DIRECTORY". Если бы у нас там были файлы, то проблемы бы не возникало. НО они там правомерны.

Я не нашёл никаких настроек, чтобы копировать эти ссылки с разыменновыванием. Правда с точки зрения создателей git я не вижу в таких настройках большого смысла т.к. после клонирования есть возможность с делать с hooks что угодно.

Другое дело, что что-то сделать не даёт npm.
Comment 16 Vitaly Lipatov 2014-11-26 23:01:27 MSK
(В ответ на комментарий №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...
Comment 17 Vitaly Lipatov 2016-02-18 01:41:11 MSK
В новом 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