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

Dav*_*lla 5 snap

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

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

是否可以build-packages从除了archive.ubuntu.com 之外的其他apt 存储库获取包?或者是否有另一种选择让 snapcraft 从 Debian 获取软件包?

小智 4

您现在可以通过编写一个非常简单的自定义插件(基于“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()
Run Code Online (Sandbox Code Playgroud)

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

$sudo apt-key add <file with repo's gpg key>
Run Code Online (Sandbox Code Playgroud)

根据您尝试在 snap 中使用的存储库,您可能需要为 apt 指定一些特殊选项。您可以使用自定义 apt.conf 文件来执行此操作。我的 apt.conf 看起来像这样。

Acquire::ForceHash "sha1";
Acquire::CompressionTypes::Order { "bz2", "gz"; };
Acquire::Languages { "none"; };
Run Code Online (Sandbox Code Playgroud)

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

$export APT_CONFIG=<path to custom apt.conf file>
Run Code Online (Sandbox Code Playgroud)

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

parts:
  custom-part:
    plugin: your_plugin
    stage-packages:
      - <package from custom repo>
Run Code Online (Sandbox Code Playgroud)

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


Sim*_*ley 0

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

通用发行支持即将到来,只是还没有。