如果你需要修改某些软件的源码,这个软件恰好在源里有rpm.src包,但手动编译安装源码过程的众多依赖会让人头皮发麻,这个时候跟随src.rpm上到源里的spec文件就可以完美的解决这个问题
要想使用rpmbuild需要yum install rpm-build
一、src.rpm包与rpm包
a.xxx.src.rpm
这是包含a源码的rpm包,换句话说,就是还没有编译成二进制的原始代码。它只是以rpm包的方式存在。
a.xxx.rpm
这是已经经过编译、包装完成的 rpm 文件。就是可以直接安装到你的系统中运行的目标文件。我们使用file命令来看一下这个包的类型。
那他们有什么关联呢?
src.rpm包可以经过编译,生成rpm包。并且它们是一对一或者一对多的关系。换句话说,就是一个src.rpm包可以编译出一个rpm包,或者一个src.rpm包可以编译出多个rpm包。
比如git-2.9.5-3.fc25.src.rpm ,就编译出来下面6个包:
git-2.9.5-3.fc25.i686.rpm
git-core-2.9.5-3.fc25.i686.rpm
git-core-doc-2.9.5-3.fc25.i686.rpm
git-daemon-2.9.5-3.fc25.i686.rpm
git-debuginfo-2.9.5-3.fc25.i686.rpm
git-svn-2.9.5-3.fc25.i686.rpm
二、src.rpm源码包的使用
方法一:
rpm -ivh ceph-14.2.22-2.1.lns8.src.rpm
ls /root/rpmbuild/SOURCES
ls /root/rpmbuild/SPECS
该方法会在root目录下生产rpmbuild目录,里面有SOURCE和SPEC两个目录,其中ceph源码就在SORCE/目录下。spec文件放在 SPEC下
重复使用方法一解压会覆盖上一次的rpmbuild目录。
方法二:
rpm2cpio kernel-3.10.0-957.1.3.el7.src.rpm | cpio -div
该方法是把方法一中的两个目录中内容放在了一起,并且统一放到了当前解压目录中。
三、使用rpmbuild编译安装源码
默认情况下 rpmbuild -ba ceph.spec即可自动编译
将rpmbuild提示所需的依赖安装完毕后即可
但是有时候会出现根目录下空间不足以满足编译需求,这时候就可以设置rpmbuild文件到/home下
注意 不要使用以下命令为 rpm 创建安装树:
rpmdev-setuptree
使用下面给出的命令在要构建 rpm 的位置创建 rpm 树:
我在/home目录下执行
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
现在,将文件夹中的适当文件复制为 specs 和 tar.gz 并在 rpmbuild 目录中运行以下命令:
/root/rpmbuild/SPECS/ceph.spec /root/rpmbuild/SOURCES/*文件复制到新建的目录下
sudo rpmbuild --define "_topdir `pwd`" -v -ba SPECS/{*spec_file.specs*}
四、个人编译记录
编译安装ceph版本14.2.22 rpmbuild -ba ceph.spec 提示所需依赖
CUnit-devel cmake expat-devel fuse-devel gcc-c++ gmock-devel gperf gperftools-devel gtest-devel java-devel junit keyutils-libs-devel leveldb-devel libaio-devel libbabeltrace-devel libcap-ng-devel libcurl-devel libnl3-devel liboath-devel librabbitmq-devel librdkafka-devel libudev-devel libxml2-devel lttng-ust-devel lz4-devel ncurses-devel nss-devel openldap-devel openssl-devel perl python3-Cython python3-devel python3-sphinx redhat-lsb-core selinux-policy-devel sharutils snappy-devel xfsprogs-devel xmlstarlet yasm
yum install -y 上面所有的依赖 --skip-broken 跳过不能安装的
某些依赖需要使能 vim /etc/yum.repos.d/Loongnix-PowerTools.repo 将enable改为1
nss需要3.53.1版本 yum --showduplicates search nss-devel
将对应的包复制下来 yum install即可
再执行rpmbuild -ba ceph.spec即可,/root空间不足 ,使用三中的方法 将rpmbuild改到/home下