Isso parece um bom argumento para snapcraft "scriptlets" . A sub-rotina build:
permitirá que você substitua a etapa de construção pelos seus próprios comandos de shell ( make build; make install_api; make install_desktop
).
Eu usei para construir pacotes Debian (quilt), ele suporta a aplicação de patches durante o processo de compilação. Os patches são armazenados na pasta debian/patches
e geralmente são usados para adicionar correções ainda não confirmadas à fonte upstream ou para adicionar tunning de plataforma específica.
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 atual proposta é:
Makefile
e adicione default:
& amp; install:
entradas. O erro ocorreu 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 build do snapcraft? Estou aberto a qualquer outra solução / solução alternativa.
Isso parece um bom argumento para snapcraft "scriptlets" . A sub-rotina build:
permitirá que você substitua a etapa de construção pelos 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 um fork do projeto original e aplicar seus patches nele. Para mim, um garfo parece mais claro do que manter um conjunto de remendos ao redor. Essa é a maneira do github, e eu prefiro isso ao modo debian.
Mas, é claro, essa é uma opinião subjetiva, e o snapcraft deve ser flexível o suficiente para permitir que você siga o processo que achar melhor para o seu projeto. Então, com o snap do bitcoin, exploramos um pouco com patch. Você pode encontrar os metadados de snap aqui: link
No snapcraft.yaml, você encontrará uma parte para os patches . Aquele apenas copia o diretório de correções para o diretório de estágio e garante que esses arquivos não acabem no snap. Se você verificar esse diretório, você encontrará um arquivo .patch gerado com o git diff.
Depois, também no snapcraft.yaml, você verá que a parte do bitcoin aplica o patch no preparar o script .
Partes importantes de snapcraft.yaml
:
parts:
bitcoin:
source: https://github.com/bitcoin/bitcoin
source-type: git
prepare: git apply $SNAPCRAFT_STAGE/default_data_dir.patch
patches:
source: snap/patches
plugin: dump
prime:
- -*
Estrutura de pastas de acesso:
.
├── patches
│ └── default_data_dir.patch
└── snapcraft.yaml
Isso funciona muito bem no caso do bitcoin. Mas é apenas uma experiência, ainda não documentada. Então, comentários e idéias para torná-lo mais agradável são bem-vindos.