4.11. 动态编程语言、网页和数据库服务器

现在完全支持 nodejs:16 模块流

nodejs:16 模块流以前作为技术预览提供,在 RHSA-2021:5171 公告中被完全支持。nodejs:16 模块流现在提供 Node.js 16.13.1,它是一个长期支持(LTS)版本。

从 RHEL 8.3 开始,Node.js 16 包括在 RHEL 8.5 中,与 Node.js 14 相比,提供了大量新功能以及 bug 和安全修复。

主要变更包括:

  • V8 引擎已升级到版本 9.4。
  • npm 软件包管理器已升级到版本 8.1.2。
  • 新的 Timers Promises API 提供了一组替代的计时器函数,可返回 Promise 对象。
  • Node.js 现在提供了一个新的实验性 Web Streams API。
  • Node.js 现在包含 Corepack,这是一个实验性工具,可让您使用给定项目中配置的软件包管理器,而无需手动安装它们。
  • Node.js 现在提供了一个实验性的 ECMAScript modules (ESM) loader hooks API,它整合了 ESM loader hooks。

要安装 nodejs:16 模块流,请使用:

# yum module install nodejs:16

如果要从 nodejs:14 流升级,请参阅 切换到后期流

(BZ#1953991, BZ#2027610)

新模块流:ruby:3.0

RHEL 8.5 在新的 ruby:3.0 模块流中引入了 Ruby 3.0.2。与 RHEL 8.3 一起提供的 Ruby 2.7 相比,这个版本提供了很多性能改进、bug 和安全修复以及新功能。

主要改进包括:

  • 并发和并行功能:

    • Ractor ,一个提供了线程安全并行执行的 Actor-model 抽象,作为实验性功能提供。
    • Fiber Scheduler 已作为实验性功能引入。Fiber Scheduler 截获阻止操作,这样无需更改现有代码,便可实现轻量级并发。
  • 静态分析功能:

    • 引入了 RBS 语言,它描述了 Ruby 程序的结构。添加了rbs gem 来解析用 RBS 编写的类型定义。
    • 引进了 TypeProf 工具,它是一种 Ruby 代码的类型分析工具。
  • case/in 表达式匹配的模式不再是实验性的。
  • 单行模式匹配,一种实验功能,已重新设计。
  • find 模式已添加为实验性功能。

改进的性能:

  • 现在,将长代码粘贴到 交互式 Ruby Shell(IRB) 的速度非常快。
  • measure 命令已添加到 IRB 中,以进行时间测量。

其他显著变化包括:

  • 关键字参数已与其他参数分隔。
  • 用户安装的 gems 的默认目录现在是 $HOME/.local/share/gem/,除非 $HOME/.gem/ 目录已经存在。

要安装 ruby:3.0 模块流,请使用:

# yum module install ruby:3.0

如果要从以前的 ruby 模块流升级,请参阅 切换到后期的流

(BZ#1938942)

Python urllib 解析功能的默认分隔符更改

为缓解 Python urllib 库中的 Web Cache Poisoning CVE-2021-23336urllib.parse.parse_qslurllib.parse.parse_qs 功能的默认分隔符将从 & 和分号(;)改为只使用 &。

这个变化已在 RHEL 8.4 的 Python 3.6 中实现,现在被移植到 Python 3.8 和 Python 2.7 中。

默认分隔符的更改可能会向后不兼容,因此红帽提供了一种方法来配置 Python 软件包中修改了默认分隔符的行为。此外,如果受影响的 urllib 解析功能检测到客户的应用受到更改的影响,则发出警告。

如需更多信息,请参阅 Python urllib 库中的 Web Cache Poisoning 的迁移(CVE-2021-23336) 知识库文章。

Python 3.9 不受影响,并且已经包含新的默认分隔符(&),其只能在调用 由Python 代码编写的 urllib.parse.parse_qslurllib.parse.parse_qs 函数时传递 separator 参数来进行修改。

(BZ#1935686, BZ#1931555, BZ#1969517)

Python ipaddress 模块不再允许 IPv4 地址中的零

为缓解 CVE-2021-29921,Python ipaddress 模块现在拒绝显示AddressValueError 的前导为零的 IPv4 地址:Leading zeros are not permitted 错误。

python38python39 模块中已引入了这个变化。RHEL 中发布的早期 Python 版本不受 CVE-2021-29921 的影响。

依赖之前行为的客户可以预先处理其 IPv4 地址输入,以去除前导零。例如:

>>> def reformat_ip(address): return '.'.join(part.lstrip('0') if part != '0' else part for part in address.split('.'))
>>> reformat_ip('0127.0.0.1')
'127.0.0.1'

要使用显式循环去除前导零以提高可读性,请使用:

def reformat_ip(address):
    parts = []
    for part in address.split('.'):
        if part != "0":
            part = part.lstrip('0')
        parts.append(part)
    return '.'.join(parts)

(BZ#1986007, BZ#1970504, BZ#1970505)

php:7.4 模块流被 rebase 到版本 7.4.19

php:7.4 模块流提供的 PHP 脚本语言已从 7.4.6 升级到版本 7.4.19。这个版本提供了多个安全和 bug 修复。

(BZ#1944110)

新软件包:pg_repack

新的 pg_repack 软件包已添加到 postgresql:12postgresql:13 模块流中。pg_repack 软件包提供了一个 PostgreSQL 扩展,可让您从表和索引中删除 bloat,也可以选择恢复集群索引的物理顺序。

(BZ#1967193,BZ#1935889)

新模块流:nginx:1.20

nginx 1.20 web 和代理服务器现在作为 nginx:1.20 模块流提供。与之前发布的版本 1.18 相比,这个版本提供了很多 bug 修复、安全修复、新功能以及改进。

新特性:

  • nginx 现在支持使用在线证书状态协议(OCSP)的客户端 SSL 证书验证。
  • nginx 现在支持根据最小可用空间的缓存清除。此支持作为 proxy_cache_path 指令的 min_free 参数实现。
  • 添加了一个新的 ngx_stream_set_module 模块,它可让您为变量设置值。

增强的指令:

  • 现在提供了多个新指令,如 ssl_conf_commandssl_reject_handshake
  • proxy_cookie_flags 指令现在支持变量。

改进了对 HTTP/2 的支持:

  • ngx_http_v2 模块现在包含 lingering_closelingering_timelingering_timeout 指令。
  • 处理 HTTP/2 中的连接与处理 HTTP/1.x 中的连接一致。从 nginx 1.20 开始,使用 keepalive_timeoutkeepalive_requests 指令,而不是删除的 http2_recv_timeouthttp2_idle_timeouthttp2_max_requests 指令。

要安装 nginx:1.20 流,请使用:

# yum module install nginx:1.20

如果要从 nginx:1.20 流升级,请参阅 切换到后期的流

(BZ#1945671)

squid:4 模块流 rebase 到版本 4.15

squid:4 模块流中的Squid 代理服务器已从版本 4.11 升级到版本 4.15。这个更新提供了各种 bug 和安全修复。

(BZ#1964384)

quota 现在支持 HPE XFS

quota 工具现在提供对 HPE XFS 文件系统的支持。因此,HPE XFS 的用户可以通过 quota 工具监控和管理磁盘使用情况。

(BZ#1945408)

mutt rebase 到版本 2.0.7

Mutt 电子邮件客户端已更新至版本 2.0.7,其提供了一些增强和 bug 修复。

主要变更包括:

  • Mutt 现在使用 XOAUTH2 机制提供对 OAuth 2.0 授权协议的支持。Mutt 现在还支持用于 IMAP、POP 和 SMTP 协议的 OAUTHBEARER 验证机制。基于 OAuth 的功能通过外部脚本提供。因此,您可以使用身份验证令牌将 Mutt 与各种云电子邮件提供商,如 Gmail 进行连接。有关如何设置具有 OAuth 支持的 Mutt 的更多信息,请参阅 如何使用 OAuth2 身份验证设置具有 Gmail 的 Mutt
  • Mutt 添加了对域字面电子邮件地址,例如 user@[IPv6:fcXX:…​ 的支持]
  • 新的 $ssl_use_tlsv1_3 配置变量允许 TLS 1.3 连接(如果电子邮件服务器支持)。此变量默认为启用。
  • 新的 $imap_deflate 变量添加了对 COMPRESS=DEFLATE 压缩的支持。变量默认为禁用。
  • $ssl_starttls 变量不再控制终止未加密 IMAP PREAUTH 连接。如果您依赖 STARTTLS 进程,则改为使用 $ssl_force_tls 变量。

请注意,即使更新到新的 Mutt 版本后,ssl_force_tls 配置变量仍默认为 no,以防止 RHEL 用户在其现有环境中遇到问题。在 Mutt 的上游版本中,ssl_force_tls 现在默认启用。

(BZ#1912614, BZ#1890084)