Você pode fazer isso agora escrevendo um plugin personalizado muito simples (baseado no plugin 'nil'). Basta colocar um arquivo sources.list (contendo os repositórios que você deseja instalar) no diretório de nível superior do seu projeto e colocar o seguinte código em 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()
Depois disso, você pode precisar se preocupar com as chaves gpg para as fontes. Você pode simplesmente adicioná-los às chaves do seu sistema.
$sudo apt-key add <file with repo's gpg key>
Dependendo de quais repositórios você está tentando usar no seu snap, você pode precisar especificar algumas opções especiais para o apt. Você pode fazer isso com um arquivo apt.conf personalizado. Meu apt.conf se parece com isso.
Acquire::ForceHash "sha1";
Acquire::CompressionTypes::Order { "bz2", "gz"; };
Acquire::Languages { "none"; };
Você pode fazer o snapcraft usar este arquivo quando ele chama o apt internamente definindo uma variável ENV.
$export APT_CONFIG=<path to custom apt.conf file>
Por fim, edite seu snapcraft.yaml para usar seu novo plug-in.
parts:
custom-part:
plugin: your_plugin
stage-packages:
- <package from custom repo>
Agora, você pode rodar o "snap snap snap", e ele deve instalar pacotes dos repositórios listados em seu arquivo sources.list customizado, ao invés do sistema.