首頁  >  文章  >  電腦教學  >  Linux製作deb套件如此簡單:Ubuntu的deb安裝套件檔案的內部組成分析與使用原理

Linux製作deb套件如此簡單:Ubuntu的deb安裝套件檔案的內部組成分析與使用原理

WBOY
WBOY轉載
2024-02-19 13:21:15830瀏覽

Linux製作deb套件如此簡單:Ubuntu的deb安裝套件檔案的內部組成分析與使用原理

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/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)

其中:

  • 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安裝套件檔案的內部組成分析與使用原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:mryunwei.com。如有侵權,請聯絡admin@php.cn刪除