rpmbuild命令作用
rpmbuild 用于创建软件的二进制包和源代码包。一个"包"包括文件的归档以及用来安装和卸载归档中文件的元数据。元数据包括辅助脚本、文件属性、以及相关的描述性信息。
软件包有两种:
二进制包,用来封装已经编译好的二进制文件;
源代码包,用来封装源代码和要构建二进制包需要的信息。
rpmbuild命令使用
-ba 既生成src.rpm又生成二进制rpm
-bs 只生成src的rpm
-bb 只生成二进制的rpm
-bp 执行到pre,只作准备(解压与打补丁)
-bc 执行到build段
-bi 执行到install段
-bl 检测有文件没包含
rpmbuild工作目录
~/rpmbuild
~/rpmbuild/SOURCES #放置打包资源,包括源码打包文件和补丁文件等
~/rpmbuild/SPECS #放置SPEC文档,核心
~/rpmbuild/BUILD #打包过程中的工作目录
~/rpmbuild/RPMS #存放生成的二进制包
~/rpmbuild/RPMS/i386 #存放生成的i386结构包
~/rpmbuild/SRPMS #存放生成的源码包
编写.spec文件(重点)
有个rpmdev-newspec工具可以自动生成一个.spec 模板,然后我们再根据规则对模板进行简单修改即可。
Name:
Version:
Release: 1%{?dist}
Summary:
License:
URL:
Source0:
BuildRequires:
Requires:
%description
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
%make_install
%files
%doc
%changelog
简单的实验
直接下载x710网卡驱动的源码包,解压后获取.spec文件,直接进行rpm包的制作
1、准备工作
yum install rpm-build
yum install rpmdevtools
2、制作rpm包
[root@10-2-67-190 ~]# tar zxf i40e-2.7.11.tar.gz
[root@10-2-67-190 ~]# cd i40e-2.7.11
[root@10-2-67-190 i40e-2.7.11]# ls
COPYING i40e.7 i40e.spec pci.updates README scripts src SUMS
[root@10-2-67-190 i40e-2.7.11]# cd ..
[root@10-2-67-190 ~]# rpmbuild i40e.spec
error: failed to stat /root/i40e.spec: No such file or directory
[root@10-2-67-190 ~]# ls
byte-unixbench i40e-2.7.11.tar.gz netperf-2.7.0-1.el7.lux.x86_64.rpm tarball.tgz-hp
CentOS-6.9-x86_64-bin-DVD1.iso kernel-devel-3.10.0-514.el7.x86_64.rpm rpmbuild
i40e-2.7.11 MegaSAS.log storcli-1.16.06-1.noarch.rpm
[root@10-2-67-190 ~]# cp i40e-2.7.11.tar.gz rpmbuild/SOURCES/
[root@10-2-67-190 ~]# cp i40e-2.7.11/i40e.spec rpmbuild/SPECS/
[root@10-2-67-190 ~]# cd rpmbuild/SOURCES/
[root@10-2-67-190 SOURCES]# ls
i40e-2.7.11.tar.gz
[root@10-2-67-190 SOURCES]# cd ..
[root@10-2-67-190 rpmbuild]# cd SPECS
[root@10-2-67-190 SPECS]# ls
i40e.spec
[root@10-2-67-190 SPECS]# rpmbuild i40e.spec
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/i40e-2.7.11-1.x86_64
Wrote: /root/rpmbuild/SRPMS/i40e-2.7.11-1.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/i40e-2.7.11-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.fIjClK
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd i40e-2.7.11
+ rm -rf /root/rpmbuild/BUILDROOT/i40e-2.7.11-1.x86_64
+ exit 0 #表示成功
3、查看最终结果:
tree rpmbuild
rpmbuild/
├── BUILD
│ └── i40e-2.7.11
│ ├── COPYING
│ ├── file.list├── BUILDROOT
├── RPMS
│ └── x86_64
│ └── i40e-2.7.11-1.x86_64.rpm
├── SOURCES
│ └── i40e-2.7.11.tar.gz
├── SPECS
│ └── i40e.spec
└── SRPMS
└── i40e-2.7.11-1.src.rpm
验证测试
1、配置yum源
2、mkdir /data/Test
cd /data/Test
cp /root/rpmbuild/RPMS/x86_64/i40e-2.7.11-1.x86_64.rpm .
createrepo ./
[root@10-2-67-190 Test]# ls
i40e-2.7.11-1.x86_64.rpm repodata
[root@10-2-67-190 Test]# cd repodata/
[root@10-2-67-190 repodata]#
[root@10-2-67-190 repodata]# ls
253b3edd8daa293da0429512d35bf48ecf957b1ed92398c88eef482e70aebd8d-other.sqlite.bz2
3e72c7de3d586a48cdeeec6750d0d48091dd0a44bbff2324dc180a1c8d3f51b6-filelists.xml.gz
65a72c9e44bda1583565f25e2df8735bea890a5a6a910bed3daf08d162275499-primary.sqlite.bz2
b79e2a7de96204e63e9f671a5ea7b35da3fef9de1164b3aa714289e1401d709c-primary.xml.gz
d5d42c045e940b1344828913f20bcc54932665419dfc9613687b40495421416d-filelists.sqlite.bz2
dc4ba442890d6997100cde3a896e44a94f032909b4bfc48879d707428e059ba5-other.xml.gz
repomd.xml
[root@10-2-67-190 repodata]# cd ..
[root@10-2-67-190 Test]# ls
i40e-2.7.11-1.x86_64.rpm repodata
[root@10-2-67-190 Test]#
[root@10-2-67-190 Test]#
[root@10-2-67-190 Test]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: c7-Test c7-media
Cleaning up everything
Cleaning up list of fastest mirrors
[root@10-2-67-190 Test]#
[root@10-2-67-190 Test]#
[root@10-2-67-190 Test]#
[root@10-2-67-190 Test]# yum repolist
Loaded plugins: fastestmirror
c7-Test | 2.9 kB 00:00:00
c7-media | 3.6 kB 00:00:00
(1/3): c7-Test/primary_db | 1.8 kB 00:00:00
(2/3): c7-media/group_gz | 155 kB 00:00:00
(3/3): c7-media/primary_db | 5.6 MB 00:00:00
Determining fastest mirrors
repo id repo name status
c7-Test CentOS-7 - Test 1
c7-media CentOS-7 - Media 9,363
repolist: 9,364
[root@10-2-67-190 yum.repos.d]# yum install i40e
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package i40e.x86_64 0:2.7.11-1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================================================
Package Arch Version Repository Size
=================================================================================================================================
Installing:
i40e x86_64 2.7.11-1 c7-Test 1.7 M
Transaction Summary
=================================================================================================================================
Install 1 Package
Total download size: 1.7 M
Installed size: 9.8 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : i40e-2.7.11-1.x86_64 1/1
original pci.ids saved in /usr/local/share/i40e
Updating initramfs with dracut...
Successfully updated initramfs.
Verifying : i40e-2.7.11-1.x86_64 1/1
Installed:
i40e.x86_64 0:2.7.11-1
Complete!
3、查看原来的驱动版本为2.4.10
4、重新加载驱动
modprobe i40e
5、查看目前的驱动版本为2.7.11,rpm包制作成功