centos 发布自己的rpm包
场景:
用.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