简述:

deb Debian Linux的软件包格式,打包最关键的是在DEBIAN 目录下创建一个control文件。


运行环境:

系统:Ubuntu 14.04.5

Qt:qt-opensource-linux-x86-5.5.1.run


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


3 > 把需要打包的文件及其库文件拷贝到相应的目录


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 package


5 > 然后,就可以使用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包必须具备的描述性文件,以便于软件的安装管理和索引。


control 文件字段
字段 用途 例子/其他
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文件

Deb包文件解包之前(即软件安装前),将会运行该脚本。可以停止作用于待升级软件包的服务,直到软件包安装或升级完成。

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 >

Ubuntu下的deb打包的更多相关文章

  1. 如何为Android搭建Qt5?

    我有一台运行Ubuntu12.04LTS的服务器.我想把服务器用于构建Qt5forAndroidARMv6平台.在无头服务器上如何做到这一点?

  2. Python3利用Qt5实现简易的五子棋游戏

    这篇文章主要为大家详细介绍了Python3利用Qt5实现简易的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. 如何在PyQt5中删除QTableView中聚焦项周围的虚线框

    我正在编写一个简单的PyQt5应用程序,它使用QTableView小部件。我要做的是删除QTableView中聚焦项周围的虚线框。如果这很重要,我在Windows计算机上使用PyQt5==5.15.4,PyQt5-Qt5==5.15.2。

  4. windows – 模糊的Qt快速文本

    这是QtCreator中QtQuick示例的一个例子,当我运行项目时,所有文本都失去了质量和模糊,附图清楚地描述了问题.Qt版本:5.4.1平台:Windows7当Qt使用系统OpenGL功能“[QTBUG-31983]FontrenderingonWindowsXPshowsartifactswithQMLTextelement”时,它可能会在某些硬件上重现在Qt5.5版之前,Windows有两

  5. Ubuntu OpenCV安装和设置(Qt5?)

    新的Linux用户.操作系统:Ubuntu14.04安装:OpenCV2.4.9我正在尝试安装OpenCV以用于代码块(或其他IDE).我遵循(或尝试跟踪)实际上每一个在以下页面上的说明:我第一次使用https://help.ubuntu.com/community/OpenCV包括提供的脚本.然后http://docs.opencv.org/doc/tutorials/introduction/

  6. QT5如何打包到Ubuntu16

    目标机执行lddlibgst*.so.呵呵,nofoundlibQt5MultiMedia。。

  7. 解决Ubuntu下Qt Creator无法输入中文

    环境:ubuntu16.04fcitx的输入法QtCreator5.10.1首先需要安装sudoapt-getinstallfcitx-frontend-qt5然后将:/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so拷贝到:~/Qt/5.10.1/gcc

  8. 在CentOS6.7搭建Qt5.6.2环境

    查看g++是否安装成功#g++-v使用内建specs。

  9. Ubuntu下的deb打包

    运行环境:系统:Ubuntu14.04.5Qt:qt-opensource-linux-x86-5.5.1.run1、打包前准备1>deb包打包前要确定所需要打包的运行文件及其依赖库,否则deb包安装后运行可能会出现问题。

  10. ubuntu 16.04 libQGLViewer编译安装指南

    先装一堆sudoapt-getinstall和qt5的我随便勾了一大堆。特别是有一个qmake啥的什么的,反正都装上……然后在官网http://libqglviewer.com/index.html下载他的包。去根目录下qmake一下,生成makefile文件。接着make,sudomakeinstall即可。最后第一个sample的makefile如下:(就不用用qmake了makefile了。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部