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

文档序号:6507889阅读:332来源:国知局
一种能用于多种系统下的Linux软件包制作方法
【专利摘要】本发明涉及一种能用于多种系统下的Linux软件包制作方法。本发明首先搭建好Linux软件的编译环境并执行一次预编译、编译和安装,然后生成安装文件的列表,再将已经安装好的目标文件逐个拷贝到目标文件存放目录中,最后执行Linux软件包制作的命令把目标文件生成软件包。本发明实现了一种能用在多个Linux发行版的软件包制作方法,同时还解决了传统Linux软件包制作方法每次制作都要重新执行源代码编译的问题;本发明的方法可应用于Linux软件包制作。
【专利说明】—种能用于多种系统下的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]所述的rpm软件包不包含spec文件和DEBIAN目录。
[0016]所述的spec脚本中包含的%files内容为文件列表,可通过安装文件列表获取。
[0017]本发明的方法实现了多个Linux发行版的软件包制作,同时还解决了传统Linux 软件包制作方法每次制作都要重新执行源代码编译的问题,本发明只需要执行一次编译安装,后续的软件包制作能重复使用安装的目标文件。使用本发明的方法更能充分利用其搭建的开发环境,在软件编译依赖环境比较复杂的时候,能节省搭建环境的时间。
【专利附图】

【附图说明】
[0018]下面结合附图对本发明进一步说明:
[0019]附图为本发明方法流程图。
【具体实施方式】
[0020]如附图所示,本发明的方法中,先制作按照好源代码的编译依赖环境,执行预编译、编译和安装,在预编译的时候定义好安装目录到/opt/gcloud-gl/下,定义如下:
[0021]./configure—prefix=/opt/gcloud-gl/;
[0022]make;
[0023]make istall
[0024]编写脚本遍历安装目录,生成安装文件列表,遍历脚本如下:
[0025]
#!/bin/sh
function scandir() {
local cur—dir parent—dir workdir workdir=$ I cd $ {workdir}
[0026]if[${workdir} = 7"] then
cm—dir=1”
else
cur_dir=$(pwd)
fi
for dirlist in $(ls ${ciir_dn ;) do
if test -d $ {dirlist} then
cd $ {dirlist}
scandir $ {cur—dir} /$ {dirl ist} cd..else
echo $ (cur_dirj/${dirlist}
fi
done
}
if test -d $1
[0027]then
scandi r SI eliftest-f$l then
echo "you input a file but not a directory ,pis re input and try again" exit I
else
echo "the Directory isn't exist which you inpuUpls input a new
one"
exit I
fi
[0028]生成列表,命令如下:
[0029]./list_alldir/var/log/>gcloud-gl.files
[0030]编写rpm spec脚本,如下:
[0031]
Name: G-C1ud-gl Summary: RPM for gl Requires: G-Cloud >= 5.1, httpd Version: 5.1 Release:1
Group: Applications/System License: Commercial Packager: AJ
%define debug_package % {nil }
%description
part for G-cloud system
[0032]
【权利要求】
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软件包制作方法,其特征在于:所述rpmspec脚本在%install将目标代码拷贝到目标文件的存放目录,°/叩 、°/叩081:、°/叩 1111、°/叩081:1111根据需要添加操作;在%build部分不执行任何操作。
4.根据权利要求2所述的Linux软件包制作方法,其特征在于:所述rpmspec脚本在%install将目标代码拷贝到目标文件的存放目录,°/叩 、°/叩081:、°/叩 1111、°/叩081:1111根据需要添加操作;在%build部分不执行任何操作。
5.根据权利要求1至4任一项所述的Linux软件包制作方法,其特征在于:所述的 DEBIAN目录中按照deb包的规范添加所需要的脚本或为空,添加的脚本包括conffiles、 postinst、postrm、preinst、prerm。
6.根据权利要求3或4所述的Linux软件包制作方法,其特征在于:所述的rpm软件包不包含spec文件和DEBIAN目录。
7.根据权利要求3或4所述的Linux软件包制作方法,其特征在于:所述的spec脚本中包含的%files内容为文件列表,可通过安装文件列表获取。
【文档编号】G06F17/30GK103440156SQ201310357253
【公开日】2013年12月11日 申请日期:2013年8月15日 优先权日:2013年8月15日
【发明者】莫展鹏, 杨松, 季统凯 申请人:国云科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1