柯南从容器内部失败,出现“sudo:未找到”错误
Posted
技术标签:
【中文标题】柯南从容器内部失败,出现“sudo:未找到”错误【英文标题】:Conan fails from inside container with "sudo: not found" error 【发布时间】:2022-01-22 08:59:05 【问题描述】:我正在尝试从 Ubuntu 映像构建一个项目作为 CI 管道的一部分。
我已经粘贴了下面记录的最后几行:
Not updating system_requirements. CONAN_SYSREQUIRES_MODE=verify
Running: sudo -A apt-get install -y --no-install-recommends libfontenc-dev libice-dev libsm-dev libx11-xcb-dev libxaw7-dev libxcb-dri3-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xkb-data
/bin/sh: 1: sudo: not found
xorg/system: ERROR: while executing system_requirements(): Command 'sudo -A apt-get install -y --no-install-recommends libfontenc-dev libice-dev libsm-dev libx11-xcb-dev libxaw7-dev libxcb-dri3-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xkb-data' failed
ERROR: Error in system requirements
CMake Error at build/conan.cmake:631 (message):
Conan install failed='1'
Call Stack (most recent call first):
cmake/Conan.cmake:47 (conan_cmake_install)
CMakeLists.txt:42 (run_conan)
-- Configuring incomplete, errors occurred!
这是因为 thngs 已经以 root 用户身份运行了吗?如果是这样,有没有办法让柯南运行而不调用sudo
?
对于那些想要重现错误的人:
-
启动一个
ubuntu:20.10
docker 镜像
运行
$ apt update && apt install -y python3-pip pkg-config libudev-dev libgl-dev
-
安装柯南:
pip install conan
使用以下内容创建conanfile.txt
[requires]
sfml/2.5.1
-
运行
conan install path/to/conanfile.txt
观察上面粘贴的错误
【问题讨论】:
您使用的是哪个 Ubuntu?是 Docker 镜像吗?我强烈建议你使用官方的柯南 docker 图片:hub.docker.com/u/conanio @UlrichEckhardt conan 正在尝试在不需要的环境中使用 sudo(在只有 root 用户的 docker 映像中)。如果有办法告诉柯南不要使用 sudo,这个错误应该会消失。如果有帮助,我在上面添加了一个可重现的示例 【参考方案1】:当您在 conanfile 中指定 libA
作为依赖项时,它也会安装所有
libA
所需的依赖项。但是,柯南中的一些包(不多)也有
“系统要求”。系统要求只是包的另一个依赖项,但是
一个尚未打包为柯南包,而是通过您的
系统包管理器。您尝试安装的软件包至少有一个系统
要求。
当有系统需求时,柯南将需要管理员权限,因为它
将调用您的系统包管理器来安装该要求。在 Linux 的情况下,
该管理权限意味着使用sudo
。但是,您在 CI 中使用的图像
没有 sudo。
如果可以,只需使用包含 sudo 的其他图像,它应该可以工作。
您还可以查看您尝试使用的柯南包的配方。 包可以提供选项,您尝试使用的包可能有 一些选项,例如,不启用某些功能,因此不依赖于某些库。
要了解更多信息,您需要告知您要尝试使用哪个包 使用。
【讨论】:
我发现的另一个解决方案是简单地安装 sudo:apt install sudo
以上是关于柯南从容器内部失败,出现“sudo:未找到”错误的主要内容,如果未能解决你的问题,请参考以下文章
Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示