Apache 命令失败:AH00141:无法初始化随机数生成器

Apache 命令失败:AH00141:无法初始化随机数生成器

许多 Apache 命令(例如apache2 -v和)apachectl graceful都失败并显示以下消息:

(38)Function not implemented: AH00141: Could not initialize random number generator

在线搜索表明这可能是由 ; 中的中文字符引起的,除了和 斜线,PATH我没有看到任何字符。其他人则表示我的系统中缺少和; 。a-z/dev/random/dev/urandom

如果我运行cat /proc/sys/kernel/random/entropy_avail,我得到的数字大约在 130 到 250 之间。这太低了吗?这可能与此有关吗?

还有其他可能性吗?

Ubuntu 16.04.7 LTS
Apache 2.4.46

答案1

根据这个 Debian 错误报告,看起来 Apache 希望有一个内核函数存在,但每个内核并不一定都有这个函数:

问题是,如果库在构建时配置为 USE_GETRANDOM,则它假定 getrandom() 调用可用,如果失败,则会出现致命错误。在我的系统上,我没有 getrandom(),因为我运行的是旧内核,但其他人可以(更合理地)在最近的定制内核上禁用该选项。

最好的解决方案可能是更新到 Ubuntu 的最新版本。Ubuntu 16.04 已有五年或十个发布周期,将在不到一个月的时间内失去支持。或者上述 PPA 的维护者将其

有了 Ubuntu 14.04 Trusty EOL 的经验,我再怎么强调也不为过,你应该提前计划,现在就升级你的服务器。昨天太晚了。

答案2

我要感谢@Liam Morland 的上述回答,这让我在 Ubuntu 16.04 上进行了一次不明智的 apt-get 更新后纠正了这个问题。对于那些可能觉得它有用的人,以下是我所做的:

  1. 检查 apt-get 的日志来查看上一轮升级了哪些软件,以及哪些软件需要降级。sudo tail /var/log/apt/history.log

  2. 搜索那里的数据以确定我安装了哪些 libapr1 和 libutil1。我确定对我来说是:

  • libapr1
  • libaprutil1
  • libaprutil1-dbd-sqlite3
  • libaprutil1-ldap

您的系统可能会有所不同!

  1. 安装了 aptitude ( sudo apt-get install aptitude)。它非常有用,并指导我如何修复依赖项,而当我尝试降级时,apt-get 却给了我乱码。

  2. 使用命令sudo aptitude versions libapr1 sudo aptitude versions libaprutil1我注意到了 aptitude 可以提供的确切版本号。在我的例子中,libaprutil1 的版本不能只是 1.5.4,而必须是 1.5.4-1build1。

  3. 使用 = 符号指定版本,我运行了sudo aptitude install libapr1=1.5.2-3。然后,Aptitude 为我提供了其他软件的列表,如果我继续操作,这些软件将被降级或停止工作。我退出安装过程,并利用错误,编写了一个命令来降级 aptitude 识别的所有软件。这是我的:

sudo aptitude install libapr1=1.5.2-3 libaprutil1=1.5.4-1build1 libaprutil1-ldap=1.5.4-1build1 libaprutil1-dbd-sqlite3=1.5.4-1build1 apache2=2.4.18-2ubuntu3.17 apache2-bin=2.4.18-2ubuntu3.17 apache2-data=2.4.18-2ubuntu3.17

这是基于我的特定安装,因此请在运行此命令之前检查您拥有的内容。

  1. 我重新启动了 Apache,一切又恢复正常运行!

我希望这对路上的其他人有所帮助。

答案3

我通过libapr1从 1.7.0 降级到 1.5.2 解决了这个问题。为了使它正常工作,我不得不从 1.6.1 降级libaprutil1(和两次libaprutil1-*)到 1.5.4。我还必须坚持使用 Apache 2.4.18。

答案4

您的机器是否在 Solus / openvz 中运行?那么 openvz 的内核太旧了... 这里的机器在 Solus / openvz 下也有同样的问题(内核 2.6.xx)

相关内容