Как решить, что QT платформы работает во времени выполнения?

apt-get обычно нужно запускать с правами root, но после запуска команды USER команды больше не запускаются с правами root.

Вы будете часто запускать такие команды при запуске в Dockerfile: если вы хотите, вы можете воспользоваться преимуществами кэширования слоя Docker, и вы, как правило, будете устанавливать зависимости в остальной части Dockerfile необходимо. Также по причинам кэширования слоев важно запустить apt-get update и другие этапы установки за один шаг. Таким образом, ваш Dockerfile обычно будет выглядеть как

FROM ros:kinetic-robot-xenial
# Still root
RUN apt-get update \
 && apt-get install ...
# Copy in application (still as root, won't be writable by other users)
COPY ...
CMD ["..."]
# Now as the last step create a user and default to running as it
RUN adduser ros
USER ros

Если вам нужно, вы можете явно USER root переключиться обратно на root для последующих команд, но обычно легче читать и поддерживать Dockerfile с меньшим количеством пользовательских переключений.

Также обратите внимание, что ни sudo, ни пользовательские пароли действительно бесполезны в Docker. В общем, сложно запустить sudo в сценарии, и в сценариях происходит много вещей, связанных с Docker. Контейнеры также почти никогда не запускают такие вещи, как getty или sshd, которые потенциально могут принимать пользовательские пароли, и их тривиально читать из docker history, поэтому нет смысла их устанавливать. И наоборот, если вы можете получить оболочку в контейнере, вы всегда можете передать -u root команде docker run или docker exec, чтобы получить корневую оболочку.

25
задан Georg Schölly 7 March 2013 в 08:13
поделиться

1 ответ

Обратите внимание, что макросы Q_WS_* определяются во время компиляции, но QSysInfo предоставляет подробную информацию некоторого времени выполнения.

Для расширения функции gs для получения определенной версии для Windows во времени выполнения можно сделать

#ifdef Q_WS_WIN
switch(QSysInfo::windowsVersion())
{
  case QSysInfo::WV_2000: return "Windows 2000";
  case QSysInfo::WV_XP: return "Windows XP";
  case QSysInfo::WV_VISTA: return "Windows Vista";
  default: return "Windows";
}
#endif

и подобный для Mac

26
ответ дан Reed Hedges 28 November 2019 в 17:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: