參考:https://segmentfault.com/a/1190000005029385

參考:UnityLaunchersAndDesktopFiles

deb是Debian Linux的軟體包格式。一般來說是需要通過編譯原始碼然後製作deb包。

但是,為了快速方便,下面直接在程式打包的基礎上來進行deb包的封裝。

步驟如下:

先完成程式的打包

先把程式打包完成。

建立需要的目錄結構和檔案

首先建立一個工作目錄,比如在主資料夾下建立YouAppName目錄:

$ cd ~
$ mkdir YouAppName
$ cd YouAppName

deb檔案在安裝的時候預設是將檔案釋放到Linux系統的根目錄下,即/

如果我們這裡設定安裝路徑為/opt,那麼就安裝到opt下。

操作如下:

mkdir -p opt
# 把之前打包好的cp到設定目錄結構的opt下
cp -a YouAppName/opt/

我們建立一個opt目錄,這樣安裝的時候就可以安裝到系統的/opt下面去了。你建立什麼目錄,它安裝到哪裡去(前提得是Linux系統下的標準目錄。)

同時我們還需建立一個DEBIAN目錄,需要在DEBIAN目錄下建立一個control檔案,並加入以下內容:

package: YouAppName
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Depends:
Maintainer: you email or inc
Description: YouAppName-deb

desktop

[Desktop Entry]
Version=1.0 #app的版本
Name=YouAppName #app的名字
Comment= this app use for test #說明資訊
Exec=/opt/YouAppName/YouAppName.sh #app的執行路徑,請使用絕對路徑
Icon=/opt/YouAppName/lib/YouAppName.png #icon 路徑,請使用絕對路徑
Terminal=false #是否在終端啟動
Type=Application
Categories=Utility;Application;

大概的專案結構(非debian標準)

注: 請根據實際情況靈活配置目錄,請參考下面我組織的結構

//  TODO 後面有空補充完善

└── YouAppName  #目錄
├── opt #目錄
│ ├── YouAppName #目錄 自己應用程式的名字
│ |── YouAppName # 程式或檔案 Qt生成的或其它可執行程式
| |—— YouAppName.sh #程式的啟動指令碼。
| |—— 專案封裝的so或者第三方的so檔案和可執行檔案放在同一層級(只是建議)
│ |── lib #目錄 Qt相關的的so檔案
| |—— plugins #目錄 Qt的外掛
│ ├── YouAppName.desktop
│ ├── YouAppName.png
│ ├── ...等等檔案

└── DEBIAN #目錄 名字確定
├── control #控制檔案 名字不可改,必須有這個檔案
├── postinst #指令碼檔案 名字不可改,執行sudo dpkg -i xx.deb命令時,會執行這個指令碼. 非必須檔案
├── postrm #指令碼檔案 名字不可改,執行sudo dpkg -r app 命令時,會執行這個指令碼 .非必須檔案

封裝為debian系的deb安裝包命令

sudo dpkg -b YouAppName/ YouAppName_V1.0_amd64.deb

安裝,解除安裝debian包

dpkg命令

dpkg的基本使用

// 注: 需要寫軟體的名字,tab並不能補全
sudo dpkg -i xxx.deb 安裝deb包
sudo dpkg -r xxx 解除安裝
sudo dpkg -P xxx 解除安裝(並且刪除配置檔案)(推薦使用這個,解除安裝的乾淨)

注意事項

給desktop檔案新增執行許可權(非必須,但是建議)

chmod 755 YouAppName.desktop

指定desktop檔案

不過xxx.desktop 的寫法要一個限制:包含“Exec”那一行,“=”和要執行的程式之間要留一個空格。也就是Exec=XXX是無法通過“sh xxx.desktop”執行,正確的是Exec= XXX。