web-dev-qa-db-fra.com

Comment appliquer un correctif sur le code source en amont lors de la construction de snapcraft?

J'avais l'habitude de construire des paquets Debian (quilt), il supporte l'application de correctifs lors du processus de construction. Les correctifs sont stockés dans le dossier debian/patches et sont généralement utilisés pour ajouter des correctifs non encore validés à la source en amont ou pour ajouter un réglage de plate-forme spécifique.

Mon cas est un paquet qui nécessite une commande de construction personnalisée:

make build; make install_api; make install_desktop

au lieu de manière standard:

make; make install

La solution proposée actuellement consiste à:

  • modifiez Makefile et ajoutez les entrées default: & install:.

L'erreur rencontrée lors de l'exécution de snapcraft --no-parallel-build sans modifier la source:

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

Alors, y a-t-il un moyen d'ajouter un patch à la construction de snapcraft? Je suis ouvert à toute autre solution/solution de contournement.

5
user.dz

Cela semble être un bon cas pour "scriptlets" snapcraft . La strophe build: vous permettra de remplacer l'étape de construction par vos propres commandes Shell (make build; make install_api; make install_desktop).

4
Evan

Dans le cas idéal, l'accrochage est maintenu en amont, il est donc dans leur intérêt d'accepter les correctifs en amont, en les ajustant peut-être pour qu'ils soient plus généraux.

Si en amont ne veut pas maintenir l'accrochage et que vous le faites en tant que contributeur à la communauté, je suggérerais de créer un fork du projet original et d'appliquer vos correctifs à cet emplacement. Pour moi, une fourchette semble plus claire que de garder un ensemble de correctifs autour. C'est la méthode github, et je la préfère à la méthode debian.

Mais bien sûr, il s’agit d’un avis subjectif, et snapcraft doit être suffisamment souple pour vous permettre de suivre le processus que vous jugez le mieux pour votre projet. Donc, avec le snap bitcoin, nous avons un peu exploré avec les correctifs. Vous pouvez trouver les métadonnées de capture ici: https://github.com/elopio/blockchain-snaps/tree/master/bitcoin/snap

Dans le fichier snapcraft.yaml, vous trouverez une partie pour correctifs . Celui-ci copie simplement le répertoire patches dans le répertoire stage et veille à ce que ces fichiers ne se retrouvent pas dans le cliché. Si vous vérifiez ce répertoire, vous trouverez un fichier .patch généré avec git diff.

Ensuite, dans le fichier snapcraft.yaml, vous constaterez que la partie bitcoin applique le correctif dans le script de préparation .

Parties 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:
      - -*

Structure de dossier de capture:

.
├── patches
│   └── default_data_dir.patch
└── snapcraft.yaml

Cela fonctionne bien dans le cas de Bitcoin. Mais ce n'est qu'une expérience, pas encore une des meilleures pratiques documentées. Donc, les commentaires et les idées pour le rendre plus agréable sont les bienvenus.

3
elopio