Como aplicar um patch no código-fonte upstream enquanto o snapcraft é construído?

5

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 é:

  • modifique 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.

    
por user.dz 17.04.2017 / 15:06

2 respostas

3

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 ).

    
por Evan 18.04.2017 / 10:39
2

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.

    
por elopio 18.04.2017 / 18:01