我有两台 CentOS 机器,一台 6.3 盒子(A),以及另一个 CentOS 6.1。 (乙)
6.3 盒子有互联网连接,6.1 盒子没有互联网连接。
我想下载 Box A 上产品的所有依赖项,然后复制这些 n Box B,并安装该产品。
我尝试过
yum --downloadonly --downloaddir=*~/downloadrepo* -y install *product*`
cd *~/downloadrepo*
createrepo .
然后我禁用了除我的存储库之外的所有存储库(使用 --disablerepo),并在同一台计算机上安装了产品(框 A)。没有错误。
yum install *product*
现在,当我将此存储库复制到 Box B 并尝试使用相同的命令安装时,它开始安装,但随后出现很多错误,如下所示:
错误:缺少依赖项:软件包 php-ldap-5.1.6-27.el5_5.3.x86_64 需要 libldap-2.3.so.0()(64bit)(已安装)
有什么办法可以实现我所需要的吗?
更新
当我开始使用 @rkosegi 建议的选项时(--releasever=版本),我得到了一个具有相同版本 CentOS 6.1 的新盒子(C)
我在 Box C 上尝试了上述命令,并将其复制到 Box B。仍然失败。原因是:虽然两个盒子都是 6.1,但它们并不相同(uname -r返回不同的字符串)。
如果已经安装了依赖项,则 Yum 不会下载这些依赖项。所以我的存储库不包含一些依赖项(包括 OpenJDK)。因此,当我尝试在 Box B 上安装时,它失败了。
相当令人沮丧!
但后来我发现命令'重新跟踪'这里。
cd ~/downloadrepo
repotrack -p . -a x86_64 product
createrepo .
我得到的文件比 yum 多得多,希望它能解决问题。
一旦我尝试安装,我就会更新。
更新
命令重新跟踪对我不起作用。当我尝试从使用“repotrack”创建的存储库安装时,出现以下错误:
Error: Package: perl-CGI-3.51-127.el6.x86_64 (repo-local)
Requires: perl = 4:5.10.1-127.el6
Installed: 4:perl-5.10.1-119.el6_1.1.x86_64 (@anaconda-CentOS-201112102333.x86_64/6.2)
perl = 4:5.10.1-119.el6_1.1
Error: Package: audit-libs-python-2.2-2.el6.x86_64 (repo-local)
Requires: audit-libs = 2.2-2.el6
Installed: audit-libs-2.1.3-3.el6.x86_64 (@anaconda-CentOS-201112102333.x86_64/6.2)
audit-libs = 2.1.3-3.el6
我尝试从文件夹中删除这两个文件,并使用“createrepo”重建存储库。它给出了另一组错误。
不确定我现在有什么选择......
答案1
如果您必须经常这样做,您可能需要花时间进行设置太空行走。它将自动创建存储库并使用适当的包(或者,如果您需要,全部)填充它。更不用说它所做的其他一切了...
答案2
yum --downloadonly --downloaddir=~/downloadrepo -y install product
您需要指示 yum 从与目标机器相同版本的存储库下载(6.1)
还需要确保将执行下载的机器(6.3)尚未安装目标机器(6.1)上缺少的一些依赖项
答案3
如果您无法获得“干净”的机器,您必须使用yum provides
或手动搜索丢失的部件
您必须检查存储库中已有的 rpm 并查询它们的依赖关系:
rpm -qp --requires RPM
。如果该列表中出现了尚未包含在您的存储库中的新内容,您必须添加它。