dpkg 包管理数据库

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

dpkg 包管理数据库

#1

帖子 windwiny » 2008-01-02 19:40

代码: 全选

*) deb 文件
  deb 是一个打包文件,可以用 file-roller 打开,
  里面包含 control.tar.gz   data.tar.gz   debian-binary 三个文件,
  分别是 打包的控制文件 ,打包的数据文件, deb文件格式

  控制文件:
    config    有 config 的包,可以用 dpkg-reconfigure packagename 来重新配置一些选项
    templates  包含 dpkg-reconfigure 时的 本地化 文字
    control   包的简介、依赖信息文件,一个包装完后把内容加到 /var/lib/dpkg/status 里去
    md5sums   文件的md5

    preinst   安装包,解压这个包里的文件之前执行
    postinst  安装包,解压这个包里的文件之后执行
    prerm     删除包,准备删除文件时执行
    postrm    删除包,删除文件后执行

    conffiles 文件列表,指明的文件在 apt-get install --reinstall 时也不会解压的文件 [注1]

      [注1] 例如 fontconfig-config 包含文件 /etc/fonts/fonts.conf , 也在 confiles 里列出
          测试 sudo mv /etc/fonts /etc/fonts_test && sudo apt-get install --reinstall fontconfig-config 
          恢复 sudo mv /etc/fonts /tmp && sudo mv /etc/fonts_test /etc/fonts

  deb包装好后放到这些文件名前面加上包名放在 info 目录里,
  形成 packagename.md5sums 类似文件,除了 control 
  另外生成 packagename.list 文件,列出所有文件



*) /var/lib/dpkg/        dpkg 的数据库

*) /var/lib/dpkg/ 里其它文件目录
  status      这个文件包含所有系统中安装的包的信息
  status-old

  available   这个文件好像包含 以前装过的包的信息,用 apt-get remove --purge 删除的包信息也仍在
  available-old

  diversions  文件转移 [注2]
  diversions-old

  alternatives/   选择配置 [注3]
  info/       包含所有已安装包的控制文件

  lock        锁文件, apt-get synaptic 等不能同时运行

  statoverride
  statoverride-old
  cmethopt
  methods/
  parts/
  triggers/
  updates/

   [注2] 解决不同包提供同名文件问题,如 locate slocate 包提供 /usr/bin/locate 文件,
         slocate 的 preinst 脚本里就有 dpkg-divert 先将 /usr/bin/locate 删除,
         再创建 指向 slocate 的 /usr/bin/locate 链接
   [注3] 用于解决同时安装多个类似功能程序问题,如 gij/sun-java6-bin  gcc-4.1/gcc-4.2
         查看可选文件 update-alternavives --list java  # cc cpp ...
         配置 update-alternavives  --config java
           

*) 其它
  *) apt-get
    apt-get 下载的文件放在 /var/cache/apt/archives/ ,
    apt-get autoclean 可以删除旧版本的 deb 包
    apt-get clean 删除目录里所有 deb 包

*) 创建 deb
  1) 准备 mydeb/usr/bin/??? 
     创建 mydeb/DEBIAN/ 里的 control md5sums .. 文件
     dpkg -b 包名 程序目录

  2) 安装 devscripts
     下载源码 apt-get source 
     用新版源码替换
     到源码目录执行 debuild binary  在上一级目录生成二进制 deb

  3) apt-get build-dep
回复