[转帖]Linux操作系统使用RPMBUILD命令打包RPM的详细步骤

linux,操作系统,使用,rpmbuild,命令,打包,rpm,详细,步骤 · 浏览次数 : 0

小编点评

Sure, here's the summary of the content you provided: **Software Version:** 1.12.1 **Release Sequence Number:** 1%{?dist} **Build Number:** {release} **Software Group:** Applications/SystemLicense **Source Code Location:** Source1, Source2... **Build Root:** %_topdir/BUILDROOT **Package URL:** Software's URIVendor **Package Contents:** * Installation instructions * Build logs * Other relevant files **Additional Notes:** * The package prefix (prefix) can be specified using the %{_prefix} placeholder. * The package can be installed in multiple directories using the -prefix option. * The package can be uninstalled using the %clean directive. * The package can be tested using the rpm -ivh command. **How to Build the Package:** 1. Build the RPM package using the following command: ``` rpmbuild -ba iavf.spec ``` 2. The output contains the location of the RPM file. 3. Install the RPM package using the following command: ``` rpm -Uvh <RPM> ``` 4. Note: The kernel version must match the installed kernel sources.

正文

https://www.cnblogs.com/zhangxinglong/p/11904922.html

 

首先,我们需要了解一些预备知识,在旧版本的CentOS中,rpmbuild工具默认的工作路径是/usr/src/redhat,因为权限原因,一般用户身份不能制作rpm软件包,只能切换到root身份才能够制作。在新版本的CentOS中,可以在一般用户主目录下新建rpmbuild目录作为rpmbuild工具的工作目录。并且,在新版本中,发行商建议为了防止系统函数库或其他文件损坏,不要使用root身份去制作rpm软件包。

 

一、uname -r 查看linux内核版本和参数;kernel-devel版本一定要和使用的内核一致

uname -r
2.6.32-504.16.2.el6.x86_64

 

二、下载Intel x722网卡Linux驱动  https://downloadcenter.intel.com/download/22283/Intel-Ethernet-Adapter-Complete-Driver-Pack?product=139350

wget https://downloadmirror.intel.com/24693/eng/iavf-3.7.61.20.tar.gz

 

三、必要工具的安装

其中包括make工具,若你的待安装包使用C语言写的,还需要安装gcc编译程序。最重要的是要安装rpmbuild工具。如果没有yum也可以从http://rpm.pbone.net/ 下载RPM包

命令如下:

yum install make
yum install gcc
yum install rpmbuild
yum install kernel-devel-2.6.32-504.16.2.el6.x86_64

 

四、创建制作rpm的工作目录

为了创建制作rpm的工作目录,你需要在一般用户身份的主目录下新建如下结构的目录:

rpmbuild目录,还有该目录下六个目录,包括:BUILD、BUILDROOT、RPMS、SOURCES、SPECS、SRPMS,命令如下:

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

各个目录的一般用途如下简介:

BUILD 编译rpm包的临时目录
BUILDROOT 编译后生成的软件临时安装目录
RPMS 最终生成的可安装rpm包的所在目录
SOURCES 所有源代码和补丁文件的存放目录
SPECS 存放SPEC文件的目录(重要)
SRPMS 软件最终的rpm源码格式存放路径


五、制作源代码文件tarball生成

将自己的源代码打包,其中可以包括可执行文件、脚本文件、用户使用手册、配置文件还有一些其他文件。然后将打包好的压缩包放在SOURCES目录下。

tar -zcv -f iavf-3.7.61.20.tar.gz iavf-3.7.61.20        #假设主目录下存在待打包的包括源代码的目录=>iavf-3.7.61.20
cp iavf-3.7.61.20.tar.gz ~/rpmbuild/SOURCES          #将打包好的源代码拷贝到SOURCES目录下

 

六、新建*.spec的设置文件

这个spec文件的设置是整个打包过程中最重要的一环,必须仔细设置。在SPECS目录下新建该目录,并且进入该文件进行设置,其中文件中各个宏名(例如%install)的具体含义请参考文献【4】

 cd ~/rpmbuild/SPECS
 vim iavf.spec
复制代码

