为特定 ubuntu 版本安装特定版本的 apt 包

Install specific version of apt package for specific ubuntu version

我想在 docker 容器中安装包 foo 版本 1234。我更喜欢这个而不是最新版本,因为它总是以同样的方式工作。

所以我的 Dockerfile 有这个:

RUN apt-get update && apt-get install -y foo=1234

但基本图像是 mongodb:4.0.2,它在 Ubuntu xenial 上分层。

当我构建镜像时,apt 安装失败,因为它找不到那个版本。我认为 xenial 不支持那个版本。

那么如何在 xenial 上找到软件包 foo 的最新支持版本?如果我 运行 apt policy foo 它会显示我正在使用的 ubuntu 的最新版本(仿生),而不是 xenial。

如果涉及的包裹是 rlwrap,您可以查看网页 https://packages.ubuntu.com/xenial/rlwrap

但是如果你想以正确的方式以编程方式获取此版本信息,你可以依赖 Launchpad API, which comes with an official API client implemented as a Python library

否则,您可以直接使用curljq等工具查询API(解析检索到的JSON数据):

$ curl -fsSL "https://api.launchpad.net/1.0/ubuntu/+archive/primary?ws.op=getPublishedSources&source_name=rlwrap&exact_match=true&distro_series=https://api.launchpad.net/1.0/ubuntu/xenial" \
  | jq --raw-output ".entries | .[0] | .source_package_version"

→ 0.41-1build1

如本 Askubuntu question 中所述,Debian 也存在类似的 API。