Debian 打包入門

Minkush Jain發表於2018-07-29

建立 CardBook 軟體包、本地 Debian 倉庫,並修復錯誤。

我在 GSoC(LCTT 譯註:Google Summer Of Code,一項針對學生進行的開源專案訓練營,一般在夏季進行。)的任務中有一項是為使用者構建 Thunderbird 擴充套件add-ons。一些非常流行的擴充套件,比如 Lightning (日曆行事曆)已經擁有了 deb 包。

另外一個重要的用於管理基於 CardDav 和 vCard 標準的聯絡人的擴充套件 Cardbook ,還沒有一個 deb 包。

我的導師, Daniel 鼓勵我去為它製作一個包,並上傳到 mentors.debian.net。因為這樣就可以使用 apt-get 來安裝,簡化了安裝流程。這篇部落格描述了我是如何從頭開始學習為 CardBook 建立一個 Debian 包的。

首先,我是第一次接觸打包,我在從原始碼構建包的基礎上進行了大量研究,並檢查它的協議是是否與 DFSG 相容。

我從多個 Debian Wiki 中的指南中進行學習,比如 打包介紹構建一個包,以及一些部落格。

我還研究了包含在 Lightning 擴充套件包的 amd64 檔案。

我建立的包可以在這裡找到。

Debian Package!

Debian 包

建立一個空的包

我從使用 dh_make 來建立一個 debian 目錄開始。

# Empty project folder
$ mkdir -p Debian/cardbook
# create files
$ dh_make\
> --native \
> --single \
> --packagename cardbook_1.0.0 \
> --email minkush@example.com

一些重要的檔案,比如 controlruleschangelogcopyright 等檔案被初始化其中。

所建立的檔案的完整列表如下:

$ find /debian
debian/
debian/rules
debian/preinst.ex
debian/cardbook-docs.docs
debian/manpage.1.ex
debian/install
debian/source
debian/source/format
debian/cardbook.debhelper.lo
debian/manpage.xml.ex
debian/README.Debian
debian/postrm.ex
debian/prerm.ex
debian/copyright
debian/changelog
debian/manpage.sgml.ex
debian/cardbook.default.ex
debian/README
debian/cardbook.doc-base.EX
debian/README.source
debian/compat
debian/control
debian/debhelper-build-stamp
debian/menu.ex
debian/postinst.ex
debian/cardbook.substvars
debian/files

我瞭解了 Debian 系統中 Dpkg 包管理器及如何用它安裝、刪除和管理包。

我使用 dpkg 命令建立了一個空的包。這個命令建立一個空的包檔案以及四個名為 .changes.deb.dsc.tar.gz 的檔案。

  • .dsc 檔案包含了所發生的修改和簽名
  • .deb 檔案是用於安裝的主要包檔案。
  • .tar.gz (tarball)包含了原始碼

這個過程也在 /usr/share 目錄下建立了 READMEchangelog 檔案。它們包含了關於這個包的基本資訊比如描述、作者、版本。

我安裝這個包,並檢查這個包安裝的內容。我的新包中包含了版本、架構和描述。

$ dpkg -L cardbook
/usr
/usr/share
/usr/share/doc
/usr/share/doc/cardbook
/usr/share/doc/cardbook/README.Debian
/usr/share/doc/cardbook/changelog.gz
/usr/share/doc/cardbook/copyright

包含 CardBook 原始碼

在成功的建立了一個空包以後,我在包中新增了實際的 CardBook 擴充套件檔案。 CardBook 的原始碼託管在 Gitlab 上。我將所有的原始碼檔案包含在另外一個目錄,並告訴打包命令哪些檔案需要包含在這個包中。

我使用 vi 編輯器建立一個 debian/install 檔案並列舉了需要被安裝的檔案。在這個過程中,我花費了一些時間去學習基於 Linux 終端的文字編輯器,比如 vi 。這讓我熟悉如何在 vi 中編輯、建立檔案和快捷方式。

當這些完成後,我在變更日誌中更新了包的版本並記錄了我所做的改變。

$ dpkg -l | grep cardbook
ii cardbook 1.1.0 amd64 Thunderbird add-on for address book

Changelog

更新完包的變更日誌

在重新構建完成後,重要的依賴和描述資訊可以被加入到包中。 Debian 的 control 檔案可以用來新增額外的必須專案和依賴。

本地 Debian 倉庫

在不建立本地儲存庫的情況下,CardBook 可以使用如下的命令來安裝:

$ sudo dpkg -i cardbook_1.1.0.deb

為了實際測試包的安裝,我決定構建一個本地 Debian 儲存庫。沒有它,apt-get 命令將無法定位包,因為它沒有在 Debian 的包軟體列表中。

為了配置本地 Debian 儲存庫,我複製我的包 (.deb)為放在 /tmp 目錄中的 Packages.gz 檔案。

Packages-gz

本地 Debian 倉庫

為了使它工作,我瞭解了 apt 的配置和它查詢檔案的路徑。

我研究了一種在 apt-config 中新增檔案位置的方法。最後,我通過在 APT 中新增 *.list 檔案來新增包的路徑,並使用 apt-cache 更新APT快取來完成我的任務。

因此,最新的 CardBook 版本可以成功的通過 apt-get install cardbook 來安裝了。

Package installation!

使用 apt-get 安裝 CardBook

修復打包錯誤和 Bugs

我的導師 Daniel 在這個過程中幫了我很多忙,並指導我如何進一步進行打包。他告訴我使用 Lintian 來修復打包過程中出現的常見錯誤和最終使用 dput 來上傳 CardBook 包。

Lintian 是一個用於發現策略問題和 Bug 的包檢查器。它是 Debian 維護者們在上傳包之前廣泛使用的自動化檢查 Debian 策略的工具。

我上傳了該軟體包的第二個更新版本到 Debian 目錄中的 Salsa 倉庫 的一個獨立分支中。

我從 Debian backports 上安裝 Lintian 並學習在一個包上用它來修復錯誤。我研究了它用在其錯誤資訊中的縮寫,和如何檢視 Lintian 命令返回的詳細內容。

$ lintian -i -I --show-overrides cardbook_1.2.0.changes

最初,在 .changes 檔案上執行命令時,我驚訝地看到顯示出來了大量錯誤、警告和註釋!

Package Error Brief!

在包上執行 Lintian 時看到的大量報錯

Lintian error1!

詳細的 Lintian 報錯

Lintian error2!

詳細的 Lintian 報錯 (2) 以及更多

我花了幾天時間修復與 Debian 包策略違例相關的一些錯誤。為了消除一個簡單的錯誤,我必須仔細研究每一項策略和 Debian 的規則。為此,我參考了 Debian 策略手冊 以及 Debian 開發者參考

我仍然在努力使它變得完美無暇,並希望很快可以將它上傳到 mentors.debian.net!

如果 Debian 社群中使用 Thunderbird 的人可以幫助修復這些報錯就太感謝了。


via: http://minkush.me/cardbook-debian-package/

作者:Minkush Jain 選題:lujun9972 譯者:Bestony 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章