python脚本制作deb包_Deb包的制作 | 学步园
deb格式是Debian系專用安裝包格式,配合APT軟件管理系統(tǒng),成為了當(dāng)前在linux軟件中非常流行的一種安裝包。Debian和ubuntu軟件安裝用的都是deb包。
但是很多人制作deb包時(shí),都是從rpm轉(zhuǎn)為deb,或者使用dpkg
-b進(jìn)行轉(zhuǎn)換。雖然這兩種方法可以制作出來deb,但是顯然很粗糙,今天介紹一下正規(guī)方法:使用debhelper制作deb。今天用一個(gè)例子來和大家一起做個(gè)包試試看。
我們的例子是gwrite
這個(gè)軟件,軟件主頁:http://code.google.com/p/gwrite/。您可以點(diǎn)擊此處下載源碼。這個(gè)源碼包在Debian項(xiàng)目里的術(shù)語叫做upstream tarball,也就是上游發(fā)行的代碼包。
源碼下載完成后,我們?cè)谥髂夸浝镄陆ㄒ粋€(gè)文件夾,例如叫packaging,然后執(zhí)行如下命令:
mkdir ~/packaging
cd ~/packaging
把剛才下載的.tar.gz文件放到這個(gè)文件夾里。然后用命令解壓這個(gè)文件:
tar zxf gwrite-0.5.0.tar.gz
(不要使用圖形化工具解壓,因?yàn)闀?huì)造成權(quán)限混亂),進(jìn)入解壓出來的目錄:
cd gwrite-0.5.0
然后大家要安裝幾個(gè)軟件包,依次介紹一下。第一個(gè)要安裝的是debhelper:
sudo aptitude install debhelper
debhelper軟件包里是各種腳本,可以幫助我們接下來的打包工作。下一個(gè)要安裝的是dh-make:
sudo aptitude install dh-make
dh-make包提供了我們需要用到的dh_make命令。這個(gè)命令用于根據(jù)上游tarball生成我們deb包模板。現(xiàn)在我們已經(jīng)cd到解壓好的程序目錄,現(xiàn)在的文件夾路徑是~/packaging/gwrite-0.5.0。然后我們執(zhí)行這個(gè)命令:
dh_make -e First Last -f ../gwrite-0.5.0.tar.gz
其中First Last是姓名,比如我是Aron Xu。<>里是你的email地址。-f后面是上游tarball的路徑。如果上面那個(gè)命令報(bào)錯(cuò),請(qǐng)使用這個(gè):
dh_make -e youremail@example.com -f ../gwrite-0.5.0.tar.gz
(../的意思是當(dāng)前目錄的上層目錄)接下來程序會(huì)提示:
Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
我們輸入s,表示這個(gè)源代碼包只生成一個(gè)deb。輸入s,按回車。然后會(huì)顯示一些信息,回車確認(rèn)
這時(shí)候再看當(dāng)前的目錄,會(huì)多出一個(gè)debian/文件夾。上級(jí)目錄里,會(huì)出現(xiàn)gwrite_0.5.0.orig.tar.gz文件。
接下來下面進(jìn)到debian/目錄,第一個(gè)文件是changelog。Changelog顧名思義,是說軟件版本歷史的。
gwrite (0.5.0-1) unstable; urgency=low
Initial release (Closes: #nnnn)
-- Aron Xu Wed, 17 Nov 2010 20:21:24 +0800
文件里面的姓名和郵箱,是用來識(shí)別這個(gè)包制作者的,當(dāng)然就是在動(dòng)手的各位啦。(changelog里沒有寫中文的,都是英文。不知道deb包是否允許用中文。)changelog是必須得是文件,沒有這個(gè)文件接下來的步驟會(huì)出錯(cuò)。
然后是compat文件,里面就一個(gè)數(shù)字,現(xiàn)在是7。這個(gè)數(shù)字是debhelper的版本。不管它就可以。
下一個(gè)文件是control文件:
Source: gwrite表示源碼包的名稱;
Section: unknown這行表示軟件分類;
Priority: extra代表優(yōu)先級(jí),一般可以寫optional或者extra。其中optional是普通包最常用的,extra的優(yōu)先級(jí)相比則還要再低一些;
Maintainer: Aron Xu 這行是軟件包維護(hù)者,格式為:;
Build-Depends: debhelper(>= 7),這行是編譯依賴關(guān)系,也就是說要安裝哪些軟件包才可以編譯這個(gè)程序。這個(gè)例子中,debhelper是必須的。我們手里這個(gè)例子需要這些程序才能編譯:Build-Depends:
debhelper (>= 7), python, python-support, python-setuptools, python-distutils-extra。這些也是編譯基本的python程序縮必須的包。(
依賴需要自己分析)
Standards-Version: 3.8.3,這行是使用的Debian
Policy版本,目前最新的是3.9.1。所以我們寫成:Standards-Version:
3.9.1;
Homepage: ,這行是上游的首頁地址。我們是從http://code.google.com/p/gwrite下載的,所以寫:。
下面是一個(gè)空行,表示Source部分結(jié)束;
Package: gwrite,這是說deb包的名叫g(shù)write,將來apt-get安裝的時(shí)候,就用這個(gè)名字。
Architecture: any,這是指要編譯的硬件構(gòu)架。any代表所有構(gòu)架。all代表這個(gè)軟件包是跨平臺(tái)的,比如說同python程序文件可以在所有平臺(tái)上跑,我們打包的是python包,把a(bǔ)ny改成all。如果打一個(gè)C程序的包,則用any;
Depends: ${shlibs:Depends}, ${misc:Depends},這一行是deb包的依賴關(guān)系。${shlibs:Depends},
${misc:Depends}是兩個(gè)變了,表示debhelper自動(dòng)檢測(cè)依賴;這個(gè)例子中,我們還要添加python,
python-gtk2, python-jswebkit, python-webkit, mimetex, wv。添加完的Depends是這樣的:Depends:
${shlibs:Depends}, ${misc:Depends}, python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv;
Kandu: dpkg-dev,會(huì)檢測(cè)自己的host,把那個(gè)項(xiàng)在編譯時(shí)替換成當(dāng)前的。所以寫any即可;
Description: ,這行是簡(jiǎn)單的描述,要在60個(gè)字符以內(nèi),要用英語。從語言學(xué)來講,這應(yīng)該是一個(gè)名詞性的成分,比如手里這個(gè)就寫成:simple GTK+ HTML5 rich text editor。寫完的樣子是:
Description: simple GTK+ HTML5 rich text editor。
,這里寫的是長(zhǎng)描述。也是用英語,應(yīng)該是完整的句子,每行大概寫70個(gè)字符,不要太多,沒寫完可以換行,每行的開頭都要有一個(gè)空格,示例:gWrite
is a simple GTK+ HTML5 WYSIWYG editor, focusing on writing and simple text formating. It can automatically generate a table of contents based on the document structure.每行開頭都有一個(gè)半角空格。這樣我們control文件就寫完了。
Control文檔示例:
Source: gwrite
Section: editors
Priority: optional
Maintainer: Aron Xu
Build-Depends: cdbs, debhelper (>= 7), python, python-support, python-setuptools, python-distutils-extra
Standards-Version: 3.9.1
Homepage: http://code.google.com/p/gwrite
Package: gwrite
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-gtk2, python-jswebkit, python-webkit, mimetex, wv
Description: simple GTK+ HTML5 rich text editor
gWrite is a simple GTK+ HTML5 WYSIWYG editor, focusing on writing
and simple text formating. It can automatically generate a table of
contents based on the document structure.
.
It aims to be lighter than OOWrite & OOWeb, and to be as useful as them.
下面是copyright文件。這個(gè)文件里寫的是版權(quán)內(nèi)容。版權(quán)的寫法比較復(fù)雜,今天先按下不表。(您可以參考范本進(jìn)行修改)
再看文件夾里有很多.ex文件。這些文件都是某些功能性的腳本,通常來說,大多數(shù)包都只需要一個(gè)watch.ex。圖形化程序還需要menu.ex。watch.ex是debian監(jiān)視上游新版本用的工具,不進(jìn)入官方倉庫的包用不上,今天不講寫法。menu.ex是桌面菜單項(xiàng),我們要使用它,所以把他重命名為menu。也就是去掉.ex后綴。默認(rèn)模板:
?package(gwrite):needs="X11|text|vc|wm" section="Applications/see-menu-manual"\ title="gwrite" command="/usr/bin/gwrite"
needs="X11|text|vc|wm"這句是說這個(gè)包需要什么顯示平臺(tái)來運(yùn)行,如果是文本的程序,可以寫text,圖形化程序則寫X11。section="Applications/see-menu-manual"這是說程序的分類。所有可以用的選項(xiàng)在這里找到http://www.debian.org/doc/packaging-manuals/menu-policy/ch2.html#s2.1因?yàn)槔永锏某绦蚴莻€(gè)編輯器,所以寫成:
?package(gwrite):needs="X11" section="Applications/Editors"\ title="gwrite" command="/usr/bin/gwrite"
其余的.ex文件和.EX文件在例子里都用不上,刪除。
README.Debian README.source的用處是,如果你想就這個(gè)包做點(diǎn)什么說明,那么寫在這里README.Debian是寫給最終用戶的。README.source是關(guān)于源代碼包有什么問題,如果沒有什么要在里面說的,刪掉。docs文件是dh_make自動(dòng)檢測(cè)的上游文檔列表,如果是空的,刪掉。我們的例子里它就是空的,所以刪了。現(xiàn)在要在文件夾里創(chuàng)建一個(gè)名為pycompat的文件,里面寫2就行了,這個(gè)文件沒有什么變的,就是python包就加上它,不是python包不需要它,pycompat文件里只有一個(gè)數(shù)字:2。
在當(dāng)前目錄下創(chuàng)建一個(gè)文件夾:
source,然后在source目錄下創(chuàng)建一個(gè)名為format的文本文件,里面寫一行文字:3.0
(quilt)。這代表使用3.0 (quilt)的源代碼格式。
最后剩下rules文件了。這個(gè)文件是編譯deb包的主控文件,它本身是一個(gè)Makefile,但是不要往里亂寫target。90%的情況下,默認(rèn)的rules就可以滿足我們的要求,現(xiàn)在debian/目錄下的工作基本完成了。
我們開始嘗試編譯這個(gè)包。
編譯的第一步,是安裝所有編譯依賴,也就是寫在control文件的Build-Depends項(xiàng)里的內(nèi)容:debhelper python-support
python-setuptool python-distutils-extra。當(dāng)前的例子里是這些:
sudo aptitude install debhelper python-support python-setuptool python-distutils-extra
安裝完之后,先檢查自己是否在源代碼目錄里。例子里也就是gwrite-0.5.0目錄。在gwrite-0.5.0里運(yùn)行:
dpkg-buildpackage -rfakeroot(不需要root,直接運(yùn)行即可)
如果執(zhí)行成功,在父目錄里就會(huì)出現(xiàn).deb .build和.changes文件;如果出現(xiàn)錯(cuò)誤,就要根據(jù)提示再從頭找原因了。一個(gè)最簡(jiǎn)單deb包的制作例程,就是這樣。完整地展示給大家了。
轉(zhuǎn)自:
總結(jié)
以上是生活随笔為你收集整理的python脚本制作deb包_Deb包的制作 | 学步园的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。