0%

deb包

deb - Debian binary package format, Debian(及其衍生发行版)的二进制包格式

debian软件包分两类

  • 二进制包
    • 包括可执行文件、配置文件、帮助手册、版权等信息, 一般以.deb为后缀
    • 可通过 dpkg 管理
  • 源码包
    • .dsc 源码控制文件
    • .orig.tar.gz gzip压缩的未经修改的源码包
    • .diff.gz 基于源码包的修改(patch)
    • 可通过 dpkg-source 打包或解包
    • apt-get source package 下载指定的源码包

deb包命名规范: 也是包名过长的原因

1
<foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb

例如: libpam-ldapd_0.9.6-3_amd64.deb

  • foo 包名libpam-ldapd
  • VersionNumber 版本号0.9.6
  • DebianRevisionNumber 修正版本号3
  • DebianArchitecture 构建deb包机器的cpu架构amd64, dpkg-architecture --list 可查看所有项

deb包构成

deb包就是标准的ar归档文件, 包含2个tar文件: 1个是控制信息, 1个是具体的待安装文件

具体构成:

  • debian-binary 单行的文本文件,包含deb包的格式版本(目前是2.0),打包工具自动生成
  • control.tar 包含control md5sums prerm等控制信息,支持gzip和xz压缩
  • data.tar 具体的安装文件,支持gzip bzip2 lzma xz压缩

deb包解压

ar命令

1
2
3
4
root@dev:~/test# ar -xv libpam-ldapd_0.9.6-3_amd64.deb
x - debian-binary
x - control.tar.gz
x - data.tar.xz

dpkg命令

解压数据文件(要安装的文件)到libpam目录

1
root@dev:~/test# dpkg -x libpam-ldapd_0.9.6-3_amd64.deb libpam

解压控制文件到libpam/DEBIAN目录

1
root@dev:~/test# dpkg -e libpam-ldapd_0.9.6-3_amd64.deb libpam/DEBIAN

简单的deb包制作

准备一个简单的可执行文件sayhello

1
2
3
4
5
6
7
8
9
root@dev:~/testdeb# cat sayhello.c
#include <stdio.h>
int main() {
printf("hello!\n");
return 0;
}
root@dev:~/testdeb# gcc sayhello.c -o sayhello
root@dev:~/testdeb# ./sayhello
hello!

目录结构

1
2
3
4
5
6
7
8
9
10
11
root@dev:~/testdeb# tree
.
└── hello
├── DEBIAN
│   └── control
└── usr
└── local
└── bin
└── sayhello

5 directories, 2 files

hello/DEBIAN/control 内容

1
2
3
4
5
6
7
8
9
10
root@dev:~/testdeb# cat hello/DEBIAN/control
Package: sayhello
Version: 1.0
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer: blog.wafcloud.cn
Description: Print hello

hello/DEBIAN/md5sums 内容

1
2
root@dev:~/testdeb# cat hello/DEBIAN/md5sums
8dfa20b4fd5b226dabc341fae01e356d usr/local/bin/sayhello

dpkg-deb 构建

1
2
3
4
root@dev:~/testdeb# dpkg-deb --build hello sayhello-1.0_amd64.deb
dpkg-deb: building package 'sayhello' in 'sayhello-1.0_amd64.deb'.
root@dev:~/testdeb# ls
hello sayhello-1.0_amd64.deb

测试

1
2
3
4
5
6
7
8
9
10
root@dev:~/testdeb# dpkg -i sayhello-1.0_amd64.deb
Selecting previously unselected package sayhello.
(Reading database ... 90411 files and directories currently installed.)
Preparing to unpack sayhello-1.0_amd64.deb ...
Unpacking sayhello (1.0) ...
Setting up sayhello (1.0) ...
root@dev:~# sayhello
hello!
root@dev:~# which sayhello
/usr/local/bin/sayhello

更多信息参考

deb (file format)

Debian Binary packages

Binary package control files – DEBIAN/control

Declaring relationships between packages