我正在尝试找到一种方法来解决我面临的问题。我在工作中有一个离线独立服务器。它没有连接到互联网,我们每个月都必须手动修补服务器。我们将要从另一台 Linux 服务器(相同操作系统)下载的内容的软件包转移到一个文件夹中。该文件夹有 50-100 个 rpm 软件包,我们将其转移到独立服务器的主文件夹中。
我们运行以下命令来更新独立服务器,以每月对其进行升级。
#cd November-os-updates
#yum clean all
#yum update *.rpm --disablerepo=*
什么脚本可以让我检查Novell-os-updates中的所有rpm包是否安装/升级成功?如果一切成功,它会说所有软件包都已成功安装!如果有软件包由于某种原因没有升级,它会显示类似:“(软件包名称)未安装!”。这将极大地帮助我确保我们正确地修补它。过去,曾出现过软件包未更新的情况,这导致了一个大问题。
答案1
从8.2.2.列出套餐的红帽部署指南:
yum list available
列出所有启用的存储库中的所有可用包
此外,8.2.3.显示包信息的同一个指南也很有用:
例如,要显示有关 abrt 包的信息,请键入:
yum info abrt ... Name : abrt Arch : x86_64 Version : 1.0.7 Release : 5.el6 Size : 578 k Repo : installed From repo : rhel ...
将November-os-updates
目录中的包与yum list available
.让我知道以下解决方案是否有效。
#!/bin/bash
# - [ change working directory ]
cd 'path-to'/November-os-updates
# - [ define variables ]
ALL_PKG=($(yum list available))
INSTLLD=($(ls ./*))
# - [ remove cache of enabled repos ]
yum clean all
# - [ update every currently installed package ]
yum update *.rpm --disablerepo=*
# - [ verify installed packages ]
for ((i=0; i <= "${#ALL_PKG[@]}"; i++)); do
for ((j=0; j <= "${#INSTLLD[@]}"; j++ )); do
## [1] - if installed, print [success]
if [[ "${INSTLLD[j]}" == "${ALL_PKG[i]}"'.rpm' ]]; then
echo "${INSTLLD[j]} - success"
## [2] - if not installed print [failure]
else
echo "${INSTLLD[j]} - failure"
## [3] - END
fi
done
done