Libelektra: テストは無制限のgpg-agentsを生成したす

䜜成日 2018幎04月19日  Â·  36コメント  Â·  ゜ヌス: ElektraInitiative/libelektra

問題を再珟する手順

  • たずえば、Dockerコンテナでelektraをビルドするか、v2サヌバヌを確認したす
  • テストを実行するmake run_nokdbtests
  • ps -ef
  • テストを実行するmake run_nokdbtests
  • ps -ef
  • ????
  • すべおのpidがどこに行ったのだろうか

期埅される結果

テストは、終了埌にgpg-agentsを停止する必芁がありたす

実結果

テストを実行するたびに、より倚くのgpg-agentが生成されたす

システムむンフォメヌション

  • ゚レクトラバヌゞョンマスタヌ

その他のログファむルず出力

+ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 05:57 pts/0    00:00:00 bash
root     11296     1  0 07:01 pts/0    00:00:00 sh -c /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py 
root     11297 11296  0 07:01 pts/0    00:00:00 /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py write 
root     28509     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.NmmZ2I/.gnupg --use-standard-soc
root     28519     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.6mb1t2/.gnupg --use-standard-soc
root     28539     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.5XdxDR/.gnupg --use-standard-soc
root     30656     1  0 08:00 pts/0    00:00:00 ps -ef
+ make run_nokdbtests
+ ps -ef
+ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 05:57 pts/0    00:00:00 bash
root     11296     1  0 07:01 pts/0    00:00:00 sh -c /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py 
root     11297 11296  0 07:01 pts/0    00:00:00 /usr/bin/python2 /root/cppcms-1.2.0/tests/http_timeouts_test.py write 
root     28509     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.NmmZ2I/.gnupg --use-standard-soc
root     28519     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.6mb1t2/.gnupg --use-standard-soc
root     28539     1  0 07:55 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.5XdxDR/.gnupg --use-standard-soc
root     30778     1  0 08:02 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.GZbzqb/.gnupg --use-standard-soc
root     30788     1  0 08:02 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.PEjcKs/.gnupg --use-standard-soc
root     30808     1  0 08:02 ?        00:00:00 gpg-agent --homedir /tmp/elektra-test.d6yL2g/.gnupg --use-standard-soc
root     30923     1  0 08:02 pts/0    00:00:00 ps -ef
bug work in progress

最も参考になるコメント

ホヌムディレクトリを共有するず、テストを䞊行しお実行できない堎合があるこずに泚意しおください。
たた、埌でGNUPGHOMEを削陀する必芁がありたすログむンしおいるナヌザヌの呌び出しに応答するpgp-agentが長匕くこずは望たしくありたせんか。

たた、タヌゲットシステムがGNUPGHOMEでリレヌするずどうなるか、既存のenvを保存し、テスト埌に手動で埩元する必芁がありたす。

䞀歩䞋がっお、これらのテストがテストサヌバヌ環境だけでなくナヌザヌマシンにどのように圱響するかを芋おいただければ幞いです。

党おのコメント36件

問題を報告しおいただきありがずうございたす

@ petermax2テスト䞭にgpgコマンドがgpg-agentsを生成する可胜性はありたすか

おっず、gpgは垞に同じ゚ヌゞェントに接続するず思いたした。 調査したす。

@ markus2330これは、

しかし、問題はdockerに限定されおいたせんdebian-stretch-minimalには250を超えるものもありたす

䞀郚のノヌドは、テストで䜿甚されるjenkinsのgpg-agentを生成するように蚭定されおいるため、圱響を受けたせんおそらく確認する必芁がありたす

これを調べおくれおありがずう

䞀郚のノヌドは、テストで䜿甚されるjenkinsのgpg-agentを生成するように蚭定されおいるため、圱響を受けたせんおそらく確認する必芁がありたす

開始した゚ヌゞェントを匷制終了する方法が芋぀からない堎合は、環境にすでにgpg-agent1888があるこずを芁求できたす。

たぶん、gpg゚ヌゞェントはたったく起動する必芁がなく、テスト䞭にそれを抑制するこずができたす。 しかし、私は倕方にそれを芋なければなりたせん。

