Packaging New Software

在Ubuntu裡面有數千個套件,所以一定還有沒有人去處理到的部分。如果你有發現有哪個軟體套件很有趣,它需要讓大家知道並使用的話,也許你想要為Ubuntu去建立一個套件或者是使用 PPA。這個章節會教你如何打包一個新的軟體。在開始之前記得先設定好環境,這部分已經在之前「Getting Set Up」被描述過了。

6.1. Checking the Program

打包軟體的第一步是從upstream那邊取得相關tar ball並且邊譯後去執行它。這個章節將會教你如何打包一個在 GNU.org 的簡單程式 - GNU Hello。

如果你沒有相關的建置工具,請先安裝:

$ sudo apt-get install build-essential

並且安裝主要的套件:

$ wget -O hello-2.7.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz"

解壓縮套件:

$ tar xf hello-2.7.tar.gz
$ cd hello-2.7

這個程式是使用「autoconf build system」,所以第一步我們要使用「 ./configure 」去設定組態檔。
這個步驟將會檢查所有需要的建置相依和組態。因為hello只是個簡單的例子,所以build-essential應該就已經提供了所有的東西了,因為如果是其他的案例的話,你也許還要安裝許多其他的函式庫和開發工具,所以就請你根據 「 ./configure 」的錯誤訊息去安裝缺少的工具或函式庫直到成功為止:

$ ./configure

下一步你就可以編譯軟體了

$ make

編譯成功後你就可以安裝並且去執行它:

$ sudo make install
$ hello

6.2. Starting a Package

bzr-builddeb包含了從template裡面建立一個新套件的外掛程式。使用這個外掛必須使用 dh_make來包裝,你應該一開始安裝「packaging-dev」時就應該有了。所以接下來就是去執行這個命令,其中參數包含了套件名稱,版號,和這個upstream tarball的路徑:

$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz

當他問要以哪一種類型去包裝成單一二進制檔時,這將會將程式碼給引入branch並且增加到debian/packaging directory裡。對於內容,大部分的檔案只需要包含於特殊的套件(像是Emacs模組),所以你可以刪除其他選擇性的檔案:

$ cd hello/debian
$ rm *ex *EX

在debian/changelog裡面,將版號改到了Ubuntu版號 2.7-0ubuntu1 (upstream version 2.7, Debian version 0, Ubuntu version 1)。並且將unstable版改到目前的 current development Ubuntu release (像是 trusty)。

大部分的套件建置工作都是由一系列的Script - 「debhelper」去建置的,它主要會做的是 - 改變一個新的版號,檔案「compat」指示需要對哪個版本動作,這邊你會需要最近的版本「9」。
「control」則包含了所有的metadata,第一段描述了這個 source package,從第二段開始到最後一段則是如何去建置這個 binary packages。
我們在這邊將會加入一個相依性在「Build-Depends」裡面,請確實在你的hello裡面加入

Build-Depends: debhelper (>= 9)

同時你也需要在欄位「Description」裡面去加入這個軟體的描述。「copyright」欄位則需要加入以下的upstream source 的licence,根據檔案 hello/COPYING,這是 GNU GPL 3 or later。

在資料夾「docs」裡面必須要包含你覺得必須被包含進來的upstream文件。 README.source 和 README.Debian只有在套件裡有任何的非標準性功能才需要,這邊沒有,所以可以刪掉。

「source/format」可以不用動,這個部分是描述這個套件的版本格式,就讓他是原本的3.0就好了。
「rules」是最複雜的檔案,它其實就是一個Makefile,主要負責編譯和將套件轉為 binary package。
但是這個部份我們也不用去動它,因為這部分已經被debhelper 7 給自動處理了,所以「 universal %Makefile target 」將會直接執行dh script。

所有這些細節都在「 overview of the debian directory 」,或者是前幾章的『debian/Directory』,最後再將你的程式碼給commit到你的packaging branch上:

$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

6.3. Building the package

現在我們必須檢查我們的套件是否成功的編譯而且產生.deb檔了:

