简述:
deb是 Debian Linux的软件包格式,打包最关键的是在DEBIAN 目录下创建一个control文件。
运行环境:
系统:Ubuntu 14.04.5
1、打包前准备
1 > deb 包打包前要确定所需要打包的运行文件及其依赖库,否则deb包安装后运行可能会出现问题。
例如,linux系统下Qt5编译好的程序在未安装Qt的系统下运行会报以下错误:
This application Failed to start because it could not find or load the Qt platform plugin "xcb". Reinstalling the application may fix this problem.
出现这个错误,主要是因为缺少了某些依赖库,如 libQt5DBus.so.5等,所以,打包时要加上这些依赖库文件。
2 > 一般情况下,Qt5程序所需要的依赖库文件有:
libQt5Widgets.so.5 libQt5Gui.so.5 libQt5Core.so.5 libQt5Network.so.5 libQt5OpenGL.so.5 libQt5DBus.so.5 libQt5XcbQpa.so.5 libX11-xcb.so.1 libicui18n.so.54 libicuuc.so.54 libicudata.so.54
可以使用 ldd 命令查看运行程序的依赖库,详情请看Qt 小知识总结的 13、Qt 运行文件的依赖库。
也可以直接去Qt 的安装目录下找依赖库,如我的安装目录 :/opt/Qt5.5.1/5.5/gcc/lib。
这些库文件一般是要拷贝到/usr/lib/目录下,Qt动态库路径查找详情请看Qt 小知识总结的 14、Qt动态库路径查找。
3> 同时,还需要拷贝Qt5安装目录中plugins(/opt/Qt5.5.1/5.5/gcc/plugins)中的一些目录,比如platforms目录(平台所需)、xcbglintegrations目录(xcb所需),使它与Qt运行文件在同级目录。
4 > 当然,如果还有自定义的依赖库文件或者第三方库文件,也需要拷贝过来,一般拷贝到运行程序的同级目录。
2、deb包打包
欲将 /home/hebbe/Downloads/Lidar目录下的文件及其依赖库(/home/hebbe/Downloads/lib)打包,解包(安装)后依赖库释放到/usr/lib目录,而运行文件等其他文件释放到/usr/src/Lidar
1 >首先建立一个工作目录,比如在用户hebbe目录下建立work目录
root@ubuntu:~# cd /home/hebbe/ root@ubuntu:/home/hebbe# mkdir work root@ubuntu:/home/hebbe# cd work/
2 > 因为安装软件包的时候默认是将文件释放到根目录下,所以需要设定好它安装的路径,同时还需要建立一个DEBIAN 目录。
root@ubuntu:/home/hebbe/work# mkdir -p usr/src root@ubuntu:/home/hebbe/work# mkdir -p usr/lib root@ubuntu:/home/hebbe/work# mkdir DEBIAN
root@ubuntu:/home/hebbe/work# cp -a /home/hebbe/Downloads/Lidar usr/src root@ubuntu:/home/hebbe/work# cp -a /home/hebbe/Downloads/lib/* usr/lib/
4 > 重点:在 DEBIAN目录下创建一个control文件,并加入以下内容,内容可自定义:
root@ubuntu:/home/hebbe/work# vi DEBIAN/control
Package: LidarPlus Version: 1.0.1 Section: utils Priority: optional Architecture: i386 Depends: Installed-Size: 512 Maintainer: hebbe25@163.com Description: LidarPlus package5 > 然后,就可以使用dpkg 命令构建deb包了
root@ubuntu:/home/hebbe/work# sudo chmod 755 * -R root@ubuntu:/home/hebbe/work# dpkg -b . /home/hebbe/LidarPlus_1.0.1_i386.deb注意权限是755 ,否则会报错,例如
dpkg-deb: error: control directory has bad permissions 777 (must be >=0755 and <=0775)至此,便已打包完成。
3、安装与卸载 deb包
最简单的就是使用dpkg 命令来安装和卸载。
1 > 安装
dpkg -i LidarPlus_1.0.1_i386.deb
2 > 卸载dpkg -r LidarPlus
3 > 跳过依赖关系安装deb包
A. 解压deb 包
ar -x LidarPlus_1.0.1_i386.deb得到:
B. 继续解压 data.tar.xz
tar xf data.tar.xz
得到:
C. 然后将usr复制到 / 目录便可。
4、deb包详解(附加)
1 > deb 包的文件结构
deb 软件包里面的结构:它具有DEBIAN和软件具体安装目录(如etc, usr,opt,tmp等)。
|----DEBIAN
|-------control
|-------postinst(postinstallation) |-------postrm(postremove)
|-------preinst(preinstallation)
|-------prerm(preremove)
|-------copyright(版权)
|-------changlog(修订记录)
|-------conffiles
|----etc|----usr
|----opt
|----tmp
|----boot |-----initrd-vstools.img
2 > control文件
control:这个文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
字段 | 用途 | 例子/其他 |
Package | 程序名称 | 中间不能有空格 |
Version | 软件版本 | |
Description | 程序说明 | |
Section | 软件类别 | utils,net,mail,text,x11 |
Priority | 软件对于系统的重要程度 | required,standard,optional,extra等; |
Essential | 是否是系统最基本的软件包 | yes/no,若为yes,则不允许卸载(除非强制性卸载) |
Architecture | 软件所支持的平台架构 | i386,amd64,m68k,sparc,alpha,powerpc等; |
Source | 软件包的源代码名称 | |
Depends | 软件所依赖的其他软件包和库文件 | 若依赖多个软件包和库文件,采用逗号隔开 |
Pre-Depends | 软件安装前必须安装、 配置依赖性的软件包和库文件 |
常用于必须的预运行脚本需求 |
Recommends | 推荐安装的其他软件包和库文件 | |
Suggests | 建议安装的其他软件包和库文件 |
3 >preinst文件
4 >postinst文件
负责完成安装包时的配置工作。如新安装或升级的软件重启服务。
软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。
#!/bin/sh echo "my deb" > /root/mydeb.log
#!/bin/sh if [ "$1" = "configure" ]; then /Applications/MobileLog.app/MobileLog -install /bin/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist fi
5 >prerm 文件
该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行。
#!/bin/sh if [[ $1 == remove ]]; then /Applications/MobileLog.app/MobileLog -uninstall /bin/launchctl unload -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist fi
6 >postrm文件
软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行
#!/bin/sh rm -rf /root/mydeb.log
5、dpkg 详解(附加)
1 >
2 >
3 >