web-dev-qa-db-ja.com

snapcraftビルド中にアップストリームソースコードにパッチを適用する方法は?

以前は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ビルドにパッチを追加する方法はありますか?私は他の解決策/回避策を受け入れています。

5
user.dz

これは、 snapcraft "scriptlets" の良いケースのように聞こえます。 build:スタンザを使用すると、ビルドステップを独自のシェルコマンド(make build; make install_api; make install_desktop)に置き換えることができます。

4
Evan

理想的なケースでは、スナップショットはアップストリームで維持されるため、アップストリームのパッチを受け入れるのが彼らの最大の関心事です。

アップストリームがスナップを維持することを望まず、コミュニティの貢献者としてそれを行っている場合、元のプロジェクトの分岐を作成し、そこにパッチを適用することをお勧めします。私にとって、フォークはパッチのセットを保持するよりも明確に思えます。これが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

これはビットコインの場合にうまく機能します。ただし、これは単なる実験であり、まだ文書化されたベストプラクティスではありません。それで、それをより良くするためのコメントとアイデアは大歓迎です。

3
elopio