我正在尝试构建一个依赖于 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 存储库中获取软件包。
通用分发支持即将到来,但是还没有。