使用rpm发布软件版本

RPM

RPM(Red Hat Package Manager)是一种在Linux系统中使用的软件包管理工具。它的主要功能是用于安装、升级、卸载软件包。在Red Hat、CentOS、Fedora等Linux发行版中,RPM是默认的软件包格式。
RPM命令是用于管理RPM包的命令行工具,它可以用来查询、安装、升级和删除RPM包。下面是一些常用的RPM命令:

rpm -qa:列出系统中所有安装的RPM包
rpm -qi package_name:查询指定RPM包的详细信息
rpm -qf file_name:查询指定文件所属的RPM包
rpm -Uvh package_name.rpm:升级指定的RPM包
rpm -e package_name:卸载指定的RPM包

在创建一个RPM包之前,我们需要编写一个spec文件。spec文件是一个包含了RPM包的所有相关信息的文件,包括软件名称、版本号、构建要求、依赖关系、安装目录、执行脚本等。以下是一些spec文件的规则:

Name:指定软件包的名称。
Version:指定软件包的版本号。
Release:指定软件包的发布号,也可以是软件包的修订号。
Summary:简短地描述软件包的功能和作用。
License:指定软件包的许可证。
URL:指定软件包的官方网站。
Source0:指定软件包源代码的位置。
BuildRequires:指定构建软件包所需的软件包。
Requires:指定安装软件包所需的软件包。
%description:用于详细描述软件包的功能和用途。
%prep:指定RPM包的准备工作,如解压缩源代码。
%build:指定构建RPM包的过程,如编译、链接等。
%install:指定安装RPM包的过程,如创建目录、复制文件等。
%check:指定进行软件包测试的过程。
%clean:指定清理构建过程中生成的临时文件和目录。
%files:指定将要打包到RPM包中的文件和目录。
%pre:指定在安装软件包之前需要执行的操作。
%post:指定在安装软件包之后需要执行的操作。
%preun:指定在卸载软件包之前需要执行的操作。
%postun:指定在卸载软件包之后需要执行的操作。
%changelog:指定软件包的变更历史记录。

这些规则提供了RPM包所需的基本信息,可以帮助构建、安装和管理软件包。当编写spec文件时,需要遵循这些规则并根据需要进行自定义,以确保软件包能够正常工作并满足用户的需求。

如何使用rpm发布版本

如果要通过RPM发布软件包版本,通常需要完成以下步骤:

  1. 创建一个RPM spec文件:spec文件是一个包含了RPM包的所有相关信息的文件,包括软件名称、版本号、构建要求、依赖关系、安装目录、执行脚本等。在创建spec文件时,需要遵循一些规则,并根据软件包的需求进行自定义。
  2. 准备软件包源代码:将软件包源代码放置在指定的位置,通常是在SPEC文件中的Source0字段中指定的位置。
  3. 安装构建软件包所需的依赖关系:使用yum或dnf等工具安装软件包构建过程中所需的依赖关系,例如编译器、开发库等。
  4. 执行构建命令:使用rpmbuild命令执行构建命令,该命令会自动执行spec文件中指定的准备、构建、安装、打包等步骤,并生成RPM包文件。

我们通过具体操作来了解rpm包发布

1、创建RPM构建目录:使用rpmdev-setuptree命令来创建RPM构建目录,该命令会自动创建RPM目录结构,包括SOURCES、SPECS、BUILD、RPMS和SRPMS目录。示例:

sudo yum install rpm-build rpmdevtools
rpmdev-setuptree

将会在用户目录下生成rpmbuild目录

