一种能用于多种系统下的Linux软件包制作方法转让专利

申请号 : CN201310357253.X

文献号 : CN103440156B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 莫展鹏杨松季统凯

申请人 : 国云科技股份有限公司

摘要 :

本发明涉及一种能用于多种系统下的Linux软件包制作方法。本发明首先搭建好Linux软件的编译环境并执行一次预编译、编译和安装,然后生成安装文件的列表,再将已经安装好的目标文件逐个拷贝到目标文件存放目录中,最后执行Linux软件包制作的命令把目标文件生成软件包。本发明实现了一种能用在多个Linux发行版的软件包制作方法,同时还解决了传统Linux软件包制作方法每次制作都要重新执行源代码编译的问题;本发明的方法可应用于Linux软件包制作。

权利要求 :

1.一种能用于多种系统下的Linux软件包制作方法,其特征在于:包括如下步骤:步骤1:搭建Linux软件的编译环境并执行一次预编译、编译和安装;

步骤2:遍历安装目录生成安装文件的列表;

步骤3:编写相应的rpm spec脚本文件和DEBIAN目录所需要的文件;

步骤4:新创建一个目标文件的存放目录;

步骤5:根据安装文件列表把已经安装好的目标文件逐个拷贝到目标文件存放目录;

步骤6:如果是RedHat及其衍生的发行版,执行rpmbuild命令打包;如果是Debian及其衍生的发行版,执行dpkg命令打包;

步骤7:在源码修改需要再次制作软件包时,编译修改的部分,然后执行步骤6。

2.根据权利要求1所述的能用于多种系统下的Linux软件包制作方法,其特征在于:所述预编译中将安装目录定义成一个独立的目录,预编译命令中加入prefix参数;所述目标文件的存放目录中包含目标文件、DEBIAN目录和rpm spec脚本。

3.根据权利要求1所述的能用于多种系统下的Linux软件包制作方法,其特征在于:所述rpm spec脚本在%install将目标代码拷贝到目标文件的存放目录,%pre、%post、%preun、%postun根据需要添加操作;在%build部分不执行任何操作。

4.根据权利要求2所述的能用于多种系统下的Linux软件包制作方法,其特征在于:所述rpm spec脚本在%install将目标代码拷贝到目标文件的存放目录,%pre、%post、%preun、%postun根据需要添加操作;在%build部分不执行任何操作。

5.根据权利要求1至4任一项所述的能用于多种系统下的Linux软件包制作方法,其特征在于:所述的DEBIAN目录中按照deb包的规范添加所需要的脚本或为空,添加的脚本包括conffiles、postinst、postrm、preinst、prerm。

6.根据权利要求3或4所述的能用于多种系统下的Linux软件包制作方法,其特征在于:所述的spec脚本中包含的%files内容为文件列表,可通过安装文件列表获取。

说明书 :

一种能用于多种系统下的Linux软件包制作方法

技术领域

[0001] 本发明涉及Linux软件包制作领域,特别指一种能用于多种系统下的Linux软件包制作方法。

背景技术

[0002] 目前Linux下软件包大多数以rpm和deb的形式制作,rpm软件包的制作方法是:先获取软件源代码,根据源代码中提供的依赖软件的文档,安装各种编译要依赖的文件,然后编写rpm软件包的spec脚本,脚本中要完成的步骤包括:1、生成编译目标文件存放目录;2、编译源代码;3、生成目标文件列表。最后运行rpmbuild命令,根据spec脚本生成rpm软件包。Deb软件包的制作方法也差不多,deb中不使用spec文件而是用DEBIAN目录。这些方法存在以下的问题:1、不能同时制作rpm和deb的软件包,对于大多数的Linux软件来说,其运行是不依赖于Linux发行版的,不论是RedHat及其衍生的发行版或Debian及其衍生的发行版,按照目前的制作方法就只能分别在两个环境中下载源代码、编译和打包;2、每制作一次软件包都要重新执行一次源代码的编译,对于大型软件来说,这要额外花费很多的时间。

发明内容

