You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline Ubuntu容器构建Debian包依赖未满足问题求解

解决Azure Pipeline Ubuntu 20.04容器中Debian包构建的依赖安装问题

问题背景

我在Azure Pipeline的Ubuntu 20.04容器中构建Debian包,使用的YAML配置如下:

trigger:
- master

pool: 'AWSLinux'

container: 
  image: ubuntu:20.04
  options: "--name sample -v /usr/bin/docker:/tmp/docker:ro"
  
steps:
- checkout: self
  lfs: true
  path: HVD
  clean: true

- script: |  #scipt 1 for install SUDO SVN dpkg-dev
    /tmp/docker exec -t -u root sample mv /etc/sudoers /etc/sudoers.bak
    /tmp/docker exec -t -u root sample apt-get -qq update
    /tmp/docker exec -t -u root sample apt-get -qq install sudo
    /tmp/docker exec -t -u root sample apt-get -qq install subversion
    /tmp/docker exec -t -u root sample apt-get -qq install dpkg-dev
    /tmp/docker exec -t -u root sample mv /etc/sudoers.bak /etc/sudoers

- script: |  # Script2

    cd HVD/Sources/Proprietary/hvd-client/
  
    echo ------Update and install packages------
    sudo apt update -y
    sudo apt upgrade -y
    sudo DEBIAN_FRONTEND=noninteractive apt install -y build-essential devscripts equivs git git-lfs

    echo ------Initialize build environment------
    sudo ./init-dev-hvd

    echo ------Build HVD------
    ./build.tp

    echo ------Build finshed------

执行./build.tp时出现依赖未满足错误:

dpkg-checkbuilddeps: error: Unmet build dependencies: lbzip2 cmake qt5-default libssl-dev libpcsclite-dev libpng-dev libpulse-dev libxrandr-dev libxkbfile-dev libxcursor-dev libxt-dev chrpath python3-pip python3-venv libpython3-dev libxcb-xinerama0 libfreetype6-dev libxft-dev libqt5x11extras5-dev libxinerama-dev libudev-dev upx wmctrl libxmu-headers libxmu-dev libglib2.0-dev freerdp2-dev liblz4-tool cython3 clang-tidy-11 libuvc-dev libcups2-dev qtmultimedia5-dev qtpositioning5-dev libxext-dev libxcomposite-dev libxdamage-dev libxfixes-dev libxtst-dev libavcodec-dev libavutil-dev libicu-dev libgbm-dev libdrm-dev libjson-c-dev libopencv-dev libcurl4-openssl-dev

排查发现问题出在init-dev-hvd脚本的mk-build-deps命令执行失败:

  • 原脚本带sudo时报错:root is not in the sudoers file. This incident will be reported.
  • 去掉sudo后,命令卡在交互确认环节:
0 upgraded, 505 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 275 MB of archives.
After this operation, 1625 MB of additional disk space will be used.
Do you want to continue? [Y/n]  //stuck here

解决方案

1. 修正init-dev-hvd脚本,实现非交互式依赖安装

修改init-dev-hvd脚本,给mk-build-deps添加--yes参数自动确认安装,同时配置环境变量避免交互:

sudo DEBIAN_FRONTEND=noninteractive mk-build-deps --install --yes src/debian/control

echo "Setup complete!"

2. 调整容器内sudo权限配置

如果仍出现sudo权限问题,修改Script1的最后一步,确保执行Script2的用户拥有无密码sudo权限:

# 替换原来的 mv /etc/sudoers.bak /etc/sudoers
/tmp/docker exec -t -u root sample bash -c 'echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'

注:若不确定容器内执行用户,可临时用ALL(仅适用于CI测试环境,不推荐生产环境):

/tmp/docker exec -t -u root sample bash -c 'echo "ALL ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'

3. 直接以root身份执行初始化脚本

如果不想修改init-dev-hvd,可在Script2中通过docker exec直接以root身份运行该脚本:

echo ------Initialize build environment------
/tmp/docker exec -t -u root sample bash -c "cd HVD/Sources/Proprietary/hvd-client && ./init-dev-hvd"

同时修改init-dev-hvd去掉sudo并添加非交互式参数:

DEBIAN_FRONTEND=noninteractive mk-build-deps --install --yes src/debian/control

echo "Setup complete!"

验证

修改后重新运行Pipeline,mk-build-deps会自动完成所有依赖安装,不再卡在交互环节,后续./build.tp可正常执行。

内容的提问来源于stack exchange,提问作者Ming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:27:23