与yum相比,rpm报告的已安装软件包的不同列表


8

我希望服务器B具有与服务器A完全相同的设置。服务器A和B具有相同的Arch和相同的硬件。

我的计划是在服务器A上拥有所有已安装物品的列表,并使用服务器B上的列表进行安装,例如:

yum -y install $(cat installed.txt)

在服务器A中,我应该使用:

rpm -qa > installed.txt

要么:

yum list installed > installed.txt  

列表似乎有所不同,我不知道为什么。

yum list installed有930条线而rpm -qa有895条线,可能有什么区别?


您是否diff编辑过输出(可能在排序后)?
Anthon 2014年

我不知道为什么yum和rpm输出之间会有区别。也许您应该尝试Anthon的建议,并让我们知道输出的内容。另外,对我来说,这两个命令列出的行数都是相同的,并且按照您的计划,我会选择使用rpmlist,因为它具有可以在服务器b的yum命令中使用的列表。
拉梅什2014年

我敢打赌:也是因为“ rpm --install package.rpm”安装了软件包
Massimo,

Answers:


4

有什么区别?

行数不同的主要原因是,yum格式化产生的输出,以便每个字段垂直排列(与软件包名称和/或版本号的长度无关)。它通过使用两行列出此类软件包并在第二行中填充空格字符来正确地排列字段来完成此操作。以下输出(来自CentOS 6框)显示了两行用于列出device-mapper-persistent-data.x86_64软件包:

device-mapper-libs.x86_64         1.02.95-3.el6_7.4    @clearos-verified-updates
device-mapper-persistent-data.x86_64
                                  0.3.2-1.el6          @clearos
dhclient.x86_64                   12:4.1.1-49.P1.v6    @clearos-verified-updates

但是,这不是唯一的原因,可以通过在比较两个命令之前对它们的输出进行按摩来看出:

对于rpm命令的输出:

  1. 对其进行排序,以使以大写字母开头的软件包出现在小写字母之前:

    rpm -qa | LC_ALL=C sort
    
  2. 使用sed命令删除软件包版本号:

    rpm -qa | LC_ALL=C sort r | sed 's/-[^-]*-[^-]*$//' >| installed.rpm
    

对于yum命令的输出:

  1. 删除前两个标题行(Loaded pluginsInstalled Packages):

    Loaded plugins: etckeeper, fastestmirror
    Installed Packages
    

    我们可以sed为此使用:

     yum list installed | sed '1,2d;'
    
  2. 我们还可以使用sed来删除所有与软件包清单相同的行(这些行以许多空格开头,以便所有软件包版本都对齐)。

    yum list installed | sed '1,2d;/^ /d;s/\..*//' >| installed.yum
    

现在,我们可以使用diff命令比较两个文件的输出。这是CentOS 6框的结果:

# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey

结论

这表明其中rpm -qa还包括公钥的软件包列表,这些公共密钥在yum命令忽略这些软件包时可用来对软件包进行签名。


前一段时间,但永远不会太晚了,非常感谢您的有益分析和结论!
约翰·史密斯

@johnSmith迟到总比不到好!:)我记得在这上面花了一些时间,但我认为这是一个有趣的问题。回答此类问题本身就是学习的一种好方法。
Anthony Geoghegan

6

安装的yum list有930行,而rpm -qa有895行,可能有什么区别?

这可能只是格式化差异。yum list将为您的终端大小做很多巧妙的包装。

您可能想要做的是使用:

# Run this on the master server
yum-debug-dump

# Run this on the new server, with the input from the above.
yum-debug-restore

感谢您的答复,在新服务器上安装yum-utils并运行“ yum-debug-restore master_out.gz”后,对于每个不可用的软件包都说,我是否缺少某些东西?
约翰·史密斯

如果它们不是相同的服务器(例如,不同的arch,或者新的具有较旧的软件包),则可以在还原时使用--ignore-arch和/或--install-latest选项。
詹姆斯·安提尔

我建议在运行yum-debug-restore之前将主/etc/yum.repos.d/*的内容复制到新服务器上
Sergey Vlasov

1

我不能完全确定为什么列表不同,但是我知道这rpm -qa > installed.txt是找到所有已安装软件包的正确方法。它将查找yum installed以及rpm installed

此外,rpm -qa输出格式将与yum install您要执行的命令配合使用。


0

yum list installed 给我的输出如下。

pam_krb5.i386                        2.2.14-22.el5                     installed

现在,rpm -qa下面有话要说。

pam_krb5-2.2.14-22.el5

这两个命令给我的行数与输出相同。我会rpm -qa列出。

此外,从这个答案,我看到下面的一条信息。

有一个名为“ rpm”的程序,它专门处理被要求处理的软件包,还有一个“ yum”,这是一个更智能的管理系统,即使不存在依赖关系,也可以找到依赖项并下载.rpm文件。系统。

因此,差异可能是yum解决了依赖性,但rpm已安装了所有依赖性,因此它提供了更完整的列表。

我看到yum和之间的实际区别rpm如下。

最突出的问题rpm是大多数人通常称为依赖地狱的状态。依赖于许多其他软件包的软件包会出现此问题,其中一些软件包也依赖于许多其他软件包。众所周知,必须安装所有依赖项才能使程序正常运行。rpm无法自动为您执行此操作。它只能在安装所需软件包之前检查是否已安装所有必需软件包。对于大多数只想最初安装单个软件包的人来说,手动跟踪和安装每个依赖项是一项繁重的工作。

yum能够跟踪软件包的依赖关系并在安装用户要安装的软件包之前安装它们。这简化了整个过程,因为您只需要知道要安装的软件包的名称,而不必担心是否已安装必需的软件包。在系统可用的存储库中搜索在系统上找不到的软件包。

参考文献

http://www.differencebetween.net/technology/difference-between-yum-and-rpm/


感谢您的答复,对我来说,安装的yum列表具有940行,而rpm -qa具有895行,您知道这可能有什么区别吗?
约翰·史密斯

@johnSmith,Yum处理依赖关系并获取软件包以填充它们。Yum有效地运行与相同的命令,rpm但还包括匹配依赖项所需的所有软件包。
拉梅什2014年

yum是管理软件包依赖关系的天赐之物,但是当它只是列出系统上安装的软件包时,这无关紧要。有关差异的原因,请参见詹姆斯和我的回答。
Anthony Geoghegan

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.