Устранение глобальной установки StriderCD приводит к сбою доступа к файлу $HOME/.config $HOME/.cache
Я пытаюсь разработать лучший способ установки StriderCD во всем мире. Я установил node и npm через глобальную вилку nvm, и все пути отлично работают для других сборок, но ни один из них не требует установки post, как это.
Я пробовал как sudo npm install -g strider
, так и просто установил его как root без sudo, но я всегда сталкивался с ошибками EACCESS
в папках .config и .cache для bower на этапе post install:
> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/mkdirp/index.js:89
throw err0;
^
Error: EACCES, permission denied '/home/ubuntu/.config'
Установленный как root, у root нет прав для него собственный $HOME dir, что очень странно, если bower не создает dirs и файлы с неправильными разрешениями. Может кто-нибудь объяснить это:
> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:56
throw err;
^
Error: EACCES, permission denied '/root/.config/configstore/bower-github.yml'
You don't have access to this file.
at Error (native)
at Object.fs.openSync (evalmachine.<anonymous>:500:18)
at Object.fs.readFileSync (evalmachine.<anonymous>:352:15)
at Object.create.all.get (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:34:29)
at Object.Configstore (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:27:44)
at readCachedConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:22:23)
at defaultConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:11:24)
at Object.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/lib/index.js:40:32)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
Используя sudo как пользователь ubuntu и попробовав chmod -R 777 $HOME/.config
, я получаю то же самое на $HOME/.cache
! Вздох.
> [email protected] postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
bower EACCES EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'
Stack trace:
Error: EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'
at Error (native)
at Object.fs.mkdirSync (fs.js:747:18)
at Function.sync (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/node_modules/mkdirp/index.js:55:12)
at new Cache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/util/Cache.js:21:16)
at RegistryClient.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:163:35)
at Array.forEach (native)
at RegistryClient.initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:150:34)
at RegistryClient._initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:62:27)
at new RegistryClient (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:16:10)
at new PackageRepository (/usr/local/lib/node_modules/strider/node_modules/bower/lib/core/PackageRepository.js:17:28)
Console trace:
Error
at StandardRenderer.error (/usr/local/lib/node_modules/strider/node_modules/bower/lib/renderers/StandardRenderer.js:82:37)
at Logger.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/bin/bower:110:22)
at Logger.emit (events.js:107:17)
at Logger.emit (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-logger/lib/Logger.js:29:39)
at /usr/local/lib/node_modules/strider/node_modules/bower/lib/commands/index.js:45:20
at _rejected (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:844:24)
at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:870:30
at Promise.when (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:1122:31)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:788:41)
at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:556:49
System info:
Bower version: 1.4.1
Node version: 0.12.4
OS: Linux 3.13.0-48-generic x64
Почему gower настаивает на использовании $HOME/.config
, когда я использую --global
, а также устанавливаю с помощью sudo? Есть ли способ сопоставить это с другим путем и сделать соответствующие разрешения? И когда я su root -l
для установки, почему у root нет разрешения на доступ к файлам или создание директорий внутри него $HOME
и/или $HOME/.config
? Очень запутанно.
Это новый обновленный экземпляр 14.04 LTS AWS. Какова основная причина этой ошибки, и является ли это моей настройкой, вызывающей проблему или плохую конфигурацию на стороне Bower или Strider?
Ответы
Ответ 1
Разрешения вашей файловой системы кажутся странными и должны быть исследованы и восстановлены.
Тем не менее, важной частью этой первой трассировки стека является configstore, единица техники, используемая для кеширования или сохранения данных для диск. Излишне говорить, что он попытается написать в эти места. Это место для начала.
Проблемы с разрешениями вызываются в FAQ нового модуля conf, хотя, похоже, это не относится к Linux.
В configstore конфигурация хранится в ~/.config(которая в основном является соглашением Linux) для всех систем, а конфиг конфига в системном каталоге конфигурации по умолчанию. Как оказалось, каталог ~/.config часто имеет неправильное разрешение на macOS и Windows, что вызвало много горя для пользователей.
Переключение на conf
устраняет проблему? Может быть, может и нет. Невозможно повредить создать файл. Это довольно тривиальная замена. И вы можете, конечно, взломать внутри своего node_modules
, чтобы проверить, исправляет ли он его для вас.
Оба configstore и conf соблюдать переменную XDG_CONFIG_HOME
envrionment. Однако они читают его в несколько раз, первый - в модуле require()
, последний - при его создании.
Мы также должны оспаривать допущение процессов, выполняемых как конкретный пользователь (root
), так как Node программы могут process.setuid(), и это относительно распространено среди инструментов командной строки.
Я бы изменил различные файлы node_modules
, которые запускались и посыпались в некоторых...
console.log('User:', process.getuid());
console.log('Group:', process.getgid());
console.log('Effective user:', process.geteuid());
console.log('Effective group:', process.getegid());
Это полезно, потому что либо bower
, либо npm
может быть понижающим разрешения в неудобное время. Или возможно что-то внутри npm run build
script делает это.
Если вы видите, что пользователи или группы меняются на протяжении всего жизненного цикла программы, это высокая потенциальная область ошибок. Внимательно проверьте, что у пользователей или групп есть полный доступ к неудачным путям. В зависимости от точной активности, может потребоваться иметь разрешения на выполнение (x
) в родительских каталогах, вплоть до корня файловой системы.