2017-02-17 10 views
0

Qtを使用するビルドシステムがいくつか用意されています。署名作業に時間を節約し、配布しているすべての署名されていないバイナリに署名する必要があるため、インストール先のすべてのQtバイナリに署名し、Qt依存関係を使用しているパッケージマネージャビルドスレーブ上のローカルQtディレクトリの代わりに署名されていることを除けば、セットアップのタイプです。Qtはビルド時に独自のライブラリのデジタル署名を無効にしていますか?

今日は、私はジェンキンスの両方に気づいたとQtのプロジェクトを使用しているTFSのビルドが流れ、この小さな2-ライナーは、ログに表示:

15:24:19 Updating Qt5Core.dll.
15:24:19 Patching Qt5Core.dll...

を次に後でジェンキンス、そのデジタル署名のビルドログに失敗した検証し、テスト-CERTで署名されました:

15:24:19 call "C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" verify /pa C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 IF NOT "!errorlevel!" == "0" echo Self-Signing C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll & call signtool sign /f C:\DevOps\test_certificates\cert.pfx /fd SHA512 C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll && set something_signed=true
15:24:19 )
15:24:19 File: C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Index Algorithm Timestamp
15:24:19 ========================================
15:24:19
15:24:19 Number of errors: 1

15:24:19 SignTool Error: No signature found.
15:24:19 Self-Signing C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll
15:24:19 Done Adding Additional Store 15:24:19 Successfully signed: C:\BuildFolder\artifacts\qt5611_win32-msvc2015\release\Qt5Core.dll

が起こっているこのUpdating/Patchingからのデジタル署名を無効QMakeJOMから何かですか?もしそうなら、これはやむを得ないことでしょうか?私は他のオペレーティングシステムでQtプロジェクトを構築することに精通していませんが、libsが指し示す場所を変更するためにいくつかのツールを使う必要があることを思い出しています。私が一番よく知っているのは、そのようなものが背景の背後でWinDeployQtで起こっているということです。

あなたが報告したものWinDeployQtに興味を持っている場合、これは、右の最初の二つの引用された行の前に実行されるものです:

15:24:18 link /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='removed-by-OP' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:C:\BuildFolder\bin\release\qt_test_build.exe @C:\Users\USER~1\AppData\Local\Temp\qt_test_build.exe.4012.485.jom
15:24:19 windeployqt -core --no-compiler-runtime --no-quick-import --no-translations C:\BuildFolder\solution_directory\..\bin\release\qt_test_build.exe
15:24:19 C:\BuildFolder\bin\release\qt_test_build.exe 64 bit, release executable
15:24:19 Direct dependencies: Qt5Core
15:24:19 All dependencies : Qt5Core
15:24:19 To be deployed : Qt5Core

答えて

1

qmakeは、その出力のほかには何も変更されません。その唯一の仕事は、生成することです別のビルドシステム用のスクリプトをビルドします。

jomは可能な限り複数のプロセスを除いて、nmakeが行うことを行うツールです。 makefileの指示に従うだけです。 qmakeのQtライブラリ自体を変更するmakefileアクションを生成するコードはありません。これを引き起こすプロジェクトファイルに明示的に何かを記述しない限り。私はそれが起こるのを見たことがない。ターゲットの場所にをコピーしwindeployqtを残し

、と彼らはされた後、それはパッチQtのバイナリを行い、バイナリは、いくつかの組み込みのパスが含まれているためなど、あなたのメイクファイル/プロジェクトファイルを経由してwindeployqtを起動した場合、それは次のように表示されますQtがjobの範囲から変更された場合。

あなたが署名した元の場所のQtバイナリがそのまま残ることに注意してください。 Qtのインストールがビルド自体の一部でない限り、実際には、署名後のQtのインストールは読み取り専用にして、ビルド自体が混乱しないように権限を設定する必要があります。

ああ、シンプルな修正があります。インストールパッケージをビルドする直前に署名してください。の後は、windeployqtになるはずです。私のために働く(tm)。スタティックビルドは、製品が1つの実行可能ファイルで構成されている場合や、そのように作成されている場合には、おそらくオプションになる可能性があります。

+0

Dag nammit!私は何が起こっていたのか、それと同様の感覚を持っていました。_ <私は出力場所を静的に署名してQt DLLにコミットさせることが実現可能だと思います。私はおそらく小さなレポのためにこれで逃げることができますが、私はDevOpsの母の慈悲が支配者と米のひざまずいを打ち砕くだろうという気持ちを持っています。しかしそれはあなたの問題ではなく、あなたの問題です!ありがとう、Kuba Ober! –

関連する問題