概括
固定软件包版本曾经可以工作,但是一段时间后就停止工作了。
我已经固定了软件包的版本,以便拥有稳定的 CI/CD 和可重现的构建。但这些固定的版本可能随时都无法安装。胡说!
重现步骤
- 固定软件包版本。全部有效。
FROM python:3.10-slim-bullseye
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends --no-upgrade \
gcc=4:10.2.1-1 \
g++=4:10.2.1-1 \
git=1:2.30.2-1 \
curl=7.74.0-1.3+deb11u2 \
&& apt-get -y autoremove && apt-get clean && rm -rf /var/lib/apt/lists/*
- 等待一段时间(一周或一个月等)
该代码曾经可以运行,但一个月后出现错误:
#10 2.873 The following packages have unmet dependencies:
#10 2.939 curl : Depends: libcurl4 (= 7.74.0-1.3+deb11u2) but 7.74.0-1.3+deb11u3 is to be installed
#10 2.949 E: Unable to correct problems, you have held broken packages.
到底是怎么回事?
Debian 删除了一些软件包版本?
我是否以错误的方式表达了我的要求?
我已经通过编写修复了我的构建curl=7.74.0-1.3+deb11u3
,但我仍然不明白为什么我不能永远固定软件包的版本以获得可重现的构建。
答案1
我在尝试构建带有固定依赖项的 docker 镜像时也遇到了这个问题。我最终固定了版本,但忽略了 deb 版本:
RUN apt-get update -y && apt-get install --no-install-recommends -y curl=7.74.0-1.3* libcurl4=7.74.0-1.3*
您可能还会忽略次要版本之后的所有内容,如下所示:
RUN apt-get update -y && apt-get install --no-install-recommends -y curl=7.74.0* libcurl4=7.74.0*