成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux制作一個deb包如此簡單:Ubuntu的deb安裝包文件的內部組成分析與使用原理

系統 Linux
本文通過實例演示了如何制作一個簡單的deb包,講解了deb包的內部各個文件的作用,以及安裝后在系統中如何生效、如何維護。

deb 文件是包含數據的存檔。標有擴展名,用于輕松分發和安裝 Linux Debian 及其衍生發行版適合的程序。當您的應用程序需要處理其他依賴項、將自身與桌面集成、運行安裝前和安裝后腳本等時,Deb 文件非常方便。(與deb格式功能類似的另一種包格式是Fedora系列發行版常用的rpm文件。)

本文通過實例演示了如何制作一個簡單的deb包,講解了deb包的內部各個文件的作用,以及安裝后在系統中如何生效、如何維護。

deb 包剖析

deb 是一個標準的 Unix ar 存檔格式[1],其中包含應用程序和其他實用程序文件。最重要的一個是控制文件(control),它存儲了有關 deb 包及其安裝的程序的信息。

  • 在內部,deb包 包含了模擬 Linux 的典型文件系統目錄結構的文件集合,例如 /usr 、/usr/bin 、/opt等 。在安裝過程中,放置在其中一個目錄中的文件將被復制到實際文件系統中的同一位置。例如 軟件包內的<.deb>/usr/bin/binaryfile 這樣的二進制文件將安裝到系統的 /usr/bin/binaryfile。
  • 在外部,所有 deb 包文件都遵循特定的命名約定:
<軟件名稱>_<主版本號>-<修訂版本號>_<硬件架構>.deb

假設您要發布名為 mynano 的程序,版本 1.0,該程序是為 64 位處理器(AMD64)構建的。您的 deb 文件名將類似于 mynano_1.0-0_amd64.deb

制作 deb 包

