通过dockerfile创建镜像后,构建时出现wget错误

背景

操作历程:
1、使用2503 dockerfile初始化后的环境
2、发布环境为镜像
3、使用发布后的环境实例化为容器
4、更新bingo版本
5、执行构建
版本信息:

问题现象

构建命令:

rm -rf /root/.conan/data/* && rm -rf temp/ && rm -rf output/ && LOG=DEBUG bingo build -b openUBMC -r openubmc_dev

构建提示出错:

开始下载 flatbuffers ...
>>  wget --no-check-certificate https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz
ERROR: 执行命令  /usr/bin/wget --no-check-certificate https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz 错误, 日志: /home/workspace/openubmc_0403/manifest/temp/log/task.log
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/frame.py", line 274, in run
    ret = self._run()
          ^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/frame.py", line 316, in _run
    ret = work_x.run()
          ^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task_install_flatbuffers.py", line 39, in run
    self.run_command(f"wget --no-check-certificate {flatbuffers_url}")
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task.py", line 257, in run_command
    return self.tools.run_command(command, ignore_error, sudo, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/utils/tools.py", line 665, in run_command
    raise e
  File "/usr/local/lib/python3.12/dist-packages/bmcgo/utils/tools.py", line 655, in run_command
    ret = subprocess.run(command, stdout=log_fd, stderr=log_fd, check=check, timeout=timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/usr/bin/wget', '--no-check-certificate', 'https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz']' returned non-zero exit status 4.

ERROR: Command '['/usr/bin/wget', '--no-check-certificate', 'https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz']' returned non-zero exit status 4.

初步分析

具体出错的命令是:

wget --no-check-certificate https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz

手动执行出错:

wget --no-check-certificate https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz
--2025-04-16 06:29:09--  https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz
Resolving cmc-hgh-artifactory.cmc.tools.huawei.com (cmc-hgh-artifactory.cmc.tools.huawei.com)... failed: Name or service not known.
wget: unable to resolve host address 'cmc-hgh-artifactory.cmc.tools.huawei.com'

在宿主机执行也出错:

诉求

想确认下是华为源的问题还是我这边网络问题

2 个赞

感觉问题出在了你把~/.conan/data/*清空了
docker镜像构建的有一步骤就是把对应的conan依赖安装好了

可以试试重新使用镜像拉起一个新容器,然后只跑bingo build -b openUBMC -r openubmc_dev作为对比

从错误来看,像是域名解析的问题,你能在你的环境发一下试试么

这个地址是内部地址,外部应该无法访问的

我现在重新从dockerfile 创建镜像,就卡到:
bingo build -t install_sdk -b openUBMC -ucc

其中执行到 wget --no-check-certificate https://cmc-hgh-artifactory.cmc.tools.huawei.com/artifactory/opensource_general/flatbuffers/2.0.0/package/flatbuffers-2.0.0.tar.gz

就报错了,报错如上表述

如果访问了不应该的内部地址,会不会是0.5.317版本bingo的问题

在文件tasks/task_install_flatbuffers.py中写死了flatbuffers的下载地址:
image

改掉 文件tasks/task_install_flatbuffers.py的下载地址后,能正常进行后续构建了:

wget https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz -O flatbuffers-2.0.0.tar.gz

方法以供参考

2 个赞

临时方案二:可以执行以下脚本手动安装flatbuffer到环境中。

apt autoremove -y flatbuffers-compiler
mkdir flatbuffers
cd flatbuffers

wget https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz -O flatbuffers-2.0.0.tar.gz
tar -zxf flatbuffers-2.0.0.tar.gz
mkdir flatbuffers-2.0.0/build
cd flatbuffers-2.0.0/build
sudo cmake ..
sudo make -j8 install

后续方案: 安装放到dockerfile里

2 个赞

后续通过issue跟踪

使用 main 分支的 manifest,通过 bmcgo 进行定向开放包时出现了该问题,但在使用 bingo 执行时未复现。
wget https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz -O flatbuffers-2.0.0.tar.gz
后,放到本地apache2上。

vim /usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task_install_flatbuffers.py

代码中 flatbuffers_url 变量的内容是:

flatbuffers_url = 'wget http://192.168.13.112/flatbuffers-2.0.0.tar.gz'

实际执行命令变成了:

wget --no-check-certificate wget http://192.168.13.112/flatbuffers-2.0.0.tar.gz

多了一个 wget,导致命令执行失败。

现在改成:

flatbuffers_url = 'http://192.168.13.112/flatbuffers-2.0.0.tar.gz'

即可正常运行。

flatbuffers 工具为bmc_sdk中的部分组件依赖的编译工具,这部分组件已经编译为二进制,不需要再次编译,同时社区的开源组件当前也不依赖该工具(bingo无依赖)。可以使用以来规避措施解决:

vim /usr/local/lib/python3.12/dist-packages/bmcgo/tasks/task_install_flatbuffers.py

flatc is not None 改成True