On Saturday, 17 November 2018 17:12:13 MSK Валентин Бартенев wrote:
> On Saturday, 17 November 2018 08:16:41 MSK Vadim A. Misbakh-Soloviov wrote:
> > Что-то я тут подебажил ещё, и заметил вообще страннейшую вещь:
> > нижеуказанная ошибка вываливается если использовать --local=/usr/lib64 и 
> > export USER=root (потому что под ним и происходит install-фаза, просто 
> > переменная пуста).
> > 
> > > ```
> > > gyp WARN EACCES user "root" does not have permission to access the dev dir
> > > "/ var/tmp/portage/www-servers/nginx-unit-9999/homedir/.node-gyp/9.8.0" 
> > > gyp
> > > cc1plus: error: /var/tmp/portage/www-servers/nginx-unit-9999/work/nginx-
> > > unit-9999/src: Permission denied
> > > ```
> > 
> > Однако (!!!)
> > 1) не просто у юзера root есть права доступа в директории, на которые 
> > ссылается билдлог, но и прямо даже из секции src_install (откуда потом 
> > вызывается `make install`), непосредственно перед этим `make install`'ом я 
> > прекрасно могу создать (touch'ем) файлы в указанных директориях...
> > Ну, точнее, первая не существует, но прекрасно создаётся `mkdir -p` (хотя 
> > это 
> > и не помогает, а приводит к другой ошибке с правами), а вот во второй 
> > прекрасно создаютмя любые файлы.
> > 
> > А вот gyp почему-то выкабенивается...
> 
> 
> Я ровно это сейчас и наблюдаю, но только без --local:
> 
> npm install -g 
> /tmp/portage/www-servers/nginx-unit-9999/work/nginx-unit-9999/build/node-unit-http.tar.gz
> 
> > unit-http@1.0.0 install 
> > /tmp/portage/www-servers/nginx-unit-9999/image/usr/lib64/node_modules/unit-http
> > node-gyp configure build
> 
> gyp WARN EACCES user "root" does not have permission to access the dev dir 
> "/tmp/portage/www-servers/nginx-unit-9999/homedir/.node-gyp/8.12.0"
> gyp WARN EACCES attempting to reinstall using temporary dev dir 
> "/tmp/portage/www-servers/nginx-unit-9999/image/usr/lib64/node_modules/unit-http/.node-gyp"
> gyp WARN install got an error, rolling back install
> gyp WARN install got an error, rolling back install
> gyp ERR! configure error 
> gyp ERR! stack Error: EACCES: permission denied, mkdir 
> '/tmp/portage/www-servers/nginx-unit-9999/image/usr/lib64/node_modules/unit-http/.node-gyp'
> gyp ERR! System Linux 4.14.81-gentoo
> gyp ERR! command "/usr/bin/node" 
> "/usr/lib64/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" 
> "configure" "build"
> 
> 
> И пока непонятно, что с этим делать.  Будем разбираться.
> 

По всей видимости, опция USER влияет исключительно на вывод ошибки в логе,
а пользователь при этом остается тем, что был указан в конфигах npm, а по
умолчанию это "nobody".  Очень удобно!

Если в npm install скормить явно --user=root, то всё успешно отрабатывает.
Похоже --unsafe-perm там необходим, иначе оно неработоспособно при таких 
сборках.

У меня установка (без опции --local) прошла успешно с таким патчем:

diff -r cb3595d83966 auto/modules/nodejs
--- a/auto/modules/nodejs       Thu Nov 15 21:50:00 2018 +0300
+++ b/auto/modules/nodejs       Sat Nov 17 17:21:05 2018 +0300
@@ -161,7 +161,7 @@ install: ${NXT_NODE}-$NXT_NODE_INSTALL
 ${NXT_NODE}-install: ${NXT_NODE_TARBALL} \
     $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
        ${NXT_NODE_EXPORTS} && \\
-       ${NXT_NPM} install -g ${PWD}/${NXT_NODE_TARBALL}
+       ${NXT_NPM} install -g --user=root ${PWD}/${NXT_NODE_TARBALL}
 
 ${NXT_NODE}-uninstall:
        ${NXT_NPM} uninstall -g unit-http

Либо с таким:

diff -r cb3595d83966 auto/modules/nodejs
--- a/auto/modules/nodejs       Thu Nov 15 21:50:00 2018 +0300
+++ b/auto/modules/nodejs       Sat Nov 17 17:21:05 2018 +0300
@@ -161,7 +161,7 @@ install: ${NXT_NODE}-$NXT_NODE_INSTALL
 ${NXT_NODE}-install: ${NXT_NODE_TARBALL} \
     $NXT_BUILD_DIR/$NXT_LIB_UNIT_STATIC
        ${NXT_NODE_EXPORTS} && \\
-       ${NXT_NPM} install -g ${PWD}/${NXT_NODE_TARBALL}
+       ${NXT_NPM} install -g --unsafe-perm ${PWD}/${NXT_NODE_TARBALL}
 
 ${NXT_NODE}-uninstall:
        ${NXT_NPM} uninstall -g unit-http


--
Валетин Бартенев
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить