运行 rpm -qa 时,如何区分基本软件包和其余软件包?

运行 rpm -qa 时,如何区分基本软件包和其余软件包?

我编写了一个脚本,它与其他任务一起连接到远程服务器并提取所有已安装软件包的列表并安装它们,如下所示:

echo -e "\e[36m#===# Getting list of packages to install #===#\e[0m"
$ssh root@$srv 'rpm -qa --queryformat "%{NAME}\n" >/tmp/sw.lst'
$scp root@$srv:/tmp/sw.lst /tmp/
np=`cat /tmp/sw.lst |wc -l`
echo -e "\e[36m#===# $np Packages are going to be installed! #===#\e[0m"
/usr/bin/xargs yum -y install < /tmp/sw.lst

我的问题是,当它运行列表时,它会跳过默认安装附带的许多软件包,而我想节省时间,这可能吗?

答案1

我会简单地做一个

ssh root@$srv 'rpm -qa' | xargs yum -y install

然后去喝杯咖啡或做点别的事,因为要找到一个解决方案

  1. 更快
  2. 考虑每台机器的单独包装进行工作

您仍然需要做一些事情,例如比较两台机器rpm -qa并对其进行排序,comm按照 SvW 建议的方式运行技巧,最后使用该列表进行 yum 安装...

为什么不让 yum 来解决这个问题呢?

或者更好的是,为什么不让所有盒子都连接到一个冻结的 repo,然后启动新的安装(使用 cobbler/foreman/spacewalk/what-have-you)?然后,您将从一开始就知道安装的每个软件包,并且每个系统看起来都一样(或足够相似)?为了保持系统同步,我会使用 puppet 并指定应该在那里安装的软件包列表……——那么这种情况就不会出现;因为你想用这个来节省时间,我想你经常这样做……

答案2

我不知道如何检测这个包是否在操作系统安装期间安装,并且这个列表可能会根据您在安装期间选择的选项而有所不同。

解决方法:

  • 为基础安装创建类似的列表。
  • 确保两个列表都已排序(man sort
  • 用于comm仅显示不在两个文件中的行

    comm prodinstall.txt  baseinstall.txt -2 -3 > install.txt
    
  • install.txt现在将仅包含基础安装中没有的软件包。

相关内容