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
相关产品推荐
相关产品推荐