現在,我們已準備好生成包。確保您的系統中安裝了 dpkg-deb 工具(來自 dpkg 軟件包,可通過sudo apt install 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/mynano  mynano_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 <info@linuxlibs.com>
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 <package-dir>

在我們的示例中:

dpkg-deb --build --root-owner-group <mynano_1.0-1_amd64>

這里的 --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包的方式,還有哪些可改進的地方:

以上并沒有加入文件安裝后的額外處理腳本,而實際的deb軟件包,很多在安裝前、安裝后還要執行一些初始化服務配置腳本;或執行測試命令驗證安裝效果是否正常;安裝后通過腳本啟動后臺服務。

如何實現?

deb的規范支持添加 preinst、postinst、prerm 和 postrm 這4個腳本。置于/DEBIAN/目錄下。注意,這4個文件對于制作deb包來說,不是必須的,有需要的時候才添加。

例如我們為mynano在mynano_1.0-1_amd64/DEBIAN/ 目錄下添加4個文件:

preinst 文件內容為:

#!/bin/bash
echo "來自preinst的消息"

postinst 文件內容為:

#!/bin/bash
echo "一些適合在安裝后執行的處理邏輯"

prerm 文件內容為:

#!/bin/bash
echo "一些適合在卸載軟件前執行的處理邏輯"

postrm 文件內容為:

#!/bin/bash
echo "一些適合在卸載軟件后執行的處理邏輯"

并設置文件權限為0555或0755,以避免報錯:

dpkg-deb: 錯誤: 維護者的腳本 preinst 的權限位是 644 (必須 >=0555 且 小于等于0775)`。

重新制作安裝包:

# chmod 755 mynano_1.0-1_amd64/DEBIAN/{preinst,postinst,prerm,postrm}                           ```
  
# cp -pr mynano_1.0-1_amd64 mynano_1.0-2_amd64 #修訂版本從1變為2
# 確保 preinst 等文件已在DEBIAN/目錄下。
# dpkg-deb --build --root-owner-group mynano_1.0-2_amd64

得到新的修訂版的mynano deb包文件:mynano_1.0-2_amd64.deb

安裝新包:

#  apt install ./mynano_1.0-2_amd64.deb
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關系樹... 完成
正在讀取狀態信息... 完成
注意,選中 'mynano' 而非 './mynano_1.0-2_amd64.deb'
下列【新】軟件包將被安裝:
mynano
升級了 0 個軟件包,新安裝了 1 個軟件包,要卸載 0 個軟件包,有 79 個軟件包未被升級。
需要下載 0 B/855 kB 的歸檔。
解壓縮后會消耗 0 B 的額外空間。
獲取:1 /root/tmp/my-nano-editor-src/mynano_1.0-2_amd64.deb mynano amd64 1.0.0 [855 kB]
正在選中未選擇的軟件包 mynano。
(正在讀取數據庫 ... 系統當前共安裝有 231871 個文件和目錄。)
準備解壓 .../mynano_1.0-2_amd64.deb  ...
來自 preinst 的消息
正在解壓 mynano (1.0.0) ...
正在設置 mynano (1.0.0) ...
Scanning processes...
Scanning processor microcode...
Scanning linux images...

可以看到此時安裝中輸出了一段話:

正式 我們的preinst腳本的效果。

那么mynano的deb包安裝后,這些文件會被放置于 /var/lib/dpkg/info/ 目錄下,如mynano的腳本文件安裝后存儲于 /var/lib/dpkg/info/ 目錄下,以 mynano.*字符開頭的文件名就是 mynano的相關配置腳本:

# ls -lht  /var/lib/dpkg/info/mynano.*
-rw-r--r-- 1 root root 49  1月 17 12:33 /var/lib/dpkg/info/mynano.md5sums
-rw-r--r-- 1 root root 33  1月 17 12:33 /var/lib/dpkg/info/mynano.list
-rwxr-xr-x 1 root root 44  1月 17 12:23 /var/lib/dpkg/info/mynano.preinst
# cat /var/lib/dpkg/info/mynano.preinst
#!/bin/bash
echo "來自preinst的消息"

下面分別介紹每個腳本文件的作用:

  • preinst 安裝前做一些初始化工作,如目錄創建,文件創建,配置文件初始化等。
  • postInst 安裝后做一些服務設置的處理。
  • prerm 此腳本通常會停止與包關聯的任何守護程序。它在刪除與包關聯的文件之前執行。
  • postrm 此腳本用于修改鏈接或相關文件,然后刪除安裝包對應的系統文件。

參考資料:

Unix ar 存檔格式: http://fileformats.archiveteam.org/wiki/AR

責任編輯:趙寧寧 來源: 深入理解Linux
相關推薦

2010-01-08 16:02:14

Ubuntu deb包

2010-02-07 13:52:45

Ubuntu deb

2022-08-01 22:19:35

Ubuntu命令

2017-04-08 19:45:27

Linux命令安裝

2020-12-26 14:48:21

UbuntuLinuxDeb文件

2010-09-06 16:32:11

Ubuntu 10.1Ubuntu軟件中心

2010-01-06 13:41:47

DEB包安裝

2009-03-09 21:16:32

Linuxdeb源代碼

2009-03-09 18:03:40

Linuxdeb源代碼包

2023-11-01 10:44:15

MozillaLinux

2022-05-11 14:36:36

Ubuntudeb-getLinux 用戶

2018-06-22 10:05:04

Arch LinuxDEB軟件包

2010-03-04 10:14:27

Ubuntu技巧

2010-02-05 10:42:58

2020-05-15 12:50:04

Ubuntu 20.0LinuxDeb文件

2019-12-26 09:18:33

軟件LinuxWindows

2015-10-15 15:11:21

安裝包UbuntuLinux

2010-02-03 17:45:30

Linux yum

2010-02-26 14:31:52

Linux軟件安裝

2011-07-20 16:03:48

iPhone PXL 安裝包
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情一区二区三区 | 九九久久这里只有精品 | 美女视频. | 成人精品久久 | 成人午夜影院 | 久久精品免费观看 | 黄网站涩免费蜜桃网站 | 在线免费观看毛片 | 欧美精三区欧美精三区 | 一区福利视频 | 香蕉久久a毛片 | 九九热在线免费视频 | 99re视频精品 | 91精品国产91久久综合桃花 | 天堂亚洲 | av在线播放免费 | 欧美视频一级 | 久久精品一区 | 91久久久久久久久久久 | 成人精品系列 | 玖玖玖在线 | 一级片视频免费 | 午夜丰满寂寞少妇精品 | 日韩一级二级片 | 天天躁日日躁狠狠躁2018小说 | 国产蜜臀97一区二区三区 | 久久999| 国产精品久久久久久久久久久久久 | 欧美九九九 | 黄色一级片视频 | av影音| 日本精品裸体写真集在线观看 | 国产91综合一区在线观看 | 国产精品久久国产愉拍 | 国产在线一区二区三区 | 国产免费一区 | 亚洲一区二区三区四区五区中文 | www.久久久.com | 中文字幕第十页 | 欧美日韩大片 | 精品国产一区二区三区成人影院 |