我在 GSoC(LCTT 譯注:Google Summer Of Code,一項(xiàng)針對學(xué)生進(jìn)行的開源項(xiàng)目訓(xùn)練營,一般在夏季進(jìn)行。)的任務(wù)中有一項(xiàng)是為用戶構(gòu)建 Thunderbird擴(kuò)展。一些非常流行的擴(kuò)展,比如Lightning(日歷行事歷)已經(jīng)擁有了 deb 包。
另外一個(gè)重要的用于管理基于 CardDav 和 vCard 標(biāo)準(zhǔn)的聯(lián)系人的擴(kuò)展Cardbook,還沒有一個(gè) deb 包。
我的導(dǎo)師,Daniel鼓勵(lì)我去為它制作一個(gè)包,并上傳到mentors.debian.net。因?yàn)檫@樣就可以使用apt-get來安裝,簡化了安裝流程。這篇博客描述了我是如何從頭開始學(xué)習(xí)為 CardBook 創(chuàng)建一個(gè) Debian 包的。
首先,我是第一次接觸打包,我在從源碼構(gòu)建包的基礎(chǔ)上進(jìn)行了大量研究,并檢查它的協(xié)議是是否與DFSG兼容。
我從多個(gè) Debian Wiki 中的指南中進(jìn)行學(xué)習(xí),比如打包介紹、構(gòu)建一個(gè)包,以及一些博客。
我還研究了包含在Lightning 擴(kuò)展包的 amd64 文件。
Debian 包
創(chuàng)建一個(gè)空的包
我從使用dh_make來創(chuàng)建一個(gè)debian目錄開始。
# Empty project folder
$ mkdir -p Debian/cardbook
# create files
$ dh_make
> --native
> --single
> --packagename cardbook_1.0.0
> --email [email protected]
一些重要的文件,比如 control、rules、changelog、copyright 等文件被初始化其中。
所創(chuàng)建的文件的完整列表如下:
$ 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 系統(tǒng)中Dpkg包管理器及如何用它安裝、刪除和管理包。
我使用dpkg命令創(chuàng)建了一個(gè)空的包。這個(gè)命令創(chuàng)建一個(gè)空的包文件以及四個(gè)名為.changes、.deb、.dsc、.tar.gz的文件。
.dsc文件包含了所發(fā)生的修改和簽名
.deb文件是用于安裝的主要包文件。
.tar.gz(tarball)包含了源代碼
這個(gè)過程也在/usr/share目錄下創(chuàng)建了README和changelog文件。它們包含了關(guān)于這個(gè)包的基本信息比如描述、作者、版本。
我安裝這個(gè)包,并檢查這個(gè)包安裝的內(nèi)容。我的新包中包含了版本、架構(gòu)和描述。
$ 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 源代碼
在成功的創(chuàng)建了一個(gè)空包以后,我在包中添加了實(shí)際的 CardBook 擴(kuò)展文件。 CardBook 的源代碼托管在 Gitlab 上。我將所有的源碼文件包含在另外一個(gè)目錄,并告訴打包命令哪些文件需要包含在這個(gè)包中。
我使用 vi 編輯器創(chuàng)建一個(gè) debian/install 文件并列舉了需要被安裝的文件。在這個(gè)過程中,我花費(fèi)了一些時(shí)間去學(xué)習(xí)基于 Linux 終端的文本編輯器,比如 vi 。這讓我熟悉如何在 vi 中編輯、創(chuàng)建文件和快捷方式。
當(dāng)這些完成后,我在變更日志中更新了包的版本并記錄了我所做的改變。
$ dpkg -l | grep cardbook
ii cardbook 1.1.0 amd64 Thunderbird add-on for address book
更新完包的變更日志
在重新構(gòu)建完成后,重要的依賴和描述信息可以被加入到包中。 Debian 的control文件可以用來添加額外的必須項(xiàng)目和依賴。
本地 Debian 倉庫
在不創(chuàng)建本地存儲(chǔ)庫的情況下,CardBook 可以使用如下的命令來安裝:
$ sudo dpkg -i cardbook_1.1.0.deb
為了實(shí)際測試包的安裝,我決定構(gòu)建一個(gè)本地 Debian 存儲(chǔ)庫。沒有它,apt-get命令將無法定位包,因?yàn)樗鼪]有在 Debian 的包軟件列表中。
為了配置本地 Debian 存儲(chǔ)庫,我復(fù)制我的包 (.deb)為放在/tmp目錄中的Packages.gz文件。
本地 Debian 倉庫
為了使它工作,我了解了apt的配置和它查找文件的路徑。
我研究了一種在apt-config中添加文件位置的方法。最后,我通過在 APT 中添加*.list文件來添加包的路徑,并使用apt-cache更新APT緩存來完成我的任務(wù)。
因此,最新的 CardBook 版本可以成功的通過apt-get install cardbook來安裝了。
使用 apt-get 安裝 CardBook
修復(fù)打包錯(cuò)誤和 Bugs
我的導(dǎo)師 Daniel 在這個(gè)過程中幫了我很多忙,并指導(dǎo)我如何進(jìn)一步進(jìn)行打包。他告訴我使用Lintian來修復(fù)打包過程中出現(xiàn)的常見錯(cuò)誤和最終使用dput來上傳 CardBook 包。
Lintian 是一個(gè)用于發(fā)現(xiàn)策略問題和 Bug 的包檢查器。它是 Debian 維護(hù)者們在上傳包之前廣泛使用的自動(dòng)化檢查 Debian 策略的工具。
我上傳了該軟件包的第二個(gè)更新版本到 Debian 目錄中的Salsa 倉庫的一個(gè)獨(dú)立分支中。
我從 Debian backports 上安裝 Lintian 并學(xué)習(xí)在一個(gè)包上用它來修復(fù)錯(cuò)誤。我研究了它用在其錯(cuò)誤信息中的縮寫,和如何查看 Lintian 命令返回的詳細(xì)內(nèi)容。
$ lintian -i -I --show-overrides cardbook_1.2.0.changes
最初,在.changes文件上運(yùn)行命令時(shí),我驚訝地看到顯示出來了大量錯(cuò)誤、警告和注釋!
在包上運(yùn)行 Lintian 時(shí)看到的大量報(bào)錯(cuò)
詳細(xì)的 Lintian 報(bào)錯(cuò)
詳細(xì)的 Lintian 報(bào)錯(cuò) (2) 以及更多
我花了幾天時(shí)間修復(fù)與 Debian 包策略違例相關(guān)的一些錯(cuò)誤。為了消除一個(gè)簡單的錯(cuò)誤,我必須仔細(xì)研究每一項(xiàng)策略和 Debian 的規(guī)則。為此,我參考了Debian 策略手冊以及Debian 開發(fā)者參考。
我仍然在努力使它變得完美無暇,并希望很快可以將它上傳到 mentors.debian.net!
如果 Debian 社區(qū)中使用 Thunderbird 的人可以幫助修復(fù)這些報(bào)錯(cuò)就太感謝了。
-
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66991 -
Debian
+關(guān)注
關(guān)注
0文章
75瀏覽量
1254
原文標(biāo)題:Debian 打包入門
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
MikroElektronika的mikroBUS Click板是否從頭開始的制作?
請問必須從頭創(chuàng)建BitGen .ut文件嗎?
如何使用和聲從頭開始設(shè)置HTTP服務(wù)?
ARM嵌入式系統(tǒng)設(shè)計(jì):從頭開始構(gòu)建還是使用SBC?
如何從頭開始創(chuàng)建一個(gè)新的SPC5應(yīng)用程序?
能否連接JTAG調(diào)試器并從頭開始對MCU進(jìn)行編程,因?yàn)镸CU上沒有舊代碼?
在三十分鐘內(nèi)創(chuàng)建你的深度學(xué)習(xí)服務(wù)器
如何從頭開始為EK-RA6M4評估板創(chuàng)建項(xiàng)目
PyTorch教程3.4之從頭開始執(zhí)行線性回歸
![PyTorch教程3.4之<b class='flag-5'>從頭開始</b>執(zhí)行線性回歸](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程4.4之從頭開始實(shí)現(xiàn)Softmax回歸
![PyTorch教程4.4之<b class='flag-5'>從頭開始</b>實(shí)現(xiàn)Softmax回歸](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程-3.4. 從頭開始執(zhí)行線性回歸
為什么從頭開始為汽車應(yīng)用設(shè)計(jì)IC很重要
在Spartan 6 FPGA上從頭開始實(shí)現(xiàn)全加器
![在Spartan 6 FPGA上<b class='flag-5'>從頭開始</b>實(shí)現(xiàn)全加器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論