关于Debian/Ubuntu软件包源码中debian/目录下一些常用文件的介绍

版权声明:原创作品转载必须注明出处 https://blog.csdn.net/u013390088/article/details/82181209

关于debian/目录

  1. debian官网参考资料: debian-policy-manual
  2. 该目录包含了所有构建deb包需要的文件,例如changelog、control、rules等
  3. 可以通过devscripts自动或者手动的方式来生成这些文件

获取软件包源码

  1. /etc/apt/sources.list文件或/etc/apt/sources.list.d/下的.list文件中添加如下的软件源配置, 然后通过# apt-get source PACKAGE获取软件源中的源码文件。一般地,会有xx.orig.tar.gz和xx.debian.tar.gz和xx.dsc三个文件以及一个源码目录。如果没有源码目录,就自行解压dpkg-source -x *.dsc。最终可以在源码目录中看到debian/目录。

    deb-src http://cn.archive.ubuntu.com/ubuntu/ xenial main restricted
  2. 直接去launchpad.net或者salsa.debian.org上直接下载源码

debian/changelog文件

  1. 必须文件
  2. 这个文件记录了codename,版本号,发行日志,开发人员签名,发行日期等重要信息
  3. 版本号必须递增,且必须填写一次发行日志
  4. urgency重要程度一般有low/medium/high/critical
  5. 注意,如果BTS(BUG TRACING SYSTEM)平台上的bug在这次源码修改中修复了,可以添加closes: Bug#nnnnn字段到发行日志信息中,将触发BTS平台自动关闭对应bug
  6. 发行日志示例如下,其中方括号包含的内容是我写的注释
debconf[软件包名] (1.5.58[版本号]) unstable[codename]; urgency=medium[重要程度]

  * Don't update po/debconf.pot unless doing so changes something other than
    the POT-Creation-Date header.  The basic approach here is from gettext,
    though implemented a bit more simply since we can assume perl.[发行日志]
  * Show choices for teletype/readline boolean questions (closes: #802840).
  * Move bash completion file to /usr/share/bash-completion/completions/.

 -- Colin Watson <[email protected]>[签名]  Sun, 08 Nov 2015 03:27:10 +0000[日期]

debian/copyright

  1. 每个deb包安装后都会有对应的一个copyright文件放在/usr/share/doc/PACKAGE/目录下
  2. 默认创建的、安装的一般都是GPL-V2协议的copyright
  3. 自建软件包时,也应该有一个copyright文件放到debian/目录下,可以按需选择协议

debian/control

  1. 这个control文件可以算是最最重要的东西了
  2. 几乎记录了源码文件和其所生成的二进制包的所有信息,包括安装依赖,源码编译依赖,软件包描述等
  3. 每个二进制包都会记录在control文件中,包括其安装依赖,软件包描述等
  4. 源码域中的以下通用字段

    Source (mandatory)【源码包名】
    Maintainer (mandatory)【维护者】
    Uploaders【上传者】
    Section (recommended)【所属组件-一般要求填写,比如utils,misc,python等】
    Priority (recommended)【重要程度】
    Build-Depends et al【编译依赖】
    Standards-Version (mandatory)【标准版本号】
    Homepage【主页】
    Version Control System (VCS) fields【版本控制系统】
    Testsuite【测试套件】
    Rules-Requires-Root【要求提权的一些操作,比如binary-target, 也可以是no】
  1. 二进制包域中的一些字段
    Package (mandatory)【包名-必须有】
    Architecture (mandatory)【架构,比如arm64/amd64/all】
    Section (recommended)
    Priority (recommended)
    Essential【如果设置这里为true,那么这个包会禁止卸载,但可以升降级】
    Depends et al【安装依赖】
    Description (mandatory)【描述】
    Homepage
    Built-Using【用来包含另一个源码包中的二进制包,**没用过, 不太了解**】
    Package-Type【二进制包类型,有deb和udeb,注意deb的话一般不写!】
  1. control中也支持一些内置变量, 没用过,不太了解

debian/rules

  1. rules文件是一种类似makefile的描述编译规则的文件
  2. 必须有可执行权限,且要在第一行写上#! /usr/bin/make -f
  3. 必须在rules中完成源码编译和二进制包打包工作
  4. 执行make -f debian/rules args..../debian/rules args应该保持一致
  5. rules中最重要的的几个方法,在编包过程中会由dpkg-buildpackage调用这几个方法:
clean, binary, binary-arch, binary-indep, build, build-arch and build-indep
  1. rules文件中的命令不应该要求和用户交互,否则无法自动完成编译

rules文件中的几个常用编译目标:

  1. build:

    1. build目标应该完成所有的配置和编译工作
    2. 需要交互的配置工作应该在编译开始前完成
    3. build阶段不应该要求提权
    4. build阶段可能需要先调用clean目标清理下环境
    5. 可以通过在build完成时生成一个时间戳build-stamp文件来避免每次重新编译导致无意义的等待
  2. build-arch:

    1. 应该完成所有架构相关的配置和编译工作
    2. 不能提权
    3. build目标可以依赖build-arch目标
  3. binary\binary-arch\binary-indep:

    1. binary:所有二进制包的配置和编译工作
    2. binary由架构相关的binary-arch和架构无关的binary-indep一起组成
    3. binary目标可以被binary-arch或者binary-indep依赖,避免编译未完成
    4. binary调用dpkg-deb完成二进制包的打包工作,生成的deb包将放在源码目录的根目录下
    5. binary-*两个目标必须存在,且必须成功
  4. clean:

    1. clean目标应该把binary和build目标生成的文件和做的改动都还原
    2. clean目标不应该用来删除源码根目录下的文件,应该其可能已经存在与上游源码压缩包中(如果要删掉,应该重新压缩源码包)

debian/install

debian/postinst

debian/preinst

debian/prerm

debian/postrm

debian/*.template

debian/patches

猜你喜欢

转载自blog.csdn.net/u013390088/article/details/82181209