我在Redhat Enterprise 7.0实例上安装了以下2个软件包
bind-license-9.9.4-14.el7_0.1.noarch
bind-libs-lite-9.9.4-14.el7_0.1.x86_64
" repoquery -i"命令告诉我这些包的源rpm是bind。
repoquery -i bind-license-9.9.4-14.el7_0.1.noarch
Name : bind-license
Version : 9.9.4
Release : 14.el7_0.1
Architecture: noarch
Size : 26019
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Group : Applications/System
URL : http://www.isc.org/products/BIND/
Repository : rhel-7-server-rpms
Summary : License of the BIND DNS suite
Source : **bind-9.9.4-14.el7_0.1.src.rpm**
Description :
Contains license of the BIND DNS suite.
同样,如果我使用yum下载器下载上述2个包的源rpms,则会下载绑定源rpm( bind-9.9.4-14.el7_0.1.src.rpm )。
但是,如果我们尝试更新绑定,这就是我得到的
yum update bind
Loaded plugins: product-id, subscription-manager
Package(s) bind available, but not installed.
**No packages marked for update**
我的问题是为什么 repoquery 和 yumdownloader 报告 bind-9.9.4-14.el7_0.1.src.rpm 作为源转速。如果bind是正确的源rpm,那么为什么&#34; yum update bind&#34;说系统上没有安装绑定?
答案 0 :(得分:0)
source-RPM从相同的源构建多个包。 spec-file有这些指令(带有插入内容),声明要构建的包(除了默认的bind
包):
%package pkcs11
%package sdb
%package libs-lite
%package libs
%package license
%package utils
%package devel
%package lite-devel
%package chroot
%package sdb-chroot
也就是说,“bind-”为生成的包中的%package
指令中使用的每个相应名称添加前缀。
规范文件也有条件逻辑,可以通过脚本打开;例如,bind-sdb-chroot
包使用SDB
符号位于条件块内。在spec文件中,驱动该逻辑的符号位于标题中:
%{?!SDB: %global SDB 1}
%{?!test: %global test 0}
%{?!bind_uid: %global bind_uid 25}
%{?!bind_gid: %global bind_gid 25}
%{?!GSSTSIG: %global GSSTSIG 1}
%if 0%{?rhel}
%{?!PKCS11: %global PKCS11 0}
%else
%{?!PKCS11: %global PKCS11 1}
%endif
%{?!DEVEL: %global DEVEL 1}
%global bind_dir /var/named
%global chroot_prefix %{bind_dir}/chroot
%if %{SDB}
%global chroot_sdb_prefix %{bind_dir}/chroot_sdb
%endif
因此,如果您要下载source-RPM并构建它,您可以获得部分或全部软件包,具体取决于您提供的命令行选项。
答案 1 :(得分:0)
我的问题是为什么repoquery和yumdownloader报告bind-9.9.4-14.el7_0.1.src.rpm作为源rpm。如果bind是正确的源rpm,那么为什么“yum update bind”说系统上没有安装bind?
混淆是因为.src.rom软件包永远不会安装在系统上。只有二进制.i686.rom或.x86_64.rpm包。正如其他人所说,一个源RPM可以构建多个不同名称的二进制包。