将源码打包成deb软件包

1、前言

  上个月硬盘坏了,以前那个作者打包的deb包丢了,只留下一个github源码,接着当然是好好学习怎么打包,这也是一个打包教程。
  要打包得回答两个问题,用什么软件打包还有就是得准备是什么

1.1、用什么软件打包

  找了下在官网找到点文档Chapter 7 - Basics of the Debian package management system7.15 How do I create Debian packages myself?

  • Debian New Maintainers’ Guide的PDF文档,找到打包的基础工具包
  • Guide for Debian Maintainers的PDF文档,找到生成打包所需文件的文档的软件。

1.2、打包需要准备什么文件?

  • 软件的图标文件.desktop文件
  • deb软件格式的构建文档dedian文件夹,里面包含deb构建信息,其中control文件是核心

2、系统环境及需求

3、构建过程

  这里快速过一下过程。

3.1、安装打包软件

root环境下执行

apt-get install build-essential
apt-get install debmake

build-essentials:文档说明这个软件是必须的
debmake:生成必要的打包文件

3.2、下载源码包

下载软件包,并删除debian文件夹,因为要走一次过程。

git clone https://github.com/rekols/monitor-desktop

接着删掉debian文件夹

3.3、准备软件包必要文件

3.3.1、desktop内容

这里贴一下desktop内容,过一下:

[Desktop Entry]
Categories=Application;Utility;
Encoding=UTF-8
Exec=/usr/bin/rekols-monitor
Icon=apps.com.onlinego
Name=Rekols Monitor
Name[zh_CN]=系统监视悬浮窗
Name[zh_TW]=系统监视悬浮窗
StartupNotify=false
Terminal=false
Type=Application
X-MultipleArgs=false
3.3.2、生成debian文件夹配置文件

debian文件夹比较复杂,这里只能用命令生成,在源码目录下执行(普通用户即可):

debmake -e rekols@foxmail.com -p rekols-monitor -u 0.1 -f "rekols" -m -n -x1

解释一下参数:
-e:邮件地址
-p:软件包名
-u:软件版本号
-f:作者全名"firstname lastname"
-m:force packages to be non-multiarch,这个选项看每个人的情况吧,我个人建议是多一个功能有何不好,这里只是演示有这个参数
-n:make a native source package without .orig.tar.gz ,这个参数是核心,直接从源码生成配置文件,而不是从xxx.orig.tar.gz生成。前面参数单独使用都会提示需要设置参数,跟生成参数一起,才不会提示
-x1:这个参数的默认值就是x1,这里是说明这个参数的作用,deb包的构建过程有很多钩子方法,x1只是包含一些项目信息和构建信息的版本,x0就只有构建信息,但是x0参数已经被弃用,x2、x3、x4你会发现生成文件很多,一般没有特殊情况,最简即可,即使用默认参数x1即可
Note:如果源码不是c类型的,是java、python等,你可能需要使用debmake -b选项,这里我也没试过,但是其他语言是要更改的

参数修改的模板内容,`-xxxx`为参数:

Source: `-p`
Section: unknown
Priority: extra
Maintainer: `-f`  `-e`
Build-Depends: debhelper (>=9), qt4-qmake
Standards-Version: 3.9.8
Homepage: 自己的项目主页

Package: `-p`或者`-b`覆盖
Architecture: any
Multi-Arch: foreign  使用`-m`这一行会不设置
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: 自己写的软件描述
3.3.3、修改配置文件

接着修改debian/control的内容。下面三项默认内容需要修改:

Section: unknown
Priority: extra
Build-Depends: debhelper (>=9), qt4-qmake

改成:

Section: base
Priority: optional
Build-Depends: debhelper (>=9), qt5-qmake
  • Priority的默认生成为extra,extra在新版deb包中已经弃用,官方推荐使用optional,其中如果用了默认的extra,会出现卸载不了,需要在root权限下才能使用dpkg -i命令卸载,使用optional能正常卸载,所以不更改的话,会出现权限问题,权限不在本用户,而在root用户。
  • Build-Depends的qt4-qmake改为qt5-qmake,同时命令行执行apt-get install qt5-default命令,安装qt5-qmake,这里只要你安装了qt4-qmake,不用修改也是可以的,qmake是编译源码用的,但是最好还是跟源码版本相同好
  • Section不知道怎么填,官方文档看不到这个base的选项,controlfields.html的5.6.5. Section的2.4. Sections

不用修改的选项Homepage和Description为描述性属性,按自己喜好修改即可。

3.4、生成deb包

源码目录下执行(得在root用户下执行,不然权限不够)

dpkg-buildpackage -us -uc -tc -b
或者
debuild -uc -us -tc -b

debuild是对dpkg-buildpackage进一步封装。所以dpkg-buildpackage的参数在debuild都能用
参数解释:
-uc:unsigned .buildinfo and .changes file.
-us:unsigned source package.
-tc:clean source tree when finished. 清理qmake生成的中间文件,让源码变回只有源码文件
-b:binary-only, no source files. //只需要源码就可以打包出deb包,其他参数的话,要压缩包,这里用不到,因为本来只有源码,这个-b参数可以省略,多生成两个文件,自己探索吧
最后输出的文件:
在这里插入图片描述
  个人使用的东西,不需要签名,没有签名文件会跳过,而且我也不知道怎么搞,这才是关键,自用,这就不管了。至此打包结束。
文档是这样的:
在这里插入图片描述
虽然在源码路径下执行打包命令,但是debmake命令生成的文件是这个路径的父路径。

4、配置文件知识

4.1、debian配置文件

在程序源代码目录下有一个叫做 debian 的新的子目录。这个目录中存放着许多文件,我们将要修改这些文件来定制软件包行为。其中最重要的文件当属 control, changelog, copyright, 以及 rules, 所有的软件包都必须有这几个文件。

其实copyright文件不是必须的,因为少了还能构建,必须的文件: control、changelog、rules、compat
debian文件夹目录结构:
在这里插入图片描述
自动生成的文件中,必须保证control、changelog、rules、compat文件存在,不然报错。其余文件斟酌要不要删了
Note:其中生成命令中如果不使用-p指定软件包名和-u指定软件版本,将自动用文件夹格式生成软件名和版本,格式:软件名-版本,这里不设置,默认为软件名:monitor、版本:desktop,版本号不是数字;打deb包时,changelog的讲报错,因为抬头格式不正确,需要手动修改为正确的版本号,或者你的文件夹名起名规范。
这里不出情况,只需要关注control下即可。

4.2、debian/control配置文件

debmake -n命令生成的control:

Source: monitor
Section: unknown
Priority: extra
Maintainer: <hui@localhost>
Build-Depends: debhelper (>=9), qt4-qmake
Standards-Version: 3.9.8
Homepage: <insert the upstream URL, if relevant>

Package: monitor
Architecture: any
Multi-Arch: foreign
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: auto-generated package by debmake
 This Debian binary package was auto-generated by the
 debmake(1) command provided by the debmake package.

参数解释:

参数解释
SourceThis field identifies the source package name,不知道用来干嘛的,但是改了这需要同时修改changelog的生命包名
SectionThis field specifies an application area into which the package has been classified,暂时不知道填什么,可能填这个也可能不是–session-sid,暂时只知道一个选项是base
PriorityThis field represents how important it is that the user have the package installed,这个属性有required、important、standard、optional、extra(已弃用)五个选项,其中官方推荐是optional,但是根据实际情况选择吧。
Maintainer维护者信息或者说是作者信息
Build-Depends构建的依赖,列出来的依赖,需要系统安装了才能制作deb包成功
Standards-VersionThe most recent version of the standards (the policy manual and associated texts) with which the package complies,不清楚怎么给出来的。
Homepage主页地址,描述性信息
PackageThe name of the binary package,最后生成的软件名,安装后dpkg -l显示的名字,卸载也用这个名字
Architecture软件的架构,可以用dpkg-architecture -L中列出的字符串,最多人用的是all或者any
Multi-Arch具体参看man debmake的-b参数,自动设置。或者-b设置特定类型的应用自动设置,如果不是像这个例子一样是c++的,可能需要设置一下debmake -b设置具体的程序类型,令Architecture和Multi-Arch自动更改。
Depends默认即可,要知道详细可到4.1章节处了解
Description软件描述,dpkg安装时显示。

权威解释请看:https://www.debian.org/doc/manuals/maint-guide/dreq.zh-cn.html#control的4.1章节。
https://www.debian.org/doc/debian-policy/ch-controlfields.html#source-package-control-files-debian-control

4.3、desktop配置文件

.desktop文件是桌面版本的软件的快捷方式描述文件。
只是普通文本文件,找个模板修改即可,之后看看有没空,找找生成工具什么的。

[Desktop Entry]
Categories=Application;Utility;
Encoding=UTF-8
Exec=/usr/bin/rekols-monitor
Icon=apps.com.onlinego
Name=Rekols Monitor
Name[zh_CN]=系统监视悬浮窗
Name[zh_TW]=系统监视悬浮窗
StartupNotify=false
Terminal=false
Type=Application
X-MultipleArgs=false
关键字意义
[Desktop Entry]文件声明行
Categories应用的类型(内容相关)
Encoding编码
Exec执行的命令
Icon图标路径
Name应用名称
Name[xx]不同语言的应用名称,这里配置了两个语言
StartupNotify是否能使用提示反馈,默认值为false
Terminal是否使用终端
Type启动器类型
X-MultipleArgs是否有多个参数

参数参考:

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 安装Qt 首先需要安装Qt,可以通过以下命令进行安装: ``` sudo apt-get install qt5-default ``` 2. 编写Qt程序 编写Qt程序并进行编译,生可执行文件。 3. 创建Debian目录结构 在程序的根目录下创建一个名为`debian`的目录,该目录中需要包含以下文件: - control:描述软件包的元数据,包括软件包名称、版本、依赖关系等信息。 - changelog:软件包的更改日志。 - rules:打包软件包的规则。 - compat:指定打包软件包所使用的debhelper版本。 可以通过以下命令创建Debian目录结构: ``` dh_make --createorig ``` 4. 编辑control文件 编辑`debian/control`文件,需要包含以下内容: ``` Source: package-name Section: devel Priority: optional Maintainer: Your Name <[email protected]> Build-Depends: debhelper (>= 9), qt5-default Standards-Version: 3.9.3 Package: package-name Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Description of package-name ``` 其中,`package-name`需要替换为软件包的名称,`Maintainer`需要替换为你的名字和邮箱地址,`Description`需要替换为软件包的描述。 5. 编辑changelog文件 编辑`debian/changelog`文件,需要包含以下内容: ``` package-name (version) distribution; urgency=low * Initial release. -- Your Name <[email protected]> Wed, 01 Jan 2020 00:00:00 +0800 ``` 其中,`package-name`需要替换为软件包的名称,`version`需要替换为软件包的版本号,`distribution`需要替换为Linux发行版的名称,`Your Name`和`[email protected]`需要替换为你的名字和邮箱地址。 6. 编辑rules文件 编辑`debian/rules`文件,需要包含以下内容: ``` #!/usr/bin/make -f %: dh $@ ``` 7. 编辑compat文件 编辑`debian/compat`文件,需要包含以下内容: ``` 9 ``` 8. 打包程序 在程序的根目录下运行以下命令进行打包: ``` debuild -us -uc ``` 该命令将在当前目录下生一个`.deb`文件,即为打包好的软件包。 至此,将Qt程序打包deb的步骤就完了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值