Deb 文件是一種用於分發和安裝 Linux Debian 及其衍生發行版程序的存檔文件,通常包含應用程序數據。它們對於處理依賴項、桌面集成以及運行安裝前和安裝後腳本非常方便。與 Deb 格式類似的另一種包格式是 Fedora 系列發行版常用的 rpm 文件。
本文通過示例演示如何製作簡單的deb包,解釋了deb包內各文件的作用,以及安裝後如何生效和維護。
deb 包剖析
deb 是一種常見的 Unix ar 存檔格式,內含應用程序和其他實用程序文件。其中的關鍵組成部分是控制文件(control),它包含了有關 deb 包和安裝程序的重要信息。
- 在內部,deb包 包含了模擬 Linux 的典型文件系統目錄結構的文件集合,例如 /usr 、/usr/bin 、/opt等 。在安裝過程中,放置在其中一個目錄中的文件將被複制到實際文件系統中的同一位置。例如 軟件包內的/usr/bin/binaryfile 這樣的二進制文件將安裝到系統的 /usr/bin/binaryfile。
- 在外部,所有 deb 包文件都遵循特定的命名約定:
_-_.deb登錄後複製
假設您要發佈名爲 mynano 的程序,版本 1.0,該程序是爲 64 位處理器(AMD64)構建的。您的 deb 文件名將類似於 mynano_1.0-0_amd64.deb
製作 deb 包
我們已準備好生成包。請確保您的系統已安裝 dpkg-deb 工具(dpkg 軟件包提供)。稍後將使用dpkg-deb生成最終的deb包。
(1) 建立工作目錄以存放包文件,按照之前的命名約定進行命名。
mkdir mynano_1.0-1_amd64/登錄後複製
(2) 創建內部結構 將程序文件放在目標系統上應安裝的位置。假設您希望將可執行文件安裝到:/usr/bin/
首先創建目錄:
mkdir -p mynano_1.0-1_amd64/usr/bin/登錄後複製
mkdir命令的-p標誌將創建嵌套目錄,如果其中任意目錄不存在則自動創建。然後將可執行文件複製到其中:
# 假設你開發的程序可執行文件爲 ~/YourProjects/mynano/src/targets/release/mynanocp ~/YourProjects/mynano/src/targets/release/mynanomynano_1.0-1_amd64/usr/bin/登錄後複製
(3) 創建文件control 該文件位於DEBIAN目錄中(注意目錄名爲大寫字母)
先創建文件夾:DEBIAN
mkdir mynano_1.0-1_amd64/DEBIAN登錄後複製
然後創建空文件:control
touch mynano_1.0-1_amd64/DEBIAN/control登錄後複製
填寫control文件內容:
Package: mynanoVersion: 1.0Architecture: amd64Maintainer: linuxlibs Description: 基於nano的自定義編輯器Depends: nano (>= 5.0)登錄後複製
其中:
- Package– 程序名稱;
- Version– 程序版本;
- Architecture— 目標架構;
- Maintainer– 包裹維護負責人的姓名和電子郵件地址;
- Description– 程序的簡要說明。
- Depends- 本軟件包依賴的其他軟件包。
該文件可能包含其他有用的字段,例如Depends指出deb包的依賴項列表。那麼如果藉助 apt 命令安裝 deb包的時候,就會先安裝上 nano>=5.0版本的軟件包,再安裝 mynano。
(5) 最後一步:構建 deb 包 按如下方式調用dpkg-deb:
dpkg-deb --build --root-owner-group登錄後複製登錄後複製
在我們的示例中:
dpkg-deb --build --root-owner-group登錄後複製登錄後複製
這裏的 –root-owner-group 標誌使所有 deb 包內容都歸 root 用戶所有,這是標準方法。如果沒有這樣的標誌,所有文件和文件夾的屬主都爲您當前的用戶,但考慮到 deb 軟件包將安裝到的系統中並不一定存在與你同名賬號,所以使用–root-owner-group 更合理。
上面的命令將在工作目錄旁邊生成一個.deb的文件,或者如果包內有錯誤或丟失,則打印錯誤。如果操作成功,就可以分發這個生成的 deb 包給他人了。
(6) 使用deb包安裝到系統:可以看到,通過apt方式安裝我們製作的deb包的時候,會自動安裝上依賴項:nano 軟件包
# apt install ./mynano_1.0-1_amd64.deb正在讀取軟件包列表... 完成正在分析軟件包的依賴關係樹... 完成正在讀取狀態信息... 完成注意,選中 'mynano' 而非 './mynano_1.0-1_amd64.deb'將會同時安裝下列軟件:nano建議安裝:hunspell下列【新】軟件包將被安裝:mynano nano升級了 0 個軟件包,新安裝了 2 個軟件包,要卸載 0 個軟件包,有 79 個軟件包未被升級。需要下載 280 kB/1,135 kB 的歸檔。解壓縮後會消耗 881 kB 的額外空間。您希望繼續執行嗎? [Y/n] y獲取:1 /root/my-nano-editor-src/mynano_1.0-1_amd64.deb mynano amd64 1.0.0 [855 kB]獲取:2 https://mirrors.ustc.edu.cn/ubuntu jammy/main amd64 nano amd64 6.2-1 [280 kB]已下載 280 kB,耗時 1秒 (422 kB/s)正在選中未選擇的軟件包 nano。(正在讀取數據庫 ... 系統當前共安裝有 231799 個文件和目錄。)準備解壓 .../archives/nano_6.2-1_amd64.deb...正在解壓 nano (6.2-1) ...正在選中未選擇的軟件包 mynano。準備解壓 .../mynano_1.0-1_amd64.deb...正在解壓 mynano (1.0.0) ...正在設置 nano (6.2-1) ...update-alternatives: 使用 /bin/nano 來在自動模式中提供 /usr/bin/editor (editor)update-alternatives: 使用 /bin/nano 來在自動模式中提供 /usr/bin/pico (pico)正在設置 mynano (1.0.0) ...正在處理用於 install-info (6.8-4build1) 的觸發器 ...正在處理用於 man-db (2.10.2-1) 的觸發器 ...Scanning processes...Scanning processor microcode...Scanning linux images...登錄後複製
(7) 【非必須】卸載安裝的軟件 mynano:
# apt remove mynamo -y正在讀取軟件包列表... 完成正在分析軟件包的依賴關係樹... 完成正在讀取狀態信息... 完成下列軟件包將被【卸載】:mynano升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 1 個軟件包,有 79 個軟件包未被升級。解壓縮後會消耗 0 B 的額外空間。您希望繼續執行嗎? [Y/n] y(正在讀取數據庫 ... 系統當前共安裝有 231872 個文件和目錄。)正在卸載 mynano (1.0.0) ...登錄後複製
(8) 【非必須】查詢 mynano_0.1-1_amd64.deb 的依賴關係:dpkg -I ./mynano*deb
以上製作deb包的方式,還有哪些可改進的地方:
以上就是Linux製作一個deb包如此簡單:Ubuntu的deb安裝包文件的內部組成分析與使用原理的詳細內容,更多請關注本站其它相關文章!