Глобальная пост-установка StriderCD завершается неудачно при доступе к $HOME/.config $HOME/.cache

Я пытаюсь найти лучший способ установить StriderCD во всем мире. Я установил node и npm через глобальный форк nvm, и все пути работают нормально для других сборок, но ни один из них не требует такой пост-установки.

Я пробовал оба sudo npm install -g strider а также просто установка как root без sudo, но я всегда сталкиваюсь EACCESS ошибки в папках.config и.cache для bower на этапе после установки:

> strider@1.6.6 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 не создает dir и файлы с неправильными разрешениями. Может кто-нибудь объяснить это:

> strider@1.6.6 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! Вздох.

> strider@1.6.6 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

Почему беседка настаивает на использовании $HOME/.config когда я использую --global а также установка с помощью sudo? Есть ли способ сопоставить это с другим путем и сделать правильные разрешения? И когда я su root -l установить, почему root не имеет права доступа к файлам или создания каталогов внутри своей собственной $HOME и / или $HOME/.config? Очень запутанно.

Это новый обновленный экземпляр 14.04 LTS AWS. Какова основная причина этой ошибки и является ли моя установка причиной проблемы или неправильной конфигурации со стороны Бауэра или Страйдера?

1 ответ

Разрешения вашей файловой системы кажутся странными и должны быть исследованы и исправлены.

Тем не менее, важной частью этой первой трассировки стека является configstore, часть механизма, используемого для кэширования или сохранения данных на диске. Излишне говорить, что он попытается написать в эти места. Это место для начала.

Проблемы с разрешениями вызываются в FAQ нового модуля conf, хотя, похоже, это не относится к Linux.

В configstore конфиг хранится в ~/.config (который в основном является соглашением Linux) на всех системах, в то время как conf хранит конфиг в системном каталоге конфигурации пользователя по умолчанию. Оказывается, что каталог ~ /.config часто имеет неправильное разрешение на macOS и Windows, что вызывает много горя у пользователей.

Будет переключаться на conf решить проблему? Может быть, а может и нет. Не повредит подать проблему. Это довольно банальная замена. И вы могли бы, конечно, взломать внутри вашего node_modules чтобы проверить, исправит ли это для вас.

Оба configstore и conf уважают XDG_CONFIG_HOME переменная окружения. Однако они читают это в немного другое время, первое в модуле require() время, последнее, когда его класс создан.

Мы также должны оспорить предположение о процессах, запущенных от имени конкретного пользователя (root), поскольку Node-программы могут обрабатывать.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 Сценарий делает так.

Если вы видите, что пользователи или группы меняются на протяжении жизненного цикла программы, это потенциальная область для ошибок. Тщательно проверьте, что у напечатанных пользователей или групп есть полный доступ к ошибочным путям. В зависимости от конкретной активности, которая может выполняться, может потребоваться выполнить (x) разрешения для родительских каталогов, вплоть до корня файловой системы.

Другие вопросы по тегам