在 Debian/Ubuntu 上编写脚本安装虚拟包提供程序

在 Debian/Ubuntu 上编写脚本安装虚拟包提供程序

首先,获取提供特定虚拟包的(真实)包列表的最简单方法是什么?“aptitude show”似乎将其包含在虚拟包的输出中,但“apt-cache show”则不包含。但是,aptitude 并非始终安装,并且由于本地化,在脚本中 grep 查找“Provided by:”会很麻烦。

# aptitude show java-sdk
No current or candidate version found for java-sdk
Package: java-sdk
State: not a real package
Provided by: default-jdk, gcj-4.4-jdk, gcj-4.5-jdk, gcj-jdk, openjdk-6-jdk, sun-java6-jdk

# apt-cache show java-sdk
N: Can't select versions from package 'java-sdk' as it is purely virtual
N: No packages found

其次,是否有任何合理的方法对提供商进行排名,以便我可能选择最新的或“最受欢迎”的提供商?在“java-sdk”的情况下,脚本显然应该首先使用“default-jdk”;但是,如果有人没有想到要创建它,我可以想象按优先级、组件/部分和版本的组合进行排序。(显然,这主要对提供标准 API 的虚拟包有用;自动为“邮件阅读器”选择提供商是愚蠢的。)

具体来说,我正在尝试使用 Chef 自动安装 Cloudera Hadoop。'hadoop' 是一个虚拟包,其对应的真实包当前是 'hadoop-0.20':

# aptitude show hadoop
No current or candidate version found for hadoop
Package: hadoop
State: not a real package
Provided by: hadoop-0.20

当有多个提供程序(例如 hadoop-0.22)时,如果存在“hadoop-X.YY”,我基本上想自动选择最新版本。(或者更好的是,以某种方式从 apt 获取每个版本的版本,而不是尝试解析名称。)我知道我可以通过一些脚本来实现这一点,但如果已经存在更优雅的方式,我也不会感到惊讶。

更新:'apt-cache showpkg' 包含“反向提供”,其中似乎还包含完整的版本信息。这很有帮助,但您知道如何只获取此部分吗?

# apt-cache showpkg hadoop
Package: hadoop
Versions:

Reverse Depends:
  sqoop,hadoop
  hadoop-pig,hadoop
  hadoop-hive,hadoop
Dependencies:
Provides:
Reverse Provides:
hadoop-0.20 0.20.2+923.21-1~maverick-cdh3

答案1

如果您安装了 grep-dctrl 包,则可以使用 grep-available:

grep-available -F Provides -s Package <virtual-package-name>

我的 debian sources.list 中没有可用的 hadoop 包,因此我将使用 mail-transport-agent 作为示例:

$ grep-available -F Provides -s Package  mail-transport-agent
Package: xmail
Package: exim4-daemon-light
Package: exim4-daemon-heavy
Package: esmtp-run
Package: postfix
[...most deleted...]

如果你也想要版本号:

$ grep-available -F Provides -s Package,Version  mail-transport-agent
Package: xmail
Version: 1.27-1.1+b1

Package: exim4-daemon-light
Version: 4.76-2

Package: exim4-daemon-heavy
Version: 4.76-2

Package: esmtp-run
Version: 1.2-6
[...]

请注意第二个示例中每个包的方便且易于解析的段落模式。

还有许多其他选项,包括省略字段名称(“Package:”、“Version:”等)。有关更多详细信息,请参阅手册页或 --help。

答案2

您的“最优先”软件包由 处理alternatives。该命令update-alternatives可以为您提供有关备选软件包及其优先级的信息。

update-alternatives --query editor将以机器可解析的格式显示所有编辑器条目及其优先级。

还有一个名为的实用程序whiff,它接受输入并返回第一个可用的条目。

相关内容