[root@centos-7 rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

2、准备要打包程序的源码

[root@centos-7 myapp]# ls
Makefile  myapp.c  myapp.spec

3、编辑makefile

SRCHOME = $(shell  pwd)
APPNAME = "myapp"
CC=gcc
CFLAGS=-Wall -Wextra -O2
export VERSION := 1.0
export RPM_TOP_DIR := $(shell rpm -E %{
     
     _topdir})
export RELEASE := 1
all: myapp

myapp: myapp.o
	$(CC) $(CFLAGS) -o myapp myapp.o

myapp.o: myapp.c
	$(CC) $(CFLAGS) -c myapp.c
rpm:
	cp -a -r ${SRCHOME}   /tmp/$(APPNAME)-$(VERSION);\
	cd /tmp;\
	tar zcvf $(RPM_TOP_DIR)/SOURCES/$(APPNAME)-$(VERSION).tar.gz  $(APPNAME)-$(VERSION)
	rpmbuild -bb --define "VERSION $(VERSION)"  --define "RELEASE $(RELEASE)" $(APPNAME).spec
rpmclean:
	rm -rf ${RPM_TOP_DIR}/BUILD/$(APPNAME)-$(VERSION)
	rm -rf ${RPM_TOP_DIR}/SOURCES/$(APPNAME)-$(VERSION).tar.gz
	rm -rf /tmp/$(APPNAME)-$(VERSION)

clean:
	rm -f myapp myapp.o

makefile中rpm命令来完成打包工作,其中先将源码压缩放入rpm目录中,然后通过rpmbuild命令来完成打包工作
4、编辑spec文件
在rpmbuild命令中需要指定spec文件来完成打包工作,sepc中具体的描述了打包过程的具体内容



Name: myapp
Version: %{
    
    VERSION}
Release: %{
    
    RELEASE}_%{
    
    ?dist}
Summary: a simple rpm example

Group: York·Zhang
License: GPLv3+
Packager: Developer York·Zhang
Vendor: zy

Source0: %{
    
    name}-%{
    
    version}.tar.gz


%description
a simple rpm example

%define debug_package %{
    
    nil}

%prep
%setup -q -n %{
    
    name}-%{
    
    version}


%build
%{
    
    __make} all



%install
install -D %{
    
    name}  ${RPM_BUILD_ROOT}/usr/bin/%{
    
    name}
exit 0

%make_install




%files
/usr/bin/%{
    
    name}
%defattr(644,root,root,-)

%changelog



sepc中使用了makefile定义的环境变量来指定rpm的版本信息,以及其他rpm包的信息,这些信息在软件安装后可以通过命令rpm -qi myapp查看,另外,%build指定通过make命令来编译源码,这需要我们写好makefile文件,%install会将编译生成的myapp安装到/usr/bin路径下,在这里如果程序有其他的文件,比如配置文件都可以安装到相应路径下,另外spec的其他规则可以帮助我们完成更多的共组,比如我们如果想在安装前完成一些工作可以把他们放在%pre下,例如备份配置文件,停止依赖的其他服务等等

5、make rpm
使用make rpm生成rpm包,生成的rpm包如下:

+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd myapp-1.0
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/myapp-1.0-1_.el7.x86_64
+ exit 0
[root@centos-7 myapp]# ls /root/rpmbuild/
BUILD/     BUILDROOT/ RPMS/      SOURCES/   SPECS/     SRPMS/     
[root@centos-7 myapp]# ls /root/rpmbuild/RPMS/x86_64/myapp-1.0-1_.el7.x86_64.rpm 
/root/rpmbuild/RPMS/x86_64/myapp-1.0-1_.el7.x86_64.rpm
[root@centos-7 myapp]# 

6、安装

[root@centos-7 myapp]# rpm -ivh /root/rpmbuild/RPMS/x86_64/myapp-1.0-1_.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:myapp-1.0-1_.el7                 ################################# [100%]
[root@centos-7-yu myapp]# 

查看软件安装信息

[root@centos-7-yu myapp]# rpm -qi
rpm: no arguments given for query
[root@centos-7-yu myapp]# rpm -qi myapp
Name        : myapp
Version     : 1.0
Release     : 1_.el7
Architecture: x86_64
Install Date: Thu 09 Mar 2023 04:14:06 PM CST
Group       : York·Zhang
Size        : 8360
License     : GPLv3+
Signature   : (none)
Source RPM  : myapp-1.0-1_.el7.src.rpm
Build Date  : Thu 09 Mar 2023 04:12:25 PM CST
Build Host  : CentOS-7-YU.ZHANG1
Relocations : (not relocatable)
Packager    : Developer York·Zhang
Vendor      : zy
Summary     : a simple rpm example
Description :
a simple rpm example
[root@centos-7-yu myapp]# 

这样我们就完成了rpm版本发布和安装

猜你喜欢

转载自blog.csdn.net/haoyuxuanyuan/article/details/129424385