我已经阅读了有关 apport 及其用法的文章一周了。但无法理解以下内容。
设想:
我开发了一个应用程序,并打包好了,名字叫MyApp.deb
,二进制包名是MyApp
,应用程序安装在 路径/opt/myapplication/bin/MyApp
。
要求:
- 当我的应用程序崩溃时,我希望能够收集核心转储。
- 每次后续崩溃时,它都必须创建一个新的崩溃,但不会覆盖现有的崩溃。使用当前时间戳自动重命名等功能对我有帮助。
- 当我在客户机器上安装应用程序时,安装程序不得修改其系统范围的参数。例如,我不得更改其核心文件生成的模式,因为用户/客户可能会讨厌我的应用程序,因为我会在未经他同意的情况下更改其系统参数。
- 我对核心文件生成的路径没有异议。当前目录或
/var/crash
我至今已经探索过的事物:
Apport 是一款不错的实用程序,可以生成核心文件。使用/proc/sys/kernel/core_pattern
它可以格式化核心文件。这提供了灵活性,可以将核心文件重定向到预定义目录,使用 pid 命名核心文件,在其后附加或添加文件路径模式等。对于非 Ubuntu 软件包,我必须编写钩子来生成核心转储(报告)。收集报告后,Apport 会上传。
我不明白的事情:
- Apport 是我必须考虑的吗?我的意思是它能满足我的目的吗?还是我应该考虑其他东西?
- 我的应用程序属于哪种软件包?我称它为非 Ubuntu 吗?第三部分?它是什么?我在文档中看到不同的术语?
- 正如我所提到的,
MyApp
从 运行/opt/myapplication/bin/MyApp
,那么核心文件将在哪里生成?当前目录还是/var/crash
? Apport 会检测由 触发的崩溃吗/opt
?它会解释它吗? - 重要问题:如果我开发了该应用程序,并且 Apport 将报告上传到 Ubuntu 存储库,则这没有意义。那么我该如何告诉 Apport 将报告发送给我。
- 我收到此错误:
executable does not belong to a package, ignoring
。那么我做错了什么? - 为了让 apport 识别我的软件包,我需要将其设为源包吗?这是强制性的吗?我只想创建一个二进制包?
- 我也在文档的某处看到了Apport承认的内容:
- Ubuntu 软件包或
- Launchpad 应用程序,但我的应用程序都不属于上述任何一种。那么 Apport 在当前情况下如何帮助我?
答案1
- 它看起来很接近,但可能不是你需要的。Apport 会自动更改 /proc/sys/kernel/core_pattern。因此,如果无法更改,你几乎就没运气了。另一方面,apport 现在是默认的 Ubuntu 安装,因此实际上每个使用 Ubuntu 的人都已经通过它更改了该参数。我也不知道有什么方法可以告诉 apport 保留来自特定应用程序的最近崩溃,但只要上传了每个崩溃,那就不是问题。
- 我将其称为第三方。
- Apport 支持安装在 /opt 中的可执行文件。您需要在 /opt/path/to/your/app/share/apport/package-hooks 中提供一个钩子。
- 您可以在软件包的软件包钩子中设置自定义崩溃数据库。但是,如果您的崩溃数据库不像 debbugs 或 launchpad 那样工作,您还需要创建自定义崩溃数据库连接器实现,这似乎无法在不安装 /opt 之外的 python 文件的情况下完成。
- 该可执行文件需要通过 dpkg 安装,这意味着您需要将其打包在 .deb 文件中。
- 您必须创建源包才能创建二进制包,因为二进制包是从源包创建的。您无需分发源包。
- Apport 可与任何打包为 .deb 文件的东西一起使用。