Deb 文件是一種用於分發和安裝 Linux Debian 及其衍生發行版程式的存檔文件,通常包含應用程式資料。它們對於處理依賴項、桌面整合以及運行安裝前和安裝後腳本非常方便。與 Deb 格式類似的另一種套件格式是 Fedora 系列發行版常用的 rpm 檔案。
本文透過範例示範如何製作簡單的deb包,解釋了deb包內各文件的作用,以及安裝後如何生效和維護。
deb 是一種常見的 Unix ar 檔案格式,內含應用程式和其他實用程式檔案。其中的關鍵組成部分是控製檔案(control),它包含了有關 deb 套件和安裝程式的重要資訊。
_-_.deb
假設您要發布名為 mynano 的程序,版本 1.0,該程序是為 64 位元處理器(AMD64)構建的。您的 deb 檔名將類似於 mynano_1.0-0_amd64.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/mynano cp ~/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: mynano Version: 1.0 Architecture: amd64 Maintainer: linuxlibs Description: 基于nano的自定义编辑器 Depends: nano (>= 5.0)
其中:
該檔案可能包含其他有用的字段,例如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
以上是Linux製作deb套件如此簡單:Ubuntu的deb安裝套件檔案的內部組成分析與使用原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!