0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何从头开始学习为 CardBook 创建一个Debian包

Linux爱好者 来源:未知 作者:李倩 2018-08-02 17:08 次阅读

我在 GSoC(LCTT 译注:Google Summer Of Code,一项针对学生进行的开源项目训练营,一般在夏季进行。)的任务中有一项是为用户构建 Thunderbird扩展。一些非常流行的扩展,比如Lightning(日历行事历)已经拥有了 deb 包。

另外一个重要的用于管理基于 CardDav 和 vCard 标准的联系人的扩展Cardbook,还没有一个 deb 包。

我的导师,Daniel鼓励我去为它制作一个包,并上传到mentors.debian.net。因为这样就可以使用apt-get来安装,简化了安装流程。这篇博客描述了我是如何从头开始学习为 CardBook 创建一个 Debian 包的。

首先,我是第一次接触打包,我在从源码构建包的基础上进行了大量研究,并检查它的协议是是否与DFSG兼容。

我从多个 Debian Wiki 中的指南中进行学习,比如打包介绍、构建一个包,以及一些博客。

我还研究了包含在Lightning 扩展包的 amd64 文件。

Debian 包

创建一个空的包

我从使用dh_make来创建一个debian目录开始。

# Empty project folder

$ mkdir -p Debian/cardbook

# create files

$ dh_make

> --native

> --single

> --packagename cardbook_1.0.0

> --email minkush@example.com

一些重要的文件,比如 control、rules、changelog、copyright 等文件被初始化其中。

所创建的文件的完整列表如下:

$ find /debian

debian/

debian/rules

debian/preinst.ex

debian/cardbook-docs.docs

debian/manpage.1.ex

debian/install

debian/source

debian/source/format

debian/cardbook.debhelper.lo

debian/manpage.xml.ex

debian/README.Debian

debian/postrm.ex

debian/prerm.ex

debian/copyright

debian/changelog

debian/manpage.sgml.ex

debian/cardbook.default.ex

debian/README

debian/cardbook.doc-base.EX

debian/README.source

debian/compat

debian/control

debian/debhelper-build-stamp

debian/menu.ex

debian/postinst.ex

debian/cardbook.substvars

debian/files

我了解了 Debian 系统中Dpkg包管理器及如何用它安装、删除和管理包。

我使用dpkg命令创建了一个空的包。这个命令创建一个空的包文件以及四个名为.changes、.deb、.dsc、.tar.gz的文件。

.dsc文件包含了所发生的修改和签名

.deb文件是用于安装的主要包文件。

.tar.gz(tarball)包含了源代码

这个过程也在/usr/share目录下创建了README和changelog文件。它们包含了关于这个包的基本信息比如描述、作者、版本。

我安装这个包,并检查这个包安装的内容。我的新包中包含了版本、架构和描述。

$ dpkg -L cardbook

/usr

/usr/share

/usr/share/doc

/usr/share/doc/cardbook

/usr/share/doc/cardbook/README.Debian

/usr/share/doc/cardbook/changelog.gz

/usr/share/doc/cardbook/copyright

包含 CardBook 源代码

在成功的创建了一个空包以后,我在包中添加了实际的 CardBook 扩展文件。 CardBook 的源代码托管在 Gitlab 上。我将所有的源码文件包含在另外一个目录,并告诉打包命令哪些文件需要包含在这个包中。

我使用 vi 编辑器创建一个 debian/install 文件并列举了需要被安装的文件。在这个过程中,我花费了一些时间去学习基于 Linux 终端的文本编辑器,比如 vi 。这让我熟悉如何在 vi 中编辑、创建文件和快捷方式。

当这些完成后,我在变更日志中更新了包的版本并记录了我所做的改变。

$ dpkg -l | grep cardbook

ii cardbook 1.1.0 amd64 Thunderbird add-on for address book

更新完包的变更日志

在重新构建完成后,重要的依赖和描述信息可以被加入到包中。 Debian 的control文件可以用来添加额外的必须项目和依赖。

本地 Debian 仓库

在不创建本地存储库的情况下,CardBook 可以使用如下的命令来安装:

$ sudo dpkg -i cardbook_1.1.0.deb

为了实际测试包的安装,我决定构建一个本地 Debian 存储库。没有它,apt-get命令将无法定位包,因为它没有在 Debian 的包软件列表中。

为了配置本地 Debian 存储库,我复制我的包 (.deb)为放在/tmp目录中的Packages.gz文件。

本地 Debian 仓库

为了使它工作,我了解了apt的配置和它查找文件的路径。

我研究了一种在apt-config中添加文件位置的方法。最后,我通过在 APT 中添加*.list文件来添加包的路径,并使用apt-cache更新APT缓存来完成我的任务。

因此,最新的 CardBook 版本可以成功的通过apt-get install cardbook来安装了。

使用 apt-get 安装 CardBook

修复打包错误和 Bugs

我的导师 Daniel 在这个过程中帮了我很多忙,并指导我如何进一步进行打包。他告诉我使用Lintian来修复打包过程中出现的常见错误和最终使用dput来上传 CardBook 包。

Lintian 是一个用于发现策略问题和 Bug 的包检查器。它是 Debian 维护者们在上传包之前广泛使用的自动化检查 Debian 策略的工具。

我上传了该软件包的第二个更新版本到 Debian 目录中的Salsa 仓库的一个独立分支中。

