如何获取伪包的真实包名称和版本?

如何获取伪包的真实包名称和版本?

如果我运行,如何获取将安装的真实完整软件包名称(包括版本)apt-get install pseudo-package-name

这与上一个问题相关:从 lts 包中获取内核版本?

例子:

apt-get install linux-image-generic-lts-trusty

将安装(就目前而言,在我的 32 位 Trusty 服务器上):

linux-image-3.13.0-35-generic

我尝试了以下方法,但都没有给我答案。我正在尝试编写脚本,以便我可以抓取 linux-headers。

$ sudo apt-get install -qqs linux-image-generic-lts-trusty
Inst linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
Conf linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
$ apt-cache depends linux-image-generic-lts-trusty
linux-image-generic-lts-trusty
  Depends: linux-image-generic
$ apt-cache depends linux-image-generic
linux-image-generic
  Depends: linux-image-3.13.0-35-generic
  Depends: linux-image-extra-3.13.0-35-generic
  Depends: linux-firmware
$ apt-cache policy linux-image-generic-lts-trusty
linux-image-generic-lts-trusty:
  Installed: (none)
  Candidate: 3.13.0.35.42
  Version table:
     3.13.0.35.42 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages
     3.13.0.24.28 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages

在对 /var/lib/{apt,dpkg} 进行了一些探索之后,我发现这个问题没有通用的、可编写脚本的答案。因此,类似于下面 @mchid 和 @muru 的答案,我这样做了:

#!/bin/bash

metapackage=linux-image-generic-lts-trusty
linux_package_version=$(apt-cache policy $metapackage |\
    sed -nE '/Candidate:/ s,[^[:digit:]]*([[:digit:]\.]+)\.([[:digit:]]+)\.[[:digit:]]+,\1-\2,p')

apt-get download linux-headers-${linux_package_version}-generic linux-headers-${linux_package_version})

答案1

首先,您必须准确显示元包提供的包:

例子:

apt-cache show linux-image-generic-lts-trusty | grep Depends:

输出:

Depends: linux-image-generic
Depends: linux-image-generic

现在,如果您输入元包的特定包,您将得到准确的结果:

apt-cache show linux-image-generic | grep Depends:

输出:

Depends: linux-image-3.13.0-35-generic, linux-image-extra-3.13.0-35-generic, linux-firmware
Depends: linux-image-3.13.0-24-generic, linux-image-extra-3.13.0-24-generic, linux-firmware

除非另有规定,否则始终会安装最新版本,如下例所示:

sudo apt-get install linux-image-3.13.0-24-generic

或者,如果您只想要版本,您可以输入以下命令或其变体:

apt-cache show linux-image-generic-lts-trusty | grep Version:

输出:

Version: 3.13.0.35.42
Version: 3.13.0.24.28

答案2

问题在于依赖性:

linux-image-generic-lts-trusty
└── linux-image-generic
    └── linux-image-3.13.0-35-generic

因此,您可能无法直接获得将要安装哪个软件包的信息。您需要使用类似apt-rdepends

答案3

一般情况下您不能这样做。有些软件包(例如“email-client”)不提供可以跟踪和解析的依赖链。

相关内容