我想要做的是与本地存储库/目录的USB磁盘离线安装(或升级)的Linux服务器。 为什么! 简单的说,我正在维护大量的星号IP PBX-es,星号(和dahdi,…)是针对内核源码构build的,如果内核版本发生变化(与我习惯的build立),那么这是一场等待发生的灾难。 现在,我的想法是将安装在一台服务器(开发)上的所有rpm / srpm放在一起,并将所有其他服务器安装/升级到相同版本的rpm。 简单的方法是强制YUM下载所有已安装的rpm到某个目录,然后将它们复制到usb-flash_disk并在所有其他服务器上执行“yum install ./*.rpm”! 那么我有所有的系统在同一修订!
问题是:如何告诉YUM(仅)下载所有安装的rpm?
有2个选项
使用rpm(红帽软件包pipe理器)或yum(Yellowdog更新器/修改器)
1)RPM
rpm -qa > to_be_installed; while read -r package; do yum -y install "$package"; done < to_be_installed
2)YUM
yum list installed | awk '{print $1}' > to_be_installed; while read -r line; do yum -y install "$line"; done < to_be_installed
希望这给你一些想法如何做到这一点。
你可以得到安装了yum list installed安装软件包的yum list installed ,你可能想要把它清理一下
yum list installed | awk 'NR >2 {print $1}' >installed.pkg
一旦你有了列表,你可以使用yumdownloader工具来下载软件包
for file in $(cat installed.pkg) do yumdownloader "$file" done
这会将所有的rpms下载到当前目录。
我相信上面的两个答案会产生不同的结果:
案例A)[如上所示]
rpm -qa > to_be_installed; while read -r package; do yum -y install "$package"; done < to_be_installed
案例B)[如上所示]
yum list installed | awk '{print $1}' > to_be_installed; while read -r line; do yum -y install "$line"; done < to_be_installed
在情况A)rpm -qa将返回“完整的”rpm名称,包括版本信息。
在情况B)中,包名称(带有体系结构后缀)在第一列中,第二列中的版本在第一列中。
所以,在情况A)你会得到所有当前安装的RPM下载。
在情况B)中,您将获得所有最新版本的软件包(供您发布)下载。
试图离线升级工作的另一个主要问题是切换 – parsingyumdownloader不能正常工作(它不能解决所有的依赖关系)。
我正在使用的程序是:
实际使用yum进行升级的行为有两点
我)得到所有版本的我的rpms更新
ii)解决所有的软件包依赖关系
然后
yumdownloader rpm -qa –destdir = / path / rpm_updates
我无法从目录/path/rpm_updates创build一个本地文件基于repo,将其放在USB上,并从rpms列表中升级一台机器(脱机)。