我从 Debian backports 上安装 Lintian 并学习在一个包上用它来修复错误。我研究了它用在其错误信息中的缩写,和如何查看 Lintian 命令返回的详细内容。

$ lintian -i -I --show-overrides cardbook_1.2.0.changes

最初,在.changes文件上运行命令时,我惊讶地看到显示出来了大量错误、警告和注释!

在包上运行 Lintian 时看到的大量报错

详细的 Lintian 报错

详细的 Lintian 报错 (2) 以及更多

我花了几天时间修复与 Debian 包策略违例相关的一些错误。为了消除一个简单的错误,我必须仔细研究每一项策略和 Debian 的规则。为此,我参考了Debian 策略手册以及Debian 开发者参考。

我仍然在努力使它变得完美无暇,并希望很快可以将它上传到 mentors.debian.net!

如果 Debian 社区中使用 Thunderbird 的人可以帮助修复这些报错就太感谢了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源代码
    +关注

    关注

    96

    文章

    2945

    浏览量

    66745
  • Debian
    +关注

    关注

    0

    文章

    75

    浏览量

    1166

原文标题:Debian 打包入门

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MikroElektronika的mikroBUS Click板是否从头开始的制作?

    的示例代码,因此您不必从头开始。2x2按键单击,FLICKER单击,Arduino UNO单击Shield我想用Click板创建项目来展示它们,但有数百
    发表于 10-31 07:10

    请问必须从头创建BitGen .ut文件吗?

    我知道ISE会生成.ut文件。但是你不使用ISE是什么,切都是命令行。是否必须从头创建BitGen .ut文件?我还注意到,适用于Vi
    发表于 07-22 14:48

    如何使用和声从头开始设置HTTP服务?

    有没有关于如何使用和声从头开始设置HTTP服务的最新教程/设置?(不是从演示项目开始
    发表于 04-08 09:39

    ARM嵌入式系统设计:从头开始构建还是使用SBC?

    些是早期产品的迭代。对于他们而言,开发可在其整个产品组合中使用的标准平台是种可行的替代方案,而不是每个新产品从头开始进行新设计。选择
    发表于 10-21 10:11

    如何从头开始创建新的SPC5应用程序?

    我正在使用 SPC570S-DISP 开发板,我正在尝试创建新的应用程序表单。我已经测试了 IDE 中给出的几个示例应用程序,它们工作正常。现在我想从头开发这样
    发表于 01-16 07:22

    能否连接JTAG调试器并从头开始对MCU进行编程,因为MCU上没有旧代码?

    我正在设计带有 mimxrt1062 芯片的 PCB。我要把 JTAG 引脚拿出来。我能否连接 JTAG 调试器并从头开始对 MCU 进行编程,因为 MCU 上没有旧代码?有什么需要注意的吗?
    发表于 05-12 06:20

    在三十分钟内创建你的深度学习服务器

    每当我开始新的项目时,我发现自己一次又一次地创建
    的头像 发表于 12-24 16:53 464次阅读

    如何从头开始EK-RA6M4评估板创建项目

    开始学习Pascal样。从那时起,我用其他几种语言编写了类似的代码行,主要是为了对新开发环境的安装进行完整性检查。
    发表于 10-25 14:16 735次阅读

    从头开始构建无人机

    电子发烧友网站提供《从头开始构建无人机.zip》资料免费下载
    发表于 11-22 10:35 1次下载
    <b class='flag-5'>从头开始</b>构建无人机

    如何从头开始制作六足机器人

    电子发烧友网站提供《如何从头开始制作六足机器人.zip》资料免费下载
    发表于 11-23 09:53 2次下载
    如何<b class='flag-5'>从头开始</b>制作六足机器人

    PyTorch教程3.4之从头开始执行线性回归

    电子发烧友网站提供《PyTorch教程3.4之从头开始执行线性回归.pdf》资料免费下载
    发表于 06-05 11:25 0次下载
    PyTorch教程3.4之<b class='flag-5'>从头开始</b>执行线性回归

    PyTorch教程4.4之从头开始实现Softmax回归

    电子发烧友网站提供《PyTorch教程4.4之从头开始实现Softmax回归.pdf》资料免费下载
    发表于 06-05 15:37 0次下载
    PyTorch教程4.4之<b class='flag-5'>从头开始</b>实现Softmax回归

    PyTorch教程-3.4. 从头开始执行线性回归

    ,但从头开始实施是确保您真正了解自己在做什么的唯方法。此外,当需要自定义模型、定义我们自己的层或损失函数时,了解引擎盖下的工作原理将很方便。在本节中,我们将仅依赖
    的头像 发表于 06-05 15:38 497次阅读
    PyTorch教程-3.4. <b class='flag-5'>从头开始</b>执行线性回归

    为什么从头开始汽车应用设计IC很重要

    级和3级自动驾驶技术的好处,这些技术提供了部分到有条件的转向,加速和制动自动化。反过来,这些技术又推动了对车内半导体内容的需求。本文将探讨为什么从性能和安全角度出发,从头开始设计汽车IC比重新利用最初设计用于其他用途的芯片更好。
    的头像 发表于 06-12 14:25 648次阅读

    在Spartan 6 FPGA上从头开始实现全加器

    电子发烧友网站提供《在Spartan 6 FPGA上从头开始实现全加器.zip》资料免费下载
    发表于 06-15 10:13 0次下载
    在Spartan 6 FPGA上<b class='flag-5'>从头开始</b>实现全加器