轉自:http://blog.chinaunix.net/uid-16184599-id-3041024.htmlhtml
如何製做Deb包和相應的軟件倉庫,其實這個很簡單。這裏推薦使用dpkg來進行deb包的建立、編輯和製做。c++
首先了解一下deb包的文件結構:架構
deb 軟件包裏面的結構:它具備DEBIAN和軟件具體安裝目錄(如etc, usr, opt, tmp等)。在DEBIAN目錄中起碼具備control文件,其次還可能具備postinst(postinstallation)、 postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版權)、changlog (修訂記錄)和conffiles等。app
control: 這個文件主要描述軟件包的名稱(Package),版本(Version)以及描述(Description)等,是deb包必須具有的描述性文件,以便於軟件的安裝管理和索引。同時爲了能將軟件包進行充分的管理,可能還具備如下字段:iphone
Section: 這個字段申明軟件的類別,常見的有`utils’, `net’, `mail’, `text’, `x11′ 等;ide
Priority: 這個字段申明軟件對於系統的重要程度,如`required’, `standard’, `optional’, `extra’ 等;post
Essential: 這個字段申明是不是系統最基本的軟件包(選項爲yes/no),若是是的話,這就代表該軟件是維持系統穩定和正常運行的軟件包,不容許任何形式的卸載(除非進行強制性的卸載)ui
Architecture:申明軟件包結構,如基於`i386′, ‘amd64’,`m68k’, `sparc’, `alpha’, `powerpc’ 等;spa
Source: 軟件包的源代碼名稱;.net
Depends: 軟件所依賴的其餘軟件包和庫文件。若是是依賴多個軟件包和庫文件,彼此之間採用逗號隔開;
Pre-Depends: 軟件安裝前必須安裝、配置依賴性的軟件包和庫文件,它經常用於必須的預運行腳本需求;
Recommends: 這個字段代表推薦的安裝的其餘軟件包和庫文件;
Suggests: 建議安裝的其餘軟件包和庫文件。
對於control,這裏有一個完整的例子:
Package: bioinfoserv-arb
Version: 2007_14_08
Section: BioInfoServ
Priority: optional
Depends: bioinfoserv-base-directories (>= 1.0-1), xviewg (>= 3.2p1.4), xfig (>= 1:3), libstdc++2.10-glibc2.2
Suggests: fig2ps
Architecture: i386
Installed-Size: 26104
Maintainer: Mingwei Liu <lmingwei@gmail.com>
Provides: bioinfoserv-arb
Description: The ARB software is a graphically oriented package comprising various tools for sequence database handling and data analysis.
If you want to print your graphs you probably need to install the suggested fig2ps package.preinst: 這個文件是軟件安裝前所要進行的工做,工做執行會依據其中腳本進行;
postinst這個文件包含了軟件在進行正常目錄文件拷貝到系統後,所須要執行的配置工做。
prerm :軟件卸載前須要執行的腳本
postrm: 軟件卸載後須要執行的腳本如今來看看如何修訂一個已有的deb包軟件
=================================================================
debian製做DEB包(在root權限下),打包位置隨意。
#創建要打包軟件文件夾,如
mkdir Cydia
cd Cydia
#依據程序的安裝路徑創建文件夾,並將相應程序添加到文件夾。如
mkdir Applications
mkdir var/mobile/Documents (遊戲類須要這個目錄,其餘也有可能須要)
mkdir *** (要依據程序要求來添加)
#創建DEBIAN文件夾
mkdir DEBIAN
#在DEBIAN目錄下建立一個control文件,並加入相關內容。
touch DEBIAN/control(也能夠直接使用vi DEBIAN/control編輯保存)
#編輯control
vi DEBIAN/control
#相關內容(注意結尾必須空一行):
Package: soft (程序名稱)
Version: 1.0.1 (版本)
Section: utils (程序類別)
Architecture: iphoneos-arm (程序格式)
Installed-Size: 512 (大小)
Maintainer: your (打包人和聯繫方式)
Description: soft package (程序說明)
(此處必須空一行再結束)
注:此文件也能夠先在電腦上編輯(使用文本編輯就能夠,完成後去掉.txt),再傳到打包目錄裏。
#在DEBIAN裏還能夠根據須要設置腳本文件
preinst
在Deb包文件解包以前,將會運行該腳本。許多「preinst」腳本的任務是中止做用於待升級軟件包的服務,直到軟件包安裝或升級完成。
postinst
該腳本的主要任務是完成安裝包時的配置工做。許多「postinst」腳本負責執行有關命令爲新安裝或升級的軟件重啓服務。
prerm
該腳本負責中止與軟件包相關聯的daemon服務。它在刪除軟件包關聯文件以前執行。
postrm
該腳本負責修改軟件包連接或文件關聯,或刪除由它建立的文件。
#postinst 如:
#!/bin/sh
if [ "$1" = "configure" ]; then
/Applications/MobileLog.app/MobileLog -install
/bin/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi
#prerm 如:
#!/bin/sh
if [[ $1 == remove ]]; then
/Applications/MobileLog.app/MobileLog -uninstall
/bin/launchctl unload -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi
#若是DEBIAN目錄中含有postinst 、prerm等執行文件
chmod -R 755 DEBIAN
#退出打包軟件文件夾,生成DEB
dpkg-deb --build Cydia
=====================================================================
有時候安裝本身打包的deb包時報以下錯誤:
Selecting previously deselected package initrd-deb.
(Reading database ... 71153 files and directories currently installed.)
Unpacking initrd-deb (from initrd-vstools_1.0_amd64.deb) ...
dpkg: error processing initrd-vstools_1.0_amd64.deb (--install):
trying to overwrite `/boot/initrd-vstools.img', which is also in package initrd-deb-2
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
initrd-vstools_1.0_amd64.deb
主要意思是說,已經有一個deb已經安裝了相同的文件,因此默認退出安裝,只要把原來安裝的文件給卸載掉,再次進行安裝就能夠了。
下面爲實踐內容:
全部的目錄以及文件:
mydeb
|----DEBIAN
|-------control
|-------postinst
|-------postrm
|----boot
|----- initrd-vstools.img
在任意目錄下建立如上所示的目錄以及文件
# mkdir -p /root/mydeb # 在該目錄下存放生成deb包的文件以及目錄
# mkdir -p /root/mydeb/DEBIAN #目錄名必須大寫
# mkdir -p /root/mydeb/boot # 將文件安裝到/boot目錄下
# touch /root/mydeb/DEBIAN/control # 必需要有該文件
# touch /root/mydeb/DEBIAN/postinst # 軟件安裝完後,執行該Shell腳本
# touch /root/mydeb/DEBIAN/postrm # 軟件卸載後,執行該Shell腳本
# touch /root/mydeb/boot/initrd-vstools.img # 所謂的「軟件」程序,這裏就只是一個空文件
control文件內容:
Package: my-deb (軟件名稱,中間不能有空格)
Version: 1 (軟件版本)
Section: utils (軟件類別)
Priority: optional (軟件對於系統的重要程度)
Architecture: amd64 (軟件所支持的平臺架構)
Maintainer: xxxxxx <xxxxxxxx@xxxx.xx> (打包人和聯繫方式)
Description: my first deb (對軟件所的描述)
postinst文件內容( 軟件安裝完後,執行該Shell腳本,通常用來配置軟件執行環境,必須以「#!/bin/sh」爲首行,而後給該腳本賦予可執行權限:chmod +x postinst):
#!/bin/sh
echo "my deb" > /root/mydeb.log
postrm文件內容( 軟件卸載後,執行該Shell腳本,通常做爲清理收尾工做,必須以「#!/bin/sh」爲首行,而後給該腳本賦予可執行權限:chmod +x postrm):
#!/bin/sh
rm -rf /root/mydeb.log
給mydeb目錄打包:
# dpkg -b mydeb mydeb-1.deb # 第一個參數爲將要打包的目錄名,
# 第二個參數爲生成包的名稱。
安裝deb包:
# dpkg -i mydeb-1.deb # 將initrd-vstools.img複製到/boot目錄下後,執行postinst,
# postinst腳本在/root目錄下生成一個含有"my deb"字符的mydeb.log文件
卸載deb包:
# dpkg -r my-deb # 這裏要卸載的包名爲control文件Package字段所定義的 my-deb 。
# 將/boot目錄下initrd-vstools.img刪除後,執行posrm,
# postrm腳本將/root目錄下的mydeb.log文件刪除
查看deb包是否安裝:
# dpkg -s my-deb # 這裏要卸載的包名爲control文件Package字段所定義的 my-deb
查看deb包文件內容:# dpkg -c mydeb-1.deb查看當前目錄某個deb包的信息:# dpkg --info mydeb-1.deb解壓deb包中所要安裝的文件# dpkg -x mydeb-1.deb mydeb-1 # 第一個參數爲所要解壓的deb包,這裏爲 mydeb-1.deb # 第二個參數爲將deb包解壓到指定的目錄,這裏爲 mydeb-1解壓deb包中DEBIAN目錄下的文件(至少包含control文件)# dpkg -e mydeb-1.deb mydeb-1/DEBIAN # 第一個參數爲所要解壓的deb包, # 這裏爲 mydeb-1.deb # 第二個參數爲將deb包解壓到指定的目錄, # 這裏爲 mydeb-1/DEBIAN