博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[deb]制作deb包
阅读量:6803 次
发布时间:2019-06-26

本文共 4589 字,大约阅读时间需要 15 分钟。

转自

查看系统安装了哪些deb包: dpkg -l

打包: dpkg -b dir result.deb

安装: dpkg -i result.deb

版本升级: control中Package修改版本发生变化,却动了同一个文件,提示"try to overwrite 'file', which is also in package "former version", 解决:可以使用dpkg -i --force-overwrite upgrade.deb, 会成功,但是有overwrite warning,所以版本升级是围绕着同一个Package升级,还是Package名称随版本递增? Package名不变

AttentionDeb包的preinst和postinst脚本中不能包含另一个deb的安装工作,否则会造成"dpkg status database is locked by another process". 也就是不能嵌套

dpkg-deb工具使用


 

1. 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: mysoftwareVersion: 2016-02-26Section: freePriority: optionalDepends: libssl.0.0.so, libstdc++2.10-glibc2.2Suggests: OpensslArchitecture: i386Installed-Size: 66666Maintainer: Simon @ newdivide7037#gmail.comProvides: mysoftwareDescription: just for test                    (此处必须空一行再结束) 

postinst文件:包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。

prerm文件:软件卸载前需要执行的脚本。
postrm文件:软件卸载后需要执行的脚本。

2. 制作deb包

1. 制作如下目录及文件

所有目录及文件:

mydeb

|----DEBIAN

       |-------control

       |-------preinst

       |-------postinst

       |-------postrm

|----boot

       |----- mysoftware

 

在任意目录下创建如上所示的目录及文件

$ mkdir -p /home/mydeb                         # 在该目录下存放生成deb包的文件以及目录$ mkdir -p /home/mydeb/DEBIAN                  #目录名必须大写$ mkdir -p /home/mydeb/boot                    # 将文件安装到/boot目录下$ touch /home/mydeb/DEBIAN/contro    l         # 必须要有该文件$ touch /home/mydeb/DEBIAN/postinst            # 软件安装完后,执行该Shell脚本$ touch /home/mydeb/DEBIAN/postrm              # 软件卸载后,执行该Shell脚本$ touch /home/mydeb/boot/mysoftware            # 所谓的“软件”程序,这里就只是一个空文件

control文件内容: 

Package: mysoftware       (软件名称,中间不能有空格)Version: 1                (软件版本)Section: free             (软件类别)Prioritt: optional        (软件对于系统的重要性)Architecture: amd64       (软件所支持的平台架构)Maintainer: xxx <>        (打包人和联系方式)Description: mydeb        (对软件的描述)
          (此处必须空一行再结束)

postinst文件内容( 软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst):

# !/bin/shecho "my deb" >/home/mydeb.log 

postrm文件内容( 软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm):

# !/bin/shrm -rf /home/mydeb.log

2. 完成第一步的制作目录及文件后可以给做好的mydeb目录进行打包成.deb包

$ dpkg -b mydeb mydeb.deb #第一个参数为将要打包的目录名,                          #第二个参数为生成包的名称

现在完成了deb包的制作。

3. 怎么样制作一个集合deb包

How to create a God package (not recommended):

  1. Create a temporary directory, e.g. "~/godpackage" and cd into it
  2. Extract each .deb file using dpkg -x filename.deb .
  3. Extract the control, postrm, ..., files using dpkg --control filename.deb tmpdeb. A new directory will be created, named tmpdeb. Adjust the control files like changing the name to avoid conflicts later. When done, move / merge the tmpdeb directory with the DEBIAN directory (create if needed). Repeat it for each deb file
  4. Go away from the directory: cd ..
  5. Create the new debfile from ~/godpackage and store the newly created .deb file in the current directory: dpkg-deb --build ~/godpackage .

 4. 常用deb包的操作命令

  • 安装deb包:
$ dpkg -i mydeb.deb      # 将imysoftware复制到/boot目录下后,执行postinst                         # postinst脚本在/home目录下生成一个含有"mysoftware"字符的mydeb.log文件
  • 卸载deb包:
$ dpkg -r   mysoftware    # 这里要卸载的包名为control文件Package字段所定义的 mysoftware。                          # 将/boot目录mysoftware删除后,执行posrm,                          # postrm脚本将/home目录下的mydeb.log文件删除
  • 查看deb包是否安装:
$ dpkg -s   mysoftware      # 这里要卸载的包名为control文件Package字段所定义的 mysoftware
  • 查看deb包文件内容:
$ dpkg   -c   mydeb.deb
  • 查看当前目录某个deb包的信息:
$ dpkg --info mydeb.deb
  • 解压文件

  • 解压deb包中所要安装的文件
$ dpkg -X   mydeb.deb   mydeb    # 第一个参数为所要解压的deb包,这里为 mydeb.deb                                 # 第二个参数为将deb包解压到指定的目录,这里为 mydeb
  • 解压deb包中DEBIAN目录下的文件(至少包含control文件)
$ dpkg -e   mydeb.deb   mydeb/DEBIAN    # 第一个参数为所要解压的deb包,                                        # 这里为 mydeb.deb                                        # 第二个参数为将deb包解压到指定的目录,                                        # 这里为 mydeb/DEBIAN

转载地址:http://npjwl.baihongyu.com/

你可能感兴趣的文章
【C++实现有序子序列合并算法】
查看>>
防病毒插件更新失败!?
查看>>
HTTP的post和get总结
查看>>
CEPH Cache Tiering
查看>>
Oracle 11g新特性之--Server Result Cache
查看>>
Oracle中的ORA-01548: active rollback segment '_SYSSMU1$' found
查看>>
AngularJs $anchorScroll、$controller、$document
查看>>
Microsoft资源
查看>>
WordPress 永久链接或固定链接设置技巧
查看>>
数据结构之线性表
查看>>
在PPT中插入FLASH遇到的系列问题
查看>>
XSS研究4-来自外部的XSS攻击的防范
查看>>
Spring知识点总结-1
查看>>
微软私有云分享(R2)21 BMC提升B格
查看>>
MDSF:如何使用GMF来做TOGAF建模工具
查看>>
Spring Security简介
查看>>
打造一流的研发中心
查看>>
MCollective架构篇3-Puppet插件的部署及测试
查看>>
配置GNS使用CRT连接
查看>>
Java:集合类性能分析
查看>>