使用dpkg命令创建deb包的方法总结
如何建立Deb包和合适的软件仓库,其实这很简单。 此处建议您使用dpkg创建、编辑和创建deb包。
首先,说明deb包的文件结构:
deb包中的结构:包含DEBIAN和软件的具体安装目录,如etc、usr、opt和tmp。 在DEBIAN目录中至少有控制文件,其次是postinst(postinstallation )、postrm (post remove )、preinst (preinstallation )、pre installation )
control:文件主要描述软件包的名称、版本和说明等,是数据库软件包所需的描述文件,便于软件的安装管理和索引为了充分管理软件包,还可能存在以下字段:
Section:字段声明软件类别,常见的有` utils '、` net '、` mail '、` text '、` X11 '等;
“优先级:”字段指示软件对于系统的重要性,例如“请求”、“标准”、“选项”和“排除”;
Essential:字段指示是否是系统中最基本的软件包。 如果此选项为yes/no,则此软件是一个软件包,可保持系统稳定性和正常运行,除非强制卸载,否则不允许进行任何形式的卸载
架构:表示封装结构,例如基于‘i386’、‘amd64’、‘m68k’、‘SPARC’、‘alpha’、‘powerpc’等;
Source:包的源代码名称;
Depends:软件所依赖的其他软件包和库文件。 如果依赖多个软件包和库文件,请用逗号分隔它们。
安装Pre-Depends:软件之前,必须安装和配置依赖关系软件包和库文件。 此文件经常用于所需的预安装脚本要求。
Recommends:此字段指示建议的安装的其他软件包和库文件。
Suggests:推荐的其他软件包和库文件。
对于control,这里有完整的例子:
Package: bioinfoserv-arb
Version: 2007_14_08
Section: BioInfoServ
优先级:选项
depends 3360 bioinfo serv-base-directories (=1.0-1 )、xviewg )=3.2p1.4 )、xfig )=1:3 )、libstdc 2.10-glibc2.2
Suggests: fig2ps
Architecture: i386
已安装大小: 26104
主:明卫六
Provides: bioinfoserv-arb
description 3360 thearbsoftwareisagraphicallyorientedpackagecomprisingvarioustoolsforsequencedatabasehandlingandataaaanalysis。
ifyouwanttoprintyourgraphsyouprobablyneedtoinstallthesuggestedfig2PS package.preinst :文件是在安装软件之前完成的任务,无法执行任务
名为postinst的文件包含将常规目录文件复制到系统后软件必须执行的配置任务。
卸载prerm :软件之前必须运行的脚本
卸载postrm:软件后运行的脚本将看看如何修订现有的deb软件包软件
=========================================================================================
DEBian创建deb包,该包在root权限下位置是自由的。
#创建要打包的软件文件夹。 范例
mkdir Cydia
cd Cydia
#根据程序的安装路径创建文件夹,并将相应的程序添加到文件夹中。 例如
mkdir应用程序
mkdir var/mobile/Documents ()游戏系统需要此目录,但也可能需要其他目录) )。
mkdir *** (根据程序要求添加) )。
创建DEBIAN文件夹
mkdir DEBIAN
在DEBIAN目录下创建control文件并添加相关内容。
touch debian/control (也可以直接使用VI debian/contro
l编辑保存)#编辑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 如:
#!/甜美的戒指/sh
if [ "$1" = "configure" ]; then
/Applications/MobileLog.app/MobileLog -install
/甜美的戒指/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi
#prerm 如:
#!/甜美的戒指/sh
if [[ $1 == remove ]]; then
/Applications/MobileLog.app/MobileLog -uninstall
/甜美的戒指/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脚本,一般作为清理收尾工作,必须以“#!/甜美的戒指/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm):
#!/甜美的戒指/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/,如需转载,请注明出处,否则将追究法律责任。