Jenkins Xvfb libcrypto 问题
Jenkins Xvfb libcrypto issue
我有一份 Jenkins Job(用于 Selenium 无头测试)。我已经在 Jenkins 中安装了 Xvfb 插件。但是当我 运行 工作时它给出了以下错误
/var/jenkins_home/Xvfb: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
不确定,尽管 libcrypto.so.10 在 PATH 变量中也可用。
您收到的错误消息表明 Xvfb
找不到 libcrypto 的共享对象。当动态链接器无法找到可执行文件的依赖项时,就会发生这种情况。通常你可以通过使用 Jenkins 用户的 ldd
命令来确定哪些库找不到,例如:
$ ldd /usr/bin/Xvfb
linux-vdso.so.1 (0x00007ffdc6def000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f6bcb054000)
libcrypto.so.10 => not found
Linux 中的动态链接器通常不使用 PATH
变量来确定从何处加载库。它通常会查找:LD_LIBRARY_PATH
环境变量、/etc/ld.so.conf
的内容,然后是 /lib
和 /usr/lib
。更多信息 in this Unix Stack Exchange answer or the man page for ld.so.
它的确切位置取决于您使用的发行版以及您如何配置它。您有几个选项可以帮助 Jenkins 找到您的库:
- 将
libcrypto.so.10
的路径添加到环境变量 LD_LIBRARY_PATH
- 这应该可行,但根据您正在构建的内容,这可能会搞乱其他事情。一些(主要是 C/C++)构建脚本要求取消设置。这样做的好处是只影响你的 Jenkins 用户,不需要额外的权限来设置。
- 将
libcrypto.so.10
的路径添加到文件 /etc/ld.so.conf
中的路径列表中(或者在某些发行版中添加到 /etc/ld.so.conf.d/
中它自己的文件中)。这应该没有讨厌的一面LD_LIBRARY_PATH
的影响,但需要 root 权限并且会影响计算机上的任何用户。
- 将
libcrypto.so.10
复制(或符号链接)到 /usr/lib
。这是一种蛮力策略,可能不是一个好主意,因为它可能会扰乱您的发行版的打包系统,但如果没有其他方法,它应该可以工作。
我有一份 Jenkins Job(用于 Selenium 无头测试)。我已经在 Jenkins 中安装了 Xvfb 插件。但是当我 运行 工作时它给出了以下错误
/var/jenkins_home/Xvfb: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
不确定,尽管 libcrypto.so.10 在 PATH 变量中也可用。
您收到的错误消息表明 Xvfb
找不到 libcrypto 的共享对象。当动态链接器无法找到可执行文件的依赖项时,就会发生这种情况。通常你可以通过使用 Jenkins 用户的 ldd
命令来确定哪些库找不到,例如:
$ ldd /usr/bin/Xvfb
linux-vdso.so.1 (0x00007ffdc6def000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f6bcb054000)
libcrypto.so.10 => not found
Linux 中的动态链接器通常不使用 PATH
变量来确定从何处加载库。它通常会查找:LD_LIBRARY_PATH
环境变量、/etc/ld.so.conf
的内容,然后是 /lib
和 /usr/lib
。更多信息 in this Unix Stack Exchange answer or the man page for ld.so.
它的确切位置取决于您使用的发行版以及您如何配置它。您有几个选项可以帮助 Jenkins 找到您的库:
- 将
libcrypto.so.10
的路径添加到环境变量LD_LIBRARY_PATH
- 这应该可行,但根据您正在构建的内容,这可能会搞乱其他事情。一些(主要是 C/C++)构建脚本要求取消设置。这样做的好处是只影响你的 Jenkins 用户,不需要额外的权限来设置。 - 将
libcrypto.so.10
的路径添加到文件/etc/ld.so.conf
中的路径列表中(或者在某些发行版中添加到/etc/ld.so.conf.d/
中它自己的文件中)。这应该没有讨厌的一面LD_LIBRARY_PATH
的影响,但需要 root 权限并且会影响计算机上的任何用户。 - 将
libcrypto.so.10
复制(或符号链接)到/usr/lib
。这是一种蛮力策略,可能不是一个好主意,因为它可能会扰乱您的发行版的打包系统,但如果没有其他方法,它应该可以工作。