我在 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文件上運行命令時,我驚訝地看到顯示出來了大量錯誤、警告和注釋!
在包上運行 Lintian 時看到的大量報錯
詳細的 Lintian 報錯
詳細的 Lintian 報錯 (2) 以及更多
我花了幾天時間修復與 Debian 包策略違例相關的一些錯誤。為了消除一個簡單的錯誤,我必須仔細研究每一項策略和 Debian 的規則。為此,我參考了Debian 策略手冊以及Debian 開發者參考。
我仍然在努力使它變得完美無暇,并希望很快可以將它上傳到 mentors.debian.net!
如果 Debian 社區中使用 Thunderbird 的人可以幫助修復這些報錯就太感謝了。
-
源代碼
+關注
關注
96文章
2944瀏覽量
66673 -
Debian
+關注
關注
0文章
74瀏覽量
1151
原文標題:Debian 打包入門
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論