rpm打包python程序流程详解---centos6

要使用rpm将可执行程序打包为XXXX.rpm的文件,可以在centos中一键安装python程序。
默认认为大家知道rpm,若不清楚请自行百度,这里不再讲解。

废话不多说,直接上过程
全过程最好使用root用户

第一步----安装rpmbuild:

在这里插入图片描述

安装完成后,查看/root/rpmbuild/目录下,是否存在BUILD、BUILDROOT、RPMS、SOURCES、SPECS、SRPMS目录。
若不存在则需要手动创建,命令如下:

[root@bogon ~]$ mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

各个目录的用途如下:

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

第二步----编写xx.spec文件(重中之重)

rpmbuild就是根据这个文件进行打包的,第一次写比较难写,有些绕,下面结合我的修改做讲解,##号后是我写的注解,只是为了让大家理解每一行是在干什么,实际文件中并没有,注意注意注意!!!!
重点参数讲解:
BuildRoot:安装或编译时使用的“虚拟目录”,后面可以使用$RPM_BUILD_ROOT引用,当安装生成的rpm文件时,会依据在%instal中写的路径放置文件,$RPM_BUILD_ROOT后为根目录。(%install里写的是在安装过程中会根据里面的语句去执行对应的操作)
以%install中的“cp $RPM_BUILD_DIR/%{name}-%{version}/bin/iDesktopAgent $RPM_BUILD_ROOT/usr/local/bin/”为例:
“$RPM_BUILD_DIR/%{name}-%{version}” 结合spec文件转义过来的实际路径为: /root/rpmbuild/BUILD/iDesktopClient-2.0.0,所以以上语句意思为在将"/root/rpmbuild/BUILD/iDesktopClient-2.0.0/bin/iDesktopAgent “ copy到 “/usr/local/bin/”下。
%install: 开始将软件安装到虚拟的根目录中,将BUILD目录中的文件安装到BUILD_ROOT虚拟目录中,最后在安装的时候,将虚拟目录中生成的文件结构在centos中实际的目录中生成一次,生成对应结构的目录和文件。
例“mkdir $RPM_BUILD_ROOT/usr/local/bin/ -p” ,在实际安装时,也会在centos中执行对应操作,等价于在centos执行”mkdir /usr/local/bin/ -p” 操作。
%post:rpm安装后要执行的命令,如下我是将一个服务加入开机自启动,并手动启动起来,如何实现讲一个可执行程序以服务的方式启动,可自行百度,或我之后再写一篇博客讲解。
%file:定义哪些文件会放入rpm文件中,这里要注意:在%install中的文件,在%file里不需要指定,否则编译会报错。

Name:       iDesktopClient                                ##这个就是个名字,若如下需要引用则根据具体情况填写
Version:    2.0.0                                         ##版本号,同上
Release:    1                                             ##发布序列号,以上三个参数在最后生成rpm包时会作为名称使用
Vendor:     desktop                                       ##发行商或打包组织的信息
Summary:    iDesktopClient                                ##软件包的内容概要
License:    GPL                                           ##软件授权方式,通常就是GPL
Source:     %{name}-%{version}.tar.gz                     ##源代码包,也就是你要打包的源代码压缩文件,压缩文件名称必须与这个相同
BuildRoot: %{_tmppath}/%{name}-%{version}                 ##安装或编译时使用的“虚拟目录”,后面可以使用$RPM_BUILD_ROOT引用
Group:      desktop
AutoReq:    no
%description
desktop
%prep
%setup -q
%build


%install

mkdir $RPM_BUILD_ROOT/usr/local/bin/ -p
mkdir $RPM_BUILD_ROOT/opt/iDesktopClient/idesktop/ -p
mkdir $RPM_BUILD_ROOT/etc/init.d/ -p

rm -rf $RPM_BUILD_ROOT/usr/local/bin/*
rm -rf $RPM_BUILD_ROOT/opt/iDesktopClient/idesktop/*
rm -rf $RPM_BUILD_ROOT/etc/init.d/*

chmod +x $RPM_BUILD_DIR/%{name}-%{version}/bin/*
chmod +x $RPM_BUILD_DIR/%{name}-%{version}/idesktop/*
chmod +x $RPM_BUILD_DIR/%{name}-%{version}/init/*


cp $RPM_BUILD_DIR/%{name}-%{version}/bin/iDesktopAgent $RPM_BUILD_ROOT/usr/local/bin/
cp $RPM_BUILD_DIR/%{name}-%{version}/init/iDesktopAgent $RPM_BUILD_ROOT/etc/init.d/


python3 -m compileall -b $RPM_BUILD_DIR/%{name}-%{version}/idesktop/
cp -rf $RPM_BUILD_DIR/%{name}-%{version}/idesktop/* $RPM_BUILD_ROOT/opt/iDesktopClient/idesktop/


cd $RPM_BUILD_ROOT/opt/iDesktopClient/idesktop/
find . -name "*.py" -exec rm -f {} \;
%check
%clean
#rm -rf %{buildroot}/*
%post
chkconfig --add iDesktopAgent
chkconfig iDesktopAgent on
echo "chkconfig on OK"
service iDesktopAgent start
%files
/opt/iDesktopClient/idesktop/*
/etc/init.d/iDesktopAgent
/usr/local/bin/iDesktopAgent


%defattr(0755,root,root)
/usr/local/bin/*
/etc/init.d/iDesktopAgent

该文件配置完成后,开始指定编译命令

第三步----执行rpm编译命令

我的spec文件叫iDesktopClient.spec,这个名字随便起。

[root@bogon ~]$ rpmbuild -ba iDesktopClient.spec

当看到exit 0就说明成功了,若出现错误,根据错误信息查看哪一步配置出现错误了。

第四步----执行编译好的rpm

编译成功的rpm会在/root/rpmbuild/RPMS/x86_64/目录中

[root@bogon ~]$ rpm -ivh iDesktopClient-2.0.0-1.x86_64.rpm

你可能感兴趣的:(linux,python,centos)