Name: iavf
Version: 3.7.61.20
Release: 1%{?dist}
Summary: Calculate sin and cos value

License: GPL
URL: http://linux.vbird.org
Source0: %{name}-%{version}.tar.gz

%description
This package will let you input your name and calculate sin and cos value

%prep
%setup -q


%build #执行编译命令,编译后会在BUILD目录下存在暂时文件
make

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin #将编译完成源代码试安装在~/rpmbuild/BUILDROOT目录下,其中的宏%{buildroot}=~/rpmbuild
make install RPM_INSTALL_ROOT=%{buildroot}

%files #最终在安装生成的rpm软件包时的安装目录
/usr/local/bin/iavf


%changelog
* Wed Jul 4 2018 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1
- Build the program

复制代码

 

spec文件主要有以下关键字,其含义如下:

复制代码
Name: 软件包的名称,在后面的变量中即可使用%{name}的方式引用
Summary: 软件包的内容
Version: 软件的实际版本号,例如:1.12.1等,后面可使用%{version}引用
Release: 发布序列号,例如:1%{?dist},标明第几次打包,后面可使用%{release}引用
Group: 软件分组,建议使用:Applications/System
License: 软件授权方式GPLv2
Source: 源码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
BuildRoot: 这个是安装或编译时使用的临时目录,即模拟安装完以后生成的文件目录:%_topdir/BUILDROOT 后面可使用$RPM_BUILD_ROOT 方式引用。
URL: 软件的URI
Vendor: 打包组织或者人员
Patch: 补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用
Prefix: %{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
Prefix: %{_sysconfdir} 这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识
Requires: 该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本,例如:
libxxx-devel >= 1.1.1 openssl-devel 。 注意:“>=”号两边需用空格隔开,而不同软件名称也用空格分开

%description: 软件的详细说明
%define: 预定义的变量,例如定义日志路径: _logpath /var/log/weblog
%prep: 预备参数,通常为 %setup -q
%build: 编译参数 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/……
%install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中(这一步比较重要!)
%pre: 安装前需要做的任务,如:创建用户
%post: 安装后需要做的任务 如:自动启动的任务
%preun: 卸载前需要做的任务 如:停止任务
%postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
%clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
%files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限
%changelog: 修改历史
复制代码

 

七、编译成为RPM和SRPM

输入如下命令,在最后出现exit 0表示生成成功。

rpmbuild -ba iavf.spec

 

八、安装和测试

输入rom命令进行安装和测试。

rpm -ivh ~/rpmbuild/RPMS/x86_64/iavf-3.7.61.20-1.x86_64.rpm  #安装iavf
rpm -ql iavf                                                 #查找iavf的安装路径
rpm -qi iavf                                                 #查询iavf相关信息

 

九、注意事项

在/usr/local/bin目录中不能有同名目录或者文件存在

 

十、参考文献

【1】https://www.cnblogs.com/masterpanda/p/5700453.html

【2】https://access.redhat.com/sites/default/files/attachments/rpm_building_howto.pdf

【3】https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment

【4】https://docs.fedoraproject.org/quick-docs/en-US/creating-rpm-packages.html#con_rpm_spec_file_overview

 

十一、参考网卡驱动安装手册,如果编译驱动环境ok可以直接使用  rpmbuild -tb iavf-<x.x.x>.tar.gz 完成RPM包制作。

复制代码
Building and Installation
=========================

To build a binary RPM package of this driver
--------------------------------------------
Note: RPM functionality has only been tested in Red Hat distributions.

1. Run the following command, where <x.x.x> is the version number for the
   driver tar file.

   # rpmbuild -tb iavf-<x.x.x>.tar.gz

   NOTE: For the build to work properly, the currently running kernel MUST
   match the version and configuration of the installed kernel sources. If
   you have just recompiled the kernel, reboot the system before building.

2. After building the RPM, the last few lines of the tool output contain the
   location of the RPM file that was built. Install the RPM with one of the
   following commands, where <RPM> is the location of the RPM file:

   # rpm -Uvh <RPM>
       or
   # dnf/yum localinstall <RPM>

NOTES:
- To compile the driver on some kernel/arch combinations, you may need to
install a package with the development version of libelf (e.g. libelf-dev,
libelf-devel, elfutilsl-libelf-devel).
- When compiling an out-of-tree driver, details will vary by distribution.
However, you will usually need a kernel-devel RPM or some RPM that provides the
kernel headers at a minimum. The RPM kernel-devel will usually fill in the link
at /lib/modules/'uname -r'/build.

与[转帖]Linux操作系统使用RPMBUILD命令打包RPM的详细步骤相似的内容:

[转帖]Linux操作系统使用RPMBUILD命令打包RPM的详细步骤

https://www.cnblogs.com/zhangxinglong/p/11904922.html 首先,我们需要了解一些预备知识,在旧版本的CentOS中,rpmbuild工具默认的工作路径是/usr/src/redhat,因为权限原因,一般用户身份不能制作rpm软件包,只能切换到root

[转帖]linux路由配置:在Linux操作系统下修改IP、DNS和路由配置

http://www.cnitblog.com/201/archive/2009/08/20/60887.html 熟悉使用ifconfig 会非常方便。 ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip 一、修

[转帖]Linux三剑客之sed的初阶使用

https://www.jianshu.com/p/ceea435635a2 大多数情况下,对于文件内容的修改需要依赖交互式的软件来实现,例如vim修改文件的内容则是依赖光标的移动和修改操作来完成对文件某一处内容的修改。然而,在linux操作系统中,也存在一种非交互式的方法来修改文件内容,通过发送特

[转帖]linux top命令详解

一.top简介 top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。在Linux操作系统中,top是使用最频繁,也是比较全的一个命令。Top命令类似于Windows系统的任务管理器工具。它对于所有正在运行的进行和系统负荷提供不断更新的概览信息,

【转帖】linux环境下使用route指令设置多个网络连接的优先级(通过修改路由表的默认网关条目)

1. 背景 在生活中的会经常遇见一台PC同时连接多个网络的场景.最典型的,一台笔记本可以同时连接一个无线网(手机热点)和一个有线网(以太网).linux和window操作系统在默认情况都会使用最早连接的网络进行互联网访问.如果我们想切换到另一个网络进行互联网访问,最粗暴的方法就是断开最先连接的网络,

[转帖]总结:Tomcat的IO模型

一、介绍 对于 linux 操作系统,IO 多路复用使用的是 epoll 方式,对于 windows 操作系统中 IO 多路复用使用的是 iocp 方式,对于 mac 操作系统 IO 多路复用使用的是 kqueue 方式。 由于对于 tomcat 服务器来说基本主要部署在 linux 操作系统上,所

[转帖]Linux中find命令使用示例

https://zhuanlan.zhihu.com/p/99170116 Linux查找命令是类Unix操作系统中最重要且最常用的命令行实用程序之一。 查找命令可以根据你设定的参数匹配的文件指定的条件来搜索和查找文件或目录的列表。 查找可以在多种条件下使用,例如可以按权限,用户,组,文件类型,日期

[转帖]Linux之pure-ftpd安装和使用

一、pure-ftpd简介 PureFTPd是一款专注于程序健壮和软件安全的免费FTP服务器软件(基于BSD License),以安全和配置简单为设计目标,支持虚拟主机,IPV6,PAM等功能。。其可以在多种类Unix操作系统中编译运行,包括Linux、OpenBSD、NetBSD、FreeBSD、

[转帖]如何在 Linux 中使用 SCP 安全地传输文件

https://linux.cn/article-15377-1.html 在网络上文件传输可以通过各种不同的方式和协议来完成。远程复制文件最常用的协议是 Rsync、SCP 和 SFTP。在本文中,我们将了解什么是 SCP 以及如何在 Linux 和类 Unix 操作系统中使用 SCP 在本地和远

【转帖】Linux多链路聚合技术

https://www.jianshu.com/p/dd8587ecf54f 一般而言,在单体结构的操作系统中,一块物理磁盘会接在总线设备上,并经由总线分配 PCI-Bus 号,这个时候一个 bus 往往对应一个真实可见的设备。 但在多主机的集群环境中,多个主机之间使用交换机进行通信,多台存储服务器