deb安裝包
deb是Unix系統(其實主要是Linux)下的安裝包,基于 tar 包,因此本身會記錄文件的權限(讀/寫/可執行)以及所有者/用戶組。
由于 Unix 類系統對權限、所有者、組的嚴格要求,而 deb 格式安裝包又經常會涉及到系統比較底層的操作,所以權限等的設置尤其重要。
deb組成
查看deb包含哪些文件
兩個命令結果都是一樣的,查看deb安裝包內有哪些文件。
dpkg -c xxx.deb // 安裝前根據deb文件查看
dpkg -L debname // 安裝后根據軟件名稱查看
deb包本身有三部分組成
組成 | 詳細 |
---|---|
數據包 | 包含實際安裝的程序數據,文件名為“data.tar.XXX” |
安裝信息及控制包 | 包含deb的安裝說明,標識,腳本等,文件名為“control.tar.gz” |
二進制數據 | 包含文件頭等信息,需要特殊軟件才能查看 |
deb本身可以使用不同的壓縮方式. tar格式并不是一種壓縮格式,而是直接把分散的文件和目錄集合在一起,并記錄其權限等數據信息。之前提到過的 data.tar.XXX,這里 XXX 就是經過壓縮后的后綴名. deb默認使用的壓縮格式為gzip格式,所以最常見的就是 data.tar.gz。常有的壓縮格式還有 bzip2 和 lzma,其中 lzma 壓縮率最高,但壓縮需要的 CPU 資源和時間都比較長
詳細介紹:
- data.tar.gz
包含的是實際安裝的程序數據,而在安裝過程中,該包里的數據會被直接解壓到根目錄(即/),因此在打包之前需要根據文件所在位置設置好相應的文件/目錄樹。 - control.tar.gz
則包含了一個deb安裝的時候所需要的控制信息。
控制文件 | 描述 |
---|---|
control | 用了記錄軟件標識,版本號,平臺,依賴信息等數據 |
preinst | 在解包data.tar.gz前運行的腳本 |
postinst | 在解包數據后運行的腳本 |
prerm | 卸載時,在刪除文件之前運行的腳本 |
postrm | 在刪除文件之后運行的腳本 |
備注:
- inst是install(安裝)的縮寫
- pre是表示XX之前的前綴
- post是表示XX之后的前綴
- rm是remove(移除)的縮寫
安裝&移除
deb包安裝
dpkg -i xxx.deb
deb包移除
dpkg -r debname
- 查看某個文件屬于哪個安裝包
dpkg -S filepath
- 指定安裝路徑
dpkg -X xxx.deb dirname
制作deb流程
- 準備好可執行的二進制文件
這個二進制文件要可執行,提前要考慮兼容性,如果程序有目錄要完整的一個程序目錄。
這里只拿一個單獨的二進制文件打包。測試文件下載
新建軟件文件夾
我們測試名稱為MyDeb新建一個名為DEBIAN文件夾
此文件夾內存放控制信息
在DEBIAN里新建一個文本文檔, 名為control, 編碼為utf-8, 內容如下所示:
例子:
Package: MyDeb
Version: 1.0.0-2018.01.11
Section: Software
Priority: optional
Depends:
Suggests:
Architecture: i386
Installed-Size: 4096
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: xxx
我們創建一個簡單的。
package: MyDeb #安裝包的名稱
version: 1.0.0 #版本
architecture: i386 #平臺
maintainer: young #維護者
description: you can description the deb #描述安裝包的信息
然后我們創建對應的二進制包安裝完成后的路徑信息放置在DEBIAN的同級目錄下,也就是把當前的目錄當成根(“/”)目錄,制作完成后安裝時,當前目錄下除了DEBIAN目錄的其他目錄都會被默認安裝到系統的“/”目錄下。
下面是一個程序目錄的例子。
|——mydeb|————usr|————bin|——可執行文件(安裝后,就在你的/usr/bin生成相應的可執行文件)|————share|————icons |——deb.png(圖標文件生成到/usr/share/icons/)|————applications |——deb.desktop(桌面文件生成到/usr/share/applications/)|————DEBIAN(大寫、用來制作打包文件)|————control(描述deb包的信息必須的文件)
完整實驗例子目錄結構:
MyDeb
├── DEBIAN
│ └── control
├── opt
│ └── MyDeb
│ ├── heart
│ └── heart.desktop
└── usr├── bin│ └── heart -> /home/vincent/桌面/MyDeb/opt/MyDeb/heart└── share├── applications│ └── heart.desktop└── icons└── heart_98.png8 directories, 6 files
打包
sudo dpkg -b MyDeb/ MyDeb-linux-amd64.deb