非 Ubuntu 软件包的 Apport 支持

非 Ubuntu 软件包的 Apport 支持

我已经阅读了有关 apport 及其用法的文章一周了。但无法理解以下内容。

设想:

我开发了一个应用程序,并打包好了,名字叫MyApp.deb,二进制包名是MyApp,应用程序安装在 路径/opt/myapplication/bin/MyApp

要求:

  1. 当我的应用程序崩溃时,我希望能够收集核心转储。
  2. 每次后续崩溃时,它都必须创建一个新的崩溃,但不会覆盖现有的崩溃。使用当前时间戳自动重命名等功能对我有帮助。
  3. 当我在客户机器上安装应用程序时,安装程​​序不得修改其系统范围的参数。例如,我不得更改其核心文件生成的模式,因为用户/客户可能会讨厌我的应用程序,因为我会在未经他同意的情况下更改其系统参数。
  4. 我对核心文件生成的路径没有异议。当前目录或/var/crash

我至今已经探索过的事物:

Apport 是一款不错的实用程序,可以生成核心文件。使用/proc/sys/kernel/core_pattern它可以格式化核心文件。这提供了灵活性,可以将核心文件重定向到预定义目录,使用 pid 命名核心文件,在其后附加或添加文件路径模式等。对于非 Ubuntu 软件包,我必须编写钩子来生成核心转储(报告)。收集报告后,Apport 会上传。

我不明白的事情:

  1. Apport 是我必须考虑的吗?我的意思是它能满足我的目的吗?还是我应该考虑其他东西?
  2. 我的应用程序属于哪种软件包?我称它为非 Ubuntu 吗?第三部分?它是什么?我在文档中看到不同的术语?
  3. 正如我所提到的,MyApp从 运行/opt/myapplication/bin/MyApp,那么核心文件将在哪里生成?当前目录还是/var/crash? Apport 会检测由 触发的崩溃吗/opt?它会解释它吗?
  4. 重要问题:如果我开发了该应用程序,并且 Apport 将报告上传到 Ubuntu 存储库,则这没有意义。那么我该如何告诉 Apport 将报告发送给我。
  5. 我收到此错误:executable does not belong to a package, ignoring。那么我做错了什么?
  6. 为了让 apport 识别我的软件包,我需要将其设为源包吗?这是强制性的吗?我只想创建一个二进制包?
  7. 我也在文档的某处看到了Apport承认的内容:
    1. Ubuntu 软件包或
    2. Launchpad 应用程序,但我的应用程序都不属于上述任何一种。那么 Apport 在当前情况下如何帮助我?

答案1

  1. 它看起来很接近,但可能不是你需要的。Apport 会自动更改 /proc/sys/kernel/core_pattern。因此,如果无法更改,你几乎就没运气了。另一方面,apport 现在是默认的 Ubuntu 安装,因此实际上每个使用 Ubuntu 的人都已经通过它更改了该参数。我也不知道有什么方法可以告诉 apport 保留来自特定应用程序的最近崩溃,但只要上传了每个崩溃,那就不是问题。
  2. 我将其称为第三方。
  3. Apport 支持安装在 /opt 中的可执行文件。您需要在 /opt/path/to/your/app/share/apport/package-hooks 中提供一个钩子。
  4. 您可以在软件包的软件包钩子中设置自定义崩溃数据库。但是,如果您的崩溃数据库不像 debbugs 或 launchpad 那样工作,您还需要创建自定义崩溃数据库连接器实现,这似乎无法在不安装 /opt 之外的 python 文件的情况下完成。
  5. 该可执行文件需要通过 dpkg 安装,这意味着您需要将其打包在 .deb 文件中。
  6. 您必须创建源包才能创建二进制包,因为二进制包是从源包创建的。您无需分发源包。
  7. Apport 可与任何打包为 .deb 文件的东西一起使用。

相关内容