mhは通垞、開始時にGPG_AGENT_INFOを蚭定する必芁がありたす。過去には、環境倉数をクリヌンアップしお、過去の耇数の開始を説明した可胜性がありたす。 なぜ今もただ起こっおいるのか分かりたせんが...

@ petermax2 gpg-agentを必芁ずするテストgpg-agentの名前をgpg-agent.bakに倉曎しお芋぀かりたした;

  • testmod_fcrypt
  • testmod_crypto_openssl
  • testmod_crypto_gcrypt

testmod_crypto_botanは、 testmod_crypto_gcryptおよびtestmod_crypto_opensslずたったく同じように実行する必芁がありたす。 Botanテストはサヌバヌで実行されおいたすか

@ petermax2おそらくそうです。 私がテストした環境では、ボタンはむンストヌルされおいたせんでした。 ただし、ここでは実行さ

それほど単玔ではありたせん。 単䜓テスト䞭に--no-autostart匕数を指定しおgpgを呌び出そうずしたしたが、gpgはただ゚ヌゞェントを起動したす。 --no-use-agentは面癜いものです。 マニュアルペヌゞには次のように曞かれおいたす。

--no-use-agent 
              This is dummy option. gpg2 always requires the agent.

開始した゚ヌゞェントを匷制終了する方法が芋぀からない堎合は、環境にすでにgpg-agent1888があるこずを芁求できたす。

これを詊しおみたせんか

たたは、次のようなcronゞョブがありたす

pgrep gpg-agent | xargs -d "\n" kill

たたはビルドサヌバヌ/コンテナで同様のもの

゚ヌゞェントが利甚可胜かどうかをテストチェックしたす。利甚できない堎合は、゚ヌゞェントを起動しおpidを保持したす。 テストクリヌンアップで゚ヌゞェントを停止したす。 他のすべおはハックです。

あなたは正しいです、唯䞀の問題は開始ず停止がどこで起こるべきかです。 ゚ヌゞェント/ドッカヌ内でこれを行うこずは、Cで蚘述された単䜓テストよりも簡単なようです。

これが私がこれたでに孊んだこずです

すべおのgpg呌び出しで䞀貫しお䜿甚されおいる堎合は、 --no-autostartオプションを䜿甚しおgpg-agentの自動開始を抑制するこずができたす。 ただし、 gpg-agentがないず、 gpg2は、秘密鍵を必芁ずする操䜜぀たり、埩号化、眲名を実行できたせん。

gpg-agent --serverをフォヌクするこずもできたすが、 gpg2ぱヌゞェントに接続できたせん。 環境倉数GPG_AGENT_INFOは非掚奚になり、 gpg2では考慮されなくなりたした。

gpg-agent --daemonをフォヌクしお実行しようずしたす。 テストが完了したずきにSIGTERMを実行できるように、開始されたgpg-agentのPIDを芋぀ける方法が必芁です。

゚ヌゞェント/ドッカヌ内でこれを行うこずは、Cで蚘述された単䜓テストよりも簡単なようです。

はるかに簡単だず思いたす:-)

gpgのデフォルトの方法を䜿甚しお゚ヌゞェントに接続するずいうあなたの決定は正しかったず思いたす。

gpg-agentを開始/停止する代わりに、.gnupg /gpg.confの「use-agent」を無効にするこずもできたす。

1぀の゚ヌゞェントの自動起動に問題はありたせんさらには実行しおいたす。 新しいテストを開始する埌続のテストに問題がありたす

gpgのデフォルトの方法を䜿甚しお゚ヌゞェントに接続するずいうあなたの決定は正しかったず思いたす。

実皌働環境では、これがより適切なオプションです。 私のマシンでは、 cryptoずfcrypt垞に同じ゚ヌゞェントに接続し、Yubikeyずの統合は非垞にうたく機胜したす。

テスト環境では、テストを開始する前に、゚ヌゞェントの単䞀むンスタンスを皌働状態に保぀必芁がありたす。 問題は、@ ingwinluが前述したように、環境をクリアするこずだず思いたす。

問題は、環境をクリアするこずだず思いたす

もうすべきではありたせん。 しかし、問題は解決したせん

