1. 程式人生 > >ubuntu下將可執行程式打包成deb包

ubuntu下將可執行程式打包成deb包

最近的一個ubuntu下的專案需要提交測試驗收了,於是需要我們將程式打包。

打包的本質是將原始檔案壓縮與相應的控制命令繫結,最後進行軟體安裝的時候是將對應檔案解壓到指定目錄,根據我們提供的控制邏輯來進行安裝操作。

原來在windows下打包 我選擇採用了 advancedInstaller ,而這次我使用了系統自帶的dpkg

#環境準備

 - ubuntu 14.04

 - 可執行程式

 - 所有的靜態連結庫

#安裝必須工具

apt-get install dh-make

#準備安裝資料夾

可以在任意位置下進行,建立如下結構的目錄

- 檔案根/
  - DEBIAN/
    control
    ....
  - opt/
    - filename/
      可執行檔案
      靜態連結庫

對於最後的安裝過程來說  檔案根將對應成系統根目錄,如果我們需要新增對應檔案到系統指定位置 只要在檔案根對應檔案層次上放上指定檔案就可以了

比如我們要在 /usr/local/lib 下新增 libtest.a

那麼最後的組織就會變成

- 檔案根/
  - DEBIAN/
    control
    ....
  - opt/
    - filename/
      可執行檔案
      靜態連結庫
  - usr
    -local/
      -lib/
        libtest.a

DEBIAN資料夾下存放的是相應的控制邏輯,control檔案是必須的。

control檔案下配置程式的元資訊

內容大致如下

Package:	#包名
Version:	#版本號
Section:	gnome
Priority:	extra #優先順序
Maintainer:	name<mailaddress> #維護者
Homepage:	http://... #主頁地址
Architecture:	amd64   #這裡新增 i386   amd64等引數
Depends:<span style="white-space:pre">	</span>#如果存在依賴的庫在這裡填寫
Description:	#描述資訊

相關手冊上的描述  請參考https://www.debian.org/doc/debian-policy/ch-controlfields.html

Package (mandatory)

Source

Version (mandatory)

Section (recommended)

Priority (recommended)

Architecture (mandatory)

Essential

Depends et al

Installed-Size

Maintainer (mandatory)

Description (mandatory)

Homepage

Built-Using

在DEBIAN 目錄下可以建立一些特定檔案儲存在特定時間點執行命令

比如

prerm #需要在刪除前執行的命令

postrm #需要在刪除前執行的命令

其他的我沒有用到 需要的可以自行搜尋  或者試著在https://www.debian.org/doc/debian-policy/  上面找一下

#打包

dpkg -b 檔案根路徑   目標路徑(以deb結尾)

e.g 

dpkg -b   build/    test.deb

##可能遇到問題

子檔案許可權不夠

解決方案:將對應檔案的許可權修改為775

#嘗試安裝

sudo dpkg -i   test.deb

#刪除包

sudo dpkg -r test  #這個test  是你之前配置的包名

##可能遇到問題

解除安裝不完全,提示warning

分析: 在檔案安裝路徑下存在了一些程式執行時生成的檔案,

解決方案:配置 prerm檔案 在解除安裝之前將對應檔案先刪掉就可以了

解除安裝了一些不該解除安裝的東西

分析:在解除安裝的時候 dpkg是會將安裝的所有檔案都刪除的,所以如果你程式中存在著一些與其他程式共享的部分,那麼解除安裝的時候共享的部分也還是會被刪除的,

解決方案:儘可能打包成一個獨立的元件,不要將靜態庫放入系統共享空間中去。