linux下deb包的管理及制作 | 一次成功


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM