debian目录下常用文件的介绍

关于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 cjwatson@debian.org[签名] 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】
    
  5. 二进制包域中的一些字段

    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的话一般不写!】
    
  6. 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

  6. 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

  1. 例如写一个foo.install文件,里面内容如下,其效果就是将二进制包名为foo的deb包中的usr/lib/目录下的xxx安装到系统的/usr/lib/目录下,有点像# install -D命令

  2. 这个文件是dh_install命令调用的,所以在rules文件中不能将dh_install重写为空

  3. 如果源码包只生成一个二进制deb包,可以直接命名为install

    usr/lib/xxx /usr/lib/

debian/*.postinst

  1. 像install文件一样,可以为foo二进制包命名为foo.postinst——这样在安装foo二进制包时才会调用这个foo.postinst
  2. 安装后执行,用得比较多——可用来配置、启动你的程序
  3. 需要可执行权限
  4. 可以像普通shell脚本一样写。最好借用标准的postinst模板,然后自己重写其中的安装后执行的函数

debian/*.preinst

  1. 如上,不过是安装前执行的,可用来提前清理环境准备安装
  2. 也最好采用模板来改

debian/*.prerm

  1. 如上,卸载前执行,用来停止服务、进程准备卸载

debian/*.postrm

  1. 如上,卸载后执行,用来清理残余文件

debian/*.template

  1. 一个语言国际化模板,用来翻译显示文本,可以参考这里

debian/patches

  1. 这个目录仅在debian/source/format文件中写的是3.0 (quilt)时会有,用来存放quilt管理的所有补丁。quilt是一种针对debian软件包的本地版本控制管理工具。
上一篇:debian打包(一)


下一篇:Debian更换国内源