Debian 打包入門
我在 GSoC(LCTT 譯註:Google Summer Of Code,一項針對學生進行的開源項目訓練營,一般在夏季進行。)的任務中有一項是為用戶構建 Thunderbird 擴展 。一些非常流行的擴展,比如 Lightning (日曆行事曆)已經擁有了 deb 包。
另外一個重要的用於管理基於 CardDav 和 vCard 標準的聯繫人的擴展 Cardbook ,還沒有一個 deb 包。
我的導師, Daniel 鼓勵我去為它製作一個包,並上傳到 mentors.debian.net。因為這樣就可以使用 apt-get
來安裝,簡化了安裝流程。這篇博客描述了我是如何從頭開始學習為 CardBook 創建一個 Debian 包的。
首先,我是第一次接觸打包,我在從源碼構建包的基礎上進行了大量研究,並檢查它的協議是是否與 DFSG 兼容。
我從多個 Debian Wiki 中的指南中進行學習,比如 打包介紹、 構建一個包,以及一些博客。
我還研究了包含在 Lightning 擴展包的 amd64 文件。
我創建的包可以在這裡找到。
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
一些重要的文件,比如 control
、rules
、changelog
、copyright
等文件被初始化其中。
所創建的文件的完整列表如下:
$ 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
目錄下創建了 README
和 changelog
文件。它們包含了關於這個包的基本信息比如描述、作者、版本。
我安裝這個包,並檢查這個包安裝的內容。我的新包中包含了版本、架構和描述。
$ 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
更新完包的變更日誌
在重新構建完成後,重要的依賴和描述信息可以被加入到包中。 Debian 的 control
文件可以用來添加額外的必須項目和依賴。
本地 Debian 倉庫
在不創建本地存儲庫的情況下,CardBook 可以使用如下的命令來安裝:
$ sudo dpkg -i cardbook_1.1.0.deb
為了實際測試包的安裝,我決定構建一個本地 Debian 存儲庫。沒有它,apt-get
命令將無法定位包,因為它沒有在 Debian 的包軟體列表中。
為了配置本地 Debian 存儲庫,我複製我的包 (.deb)為放在 /tmp
目錄中的 Packages.gz
文件。
本地 Debian 倉庫
為了使它工作,我了解了 apt
的配置和它查找文件的路徑。
我研究了一種在 apt-config
中添加文件位置的方法。最後,我通過在 APT 中添加 *.list
文件來添加包的路徑,並使用 apt-cache
更新APT緩存來完成我的任務。
因此,最新的 CardBook 版本可以成功的通過 apt-get install cardbook
來安裝了。
使用 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!](/data/attachment/album/201807/29/105043j44ysr4ks3cxxrx9.png "Running Lintian on package")
在包上運行 Lintian 時看到的大量報錯
詳細的 Lintian 報錯
詳細的 Lintian 報錯 (2) 以及更多
我花了幾天時間修復與 Debian 包策略違例相關的一些錯誤。為了消除一個簡單的錯誤,我必須仔細研究每一項策略和 Debian 的規則。為此,我參考了 Debian 策略手冊 以及 Debian 開發者參考。
我仍然在努力使它變得完美無暇,並希望很快可以將它上傳到 mentors.debian.net!
如果 Debian 社區中使用 Thunderbird 的人可以幫助修復這些報錯就太感謝了。
via: http://minkush.me/cardbook-debian-package/
作者:Minkush Jain 選題:lujun9972 譯者:Bestony 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive