## 本文只是举一个简单的打包例子,以供参考,原理及细节部分太多太复杂,暂时不写原理部分的东西
### 关于打包原理部分可参考`Debian`官方文档
[Debian新维护者手册](https://www.debian.org/doc/manuals/maint-guide/)
[Debian维护者指南](https://www.debian.org/doc/manuals/debmake-doc/)
第一步,配置好环境变量值
环境变量值 在家目录下的`.bashrc`文件中加入如下三行,根据个人信息替换(这个文件根据你默认的shell来决定,如果你使用的`zsh`,那就是`.zshrc`)
``````text
DEBFULLNAME="liuyong"
DEBEMAIL="[email protected]"
export DEBFULLNAME DEBEMAIL
``````
构建deb包可分为从源码编译构建和从二进制包直接构建,二进制包已有编译好的二进制程序,可直接运行,无需再编译,直接构建成deb包即可,本文重点讲从二进制包构建deb包
本文的演示包为powder,一款物理沙盒模拟游戏
#### 首先去官网或者`github`等软件发布区获取软件压缩包,格式一般为pkgname-version.tar.gz/xz等 [powder软件压缩包下载地址](https://powdertoy.co.uk/Download.html)
压缩包为.zip格式,下载完后用unzip解压,可得到二进制程序和证书等文件,接下来我们将其打成deb格式的包
##### 解压出来的文件
`README.md`为自述文件,LICENSE为证书文件(遵守的开源协议) `powder64`为64位可执行二进制程序
![img](https://upload-images.jianshu.io/upload_images/19259628-d6652a1a919e94a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 然后以软件名建一个文件夹,将解压出来的文件放进去,再以 软件名-版本号 建一个文件夹,将刚才的文件夹放进去
![img](https://upload-images.jianshu.io/upload_images/19259628-294402b673cef715.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 接下来在当面目录创建一个icons文件夹和以软件名为名的desktop文件
icons文件夹存放软件的图标,我们可以去网上或者源码里找到软件的图标文件,根据图标大小放入icons下不同的文件夹下
icons文件夹的格式为
![img](https://upload-images.jianshu.io/upload_images/19259628-66122ed8a601dfb1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
因为我找的图标大小为128x128,所以将它放入icons/hicolor/128x128/apps下
##### 然后写一个`powder.desktop`文件,写好的文件格式如下
![img](https://upload-images.jianshu.io/upload_images/19259628-a789985d25432b2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### desktop语法解释
[Desktop Entry] 文件头
Name 应用名称
Comment 软件描述信息
Exec 二进制文件的路径
Icon 图标名
Terminal 是否使用终端
Type 启动器类型
Categories 应用的类型 [可用的字段参考](https://specifications.freedesktop.org/menu-spec/latest/apa.html)
##### 接下来,使用 dh_make --createorig -s 命令创建debian目录,并在上层目录初始化出来源码包
![img](https://upload-images.jianshu.io/upload_images/19259628-6b987ca18ae9dae4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
确认信息正确输入y即可
当前目录下会自动创建debian目录,目录下有很多打包使用的模板文件,以.ex/.EX结尾,具体用途参考 [模板文件参考](https://www.debian.org/doc/manuals/maint-guide/dother.zh-cn.html),对于此软件包,我们不需要这些模板文件,所以全部删掉
![img](https://upload-images.jianshu.io/upload_images/19259628-407b33c9633a254c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 然后修改control文件
对各个Control文件的具体描述说明,参考[Control文件说明](https://docs.deepin.io/?p=3738),我们本次打包,只需修改sections字段,homepage字段,Architecture字段,Description字段,修改完后如下格式
![img](https://upload-images.jianshu.io/upload_images/19259628-20dedadd152ab6e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
本次修改的几个字段解释
sections 为软件分类,字段值参考 [sections字段值参考](https://packages.debian.org/en/sid/)
homepage 软件的主页的网址
Architecture 支持的架构,因为该二进制为64位,所以只用写amd64
descriptions 软件的描述信息
##### 接下来创建install文件,install文件用途是指定各个文件的安装路径,格式参考
![img](https://upload-images.jianshu.io/upload_images/19259628-94cffa1293e05aa8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
install文件解释
每行的第一列为当前文件,第二列为安装路径,我们将icons文件夹放入/usr/share目录下,将二进制程序及其他解压出来的文件 放在/opt目录下,将.desktop文件放在/usr/share/applications/下
因为是从二进制包构建的,不用编译和生成依赖库等行为,但是pbuild时会默认出发这写命令,所以我们可以在rules文件里覆盖掉这些指令,让他什么都不做,如图,在rules文件里加入如下选中的几行
![img](https://upload-images.jianshu.io/upload_images/19259628-0b90f6f1f7c1e697.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 然后修改changlog文件,使用 命令 dch -i 生成一个模板,描述此次的更新行为(第三行),将UNRELEASED改为unstable 保存退出
![img](https://upload-images.jianshu.io/upload_images/19259628-1ce01e1996f1684f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 然后,使用dpkg-source -b ./ 命令 生成.dsc文件和debian描述文件
![img](https://upload-images.jianshu.io/upload_images/19259628-fa5fa621511c37b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
##### 最后,执行debuild或者dpkg-buildpackage命令 即可自动构建出deb包
这两个命令可以加 -j参数来指定使用的线程数来加速打包
[pubilder使用方法简介](https://shimo.im/docs/Ac9wbmxavDQyx7w7/read)