以前は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ビルドにパッチを追加する方法はありますか?私は他の解決策/回避策を受け入れています。
これは、 snapcraft "scriptlets" の良いケースのように聞こえます。 build:
スタンザを使用すると、ビルドステップを独自のシェルコマンド(make build; make install_api; make install_desktop
)に置き換えることができます。
理想的なケースでは、スナップショットはアップストリームで維持されるため、アップストリームのパッチを受け入れるのが彼らの最大の関心事です。
アップストリームがスナップを維持することを望まず、コミュニティの貢献者としてそれを行っている場合、元のプロジェクトの分岐を作成し、そこにパッチを適用することをお勧めします。私にとって、フォークはパッチのセットを保持するよりも明確に思えます。これがgithubの方法であり、私はdebianの方法よりもそれを好みます。
しかし、もちろん、それは主観的な意見であり、snapcraftは、プロジェクトに最適だと思われるプロセスを追跡できるように十分に柔軟でなければなりません。そのため、ビットコインスナップを使用して、パッチを適用して少し調べました。スナップメタデータは次の場所にあります: https://github.com/elopio/blockchain-snaps/tree/master/bitcoin/snap
Snapcraft.yamlには、 パッチ の部分があります。パッチディレクトリをステージディレクトリにコピーするだけで、それらのファイルがスナップで終了しないようにします。そのディレクトリを確認すると、git diffで生成された1つの.patchファイルが見つかります。
次に、snapcraft.yamlでも、ビットコイン部分が prepare script のパッチを適用することがわかります。
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:
- -*
フォルダー構造のスナップ:
.
├── patches
│ └── default_data_dir.patch
└── snapcraft.yaml
これはビットコインの場合にうまく機能します。ただし、これは単なる実験であり、まだ文書化されたベストプラクティスではありません。それで、それをより良くするためのコメントとアイデアは大歓迎です。