При попытке установить EMBER_CLI_PROD_ASSETS в значение 1 во время предварительной компиляции ресурсов (версия 2.9.0.beta2, коммит: d2de058ff51f204fcf85c86a00750a59505af3bb) я получаю следующее:
yarn run v1.22.17
$ /var/www/discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js. See https://git.io/v7S5n for details.
DEPRECATION: The integration of jQuery into Ember has been deprecated and will be removed with Ember 4.0. You can either opt-out of using jQuery, or install the `@ember/jquery` addon to provide the jQuery integration. Please consult the deprecation guide for further details: https://emberjs.com/deprecations/v3.x#toc_jquery-apis
A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
node:internal/errors:464
ErrorCaptureStackTrace(err);
^
SystemError [ERR_SYSTEM_ERROR]: A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
at new SystemError (node:internal/errors:233:5)
at new NodeError (node:internal/errors:336:7)
at Object.userInfo (node:os:347:11)
at summarizeProcess (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/summarize-process.js:17:15)
at writeError (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/write-error.js:114:3)
at UI.writeError (/var/www/discourse/app/assets/javascripts/node_modules/console-ui/lib/index.js:167:20)
at CLI.logError (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/cli.js:318:13)
at CLI.run (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/cli.js:253:12)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async module.exports (/var/www/discourse/app/assets/javascripts/node_modules/ember-cli/lib/cli/index.js:145:12) {
code: 'ERR_SYSTEM_ERROR',
info: {
errno: -2,
code: 'ENOENT',
message: 'no such file or directory',
syscall: 'uv_os_get_passwd'
},
errno: [Getter/Setter],
syscall: [Getter/Setter]
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Есть ли какие-либо подсказки, почему это происходит?
После пересоздания экземпляра успеха нет. Меня больше интересует, что вызывает вызов uv_os_get_passwd, или, в более общем смысле, что является причиной этой ошибки. Ожидается ли наличие какого-либо конкретного пользователя в системе или требуется установка определённых настроек?
Как именно вы запускаете образ Discourse? Есть ли какие-либо дополнительные флаги для безопасности?
Судя по этому трассировке, проблема в том, что сборка Ember-CLI завершается неудачей, и при попытке вывести ошибку возникает ещё одно исключение, скрывающее истинную причину.
Можете ли вы зайти внутрь образа Discourse и выполнить:
node
const os = require('os');
os.userInfo().shell
Интересно, вот что я получаю при выполнении вашего предложения (и это имеет полный смысл, если цель — получить доступ к любой внутренней библиотеке системы с произвольным пользователем, отличным от root):
node
Welcome to Node.js v16.13.2.
Type ".help" for more information.
> const os = require('os');
undefined
> os.userInfo().shell
Uncaught:
SystemError [ERR_SYSTEM_ERROR]: A system error occurred: uv_os_get_passwd returned ENOENT (no such file or directory)
at __node_internal_captureLargerStackTrace (node:internal/errors:464:5)
at new SystemError (node:internal/errors:233:5)
at new NodeError (node:internal/errors:336:7)
at Object.userInfo (node:os:347:11) {
code: 'ERR_SYSTEM_ERROR',
info: {
errno: -2,
code: 'ENOENT',
message: 'no such file or directory',
syscall: 'uv_os_get_passwd'
},
errno: [Getter/Setter: -2],
syscall: [Getter/Setter: 'uv_os_get_passwd']
}
>
Как именно вы запускаете образ Discourse? Есть ли какие-либо дополнительные флаги для безопасности?
Мы используем контейнеризованное решение на базе OpenShift, в котором Discourse работает с произвольным идентификатором пользователя. На данный момент проблем не возникало, подход очень похож на официальное руководство по установке.
Конечно, мы можем обойти эту проблему, установив EMBER_CLI_PROD_ASSETS в значение 0; ассеты будут предварительно скомпилированы, как в старые времена, но рано или поздно, если ваши планы включают движение в этом направлении, это может стать реальной проблемой для подобных решений, если текущий процесс предварительной компиляции будет заброшен.
Поэтому у меня несколько вопросов:
Есть ли у вас ориентировочная дата отказа (если это так) от предварительной компиляции ассетов старым способом?
Есть ли способ получить доступ к механизму os иным образом или рассмотреть другой подход, чтобы контейнеризованные решения с произвольными идентификаторами пользователей всё ещё могли работать?
Большое спасибо за внимание к этому вопросу, очень ценим.
Мы удалим EMBER_CLI_PROD_ASSETS в ближайшие несколько недель.
Мы не используем это напрямую, а лишь через зависимость, зависимость от зависимости, зависимость от зависимости… Думаю, это тоже странное решение, но мы не имеем здесь большого контроля.
Да, понял после сообщения выше. Если команда не предпримет каких-либо специальных действий или проверок для разрешения этого, эра использования случайных идентификаторов пользователей, на мой взгляд, закончилась.
Да, именно так. Мы постепенно внедряли этот новый конвейер ресурсов в течение нескольких лет, чтобы следовать рекомендациям проекта EmberJS и не быть «белыми воронами». Мы уже находимся в финальной фазе развертывания.
Только для информации, и на случай, если это кому-нибудь пригодится. Существует по крайней мере один способ заставить ember-cli работать как ожидалось с произвольным uid: нужно убедиться, что у назначенного случайного uid есть запись в /etc/passwd на момент выполнения операции rake assets:precompile.
Что-то вроде:
if [ `id -u` -ge 10000 ]; then
cat /etc/passwd | sed -e "s/^discourse:/builder:/" > /tmp/passwd
echo "discourse:x:`id -u`:`id -g`:,,,:/home/discourse:/bin/bash" >> /tmp/passwd
cat /tmp/passwd > /etc/passwd
rm /tmp/passwd
fi
yarn run v1.22.17
$ /discourse/app/assets/javascripts/node_modules/.bin/ember build -prod
WARNING: Node v16.13.2 is not tested against Ember CLI on your platform. We recommend that you use the most-recent "Active LTS" version of Node.js. See https://git.io/v7S5n for details.
DEPRECATION: The integration of jQuery into Ember has been deprecated and will be removed with Ember 4.0. You can either opt-out of using jQuery, or install the `@ember/jquery` addon to provide the jQuery integration. Please consult the deprecation guide for further details: https://emberjs.com/deprecations/v3.x#toc_jquery-apis
- Building
Environment: production
- Building
- building...
[WARN] (broccoli-terser-sourcemap) Minifying "assets/chunk.529.6ee9018498e97f872147.js" took: 24288ms (more than 20,000ms)
...
Я также заметил, что эта операция довольно затратна: для предкомпиляции требуется почти 2 ГБ оперативной памяти