在拥有gpgme开发文件的同时构建libelektra。 (在fedora上gpgme-devel
)
我用了
cmake -DBUILD_DOCUMENTATION=ON -DBINDINGS="ALL" -DBUILD_SHARED=ON -DBUILD_STATIC=ON -DBUILD_FULL=ON -DENABLE_COVERAGE=OFF -DENABLE_OPTIMIZATIONS=ON -DENABLE_DEBUG=ON -DENABLE_LOGGER=OFF -DBUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DKDB_DB_SYSTEM="$SYSTEM_DIR" DCMAKE_INSTALL_PREFIX=./releaseInstallDir -DPLUGINS="ALL" -DTOOLS="ALL" ..
但并非一切都与问题有关。
make run_all
Test #215: testshell_markdown_tutorial_crypto ........... Passed 2.58 sec
似乎tmpfs上的/ tmp或类似文件存在问题? 我在fedora和Debian Buster(在docker)中也遇到了问题。
249/262 Test #215: testshell_markdown_tutorial_crypto ...........***Failed 2.58 sec
Input: /home/mpranj/workspace/libelektra/doc/tutorials/crypto.md
kdb mount test.ini user/tests ini
kdb set user/tests/password 1234
kdb file user/tests/password | xargs cat
kdb rm user/tests/password
kdb umount user/tests
kdb mount test.ini user/tests fcrypt "encrypt/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234
ERROR - RET:
Return value “5” does not match “0”
kdb file user/tests/password | xargs cat
ERROR - RET:
Return value “123” does not match “0”
kdb rm user/tests/password
ERROR - RET:
Return value “11” does not match “0”
kdb umount user/tests
kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234
ERROR - RET:
Return value “5” does not match “0”
kdb file user/tests/password | xargs cat
ERROR - RET:
Return value “123” does not match “0”
kdb rm user/tests/password
ERROR - RET:
Return value “11” does not match “0”
kdb umount user/tests
kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey),encrypt/key=$(kdb gen-gpg-testkey)" ini
kdb set user/tests/password 1234
ERROR - RET:
Return value “5” does not match “0”
kdb file user/tests/password | xargs cat
ERROR - RET:
Return value “123” does not match “0”
kdb rm user/tests/password
ERROR - RET:
Return value “11” does not match “0”
kdb umount user/tests
kdb mount test.ini user/tests crypto_gcrypt "crypto/key=$(kdb gen-gpg-testkey)" base64 ini
kdb meta-set user/tests/password crypto/encrypt 1
kdb set user/tests/password 1234
kdb set user/tests/unencrypted "I am not encrypted"
kdb file user/tests/password | xargs cat
kdb meta-set user/tests/password crypto/encrypt 0
kdb file user/tests/password | xargs cat
kdb rm user/tests/unencrypted
kdb rm user/tests/password
kdb umount user/tests
shell_recorder /tmp/tmp.FLYIzi6Q4K RESULTS: 31 test(s) done 9 error(s).
—— Protocol ————————————————————————————————————————————————————
CMD: kdb mount test.ini user/tests ini
RET: 0
CMD: kdb set user/tests/password 1234
RET: 0
STDOUT: Create a new key user/tests/password with string "1234"
CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: password=1234
CMD: kdb rm user/tests/password
RET: 0
CMD: kdb umount user/tests
RET: 0
CMD: kdb mount test.ini user/tests fcrypt "encrypt/key=$(kdb gen-gpg-testkey)" ini
RET: 0
CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2110573:1574783987.412609.tmpZJttxQ to /home/mpranj/.config/test.ini.2110573:1574783987.412609.tmp failed. Reason: Invalid cross-device link
ERROR: C01100
CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory
CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key
CMD: kdb umount user/tests
RET: 0
CMD: kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey)" ini
RET: 0
CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2110783:1574783987.564306.tmpRJuvgG to /home/mpranj/.config/test.ini.2110783:1574783987.564306.tmp failed. Reason: Invalid cross-device link
ERROR: C01100
CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory
CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key
CMD: kdb umount user/tests
RET: 0
CMD: kdb mount test.ini user/tests fcrypt "sign/key=$(kdb gen-gpg-testkey),encrypt/key=$(kdb gen-gpg-testkey)" ini
RET: 0
CMD: kdb set user/tests/password 1234
RET: 5
=== FAILED return value does not match expected pattern 0
STDERR: Sorry, module fcrypt issued the error C01100:
Resource: Renaming file /tmp/test.ini.2111010:1574783987.747497.tmpti3bSR to /home/mpranj/.config/test.ini.2111010:1574783987.747497.tmp failed. Reason: Invalid cross-device link
ERROR: C01100
CMD: kdb file user/tests/password | xargs cat
RET: 123
=== FAILED return value does not match expected pattern 0
STDERR: cat: /home/mpranj/.config/test.ini: No such file or directory
CMD: kdb rm user/tests/password
RET: 11
=== FAILED return value does not match expected pattern 0
STDERR: Did not find the key
CMD: kdb umount user/tests
RET: 0
CMD: kdb mount test.ini user/tests crypto_gcrypt "crypto/key=$(kdb gen-gpg-testkey)" base64 ini
RET: 0
CMD: kdb meta-set user/tests/password crypto/encrypt 1
RET: 0
CMD: kdb set user/tests/password 1234
RET: 0
STDOUT: Set string to "1234"
CMD: kdb set user/tests/unencrypted "I am not encrypted"
RET: 0
STDOUT: Create a new key user/tests/unencrypted with string "I am not encrypted"
CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: unencrypted=I am not encrypted
#<strong i="19">@META</strong> crypto/encrypt = 1
password=@BASE64IyFjcnlwdG8wMBEAAACCBjEzmVhqufXSsgK4VPRDUC9GyQxBhocVbgZwimonK+xHaRCSX/blNDSVdIoSRg0n
CMD: kdb meta-set user/tests/password crypto/encrypt 0
RET: 0
CMD: kdb file user/tests/password | xargs cat
RET: 0
STDOUT: unencrypted=I am not encrypted
#<strong i="20">@META</strong> crypto/encrypt = 0
password=1234
CMD: kdb rm user/tests/unencrypted
RET: 0
CMD: kdb rm user/tests/password
RET: 0
CMD: kdb umount user/tests
RET: 0
————————————————————————————————————————————————————————————————
@ markus2330,这在kdb run_all -v > ~elektra/$VERSION/run_all 2>&1
)中。
编辑:我可以尝试在a7 / v2上执行此部分,因为它可能仅在以fedora作为主机的情况下失败(并且仅在docker中为debian)。
不,这绝对不是风口浪尖。 这很可能是因为以前的运行中仍然有一些临时文件,或者#2957毕竟还没有完全固定。
希望@ petermax2有时间在0.9.2之前修复它:wink:
@mpranj您是否需要发行说明或其他帮助?
使用上方的cmake命令从头开始构建2bc994ae8b3f3a04396303ece106ea563764e490时,我无法重现该问题。
Start 188: testshell_markdown_tutorial_crypto
222/235 Test #188: testshell_markdown_tutorial_crypto ........... Passed 3.16 sec
也许您的构建目录以某种方式被破坏了。 您能否尝试使用新的(空)构建目录进行编译和测试?
@ petermax2感谢您如此迅速地进行检查。 我在主机系统(fedora)以及debian buster docker容器上尝试了几次。 我还多次清理了构建目录。
这总是有可能只是我的问题。 稍后再检查!
嗯,奇怪! 我想我昨天使用了Debian:stable容器进行构建和测试。 我可以在晚上与Fedora再试一次。 目前,我没有太多时间进行故障排除,但是我将快速进行查找。
这个问题在Fedora下可以重现。
The following tests FAILED:
41 - testshell_markdown_base64 (Failed)
56 - testshell_markdown_csvstorage (Failed)
76 - testshell_markdown_iconv (Failed)
78 - testshell_markdown_ini (Failed)
93 - testshell_markdown_mini (Failed)
116 - testmod_resolver (Failed)
181 - testshell_markdown_tutorial_crypto (Failed)
也许这不是特定于密码教程的问题。 我要调查
找不到kdb gen-gpg-testkey
。 此问题与#3246(KDB_EXEC_PATH)有关。
编辑:分析仅对testshell_markdown_tutorial_crypto
。 到目前为止,我没有检查其他测试。
感谢您关注此问题!
我还没有看到其他测试未能通过。 您确定这是同样的问题吗? 我什至没有使用已安装的kdb,我只是使用make run_all运行了ctest。
从长远来看,我们还将添加一些fedora docker映像(#3227),以更早地捕获类似的内容。
您确定这是同样的问题吗?
不,可能有几个不同的问题。
从长远来看,我们还将添加一些Fedora Docker映像
很好的主意!
我从前开始编辑帖子,以阐明我对分析的含义。
该问题并非孤立于我的机器。 测试失败,因为以下rename()调用失败:
https://github.com/ElektraInitiative/libelektra/blob/263cbe69686a9f087204a7f3660b007d1de22da2/src/plugins/fcrypt/fcrypt.c#L231
原因是默认情况下/ tmp是Fedora上的一个单独的挂载点,而Debian并非如此。 因此,无法跨不同的安装点重命名该文件。
我已经通过应用(非常脏)的补丁程序验证了这是问题所在。 我建议使它与解析器实现保持一致,并将临时文件放置在与原始文件相同的目录中。
@ petermax2您怎么看?您是否有时间用适当的补丁程序对其进行修复?
可以通过插件配置来设置fcrypt使用的tmp目录。
fcrypt使用配置选项fcrypt / tmpdir在加密和解密期间为临时文件生成路径。 如果未提供此类配置选项,则fcrypt将尝试使用环境变量TMPDIR。 如果在环境中未设置TMPDIR,则/ tmp用作默认目录。
(_Source_:插件文档)
减轻类似Fedora的构建作业的最简单方法是使用另一个目录。 在构建服务器上,可以使用本地构建目录。 你有什么感想?
@ petermax2您怎么看?您是否有时间用适当的补丁程序对其进行修复?
我可以在周末分配一些空闲时间,但是作为一个合适的解决方案,您有什么想法呢?
我可以在周末分配一些空闲时间,但是作为一个合适的解决方案,您有什么想法呢?
无需过度设计任何东西。 正如我建议的那样,我会将临时文件放在与目标文件相同的目录中。 提交更改时, resolver
就是这种方式,因此在某种程度上是一致的。
我也可以只为构建配置一个不同的TMPDIR。 我可以自己执行该更改。
无论您在这里提出什么建议,我们都会继续进行。
[EXDEV]
[CX] [Option Start] The links named by new and old are on different file systems and the implementation does not support links between file systems. [Option End]
编辑:失败与sudo与相同的错误:
213: CMD: kdb set user/tests/password 1234
213: RET: 5
213: === FAILED return value does not match expected pattern 0
213: STDERR: Sorry, module fcrypt issued the error C01100:
213: Resource: Renaming file /tmp/test.ini.571145:1586371945.946855.tmpHdGEMt to /root/.config/test.ini.571145:1586371945.946855.tmp failed. Reason: Invalid cross-device link
213: ERROR: C01100
一个简单的解决方案是将rename
操作替换为copy + remove。
我将简单地为构建显式配置其他TMPDIR。 如果问题再次出现在目标系统上,我们可以重新打开并找到更好的解决方案。
我认为,这个问题可能会更经常发生。 我们甚至建议在fcrypt文档中将/tmp
重新挂载到RAM磁盘。 因此,我们实际上建议立即触发此错误。
我将尝试提供适当的修复。
我将简单地为构建显式配置其他TMPDIR。 如果问题再次出现在目标系统上,我们可以重新打开并找到更好的解决方案。
作为构建服务器的变通办法,这也很好。
非常感谢您的调查!
一个简单的解决方案是用复制+删除替换重命名操作。
不替换代码,而是在重命名失败时执行此操作。 (在这种情况下,也要切碎源文件。)这样,/ tmp上没有RAM磁盘的人就会有速度,而/ tmp上有RAM磁盘的人会具有更高的安全性。
最有用的评论
我认为,这个问题可能会更经常发生。 我们甚至建议在fcrypt文档中将
/tmp
重新挂载到RAM磁盘。 因此,我们实际上建议立即触发此错误。我将尝试提供适当的修复。
作为构建服务器的变通办法,这也很好。