# 通过yum-builddep安装所有从SRPM编译RPM包所依赖软件包

> 在没有知晓这个工具之前，编译一个rpm包的时候，非常痛苦 -- 通过一次次尝试，探索出编译某个软件所依赖的`xxx-devel`软件包，并一一手工安装 -- 效率及其低下。然而，终于发现了这个工具...

在`yum-utils`软件包中提供了一个`yum-builddep`工具，这个工具可以安装所有从SRPM编译RPM包所需要的依赖软件包：

```
yum-builddep <package name>
```

> 注意：这个`<package name>`对应的源代码RPM(SRPM)必须位于yum仓库或者本地源代码SRPM包。(请参考[从源代码ROM（SRPM）编译RPM包](https://github.com/huataihuang/cloud-atlas-draft/tree/6f3204fffc11cf006abd394631e2598d98b415c3/os/linux/redhat/package/rebuild_rpm_from_srpm/README.md))
>
> 不过，我测试的方法，似乎时在

## 安装举例

> 以下以编译`libvirt`软件包为例：

* 首先下载libvirt源代码RPM

```
yumdownloader --source libvirt
```

> 也遇到非常奇怪的报错

```
Loaded plugins: fastestmirror
No source RPM found for libvirt-0.8.2-29.el5_9.1.i386
No source RPM found for libvirt-0.8.2-29.el5_9.1.x86_64
```

只好手工下载srpm `wget http://vault.centos.org/5.11/os/Source/libvirt-0.8.2-29.el5_9.1.src.rpm`，效果是一样的

* 执行分析安装以来的编译软件

```
sudo yum-builddep libvirt-0.8.2-29.el5_9.1.src.rpm
```

系统将自动找到对应的依赖编译包

## 在CentOS 5上尝试安装CentOS 6的SRPM（失败）

* CentOS 5不能使用CentOS 6的SRPM包进行分析安装对应的依赖软件包

由于CentOS 6的软件包的打包签名方法改成了SHA1，和原有的CentOS 5签名使用的MD5不兼容，会出现如下报错

```
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 signature: NOKEY, key ID c105b9de
...
um.Errors.MiscError: Could not open local rpm file: libvirt-0.10.2-62.el6.src.rpm
```

则采用忽略

```
yum --nogpgcheck localinstall libvirt-0.10.2-62.el6.src.rpm
```

依然报错

```
Examining libvirt-0.10.2-62.el6.src.rpm: libvirt-0.10.2-62.el6.src
Cannot add package libvirt-0.10.2-62.el6.src.rpm to transaction. Not a compatible architecture: src
Nothing to do
```

尝试采用rpm安装

```
$ sudo rpm -ivh libvirt-0.10.2-62.el6.src.rpm 
warning: libvirt-0.10.2-62.el6.src.rpm: Header V3 RSA/SHA1 signature: NOKEY, key ID c105b9de
   1:libvirt                warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
########################################### [100%]
error: unpacking of archive failed on file /usr/src/redhat/SOURCES/libvirt-0.10.2.tar.gz;5a14f4ca: cpio: MD5 sum mismatch
```

由于显示MD5 sum mismatch，所以改为忽略MD5报错强制安装，不过依然没有成功

```
rpm -ivh --nomd5 libvirt-0.10.2-62.el6.src.rpm
```

## 参考

* [Installing yum build dependencies with yum-builddep](https://possiblelossofprecision.net/?p=949)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://huataihuang.gitbook.io/cloud-atlas-draft/os/linux/redhat/package/install_yum_build_dependencies_with_yum-builddep.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
