deb包的製作

一、debian和deb

廣義的Debian是指一個致力於創建自由操作系統的合作組織及其作品,由於Debian項目衆多內核分支中以Linux宏內核爲主,而且 Debian開發者 所創建的操作系統中絕大部分基礎工具來自於GNU工程 ,因此 “Debian” 常指Debian GNU/Linux。非官方內核分支還有隻支持x86的Debian GNU/Hurd(Hurd微內核),只支持amd64的Dyson(OpenSolaris混合內核)等。這些非官方分支都存在一些嚴重的問題,沒有實用性,比如Hurd微內核在技術上不成熟,而Dyson則基礎功能仍不完善。

Deb是Debian軟件包格式,文件擴展名爲.deb,deb包是Unixar的標準歸檔,將包文件信息以及包內容,經過gzip和tar打包而成,處理deb包的經典程序是dpkg,經常是通過apt來運作。

二、deb打包過程

安裝所需的依賴
sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg

創建一個應用目錄,命名爲{poackage-name}-{version},比如我們創建一個叫做demo的應用,目錄名爲demo-1.0.0。
將需要安裝的源碼或程序放入目錄,壓縮這個目錄爲demo.1.0.0.tar.gz,此時這個壓縮包和目錄在同級。
在終端中進入目錄,執行以下命令
dh_make -f ../demo_1.0.0.tar.gz
輸入s和Enter
之後,我們能夠看到demo-1.0.0目錄中會自動生成一個debian目錄,裏面包含了debian所需要的腳本,它們並不都是必須的,但我們至少要保留changelog、compat、control、copyright、rules以及source,同時,我們需要創建一個install文件。比如本例中我們希望把src中的文件拷貝到/home/中
#!/bin/bash
mkdir debian/demo/home/
cp -r src/* debian/demo/home/
保存install,修改其他文件(具體說明在後文介紹)。
回到demo-1.0.0目錄,輸入以下命令進行編譯:
dpkg-buildpackage -rfakeroot -b
我們看到demo-1.0.0上層生成了一個名爲demo_1.0.0-1_amd64.deb的deb包,至此,deb包打包成功。
如果想安裝這個deb包,可以執行
dpkg -i demo_1.0.0-1_amd64.deb

三、debian相關配置文件

1、安裝前執行腳本debian/preinst

Debian軟件包(".deb")解壓前執行的腳本,爲正在被升級的包停止相關服務,直到升級或安裝完成(成功後執行 'postinst' 腳本)
#!/bin/sh
if [ "$1" = "upgrade" ] || [ "$1" = "install" ];then
#需要執行的腳本
fi

2、安裝後執行腳本debian/postinst

主要完成軟件包(".deb")安裝完成後所需的配置工作。通常,postinst 腳本要求用戶輸入, 和/或警告用戶如果接受默認值,應該記得按要求返回重新配置這個軟件。一個軟件包安裝或升級完成後,postinst 腳本驅動命令,啓動或重起相應的服務。
#!/bin/sh
set -e
if [ "$1" = "configure" ]; then
ldconfig
fi

3、卸載前執行腳本debian/prerm

停止一個軟件包的相關進程,要卸載軟件包的相關文件前執行。
if [ "$1" = "remove" -o "$1" = "deconfigure" ]; then
#需要執行的腳本
fi

4、卸載後執行腳本debian/postrm

修改相關文件或連接,和/或卸載軟件包所創建的文件。
#!/bin/sh
if [ "$1" = "upgrade" ] ; then
需要執行的腳本
elif [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
需要執行的腳本
fi

5、debian/changelog

changelog提供版本修改信息,幫助下載軟件包的人瞭解軟件包中是否有他們需要知道的信息,決定着生成的deb包的版本號。格式如下:
package (version) distribution(s); urgency=urgency
[optional blank line(s), stripped]
* change details
more change details
[blank line(s), included in output of dpkg-parsechangelog]
* even more change details
[optional blank line(s), stripped]
-- maintainer name [two spaces] date
(注:date可以使用命令date -R獲取)

6、debian/control

control決定着deb包的包名、編譯依賴和運行依賴。用dh_make生成的默認control文件格式如下(行號是爲了添加解釋,我們在這裏特意加入的):
1 Source: demo
2 Section: unknown
3 Priority: extra
4 Maintainer: steveyg
5 Build-Depends: debhelper (>=9)
6 Standards-Version: 1.0.0
7 Homepage: <insert the upstream URL, if relevant>
8
9 Package: demo
10 Architecture: amd64
11 Depends: ${shlibs:Depends}, ${misc:Depends}
12 Description: <insert up to 60 chars description>
13 <insert long description, indented with spaces>
1-7行是源碼的control信息,9-13是二進制包的control信息。
第 1 行是源代碼包的名稱。
第 2 行是該源碼包要進入發行版中的分類。
第 3 行是描述用戶安裝該包的重要程度。由於這是一個常規優先級的軟件,並不與其他軟件包衝突,我們將優先級改爲 optional。
每個軟件包都有一個維護者指定的優先級,用於包管理系統。這些優先級是:
必須的(Required):系統運轉所必須的軟件包。包括修復系統缺陷所必須的所有工具。不能刪除這些軟件包,否則系統可能會崩潰,且甚至有可能無法用 dpkg 恢復。僅有這類包的系統是不可用的,但是它爲系統管理員啓動系統安裝其它軟件提供足夠的功能。
重要的(Important):在任何類 Unix 系統上均安裝有該級別軟件包。沒有這類包,其它的包無法在系統上正常運轉或使用,Emacs,X11,TeX 等大型應用程序不在此列。此類包構成基本系統。
一般的(Standard):Linux 系統裏的一般軟件包,構成小型字符系統。這是用戶什麼也不選也會默認安裝的軟件包. 不包括大型軟件, 但是 Emacs(與其說它是一個應用軟件,不如說它是基礎構件)一小部分 TeX 和 LaTeX(不支持X)除外。
可選的(Optional):軟件包包含了所有的你想要安裝的文件,如果你一開始不知道它是什麼。或者沒有特殊的需要。這包括 X11,所有的 TeX 和許多應用程序。
額外的(Extra):這類包不是與其它高優先級的軟件衝突,只有知道它的用途纔可能對你有用,就是因爲特別的原因而不能進入"可選"優先級。
第 4 行是源碼維護者的名字和郵箱。
第 5 行是源碼的編譯依賴。
第 6 行是此軟件包所依據的“Debian Policy Manual” 標準版本號。
第 7 行是源碼的主頁。
第 9 行是二進制軟件包的名稱。通常情況下與源代碼包相同,但不是必須的。
第 10 行是目標機架構,指明二進制包的類型。如果你的軟件包是平臺獨立的(例如一個 shell 或 Perl 腳本,或一些文檔),將這項改變爲 all,否則寫成any。
第 11 行顯示了 Debian 軟件包系統中最強大的特性之一。每個軟件包都可以和其他軟件包有各種不同的關係。除 Depends 外,還有 Recommends、Suggests、Pre-Depends、Breaks、Conflicts、Provides 和 Replaces。
第 12 行是軟件的簡短描述。
第 13 行是軟件的詳細描述。

7、debian/compat

定義兼容級別,Ubuntu Kylin下保持默認值即可。

8、debian/copyright

包含源碼的版權和許可,dh_make 可以給出一個 copyright 文件的模板。

9、debian/install

一些文件可以通過該install腳本,在軟件安裝時安裝到系統的指定路徑下,也可以選擇python的setup模塊等進行安裝操作。

10、debian/links

創建額外的符號鏈接。

11、debian/rules

rules文件本質上是一個Makefile文件,這個Makefile文件定義了創建deb格式軟件包的規則。打包工具按照rules文件指定的規則,完成編譯,將軟件安裝到臨時安裝目錄,清理編譯目錄等操作,並依據安裝到臨時目錄的文件來生成deb格式的軟件包。
dh_make 會生成一個使用 dh 命令的非常簡單但非常強大的默認的 rules 文件:
#!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
一般沒有特殊要求的情況下,源碼包使用默認配置就可以了




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章