HN 日本語サマリー

← 一覧へ戻る
オープンソース

SPICEを死なせないと決意する

I refuse to let SPICE die (github.com)

59 pointsby Nefarius49 コメント

要約

この記事は、Red Hatがメンテナンスを終了したSPICEのWindowsゲストエージェントプロジェクトをコミュニティで維持・フォークした経緯と現状について説明しています。このフォークは、特にWindows 11 VMでSPICEを使用する際に、マウスのポインターグラブ解除、デスクトップ解像度同期、クリップボード共有、ファイル転送などの機能を維持・改善することを目指しています。

全文翻訳

Windows用SPICE VDエージェント SPICEのコミュニティメンテナンスによるWindowsゲストエージェント。 このリポジトリは、abandoned freedesktop.org spice/win32/vd_agentプロジェクトの公開ミラーです。CanonicalのダウンロードはGitHub Releasesにあります。 エージェントは以下を提供します: ポインターをグラブしないクライアントマウスモード クライアントに合わせたデスクトップ解像度 クリップボード共有(テキストと画像) ゲストへのファイル転送 各セッションでvdagent.exeを起動するWindowsサービス (spice-agent) ステータス Red HatはもはやアップストリームSPICEをメンテナンスしていません。このフォークは、特にLinux上のWindows 11 VMで、Windowsエージェントをビルドし、現在のゲストに提供し続けます。 ツリーには、d7405ee (vdagent/desktop_layout.cpp) からのマルチGPUマウス修正が既に含まれています。SPICEディスプレイデバイスと並んで実際のGPUがパススルーされると、エージェントはマウスの移動を失わなくなります。 ライセンスと出所 エージェントはGPL-2.0-or-laterです。COPYINGおよび各ソースファイルの著作権ヘッダーを参照してください。元の著作権はRed Hat, Inc.およびその他のアップストリーム作成者に帰属します。このフォークは、Red HatまたはSPICEの商標を主張しません。 ピン留めされたビルド時サブモジュール(安易に更新しないこと): サブモジュール コミット アップストリーム spice-protocol ce0c4211e6f16c66477934cc42e70fa0988ca7f0 https://gitlab.freedesktop.org/spice/spice-protocol spice-common 05c0c26839e88e6d0cc5452f49c40e38543c8f97 https://gitlab.freedesktop.org/spice/spice-common サブモジュールURLはHTTPSを使用します。 MSIアップグレードは、履歴WiX UpgradeCode (7eb9b146-db04-42d7-a8ba-71fc8ced7eed) を維持します。関連製品は、インストールトランザクションが開始される前にInstallValidate後に削除されるため、共有コンポーネントは古いパッケージのアンインストールによって削除されるのではなく、再コピーされます。wixlはPEバージョンリソースを読み取らないため、FileテーブルにはRC_FILEVERSIONが明示的に指定されます。これはVS_VERSION_INFOの4つのフィールドと同一に保ってください。 x64インストーラーは、依然としてvdagent.exeとvdservice.exeをC:\Program Files\SPICE agent\binにのみ出荷します。 クローン git clone --recursive https://github.com/nefarius/vd_agent.git cd vd_agent 既にサブモジュールなしでクローンした場合: git submodule update --init --recursive freedesktop GitLabリモートは、ミラーが作成された後もアップストリームとして保持されています。以下で取得してください: git fetch upstream ローカルビルド (MSYS2 UCRT64) Autotools + MinGW-w64 UCRT64パスは、インストーラーを生成するためのサポートされている方法です。CMake + MSVCはローカル開発のために引き続き利用可能ですが、MSIはビルドしません。 前提条件 MSYS2 UCRT64シェル (C:\msys64\ucrt64.exe、またはMSYSTEM=UCRT64) UCRT64シェルで、リポジトリのルートで: bash msys2/install.sh autoreconf -i bash msys2/build.sh builducrt64 bash msys2/package.sh builducrt64 install.sh は、autotools、autoconf-archive、UCRT64ツールチェーン、msitools (wixl)、およびImageMagick (テスト) をプルします。PNGクリップボード変換は、Windows Vista以降に出荷されるWindows Imaging Componentを使用します。 build.sh は、vdagent.exe / vdservice.exe を設定、コンパイルし、test-png、test-log、test-shell を実行します。 package.sh は次にmake msi を呼び出し、以下を書き込みます: builducrt64/spice-vdagent-x64-<version>.msi バージョン文字列は、build-aux/git-version-gen を介したgit describeから取得されます。リリースタグはv0.11.0(マイナーバージョンアップ)のように見える必要があります。これにより、プログラムと機能にタグが正確に表示されます。タグのないビルドは、最後のタグからのコミット数を追加します(例:v0.11.0に83コミット追加されると0.11.0.83-<hash>になります)。その数に--with-buildidを加えた値が256になると、次のマイナーバージョンと衝突するため、Configureは失敗します。 ローカルビルドに署名するには、package.shの前に2つの実行可能ファイルに署名し、その後MSIに署名します。 オプションのMSVCビルド git submodule update --init --recursive cmake -S . -B build64 -A x64 cmake --build build64 --config Release cmake --build build64 --config Release --target check CIとリリース GitHub Actions (.github/workflows/build.yml) は、windows-2022上でx64 UCRT64 MSIをビルドします。 イベント 署名 公開 プルリクエスト / マスタープッシュ スキップ ワークフローアーティファクト vdagent-win-x64 のみ タグ v* 必要 署名済みMSI + SHA-256、アーティファクトミラー、GitHubリリース 署名はSignRelayを使用するため、証明書はランナーに配置されません。フローはDsHidMiniに一致します: ビルドとテスト(署名なしバイナリ) v*タグで、vdagent.exeとvdservice.exeにインプレースで署名します。 それらのバイナリからMSIをパッケージ化します。 MSIに署名します。 Authenticodeを検証します (Get-AuthenticodeSignature Status = Valid)。 <msi>.sha256 を書き込みます。 vdagent-win-x64 をアップロードし、タグの場合はAppVeyorArtifactsReceiverに通知します。 MSIとチェックサムをGitHubリリースに添付します。 SignRelayコンポジットアクションはコミット39ccbe0cef16a383237130380a5aef8db040d5d0にピン留めされています。CLIはランナーで.NET 10を必要とします (actions/setup-dotnet with 10.0.x)。 リポジトリ設定 nefarius/vd_agent で作成してください (Settings → Secrets and variables): 名前 種別 目的 SIGN_RELAY_SERVER 変数 RelayのベースURL、例:https://signrelay.api.nefarius.systems/ SIGN_RELAY_CI_TOKEN シークレット CIベアラートークン (サーバー上のSignRelay__CiToken) WEBHOOK_URL シークレット AppVeyorArtifactsReceiverのWebhook SIGN_RELAY_CI_TOKENとWEBHOOK_URLは、DsHidMiniのような既に動作しているリポジトリからコピーしてください。SIGN_RELAY_SERVERは既にリポジトリ変数として設定されています。シークレット値をコミットしないでください。 Windows SignRelayエージェントはコードサイニング証明書を保持します。サブジェクト/サムプリントとタイムスタンプはそこで設定し、このリポジトリでは設定しません。 リリースを公開する CHANGELOG.md を更新します。 アノテートされたリリースにタグを付け、プッシュします: git tag -a v0.11.0 -m "vdagent-win 0.11.0" git push origin v0.11.0 ビルドワークフローを確認します: 署名なしパスは使用されない 実行可能ファイルとMSIの両方がValidと検証される アーティファクトレシーバーがWebhookを受け入れた GitHubリリースにMSIと.sha256が含まれている Windows 11 SPICEゲストにMSIをインストールし、以下のチェックリストを実行します。 タグ付きビルドが署名開始後に失敗した場合、ツリーを修正し、タグを先に進めます(または新しいマイナーバージョンを使用します)。異なるバイトを持つ公開済みMSI名を再利用しないでください。失敗したリリースを復旧するには:GitHubリリースドラフトがあれば削除し、新しいタグをプッシュし、ユーザーがダウンロードした可能性のある以前の公開済みタグは不変に保ちます。 appveyor.yml は、最後のアップストリームUCRT64 MSIレイアウトとの履歴的な整合性のためにのみ保持されます。GitHub Actionsが権威あるCIです。署名済みActions MSIがスモークテストされたら、AppVeyorを削除します。 Windows 11 VM検証 Linux上のWindows 11ゲスト (QEMU/KVM + SPICE) で、QXLまたはqxl-wddm-dodディスプレイデバイスを使用します。 クリーンインストール — spice-vdagent-x64-*.msi を管理者として実行します。 サービス — spice-agent は実行中 / 自動です。vdagent.exe はユーザーセッションに存在します。 SPICE接続 — virt-viewer / spicy を再接続します。エージェントチャネルはアップです。 クリップボード — テキストとビットマップの両方向で機能します。 ファイル転送 — クライアントからファイルをドロップします。デスクトップに着陸します。 動的解像度 — クライアントウィンドウをリサイズします。ゲストデスクトップがWDDM QXLドライバー使用時に追従します。 マルチGPU / パススルーマウス — パススルー用の実際のGPUを追加し、SPICEディスプレイを維持し、ポインターが移動し続けることを確認します(d7405eeの修正)。 アップグレード — 以前のSpiceエージェントMSIの上にインストールします。サービスが復帰します。 アンインストール — 製品を削除します。spice-agent はなくなります。 オプションのCMake / Fedoraノート Fedoraクロスビルドは、.gitlab-ci.ymlおよびmingw-spice-vdagent.spec.inを介して引き続き機能しますが、GitHubリリースには使用されません。x86 MSIビルドは、メンテナンスされているパイプラインではもはや生成されません。