gpg-agentが明らかに機胜しない環境を介しお通信しようずした堎合、次のテスト実行では、前のテスト実行で蚭定された環境が取埗されるこずはありたせん。

私は次の2぀のオプションが䞀番奜きです

  1. コンテナ内のgpg゚ヌゞェントを適切に開始/停止し、gpg゚ヌゞェントを実行する必芁があるこずをTESTING.mdに蚘録したす1888を参照。
  2. gpg゚ヌゞェントの起動を無効にし.gnupg / gpg.confの「use-agent」を無効にしたすが、テストはしたせんでした、これをTESTING.mdに蚘録したす1888を参照。

デヌモンがすでに開始されおいるかどうかをグロヌバルに知る方法なしにデヌモンがオンデマンドで開始されるセットアップおよびenv倉数はグロヌバルではなくプロセス固有は壊れおいるようです。 テスト内でこれを修正しようずすべきではありたせん。

https://stackoverflow.com/questions/27459869/how-to-stop-gpg-2-1-spawning-many-agents-for-unit-testing

倚くの゚ヌゞェントを生成する理由は、-homedirオプションを䜿甚する別のホヌムディレクトリです。そうでない堎合は、単䞀のホヌムディレクトリが䜿甚されたす。 GnuPG 2.1以降、゚ヌゞェントずのすべおの通信は、GnuPGホヌムディレクトリの゜ケットを介しお実行されたす。

homedirオプションは䜿甚したせん。 たた、 https //dev.gnupg.org/T3218では、stackoverflowの回避策を「非垞に厄介な回避策」ず説明しおいたす。

たぶん、単にgpg-agentを起動するこずが、私たちの環境内で制埡された方法で最も将来性のあるバリアントです。 最近のバヌゞョンでは、gpg-agentの起動はオプションではなくなったようです。 これは私のオプション2を無意味にしたす

homedirオプションは䜿甚したせん。

ええ、それがどこから来たのかはわかりたせんが、すべおの゚ヌゞェントが別の゚ヌゞェントでスポヌンしたため、問題ず䞀臎したすopを参照。

それは良いヒントでした、私はgpg-agentの起動がもはやオプションではないこずを孊びたした。

これは、それを開始および停止する必芁があるこずを非垞に明確にしおいたす。 そしお、開始を避けようずしないでください。

homedirオプションは䜿甚したせん。

ええ、どこから来たのかわかりたせんが、問題ず䞀臎したすopを参照

--home-dirオプションを明瀺的に䜿甚しおいたせんが、 ps -ef 、 gpgがずにかくそれを蚭定しおいるこずを瀺しおいたす。

https://wiki.archlinux.org/index.php/GnuPG

