一種能用于多種系統(tǒng)下的Linux軟件包制作方法
【專利摘要】本發(fā)明涉及一種能用于多種系統(tǒng)下的Linux軟件包制作方法。本發(fā)明首先搭建好Linux軟件的編譯環(huán)境并執(zhí)行一次預(yù)編譯、編譯和安裝,然后生成安裝文件的列表,再將已經(jīng)安裝好的目標(biāo)文件逐個(gè)拷貝到目標(biāo)文件存放目錄中,最后執(zhí)行Linux軟件包制作的命令把目標(biāo)文件生成軟件包。本發(fā)明實(shí)現(xiàn)了一種能用在多個(gè)Linux發(fā)行版的軟件包制作方法,同時(shí)還解決了傳統(tǒng)Linux軟件包制作方法每次制作都要重新執(zhí)行源代碼編譯的問題;本發(fā)明的方法可應(yīng)用于Linux軟件包制作。
【專利說明】—種能用于多種系統(tǒng)下的Linux軟件包制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Linux軟件包制作領(lǐng)域,特別指一種能用于多種系統(tǒng)下的Linux軟件 包制作方法。
【背景技術(shù)】
[0002]目前Linux下軟件包大多數(shù)以rpm和deb的形式制作,rpm軟件包的制作方法是: 先獲取軟件源代碼,根據(jù)源代碼中提供的依賴軟件的文檔,安裝各種編譯要依賴的文件,然 后編寫rpm軟件包的spec腳本,腳本中要完成的步驟包括:1、生成編譯目標(biāo)文件存放目錄;
2、編譯源代碼;3、生成目標(biāo)文件列表。最后運(yùn)行rpmbuild命令,根據(jù)spec腳本生成rpm軟 件包。Deb軟件包的制作方法也差不多,deb中不使用spec文件而是用DEBIAN目錄。這些 方法存在以下的問題:1、不能同時(shí)制作rpm和deb的軟件包,對(duì)于大多數(shù)的Linux軟件來 說,其運(yùn)行是不依賴于Linux發(fā)行版的,不論是RedHat及其衍生的發(fā)行版或Debian及其衍 生的發(fā)行版,按照目前的制作方法就只能分別在兩個(gè)環(huán)境中下載源代碼、編譯和打包;2、每 制作一次軟件包都要重新執(zhí)行一次源代碼的編譯,對(duì)于大型軟件來說,這要額外花費(fèi)很多 的時(shí)間。
【發(fā)明內(nèi)容】
[0003]本發(fā)明解決的技術(shù)問題在于提供一種能用于多種系統(tǒng)下的Linux軟件包制作方 法,最大程度地利用開發(fā)環(huán)境中已經(jīng)安裝配置好的依賴環(huán)境,解決當(dāng)前方法不能同時(shí)制作 rpm和deb軟件包、每制作一次軟件包都要重新執(zhí)行一次源代碼的編譯等問題。
[0004]本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:包括如下步驟:
[0005]步驟1:搭建Linux軟件的編譯環(huán)境并執(zhí)行一次預(yù)編譯、編譯和安裝;
[0006]步驟2:遍歷安裝目錄生成安裝文件的列表;
[0007]步驟3:編寫相應(yīng)的rpm spec腳本文件和DEBIAN目錄所需要的文件;
[0008]步驟4:新創(chuàng)建一個(gè)目標(biāo)文件的存放目錄;
[0009]步驟5:根據(jù)安裝文件列表把已經(jīng)安裝好的目標(biāo)文件逐個(gè)拷貝到目標(biāo)文件存放目 錄;
[0010]步驟6:如果是RedHat及其衍生的發(fā)行版,執(zhí)行rpmbuild命令打包;如果是 Debian及其衍生的發(fā)行版,執(zhí)行dpkg命令打包;
[0011]步驟7:在源碼修改需要再次制作軟件包時(shí),編譯修改的部分,然后執(zhí)行步驟6。
[0012]所述預(yù)編譯中將安裝目錄定義成一個(gè)獨(dú)立的目錄,預(yù)編譯命令中加入prefix參 數(shù);所述目標(biāo)文件的存放目錄中包含目標(biāo)文件、DEBIAN目錄和rpm spec腳本。
[0013]所述rpm spec腳本在%install將目標(biāo)代碼拷貝到目標(biāo)文件的存放目 錄,%pre> %post、%preun> %postun根據(jù)需要添加操作;在%build部分不執(zhí)行任何操作。
[0014]所述的DEBIAN目錄中按照deb包的規(guī)范添加所需要的腳本或?yàn)榭?,添加的腳本包 括 conffiles、postinst、postrm、preinst、prerm。[0015]所述的rpm軟件包不包含spec文件和DEBIAN目錄。
[0016]所述的spec腳本中包含的%files內(nèi)容為文件列表,可通過安裝文件列表獲取。
[0017]本發(fā)明的方法實(shí)現(xiàn)了多個(gè)Linux發(fā)行版的軟件包制作,同時(shí)還解決了傳統(tǒng)Linux 軟件包制作方法每次制作都要重新執(zhí)行源代碼編譯的問題,本發(fā)明只需要執(zhí)行一次編譯安裝,后續(xù)的軟件包制作能重復(fù)使用安裝的目標(biāo)文件。使用本發(fā)明的方法更能充分利用其搭建的開發(fā)環(huán)境,在軟件編譯依賴環(huán)境比較復(fù)雜的時(shí)候,能節(jié)省搭建環(huán)境的時(shí)間。
【專利附圖】
【附圖說明】
[0018]下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明:
[0019]附圖為本發(fā)明方法流程圖。
【具體實(shí)施方式】
[0020]如附圖所示,本發(fā)明的方法中,先制作按照好源代碼的編譯依賴環(huán)境,執(zhí)行預(yù)編譯、編譯和安裝,在預(yù)編譯的時(shí)候定義好安裝目錄到/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]
【權(quán)利要求】
1.一種能用于多種系統(tǒng)下的Linux軟件包制作方法其特征在于:包括如下步驟:步驟1:搭建Linux軟件的編譯環(huán)境并執(zhí)行一次預(yù)編譯、編譯和安裝:步驟2:遍歷安裝目錄生成安裝文件的列表;步驟3:編寫相應(yīng)的rpm spec腳本文件和DEBIAN目錄所需要的文件;步驟4:新創(chuàng)建一個(gè)目標(biāo)文件的存放目錄;步驟5:根據(jù)安裝文件列表把已經(jīng)安裝好的目標(biāo)文件逐個(gè)拷貝到目標(biāo)文件存放目錄;步驟6:如果是RedHat及其衍生的發(fā)行版,執(zhí)行rpmbuild命令打包;如果是Debian及其衍生的發(fā)行版,執(zhí)行dpkg命令打包;步驟7:在源碼修改需要再次制作軟件包時(shí),編譯修改的部分,然后執(zhí)行步驟6。
2.根據(jù)權(quán)利要求1所述的Linux軟件包制作方法,其特征在于:所述預(yù)編譯中將安裝目錄定義成一個(gè)獨(dú)立的目錄,預(yù)編譯命令中加入prefix參數(shù);所述目標(biāo)文件的存放目錄中包含目標(biāo)文件、DEBIAN目錄和rpm spec腳本。
3.根據(jù)權(quán)利要求1所述的Linux軟件包制作方法,其特征在于:所述rpmspec腳本在%install將目標(biāo)代碼拷貝到目標(biāo)文件的存放目錄,°/叩 、°/叩081:、°/叩 1111、°/叩081:1111根據(jù)需要添加操作;在%build部分不執(zhí)行任何操作。
4.根據(jù)權(quán)利要求2所述的Linux軟件包制作方法,其特征在于:所述rpmspec腳本在%install將目標(biāo)代碼拷貝到目標(biāo)文件的存放目錄,°/叩 、°/叩081:、°/叩 1111、°/叩081:1111根據(jù)需要添加操作;在%build部分不執(zhí)行任何操作。
5.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的Linux軟件包制作方法,其特征在于:所述的 DEBIAN目錄中按照deb包的規(guī)范添加所需要的腳本或?yàn)榭?添加的腳本包括conffiles、 postinst、postrm、preinst、prerm。
6.根據(jù)權(quán)利要求3或4所述的Linux軟件包制作方法,其特征在于:所述的rpm軟件包不包含spec文件和DEBIAN目錄。
7.根據(jù)權(quán)利要求3或4所述的Linux軟件包制作方法,其特征在于:所述的spec腳本中包含的%files內(nèi)容為文件列表,可通過安裝文件列表獲取。
【文檔編號(hào)】G06F17/30GK103440156SQ201310357253
【公開日】2013年12月11日 申請(qǐng)日期:2013年8月15日 優(yōu)先權(quán)日:2013年8月15日
【發(fā)明者】莫展鵬, 楊松, 季統(tǒng)凱 申請(qǐng)人:國云科技股份有限公司