Home 制作简单的deb安装包
Post
Cancel

制作简单的deb安装包

记录简单的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   

参考

This post is licensed under CC BY 4.0 by the author.