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



我想在 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,该API附带了一个作为Python库实现的官方API客户端。

否则,您可以使用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 问题中提到的,Debian 也存在类似的 API。

最新更新