Eu costumava construir pacotes Debian (quilt), ele suporta a aplicação de patches durante o processo de construção. Os patches são armazenados em debian/patches
pastas e geralmente são usados para adicionar correções ainda não confirmadas na fonte upstream ou adicionar ajustes de plataforma específicos.
Meu caso é um pacote que precisa de um comando de compilação personalizado:
make build; make install_api; make install_desktop
em vez da maneira padrão:
make; make install
A solução proposta atual é:
- modificar
Makefile
e adicionardefault:
&install:
entradas.
O erro obtido ao executar snapcraft --no-parallel-build
sem modificar a fonte:
make install DESTDIR=/home/username/Desktop/sandbox/alfanous-snap/parts/alfanous-git/install
make: *** No rule to make target 'install'. Stop.
Command '['/bin/sh', '/tmp/tmp_f_u1ktl', 'make', 'install',
'DESTDIR=/home/username/Desktop/sandbox/alfanous-snap/parts/alfanous-git/install']'
returned non-zero exit status 2
Então, existe alguma maneira de adicionar um patch ao snapcraft build? Estou aberto a qualquer outra solução/solução alternativa.
Isso soa como um bom caso para snapcraft "scriptlets" . A
build:
estrofe permitirá que você substitua a etapa de compilação por seus próprios comandos de shell (make build; make install_api; make install_desktop
).No caso ideal, o snap é mantido a montante, por isso é do seu interesse aceitar os patches a montante, talvez ajustando-os para serem mais gerais.
Se o upstream não quiser manter o snap e você estiver fazendo isso como um colaborador da comunidade, sugiro fazer uma bifurcação do projeto original e aplicar seus patches lá. Para mim, um garfo parece mais claro do que manter um conjunto de patches ao redor. Esse é o jeito do github, e eu prefiro do jeito do debian.
Mas, é claro, essa é uma opinião subjetiva, e o snapcraft deve ser flexível o suficiente para permitir que você siga qualquer processo que achar melhor para o seu projeto. Então, com o snap do bitcoin, exploramos um pouco o patching. Você pode encontrar os metadados do snap aqui: https://github.com/elopio/blockchain-snaps/tree/master/bitcoin/snap
No snapcraft.yaml você encontrará uma parte para patches . Esse apenas copia o diretório patches para o diretório stage e garante que esses arquivos não acabem no snap. Se você verificar esse diretório, encontrará um arquivo .patch gerado com git diff.
Em seguida, também no snapcraft.yaml, você descobrirá que a parte bitcoin aplica o patch no script de preparação .
Partes importantes de
snapcraft.yaml
:Estrutura da pasta Snap:
Isso funciona muito bem no caso do bitcoin. Mas é apenas um experimento, ainda não uma prática recomendada documentada. Portanto, comentários e idéias para torná-lo mais agradável são bem-vindos.