记录简单的deb二进制安装包的制作过程。和rpm包类似,也有打包控制文件。 这里制作二进制安装包,准备好编译后的库或程序,头文件等,直接安装到目标环境中。(无编译,主要是复制) 这里测试安装一个动态库文件及其头文件,准备的文件包括(dbm_knn.hpp,libdbm.so
)。如果是其他文件,也是同理。
这里先创建文件夹package-build
,用于统一管理多个包(如果有),里面每一个子文件夹对应用来制作一个deb包,子文件夹名称这里使用package-name-version
的形式。example:
1
2
./package-build/
└── package-libdbm-1.0
package-libdbm-1.0
子文件夹为需要制作的包的目录,需要将准备安装的文件放入。里面主要是两类文件,一类是安装包制作的控制信息内容,统一放在DEBIAN
子子文件夹中。 另一类是用户自己的待安装内容文件,制作好deb包后,deb安装包安装时会将该子文件夹下的内容直接安装到新系统的根目录/
下,(除了DEBIAN
子文件夹), 所以该子文件夹用户可以将其看作是待安装环境的根目录,(将DEBIAN
子子文件夹除外)。 这里创建好对应的目录,然后将文件复制进来,example:
1
2
3
4
5
6
7
8
9
10
./package-build/
└── package-libdbm-1.0
├── DEBIAN
└── usr
├── include
│ └── dbm
│ └── dbm_knn.hpp
└── lib
└── libdbm
└── libdbm.so
期望效果就是会在目标系统中,安装 /usr/include/dbm/dbm_knn.hpp
和/usr/lib/libdbm/libdbm.so
两个文件。可以设置所有权和权限
1
2
sudo chmod 755 ./package-build/package-libdbm-1.0/usr/lib/libdbm/libdbm.so
sudo chown -R root:root ./package-libdbm-1.0/usr/
接下来创建控制信息文件。有一个固定名为control
的文件是必要的,用于控制deb包的生成的,有各种控制字段,详情参考man 5 deb-control
,还可以有很多可选的控制文件, 常见的如preinst
软件安装之前会执行的脚本,postinst
软件安装完成后执行的脚本,prerm
软件卸载前会执行的脚本,postrm
软件卸载后会执行的脚本。可以用于停止程序/服务,重新启动等。 更多的可选控制文件参考Other files under the debian directory。
这里就只使用必要的control
文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
$ touch package-build/package-libdbm-1.0/DEBIAN/control
$ tree ./package-build/
./package-build/
└── package-libdbm-1.0
├── DEBIAN
│ └── control
└── usr
├── include
│ └── dbm
│ └── dbm_knn.hpp
└── lib
└── libdbm
└── libdbm.so
编写control
文件,里面也有较多字段,有些是必要的,参考man 5 deb-control
,这里编写后的示例:
1
2
3
4
5
6
Package: libdbm
Version: 1.0
Maintainer: YourName <your@email.com>
Description: your package description.
Architecture: amd64
Section: utils
完成后,可以开始打包,参考mak dpkg-deb
,默认在当前目录生成。
1
2
3
4
5
6
$ cd package-build/
$ ls
package-libdbm-1.0
$ dpkg-deb --build ./package-libdbm-1.0/
dpkg-deb: building package 'libdbm' in './package-libdbm-1.0.deb'.
制作完成,可以查看相关信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ dpkg-deb --info ./package-libdbm-1.0.deb
new Debian package, version 2.0.
size 6856 bytes: control archive=352 bytes.
176 bytes, 6 lines control
Package: libdbm
Version: 1.0
Maintainer: YourName <your@email.com>
Description: lib uesd to map or search offsets of vectors in file and hw.
Architecture: amd64
Section: utils
$ dpkg-deb --contents ./package-libdbm-1.0.deb
drwxrwxr-x user/user 0 2023-06-26 14:44 ./
drwxrwxr-x root/root 0 2023-06-26 14:44 ./usr/
drwxrwxr-x root/root 0 2023-06-26 14:44 ./usr/include/
drwxrwxr-x root/root 0 2023-06-26 14:46 ./usr/include/dbm/
-rw-rw-r-- root/root 481 2023-06-26 14:46 ./usr/include/dbm/dbm_knn.hpp
drwxrwxr-x root/root 0 2023-06-26 14:47 ./usr/lib/
drwxrwxr-x root/root 0 2023-06-26 14:46 ./usr/lib/libdbm/
-rwxr-xr-x root/root 28704 2023-06-26 14:46 ./usr/lib/libdbm/libdbm.so
到其他相同系统的机器安装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装
$ sudo dpkg -i ./package-libdbm-1.0.deb
Selecting previously unselected package libdbm.
(Reading database ... 171747 files and directories currently installed.)
Preparing to unpack ./package-libdbm-1.0.deb ...
Unpacking libdbm (1.0) ...
Setting up libdbm (1.0) ...
# 查看
$ ls /usr/lib/libdbm/libdbm.so -l
-rwxr-xr-x 1 root root 28704 6月 26 14:46 /usr/lib/libdbm/libdbm.so
$ ls -l /usr/include/dbm/dbm_knn.hpp
-rw-rw-r-- 1 root root 481 6月 26 14:46 /usr/include/dbm/dbm_knn.hpp
# dpkg -L libdbm
/.
/usr
/usr/include
/usr/include/dbm
/usr/include/dbm/dbm_knn.hpp
/usr/lib
/usr/lib/libdbm
/usr/lib/libdbm/libdbm.so
# 卸载
$ sudo dpkg -r libdbm
参考
- Debian 新维护者手册-英文
- Debian 新维护者手册-中文
man 5 deb-control
man 1 dpkg-deb