如何从 snapcraft 中的其他 apt 存储库获取构建包

如何从 snapcraft 中的其他 apt 存储库获取构建包

我正在尝试构建一个依赖于 gtk3d 的 snap,该软件包仅在 Debian 档案中可用:

https://packages.debian.org/sid/libgtkd-3-dev

是否可以build-packages从 archive.ubuntu.com 以外的其他 apt 存储库获取软件包?或者是否有其他方法可以让 snapcraft 从 Debian 获取软件包?

答案1

您现在可以通过编写一个非常简单的自定义插件(基于“nil”插件)来实现这一点。只需将 sources.list 文件(包含您要从中安装的存储库)放在项目的顶级目录中,然后将以下代码放在 parts/plugins/your_plugin.py 中

import snapcraft
import os

class YourPlugin(snapcraft.BasePlugin):
    @classmethod
    def schema(cls):
        return {
            '$schema': 'http://json-schema.org/draft-04/schema#',
            'type': 'object',
            'additionalProperties': False,
            'properties': {},
        }

    def enable_cross_compilation(self):
        pass

    @property
    def PLUGIN_STAGE_SOURCES(self):
        return open('sources.list', 'r').read()

之后,您可能需要担心源的 gpg 密钥。您只需将它们添加到系统的 apt 密钥中即可。

$sudo apt-key add <file with repo's gpg key>

根据您尝试在 snap 中使用哪个 repos,您可能需要为 apt 指定一些特殊选项。您可以使用自定义 apt.conf 文件执行此操作。我的 apt.conf 如下所示。

Acquire::ForceHash "sha1";
Acquire::CompressionTypes::Order { "bz2", "gz"; };
Acquire::Languages { "none"; };

您可以通过设置 ENV 变量让 snapcraft 在内部调用 apt 时使用此文件。

$export APT_CONFIG=<path to custom apt.conf file>

最后,编辑你的 snapcraft.yaml 以使用你的新插件。

parts:
  custom-part:
    plugin: your_plugin
    stage-packages:
      - <package from custom repo>

现在,您可以运行“snapcraft snap”,它应该从您的自定义 sources.list 文件中列出的存储库而不是系统的存储库中安装软件包。

答案2

截至目前,除非您在 Debian 系统上构建您的 snap,否则目前还没有办法做到这一点,在这种情况下,它会从 Debian 存储库中获取软件包。

通用分发支持即将到来,但是还没有。

相关内容