2010年6月14日 星期一

Debian Package (4) - 製作一個簡單但是有點用處的 Debian Package (續)

前一篇文章只能完成了 Debian Package 的打包但是並沒有上傳至 Debian 官方的套件庫
如果想要上傳到 Debian 官方的套件庫就必需尋求 Debian Developer (以下簡稱 DD) 的協助了
另外就是還要準備一把已經被 DD 簽過的金鑰才行 (可能要數個 DD 簽過才行)
如果沒有熟識的 DD 幫忙,其實還可以到 http://lists.debian.org/debian-mentors 上面尋求 DD 的協助
不過建議先看過 The debian-mentors FAQ 這份文件後再去尋求 DD 的協助

另外一種方式是自己維護 Debian Packages Archives 不過這真的很麻煩~ ^^b
如果是在 Ubuntu 上面的話可以考慮使用 Launchpad 上的 PPA 服務
以下將以 Launchpad PPA 為例

首先要建立自己的 Launchpad PPA 才行
會有一些申請的動作要自己去完成
可以參考 https://help.launchpad.net/Packaging/PPA 上面的說明

以下會假設已經完成 Launchpad PPA 的設定並且也準備好 SSH 金鑰跟 GPG 金鑰,只剩下要上傳 Debian Source Package 的動作要做。

因為 Launchpad PPA 只支援 Debian Source Package 的上傳,Launchpad 會再從 Debian Source Package 把 Debian Binary Package 給編譯產生出來,而之前的指令 dpkg-buildpackage -rfakeroot -uc -us -tc 其實會同時把 Debian Binary/Source Package 給產生出來,不過因為 -uc -us 這兩個參數就是指定不要使用 GPG 簽章,所以產生出來的 Debian Package 應該也無法上傳到 PPA 上使用。

如果要建立有簽章的 Debian Source Package 就要使用下面的指令
$ export DEBFULLNAME="First-Name Family-Name (Nickname)"
$ export DEBEMAIL="username@foo.bar"
$ dpkg-buildpackage -rfakeroot -S
這樣就可以在目錄上層建立牽過的 Debian Source Package 由以下三個檔案組成
taiwan-radio-tuner_0.1.dsc
taiwan-radio-tuner_0.1_source.changes
taiwan-radio-tuner_0.1.tar.gz
不過目前這樣的 Debian Source Package 就算上傳到 PPA 也會是失敗收場。

因為 Ubuntu 有一些規則要依循才行,首先修改 debian/changelog
taiwan-radio-tuner (0.1) lucid; urgency=low                                            

  * Initial release.

 -- First-Name Family-Name (Nickname) <username@foo.bar>  Mon, 14 Jun 2010 12:47:29 +0800
原本的 experimental 要改成 lucid 因為要給 Ubuntu 10.04 使用

另外就是如果要嚴格一點通過 lintian - Debian package checker 的測試,這是上傳到 Debian 官方套件庫必定要通過的測試,雖然在 Launchpad PPA 並沒有要求要通過 lintian 的測試,執行 debuild -S 後會發現有一些錯誤跟警告訊息出現。
W: taiwan-radio-tuner source: debhelper-but-no-misc-depends taiwan-radio-tuner
E: taiwan-radio-tuner source: package-uses-debhelper-but-lacks-build-depends
W: taiwan-radio-tuner source: package-lacks-versioned-build-depends-on-debhelper 7
W: taiwan-radio-tuner source: missing-debian-source-format
這些訊息其實只要 Google 一下就可以輕易地找到解決方法。
  • 首先是 debhelper-but-no-misc-depends 只要在 Depends 這個欄位多加上 ${misc:Depends} 就可以解決
  • 再來是 package-uses-debhelper-but-lacks-build-depends 跟 package-lacks-versioned-build-depends-on-debhelper 要多加上一個欄位 Build-Depends: debhelper (>= 7)
  • 剩下的 missing-debian-source-format 要多一個檔案在 debian/source/format 內容為 3.0 (native),因為這是一個原生的 Debian Package,如果是從上游的 tarball 而來的話就應該要使用 3.0 (quilt) 才行。
修改過後的 debian/control 如下:
Source: taiwan-radio-tuner
Maintainer: First-Name Family-Name (nickname) <username@foo.bar>
Section: contrib/web
Priority: extra
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.4
Homepage: https://chrome.google.com/extensions/detail/hacebidkncpkfenhpapdbkcefalehepa

Package: taiwan-radio-tuner
Architecture: all
Depends: ${misc:Depends}, google-chrome, alltray, gstreamer0.10-plugins-bad, gstreamer0.10-plugins-ugly, gstreamer0.10-ffmpeg
Description: Listen to the radio of Taiwan.
 The easiest way to listen to Internet Radio of Taiwan.
修改成這樣再去執行 debuild -S 應該就不會再有任何的錯誤訊息或是警告訊息的出現了。

最後就可以用 dput 上傳到 PPA 裡面啦~ :)
$ dput ppa:username/lucid taiwan-radio-tuner_0.1_source.changes
現在在 https://launchpad.net/~fourdollars/+archive/lucid
上面應該可以看到已經上傳到 Launchpad PPA 上的 Debian Package 了~
如果想要使用的朋友可以在 Ubuntu 10.04 上面執行 sudo add-apt-repository ppa:fourdollars/lucid
然後再執行 sudo apt-get update && sudo apt-get install taiwan-radio-tuner 應該就可以安裝好了~ :)
張貼留言