$ GNUPGHOMEは、構成ファむルが保存されおいるディレクトリを指すためにGnuPGによっお䜿甚されたす。 デフォルトでは、$ GNUPGHOMEは蚭定されおおらず、代わりに$ HOMEが䜿甚されたす。 したがっお、むンストヌル盎埌に〜/ .gnupgディレクトリが芋぀かりたす。
デフォルトの堎所を倉曎するには、この方法でgpgを実行する$ gpg --homedir path / to / fileたたは、GNUPGHOME環境倉数を蚭定したす。
`` `
@ petermax2テストスむヌトでHOMEが利甚可胜かどうかを確認できたすか

たた興味深いhttps://www.gnupg.org/documentation/manuals/gnupg/Ephemeral-home-directories.html 

䞀時ディレクトリを䜜成し、ニヌズを満たす構成を䜜成たたはコピヌし、環境倉数GNUPGHOMEたたはオプション--homedirを䜿甚しおgpgにこのディレクトリを䜿甚させたす。 GPGMEは、コンテキストの゚ンゞン情報を倉曎するこずにより、コンテキストごずにこれもサポヌトしたす。 次に、必芁な操䜜を実行し、必芁に応じおキヌマテリアルをむンポヌトおよび゚クスポヌトしたす。 終了したら、ディレクトリを削陀できたす。 開始されたすべおのGnuPGバック゚ンドサヌビスはこれを怜出しおシャットダりンしたす

私のコンテナでこれをテストし、玄束どおりにプロセスを自動的にクリヌンアップしたした。

@ petermax2テストスむヌトでHOMEが利甚可胜かどうかを確認できたすか

はい、 HOMEが利甚可胜です

HOME = /tmp/elektra-test.3vLR4L

OK、テストスむヌトの䜕かがHOMEをtmpディレクトリにオヌバヌラむドしおいたすこれは良いこずです。 クリヌンアップ䞭にそれがただ利甚可胜な堎合は、゚ヌゞェントを停止するために削陀する必芁がありたす。 それは理想的な修正です。

GNUPGHOMEだけでは、 gpg-agentむンスタンスが1぀だけ生成されたす。 GNUPGHOMEは、テストが開始される前に䞊曞きされたせん。

GNUPGHOME蚭定するず、耇数のテストの実行埌に1぀のgpg-agentが実行されたす。

これが最も簡単な解決策だず思いたす。

ホヌムディレクトリを共有するず、テストを䞊行しお実行できない堎合があるこずに泚意しおください。
たた、埌でGNUPGHOMEを削陀する必芁がありたすログむンしおいるナヌザヌの呌び出しに応答するpgp-agentが長匕くこずは望たしくありたせんか。

たた、タヌゲットシステムがGNUPGHOMEでリレヌするずどうなるか、既存のenvを保存し、テスト埌に手動で埩元する必芁がありたす。

䞀歩䞋がっお、これらのテストがテストサヌバヌ環境だけでなくナヌザヌマシンにどのように圱響するかを芋おいただければ幞いです。

テストを䞊行しお実行できない堎合がありたす。

スクリプトを実行したした

#!/bin/bash
mkdir /tmp/x
export GNUPGHOME=/tmp/x
for run in {1..1000000}
do
    ctest -R crypto_openssl &
done

問題なく。 GPGはロックなどを凊理する必芁がありたす。

ログむンしたナヌザヌの呌び出しに長匕くpgp-agentが応答するこずを望たないのですか

これはgpg-agentが蚭蚈された方法ですナヌザヌセッションが終了するたで氞久に実行されたす。 PIDをどこかに曞き出すこずはなく、終了するコマンドもありたせん。 SIGTERMにのみ反応したす。

--serverオプションを䜿甚しお単䜓テスト内からfork gpg-agentしようずしたので、埌でkillぞのPIDがありたす。 ただし、 gpg-agentは$GNUPGHOMEで必芁な゜ケットを開かず、単䜓テストぱヌゞェントの別のむンスタンス --daemonモヌドで実行されおいるを再床開きたす。 たた、 --serverモヌドのずきにgpg-agent゜ケットを開く方法はありたせんこれを゜ヌスコヌドgpg-agent 。

gpg-agentは制埡が難しく、文曞化もほずんどされおいたせん。 gpg-agentの゜ヌスコヌドも読んでいたした。 私たちのナヌスケヌスはカバヌされおいたせん。 唯䞀のオプションはSIGTERMです。

䞊列凊理

お互いに圱響を䞎えおはいけないgpg-agentを分離したいずいうこずをもっず考えおいたした。 ぀たり、゚ヌゞェントaにテストaのキヌのみを持たせ、゚ヌゞェントbにテストbのキヌを持たせたす。 それが必芁ない堎合は、ハヌドコヌドされたtmpホヌムで問題ありたせん。

gpg-agentを殺す

この問題を最初に調査したずき、䞀時的なgpg-agentをシャットダりンするための予想される方法はそのgpgホヌムディレクトリを削陀するこずであるず述べたWebサむト䞊蚘のリンクに出くわしたした。

したがっお、GNUPGHOMEを/tmp/elektra_tests/gpgし、テストのクリヌンアップ䞭にこのtmpディレクトリを削陀するず、問題ないはずです。

したがっお、GNUPGHOMEを/ tmp / elektra_tests / gpgに蚭定し、テストのクリヌンアップ䞭にこのtmpディレクトリを削陀するず問題ありたせん。

できたす この修正をcryptoおよびfcryptテストケヌスに統合したす。 ヒントありがずうございたす

私は実甚的なプロトタむプを持っおいたす。 PRは明日来たす。

2056で修正する必芁がありたす。 それでも問題が解決しない堎合は、再床開いおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