04 September 2014
其實不久前有寫一篇講怎麼build deb package
不過那篇的code source並不是來自於自己的source,
那麼假設你今天自己有一個web,你想把這web打包成一個deb供人安裝,那該怎麼做呢?
這篇主要就是講怎麼create一個自己的deb package.



1. Install necessary package

sudo apt-get install dh-make
dh-make是用來準備debian package所需要的files,
等等會用來gen template files.


2. Prepare environment

這裡先create一個folder,名稱為www,
www底下也要create一些web所需的資料夾和檔案,像是images, css ,js...etc
www的目錄結構大概就長這樣,

www
├── css
│   └── main.css
├── images
│   └── a.png
└── static
└── index.html



我們要把folder底下的東西都打包進去debian package,
並且讓其他人在安裝這個debian package時,可以安裝到我們所指定的path底下!


3. Generate template files

在這步要用前面安裝的dh_make來generate出debian package所需要的template files,
在generate之前,先設定一個環境變數,
這環境變數是用來記錄這個debian package的作者是誰
export DEBFULLNAME="Ken Yang"

dh_make --single --packagename ken-sdk_0.1 --native -e xxxx@gmail.com
--packagename要注意一下,
--packagename分為兩個部分,
前面的部分ken-sdk是package name,
package name只能用-來分隔,不能用底線!
而後面的_0.1是version number,
--natvie,意思是這個debian不是從一個既有的tarball gen出來的!

generate完成以後,你會發現在www folder底下多了一個debian folder,
這debian folder裡面是放一些build debian package所需要的template files,
而既然是template files,那麼就有一些不需要的file或者需要被修改的file,
首先先刪除不需要的file吧!
sudo rm debian/*.ex debian/*.EX

接著就來修改這個template,
首先要先改control這file,
vim debian/control
打開以後,會看到很多information,
你比較需要改的大概就只有Depends (dependency),和Description了!
改完儲存以後即可!

接下來要改copyright,
vim debian/copyright
打開以後,大概就只有年份和作者名稱要改而已!

剩下其他的file,像是README, docs就看你要不要改了,
記得rules千萬別改!rules是build package的起頭!


4. Build debian package

在完成template的修改,準備開始build之前,
我們還有最後一個步驟,就是要指定哪些files or folder是你要放進去這個debian package的!
而就是靠一個檔案去記錄!
這個檔案名稱很重要,要跟你前面的package name一模一樣,
我們前面的package name是ken-sdk,
所以這個file要叫做ken-sdk.install,
裡面的格式就像下面一樣,
images/* /opt/www/image
css/* /opt/www/css
js/* /opt/www/js
第一格參數:現在www folder底下路徑的檔案
第二格參數:將來這deb package被安裝時,這些files要被安裝到哪裡
儲存以後,就可以開始build,指令如下:
dpkg-buildpackage -rfakeroot -b
-rfakeroot:使用root的權限
-b:單純只是binary,不要去build source


5. Verify

完成以後,
debian package會放在folder的上層目錄,
應該會有一個ken-sdk_0.1_amd64.deb,
有一個快速verify你要的files有沒有被包進去,
lesspipe ken-sdk_0.1_amd64.deb

當然你也可以安裝起來看看,
sudo dpkg --install ../ken-sdk_0.1_amd64.deb

接著就去看剛剛指定的folder(/opt/www),是否有我們原本的檔案!


6. Advance: Pre-Install or Post-Install

如果你想要在這package完成安裝或者開始安裝之前,做一些前置作業,
那麼就可以靠preinst和postinst這兩個檔案,
preinst就是安裝之前,
postinst就是安裝完成之後,
相反地,如果你想要在這package被remove時,也做一些操作,
那麼就要有prerm和postrm這兩個檔案!


7. Advance: Update pacakge

如果你這package想要更新,
變成0.2版本,你可以直接編輯change log,但有點麻煩!
可以透過指令快速達成!
dch -v 0.2 "Update package."

之後一樣直接dpkg-buildpackage -rfakeroot -b就可以了!







blog comments powered by Disqus