Debian 打包入門
建立 CardBook 軟體包、本地 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
檔案上執行命令時,我驚訝地看到顯示出來了大量錯誤、警告和註釋!
在包上執行 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
相關文章
- Webpack入門以及打包優化Web優化
- Webpack輕鬆入門(四)——HTML打包WebHTML
- Webpack輕鬆入門(三)——圖片打包Web
- 打包工具 rollup.js 入門教程JS
- 如何在Debian和Ubuntu下重新打包Deb檔案Ubuntu
- webpack4入門筆記——打包模式選擇Web筆記模式
- webpack4入門和多檔案打包嘗試Web
- SpringBoot2.x入門:應用打包與啟動Spring Boot
- Debian 二進位制檔案(華文宋體字型)打包解包
- QT從入門到入土(八)——專案打包和釋出QT
- Angular入門到精通系列教程(14)- Angular 編譯打包 & Docker釋出Angular編譯Docker
- debian
- 入門入門入門 MySQL命名行MySql
- tar命令打包技巧有什麼?linux運維命令學習入門過程Linux運維
- Demo示例——Bundle打包和載入
- 何入CTF的“門”?——所謂入門就是入門
- 如何入CTF的“門”?——所謂入門就是入門
- scala 從入門到入門+
- makefile從入門到入門
- gRPC(二)入門:Protobuf入門RPC
- Webpack4 入門到帶你打包一個簡單單頁應用專案Web
- Flutter入門進階之旅(十八)Flutter專案打包成aar整合到原生Android專案FlutterAndroid
- debian記錄
- debian12
- debian配置(2)
- 【小入門】react極簡入門React
- Android入門教程 | RecyclerView使用入門AndroidView
- 如何透過命令列升級 Debian 9 為 Debian 10命令列
- 如何通過命令列升級 Debian 9 為 Debian 10命令列
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | Kotlin協程入門AndroidKotlin
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- express製作小型熱載入打包webpackExpressWeb
- debian12源
- Debian 12 設定
- Index of /debian-cd/Index
- Debian安裝MySQLMySql
- Debian 搭建 NFS 共享NFS