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是會將安裝的所有檔案都刪除的,所以如果你程式中存在著一些與其他程式共享的部分,那麼解除安裝的時候共享的部分也還是會被刪除的,
解決方案:儘可能打包成一個獨立的元件,不要將靜態庫放入系統共享空間中去。