如何制作Deb包和相應的軟體倉庫,其實這個很簡單。這裡推薦使用dpkg來進行deb包的建立、編輯和制作。 首先了解一下deb包的檔案結構: deb 軟體包裡面的結構:它具有DEBIAN和軟體具體安裝目錄(如etc, usr, opt, tmp等)。在DEBIAN目錄中起碼具有control檔案,其次還可能具有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版權)、changlog (修訂記錄)和conffiles等。 control: 這個檔案主要描述軟體包的名稱(Package),版本(Version)以及描述(Description)等,是deb包必須具備的描述性檔案,以便于軟體的安裝管理和索引。同時為了能将軟體包進行充分的管理,可能還具有以下字段: Section: 這個字段申明軟體的類别,常見的有`utils’, `net’, `mail’, `text’, `x11′ 等; Priority: 這個字段申明軟體對于系統的重要程度,如`required’, `standard’, `optional’, `extra’ 等; Essential: 這個字段申明是否是系統最基本的軟體包(選項為yes/no),如果是的話,這就表明該軟體是維持系統穩定和正常運作的軟體包,不允許任何形式的解除安裝(除非進行強制性的解除安裝) Architecture:申明軟體包結構,如基于`i386′, ‘amd64’,`m68k’, `sparc’, `alpha’, `powerpc’ 等; Source: 軟體包的源代碼名稱; 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 <[email protected]> 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 <[email protected]> (打包人和聯系方式) 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 <[email protected]> (打包人和聯系方式) 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 |