[0003] 本发明解决的技术问题在于提供一种能用于多种系统下的Linux软件包制作方法,最大程度地利用开发环境中已经安装配置好的依赖环境,解决当前方法不能同时制作rpm和deb软件包、每制作一次软件包都要重新执行一次源代码的编译等问题。
[0004] 本发明解决上述技术问题的技术方案是:包括如下步骤:
[0005] 步骤1:搭建Linux软件的编译环境并执行一次预编译、编译和安装;
[0006] 步骤2:遍历安装目录生成安装文件的列表;
[0007] 步骤3:编写相应的rpm spec脚本文件和DEBIAN目录所需要的文件;
[0008] 步骤4:新创建一个目标文件的存放目录;
[0009] 步骤5:根据安装文件列表把已经安装好的目标文件逐个拷贝到目标文件存放目录;
[0010] 步骤6:如果是RedHat及其衍生的发行版,执行rpmbuild命令打包;如果是Debian及其衍生的发行版,执行dpkg命令打包;
[0011] 步骤7:在源码修改需要再次制作软件包时,编译修改的部分,然后执行步骤6。
[0012] 所述预编译中将安装目录定义成一个独立的目录,预编译命令中加入prefix参数;所述目标文件的存放目录中包含目标文件、DEBIAN目录和rpm spec脚本。
[0013] 所述rpm spec脚本在%install将目标代码拷贝到目标文件的存放目录,%pre、%post、%preun、%postun根据需要添加操作;在%build部分不执行任何操作。
[0014] 所述的DEBIAN目录中按照deb包的规范添加所需要的脚本或为空,添加的脚本包括conffiles、postinst、postrm、preinst、prerm。
[0015] 所述的spec脚本中包含的%files内容为文件列表,可通过安装文件列表获取。
[0016] 本发明的方法实现了多个Linux发行版的软件包制作,同时还解决了传统Linux软件包制作方法每次制作都要重新执行源代码编译的问题,本发明只需要执行一次编译安装,后续的软件包制作能重复使用安装的目标文件。使用本发明的方法更能充分利用其搭建的开发环境,在软件编译依赖环境比较复杂的时候,能节省搭建环境的时间。

附图说明

[0017] 下面结合附图对本发明进一步说明:
[0018] 图1为本发明方法流程图。

具体实施方式

[0019] 如附图所示,本发明的方法中,先制作好源代码的编译依赖环境,执行预编译、编译和安装,在预编译的时候定义好安装目录到/opt/gcloud-gl/下,定义如下:
[0020] ./configure--prefix=/opt/gcloud-gl/;
[0021] make;
[0022] make istall
[0023] 编写脚本遍历安装目录,生成安装文件列表,遍历脚本如下:
[0024]
[0025]
[0026]
[0027] 生成列表,命令如下:
[0028] ./list_alldir/var/log/>gcloud-gl.files
[0029] 编写rpm spec脚本,如下:
[0030] Name:G-Cloud-gl
[0031] Summary:RPM for gl
[0032] Requires:G-Cloud>=5.1,httpd
[0033] Version:5.1
[0034] Release:1
[0035] Group:Applications/System
[0036] License:Commercial
[0037] Packager:AJ
[0038] %define debug_package%{nil}
[0039] %description
[0040] part for G-cloud system
[0041] %build
[0042] %pre
[0043] %post
[0044] %install
[0045] cp-rf/opt/gcloud-gl/*$RPM_BUILD_ROOT
[0046] rm-f$RPM_BUILD_ROOT/G-Cloud-gl.spec
[0047] rm-rf$RPM_BUILD_ROOT/DEBIAN
[0048] %preun
[0049] %postun
[0050] clear
[0051] echo″Uninstallation is complete!″
[0052] %files
[0053] /usr/lib64/axis2c/services/gcloudGL/
[0054] 因为不需要执行其他安装卸载步骤,DEBIAN下不需要添加其他文件。创建目标文件存放目录:
[0055] mkdir/opt/gcloudGLpackage/
[0056] 根据列表,把目标文件逐个拷贝到目标文件存放目录中
[0057]
[0058]
[0059] 打rpm软件包,命令如下:
[0060] rpmbuild-bb gcloud-gl.spec
[0061] 打deb软件包,命令如下:
[0062] dpkg-b$destdir$destdir″_″.deb。