gin*_*ime 7 ruby openssl init.d unicorn systemd
我们开始在日志中看到一些奇怪的错误,这些错误通常在使用OpenSSL未正确编译ruby时出现.但它不一致 ......
我们收到的错误如下:
RuntimeError: Unsupported digest algorithm (SHA256).
(还有其他摘要,如sha1
).示例错误跟踪Faraday::SSLError (SSL_CTX_new: (null))
示例错误跟踪我们设法在使用service unicorn start
或启动独角兽时重现它systemctl start unicorn
.但只有一些要求......不是全部.一些使用OpenSSL的请求确实有效.其他人没有.
但是,当我们开始独角兽时/etc/init.d/unicorn start
,一切都顺利进行.(澄清一下,systemd启动相同的/etc/init.d
脚本)
我们尝试调试ENV
变量,用户权限,文件/目录所有权,重新编译ruby,从头开始引导新服务器......似乎没有任何帮助.
如果这有帮助:
我们缺少什么?我们可以尝试什么,我们没有想到的?
/etc/systemd/system
apt
(显式删除,以防平台预先安装)并从头开始编译.我们目前运行2.3.4并尝试2.3.6.手动编译或使用ruby-build编译.不rbenv
,也不是RVM
.apt
(我们apt-get install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
在构建ruby之前运行)我们正在为VM使用脚本化/可重复的构建过程(使用结构),并且这个问题在我们在GCloud上引导的多个VM上是一致的.然后,我们使用相同的引导脚本在DigitalOcean上尝试了一个VM ,问题似乎没有出现在那里.
在这两种情况下,我们选择了Ubuntu 16.04 64位基本映像,但显然内核版本,基本安装包等存在一些差异......
问题根本就消失了.请参阅下面的答案.
一种选择是这根本不是sysVinit
vs的问题systemd
,只是您的脚本尚未触发该问题sysVinit
。
当您svsVinit
通过命令运行脚本时systemctl
,它会通过兼容层,那里可能会出现问题。如果您直接使用服务文件重现问题systemd
并共享该文件,您自己和我们的问题都会得到简化。
您提到了调试 ENV,但没有具体提到您在 ENV 中检查的内容。systemd
这绝对是一个可以发挥作用的地方。如 中所示man systemd.exec
,systemd
将环境中的 $PATH 设置为固定值:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n
Run Code Online (Sandbox Code Playgroud)\n\n如果这与直接作为脚本运行时不完全相同sysVinit
,则可能是一个问题。
我还会检查您系统上的所有 SSL 副本。你有不止一个吗?在哪里?您是否加载了多个模块的副本ruby
openssl
?
\xc2\xa0locate -r lib/.*libssl.*so\n
Run Code Online (Sandbox Code Playgroud)\n\n另请参阅常见问题解答的答案:为什么在 systemd 下事情表现不同?
\n