用dpkg命令製作deb包方法總結

perfychi發表於2017-03-10
用dpkg命令製作deb包方法總結 如何製作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 <> 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 /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 返回

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-2135105/,如需轉載,請註明出處,否則將追究法律責任。

相關文章