为特定 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。
否则,您可以直接使用curl
和jq
等工具查询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。
我想在 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。
否则,您可以直接使用curl
和jq
等工具查询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。