我曾经构建 Debian 软件包(被子),它支持在构建过程中应用补丁。补丁存储在debian/patches
文件夹中,它们通常用于将尚未提交的修复添加到上游源或添加特定的平台调整。
我的案例是一个需要自定义构建命令的包:
make build; make install_api; make install_desktop
而不是标准方式:
make; make install
目前提出的解决方案是:
- 修改
Makefile
和添加default:
&install:
条目。
snapcraft --no-parallel-build
在不修改源的情况下运行时出现的错误:
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
那么,有没有办法给 snapcraft build 添加补丁呢?我对任何其他解决方案/解决方法持开放态度。
这听起来像是snapcraft "scriptlets"的一个很好的例子。该
build:
节将允许您用自己的 shell 命令 (make build; make install_api; make install_desktop
) 替换构建步骤。在理想情况下,snap 会在上游维护,因此接受上游补丁符合他们的最大利益,也许会将它们调整为更通用。
如果上游不想维护快照,而您是作为社区贡献者来做的,我建议您对原始项目进行分叉并在那里应用您的补丁。对我来说,分叉似乎比保留一组补丁更清晰。那是 github 的方式,我更喜欢它而不是 debian 的方式。
但当然,这是一种主观意见,snapcraft 应该足够灵活,让您可以遵循您认为最适合您的项目的任何流程。因此,通过比特币快照,我们对补丁进行了一些探索。您可以在此处找到快照元数据:https ://github.com/elopio/blockchain-snaps/tree/master/bitcoin/snap
在 snapcraft.yaml 中,您会找到patch的一部分。那个只是将补丁目录复制到阶段目录中,并确保这些文件不会很快结束。如果你检查那个目录,你会发现一个用 git diff 生成的 .patch 文件。
然后,同样在 snapcraft.yaml 中,您会发现比特币部分应用了准备脚本中的补丁。
的重要部分
snapcraft.yaml
:快照文件夹结构:
这在比特币案例中效果很好。但这只是一个实验,还没有记录在案的最佳实践。所以欢迎评论和想法使它更好。