#如果要使用 bazzar的話
$ bzr builddeb -- -us -uc

#如果要使用 debuild的話
$ debuild -- -us -uc


$ cd ../../

bzr builddeb是就現在的位置去建立套件的指令,「-us」和 「-uc」代表不需要GPG簽核。

你可以檢視這個套件的內容,經由命令:

$ lesspipe hello_2.7-0ubuntu1_amd64.deb

現在安裝這個套件並檢查是否可以正常運作(晚點你可以使用指令「 sudo apt-get remove hello 」去解除安裝):

$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb

你也可以一次安裝所有的套件使用指令:

$ sudo debi

6.4. Next Steps

即使只是建立 .deb binary package,你的打包也可能會產生bug。如果使用工具「 lintian 」會自動偵測到許多的錯誤,它會分析 「source .dsc metadata 檔」, 「.deb binary packages」 或是 「.changes 檔」:

$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb

要看詳細的問題描述請用--info lintian flag 或是 lintian-info 指令。
Ubuntu檔案( Archive )的結果檢查可以在網站『http://lintian.ubuntuwire.org』找到,如果是Python的Package,可以使用工具「 lintian4python 」來做一些額外的lintian檢查。
從打包程序那邊修復了以後,你可以使用「-nc」去重建,它主要是不要用scratch去建置:

#如果要使用 bazzar的話
$ bzr builddeb -- -nc -us -uc

#如果要使用 debuild的話
$ debuild -- -nc -us -uc

在你的電腦上建置你的套件時,你必須確保是在一個乾淨的系統上去使用pbuilder建置,因為我們接下來要上傳到PPA (Personal Package Archive),上傳則需要被簽核(signed),因為系統必須要去驗證這個上傳的動作確實是你本人。

你必須要設定好你的GPG以後才能使用,如果你還沒設定好你的 pbuilder-dist or GPG,可以從前面的章節去設定。

因為我們剛剛有用「-us」和「-uc」,這樣的flag代表就不會傳給bzr buildded了,所以下一步就是你的套件需要被簽核:

#如果要使用 bazzar的話
$ bzr builddeb -S

#如果要使用 debuild的話
$ debuild -S

$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc

當你想要其他人檢視你的package時,你可以上傳你的branch到Launchpad上:

$ bzr push lp:~<lp-username>/+junk/hello-package

#如果要用git的話

$ git remote add repo2 git+ssh://git.launchpad.net/~<lp-username>/+git/hello-package
$ git push repo2 master

上傳到PPA上將會為你和其他人提供一個簡單的方式去測試這個 binary packages。你需要在Launchpad上去設置一個PPA並且由指令「dput」去上傳他:

$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes

更多資訊請參考: uploading

如果你想要要求其他人檢視你的程式碼的話,可以經由「 #ubuntu-motu IRC channel 」或是「 MOTU mailing list 」,那邊應該會有相對應的團隊你可以問問題,像是GNU團隊之類的。

6.5. Submitting for inclusion

有好幾種方式都可以讓你的package被帶進去Ubuntu裡面。但是在大部分的例子裡,經由Debian是最推薦的方式,因為這樣就可以確保你的package會最先讓最多人看到,而不是只有在Debian和Ubuntu上,
還有許多其他的分支也都會被用到。底下有三個連結,可以讓你發送你的新package到Debian上:

在有一些狀況底下,可能先要直接進到Ubuntu,像是Debian也許在「freeze」的狀態,所以就變成無法馬上經由Debian然後再進入Ubuntu,可能要等到下一次的發布。

這個部分的話,就可以參考一下Ubuntu wiki的文件 - New Packages

6.6. Screenshots

一旦你已經上傳你的套件到Debian上了,你應該增加螢幕截圖,這樣要使用你的套件的人才可以很直觀的知道你的軟體長什麼樣子,這部分應該上傳到: http://screenshots.debian.net/upload .


Ref:
http://packaging.ubuntu.com/html/packaging-new-software.html

results matching ""

    No results matching ""