1.deb包介紹
在debian/ubuntu環境下,很多情況下,我們安裝已經開發的程序運用,可以通過deb包的命令進行程序的部署,對應的項目目錄文件也會同步到某些目錄下,
有些情況下將程序做成service啟動,這樣會更方便運用的管理,如通過service xxx start|stop|status|restart。
deb 是 Unix 系統(其實主要是 Linux)下的安裝包,基於 tar 包,因此本身會記錄文件的權限(讀/寫/可執行)以及所有者/用戶組。
deb 包本身有三部分組成:數據包,包含實際安裝的程序數據,文件名為 data.tar.XXX;安裝信息及控制腳本包,包含 deb 的安裝說明,標識,腳本等,文件名為 control.tar.gz;最后一個是 deb 文件的一些二進制數據,包括文件頭等信息,一般看不到,在某些軟件中打開可以看到。
deb 本身可以使用不同的壓縮方式。tar 格式並不是一種壓縮格式,而是直接把分散的文件和目錄集合在一起,並記錄其權限等數據信息。之前提到過的 data.tar.XXX,這里 XXX 就是經過壓縮后的后綴名。
deb 默認使用的壓縮格式為 gzip 格式,所以最常見的就是 data.tar.gz。常有的壓縮格式還有 bzip2 和 lzma,其中 lzma 壓縮率最高,但壓縮需要的 CPU 資源和時間都比較長。
data.tar.gz包含的是實際安裝的程序數據,而在安裝過程中,該包里的數據會被直接解壓到根目錄(即 / ),因此在打包之前需要根據文件所在位置設置好相應的文件/目錄樹。
而 control.tar.gz 則包含了一個 deb 安裝的時候所需要的控制信息。一般有 5 個文件:
- control,用了記錄軟件標識,版本號,平台,依賴信息等數據,這是最主要的文件配置,必不可少;
- preinst,在解包data.tar.gz 前運行的腳本;
- postinst,在解包數據后運行的腳本;
- prerm,卸載時,在刪除文件之前運行的腳本;
- postrm,在刪除文件之后運行的腳本;在 Cydia 系統中,Cydia 的作者 Saurik 另外添加了一個腳本,extrainst_,作用與 postinst 類似。
- rules,通常是給命令dpkg-buildpackage使用
dpkg與apt-get區別
使用 dpkg 命令安裝軟件時,可以使用 -i
選項並指定 deb 安裝包的路徑。和 Ubuntu 下的另一個包管理工具 apt-get
(Advanced Package Tool)有所不同。
apt-get
命令並不直接操作 deb 安裝包文件,而是從 /etc/apt/sources.list 配置文件中定義的軟件鏡像源里下載軟件包並安裝,使用時也只需指定軟件的名稱(或者也可以附加上版本號)。
apt-get 命令安裝軟件:
$ apt-get install <package_name[=version]>
dpkg 命令安裝軟件:
$ dpkg -i <package_file_path>
因此,dpkg 主要是用來安裝已經下載到本地的 deb 軟件包,或者對已經安裝好的軟件進行管理。而 apt-get 可以直接從遠程的軟件倉庫里下載安裝軟件。
2.deb常用命令
1).安裝deb包
dpkg -i 包名
2).刪除deb包,刪除安裝的文件
dpkg -r 包名
# e.g. 如hello_1.0_linux_amd64.deb, 就是hello
3).提取deb包文件到指定目錄
dpkg -x 包名 dirname
# e.g. dpkg -x hello_1.0_linux_amd64.deb ./hello
# 解釋,提取deb包信息到當前的hello目錄中,但是DEBIAN包不會提取到hello中
4).查看包中的文件信息
dpkg -c 包名
# stout會列出所有目錄文件信息
5).制作deb包
dpkg|dpkg-deb -b source-pakage pakageName
# 在做包前還有些工作是要完成的,見下文
3.deb包的制作
首先介紹下基本流程。
主要流程分以下三步:
1).編輯文件信息
2).編寫control信息,單寫這個也可以成功打出deb包,如果配置文件較多,比如加入系統服務的那些文件,需要加在xxxxinst文件腳本中
3).構建deb包
下面通過一個簡單的例子說明。
dpkg-deb方式構建deb包
1.首先生成項目目錄
# mkdir -p hello/opt
2.進入目錄中
# cd hello/opt
3.生成編輯文件-簡單做個python例子
# touch hello.py
# vim hello.py
以下是文件內容
------
#!/usr/bin/python
print "hello"
------
保存后退出
4.加執行權限
# chmod +x hello.py
5.回到hello主目錄下,生成DEBIAN目錄
# mkdir DEBIAN
6.編寫control信息
# cd DEBIAN
# touch control
# vim control
以下是control內容
------
Package: hello
Version: 1.0
Section: BioInfoServ
Priority: optional
Depends:
# 此處是相關的依賴包,多個用逗號隔開,如有確切版本,則可以 python-django (= 1.11.5)
Suggests:
Architecture: amd64
Installed-Size: 4096
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: A test for using dpkg cmd
------
7.回到hello目錄
------
root@test:/data/test/hello# ls -R
.:
DEBIAN opt
./DEBIAN:
control
./opt:
hello.py
------
8.接下來執行做包命令
# 回到hello目錄上層,
# cd ..
# ls # hello目錄
# dpkg-deb -b hello hello_1.0_linux_amd64.deb # dpkg-deb命令,-b表示構建deb包, hello表示源文件包, hello_1.0_linux_amd64.deb表示構建后的deb包
# 下面是輸出
------
dpkg-deb: building package 'hello' in 'hello_1.0_linux_amd64.deb'.
------
# 更多
我們可以通過以下命令來提取deb包的DEBIAN信息
dpkg-deb -e xx包
# 提取對應deb包的DEBIAN目錄到當前目錄,內部含control,confile,postinst等等信息
到了這里,deb包就完成了,接下來可以通過dpkg相關命令管理deb包。
4.寫在后面
deb包的目錄樹
|——mydeb
|————usr
|————lib
|——可執行文件(安裝后,就在你的/usr/lib生成相應的可執行文件)
|————share
|————icons
|——deb.png(圖標文件生成到/usr/share/icons/)
|————applications
|——deb.desktop(桌面文件生成到/usr/share/applications/)
|————DEBIAN(大寫、用來制作打包文件)
|————control(描述deb包的信息必須的文件)
DEBIAN目錄下可用的文件如下
這個目錄下面的文件很多,不能一一解釋。這里列舉幾個重要的,也是絕大部分軟件必須的:
control文件: 聲明很多重要的變量,dpkg通過這些變量來管理軟件包
copyright文件: 不用說,版權信息,相當重要
changelog文件: 這是一個必需文件,包含軟件版本號,修訂號,發行版和優先級。
rules文件: 這實際上是另外一個Makefile腳本,用來給dpkg-buildpackage用的.
compat文件: 這個文件留着是有用的
dirs文件:這個文件指出我們需要的但是在缺省情況下不會自動創建的目錄
conrol文件
//包名
Package: Internet-of-things
//版本
Version: 1.0.0-2017.05.03
//包分類
Section: tuils
//優先級
Priority: optional
//依賴軟件包
Depends:
//建議
Suggests:
//目標機架構
Architecture: i386 | amd64
//安裝后大小
Installed-Size:
//維護者
Maintainer: papa
//原維護者
Original-Maintainer: papa
//提供
Provides:
//包描述
Description: 歡迎來到萬物智聯
//軟件主頁
Homepage: http://blog.csdn.net/qq_27818541/
參考
https://blog.csdn.net/gatieme/article/details/52829907
https://blog.csdn.net/youlinhuanyan/article/details/99574723