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