首页 > 技术文章 > centos 发布自己的rpm包

chenzibai 2022-01-23 17:42 原文

场景:

  用.net core开发了web应用,但是每次发布到liunx都是通过ftp,而且没有版本管理,给甲方部署也十分麻烦,因此想着把程序发布为rpm包,可以通过yum下载安装。

解决:

  1.发布rpm包

    1.1 yum -y install rpm-build ,此时得到文件结构包括:

 rpmbuild/
 ├── BUILD  # 发布时解压的位置
 ├── BUILDROOT 
 ├── RPMS  # 发布后的rpm包位置
 ├── SOURCES  # 源码,或者压缩包位置
 ├── SPECS  # spec文件位置
 └── SRPMS   

    1.2 在SPECS中建立spec文件:vi xxxx.spec

    1.3 spec文件是整个rpm包编译,安装前,安装,安装后的动作,具体内容:

Name:           bigdata
Version:        1.0.0
Release:        1
Summary:        bigdata platform

License:        GPL
URL:            www.chenpoop.top
Packager:       chen
Source0:        %{name}-%{version}.tar.gz

BuildRoot:      %_topdir/BUILDROOT
#这个是软件make install 的测试安装目录.

#编译时需要的依赖;运行时需要的依赖
#BuildRequires:
#Requires:mysql8.0,postgres10,redis3.2

# 描述
%description
大数据平台

# 打包开始
%prep

# 安装前的操作,一般是先解压rpm包到build下
%setup -q

# 编辑制作
%build

# 安装
%install
rm -rf %{buildroot}             #先删除原来的安装的,如果你不是第一次安装的话
mkdir %_topdir/%{name}-%{version}
install -d  %_topdir/%{name}-%{version} $RPM_BUILD_ROOT
# install -m 755 %_topdir/BUILD/%{name}-%{version}  $RPM_BUILD_ROOT
#将需要需要打包的文件从BUILD 文件夹中拷贝到BUILDROOT文件夹下。

# 安装前执行的脚本
%pre

# 安装后执行的脚本
%post
sh $RPM_BUILD_ROOT/root/%{name}-%{version}/Move.sh

# 卸载前执行的脚本
%preun

# 卸载后执行的脚本
%postun

# 清理
%clean #清理段,删除buildroot

    其中每个字段的含义可以看参考中的文章,其中$RPM_BUILD_ROOT相当于yum安装后的根路径,比如:

cp %_topdir/BUILD/%{name}-%{version}/root/%{name}-%{version}/Stop.sh $RPM_BUILD_ROOT/root/%{name}-%{version}/Stop.sh

    就是把build下的Stop.sh复制到安装服务器的/root下的路径。

    然后个人觉得%post比较好用,可以把文件复制,服务启动等写在这里面去执行(因为这个install进程会报文件不存在的问题,于是我都是用sh去复制文件的)

    1.4 通过rpmbuild 来打包rpm:rpmbuild -ba xxx.spec

    1.5 同时也通过该语句查看错误信息,我就是把.tar解压在打包成rpm

参考:

  https://www.cnblogs.com/dyh004/p/10370709.html

  https://www.cnblogs.com/huowenjie/p/13467750.html

推荐阅读