标签 模块化 下的文章

模块化 Modularity 使 Fedora 能够在仓库中提供替代版本的 RPM 软件包。每个 Fedroa 版本可以原生构建不同应用、语言运行时和工具版本的多个版本。

Fedora Magazine 大约一年前就写了 Fedora 28 服务器版的模块化。那时,它只是一个有附加内容的可选仓库,并且明确只支持服务器版。到目前为止,它已经发生了很多变化,现在模块化是 Fedora 发行版的核心部分。一些软件包已完全变成模块。在编写本文时,Fedora 30 的 49,464 个二进制 RPM 软件包中的 1,119(2.26%)来自模块(关于这个数字的更多信息)。

模块化基础知识

由于许多软件包有不同的版本会让人难以承受(并且难以管理),所以包被分组为模块,它可以代表一个应用程序、一个语言运行时或任何其他合理的组。

模块通常有多个,这通常代表软件的主要版本。它可以并行使用,但在给定系统上只能安装每个模块的一个流。

为了不让用户因为太多选择而难以承受,每个 Fedora 版本都有一组默认,因此只需要在需要时做出决定。

最后,为了简化安装,可以根据用例使用预定义的 profile 选择性地安装模块。例如,数据库模块可以作为客户端,服务端或同时安装。

实际使用模块化

当你在 Fedora 系统上安装 RPM 软件包时,它很可能它来自模块流。你可能没有注意到的原因之一是模块化的核心原则之一是在你探究之前保持不可见。

让我们比较以下两种情况。首先,安装流行的 i3 平铺窗口管理器,然后安装极简化的 dwm 窗口管理器:

$ sudo dnf install i3
...
Done!

正如所料,上面的命令会在系统上安装 i3 包及其依赖项。这里没有其他事情发生。但另一个会怎么样?

$ sudo dnf install dwm
...
Enabling module streams:
  dwm                 6.1
...
Done!

感觉是一样的,但后台发生了一些事情 。它启用了默认的 dwm 模块流(6.1),并且安装了模块中的 dwm 包。

为了保持透明,输出中有一条关于模块自动启用的消息。但除此之外,用户不需要了解模块化的任何信息,以便按照他们一贯的方式使用他们的系统。

但如果他们使用模块化方式呢?让我们看看如何安装不同版本的 dwm。

使用以下命令查看可用的模块流:

$ sudo dnf module list
...
dwm                 latest                ...
dwm                 6.0                   ...
dwm                 6.1 [d]               ...
dwm                 6.2                   ...
...
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

输出显示 dwm 模块有四个流,6.1 是默认值。

要安装不同版本的 dwm 包,例如,安装 6.2 的流。启用它,然后使用以下两个命令安装软件包:

$ sudo dnf module enable dwm:6.2
...
Enabling module streams:
  dwm                 6.2
...
Done!
$ sudo dnf install dwm
...
Done!

最后,让我们看下配置,以 PostgreSQL 为例。

$ sudo dnf module list
...
postgresql          9.6            client, server     ...
postgresql          10             client, server     ...
postgresql          11             client, server     ...
...

要安装 PostgreSQL 11 服务端,使用以下命令:

$ sudo dnf module install postgresql:11/server

请注意,除了启用流之外,我们可以指定配置从而使用一条命令安装模块。

可以立即安装多个版本。要添加客户端工具,使用下面的命令:

$ sudo dnf module install postgresql:11/client

还有许多其他带有多个流的模块可供选择。在编写本文时,Fedora 30 中有 83 个模块流。包括两个版本的 MariaDB、三个版本的 Node.js、两个版本的 Ruby 等等。

有关完整的命令集(包括从一个流切换到另一个流),请参阅模块化的官方用户文档


via: https://fedoramagazine.org/installing-alternative-rpm-versions-in-fedora/

作者:Adam Šamalík 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

最近 Fedora Magazine 中题为 Fedora 28 服务器版的模块化在解释 Fedora 28 中的模块化方面做得很好。它还给出了一些示例模块并解释了它们解决的问题。本文将其中一个模块用于实际应用,包括使用模块安装设置 Review Board 3.0。

入门

想要继续并使用模块,你需要一个 Fedora 28 服务器版并拥有 sudo 管理权限。另外,运行此命令以确保系统上的所有软件包都是最新的:

sudo dnf -y update

虽然你可以在 Fedora 28 非服务器版本上使用模块,但请注意上一篇文章评论中提到的警告

检查模块

首先,看看 Fedora 28 可用的模块。运行以下命令:

dnf module list

输出列出了一组模块,这些模块显示了每个模块的关联的流、版本和可用安装配置文件。模块流旁边的 [d] 表示安装命名模块时使用的默认流。

输出还显示大多数模块都有名为 default 的配置文件。这不是巧合,因为 default 是默认配置文件使用的名称。

要查看所有这些模块的来源,请运行:

dnf repolist

与通常的 fedora 和更新包仓库一起,输出还显示了 fedora-modular 和 updates-modular 仓库。

介绍声明你将设置 Review Board 3.0。也许名为 reviewboard 的模块在之前的输出中引起了你的注意。接下来,要获取有关该模块的一些详细信息,请运行以下命令:

dnf module info reviewboard

根据描述确认它是 Review Board 模块,但也说明是 2.5 的流。然而你想要 3.0 的。查看可用的 reviewboard 模块:

dnf module list reviewboard

2.5 旁边的 [d] 表示它被配置为 reviewboard 的默认流。因此,请明确你想要的流:

dnf module info reviewboard:3.0

有关 reviewboard:3.0 模块的更多详细信息,请添加详细选项:

dnf module info reviewboard:3.0 -v

安装 Review Board 3.0 模块

现在你已经跟踪了所需的模块,请使用以下命令安装它:

sudo dnf -y module install reviewboard:3.0

输出显示已安装 ReviewBoard 以及其他几个依赖软件包,其中包括 django:1.6 模块中的几个软件包。安装还启用了 reviewboard:3.0 模块和相关的 django:1.6 模块。

接下来,要查看已启用的模块,请使用以下命令:

dnf module list --enabled

输出中,[e] 表示已启用的流,[i] 表示已安装的配置。对于 reviewboard:3.0 模块,已安装默认配置。你可以在安装模块时指定其他配置。实际上,你仍然可以安装它,而且这次你不需要指定 3.0,因为它已经启用:

sudo dnf -y module install reviewboard/server

但是,安装 reviewboard:3.0/server 配置非常平常。reviewboard:3.0 模块的服务器配置与默认配置文件相同 —— 因此无需安装。

启动 Review Board 网站

现在已经安装了 Review Board 3.0 模块及其相关软件包,创建一个本地运行的 Review Board 网站。无需解释,请复制并粘贴以下命令:

sudo rb-site install --noinput \
    --domain-name=localhost --db-type=sqlite3 \
    --db-name=/var/www/rev.local/data/reviewboard.db \
    --admin-user=rbadmin --admin-password=secret \
    /var/www/rev.local
sudo chown -R apache /var/www/rev.local/htdocs/media/uploaded \
    /var/www/rev.local/data
sudo ln -s /var/www/rev.local/conf/apache-wsgi.conf \
    /etc/httpd/conf.d/reviewboard-localhost.conf
sudo setsebool -P httpd_can_sendmail=1 httpd_can_network_connect=1 \
    httpd_can_network_memcache=1 httpd_unified=1
sudo systemctl enable --now httpd

现在启动系统中的 Web 浏览器,打开 http://localhost,然后享受全新的 Review Board 网站!要以 Review Board 管理员身份登录,请使用上面 rb-site 命令中的用户 ID 和密码。

模块清理

完成后清理是个好习惯。为此,删除 Review Board 模块和站点目录:

sudo dnf -y module remove reviewboard:3.0
sudo rm -rf /var/www/rev.local

总结

现在你已经探索了如何检测和管理 Review Board 模块,那么去体验 Fedora 28 中提供的其他模块吧。

Fedora 模块化网站上了解有关在 Fedora 28 中使用模块的更多信息。dnf 手册页中的 module 命令部分也包含了有用的信息。


via: https://fedoramagazine.org/working-modules-fedora-28/

作者:Merlin Mathesius 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是模块化

所有开源发行版都面临的一个经典难题是“太快/太慢”的问题。用户安装操作系统是为了能够使用其应用程序。像 Fedora 这样的全面的发行版在大量可用软件方面有其优势和劣势。虽然有用户想要的软件包,但可能无法使用其所需的版本。以下是 模块化 Modularity 如何帮助解决该问题。

对于某些用户,Fedora 有时升级得太快。其快速发布周期以及尽可能提供最新稳定软件的愿望可能导致与应用程序的兼容性下降。如果因为 Fedora 将 Web 框架升级为不兼容的版本而导致用户无法运行 Web 应用程序,则会非常令人沮丧。对“太快”问题的经典回答是“Fedora 应该有一个 LTS 版本。”然而,这种方法只能解决问题的一半,并使这个难题的另一面变得更糟。

有时候 Fedora 对某些用户而言又升级速度太慢。例如,Fedora 的发布可能与其它想要的软件的发布时间不匹配。一旦 Fedora 版本宣布稳定,打包者必须遵守 稳定更新政策 并且不能在系统中引入不兼容的更改。

Fedora 的模块化从两个方面解决了这个问题。Fedora 仍将根据其传统政策发布标准版本。但是,它还将提供一组模块给出流行软件的限定替代版本。那些处于“太快”阵营的人仍然可以享受 Fedora 的新内核和其它通用平台增强功能。此外,他们仍然可以访问支持其应用程序的旧框架或工具链。

此外,那些喜欢更新潮一些的用户可以访问比发布时更新的软件。

模块化不是什么?

模块化不是 软件集合 Software Collections 的直接替代品。这两种技术试图解决许多相同的问题,但有明显的差异。

软件集合可以在系统上并行安装不同版本的软件包。但是,它们的缺点是每份安装包都存在于文件系统上的它们自己的命名空间里面。此外,需要告诉每个依赖它们的应用程序在哪里找到它们。

使用模块化,系统上只存在一个版本的软件包,但用户可以选择哪个版本。优点是该版本位于系统的标准位置。该程序包不需要对依赖它的应用程序进行特殊更改。来自用户研究的反馈表明,大多数用户实际上并不依赖于并行安装。容器化和虚拟化解决了这个问题。

为什么不干脆使用容器化?

这是另一个常见问题。为什么用户在可以使用容器时还需要模块?答案是,人们仍然需要维护容器中的软件。 模块为那些用户不需要自己维护、更新和修补的容器提供预打包的内容。这就是 Fedora 如何利用发行版的传统价值并将其转移到新的容器化的世界。

以下是模块化如何为 Node.js 和 Review Board 的用户解决问题的示例。

Node.js

许多读者可能熟悉 Node.js,这是一个流行的服务器端 JavaScript 运行时环境。Node.js 采用偶数/奇数版本策略。它的社区支持偶数版本(6.x、8.x、10.x 等)约 30 个月。同时,他们也支持奇数版本,基本上是 9 个月的开发者预览版。

由于这个周期的原因,Fedora 在其稳定的仓库中只携带最新的偶数版本的 Node.js。它完全避免了奇数版本,因为它们的生命周期比 Fedora 短,并且通常与 Fedora 发布周期不一致。对于一些希望获得最新和最大增强功能的 Fedora 用户来说,这并不合适。

由于模块化,Fedora 28 不是提供了一个版本,而是提供了三个版本的 Node.js,以满足开发人员和稳定部署的需求。Fedora 28 的传统仓库带有 Node.js 8.x。此版本是发布时最新的长期稳定版本。模块仓库(默认情况下在 Fedora 28 Server 版本上可用)也使得更旧的 Node.js 6.x 版本和更新的 Node.js 9.x 开发版本可用。

另外,Node.js 在 Fedora 28 之后几天发布了 10.x 上游版本。过去,想要部署该版本的用户必须等到 Fedora 29,或者使用来自 Fedora 之外的源代码。但是,再次感谢模块化,Node.js 10.x 已经在 Fedora 28 的 Modular Updates-Testing 仓库中 可用 了。

Review Board

Review Board 是一个流行的 Django 应用程序,用于执行代码审查。Fedora 从 Fedora 13 到 Fedora 21 都包括了 Review Board。此时,Fedora 转移到了 Django 1.7。由于 Django 数据库支持的向后兼容性在不断变化,而 Review Board 无法跟上。它在 RHEL / CentOS 7 的 EPEL 仓库中仍然存在,而仅仅是因为这些发行版的版本幸运地被冻结在 Django 1.6上。尽管如此,它在 Fedora 的时代显然已经过去了。

然而,随着模块化的出现,Fedora 能够再次将旧的 Django 作为非默认模块流发布。因此,Review Board 已作为一个模块在 Fedora 上恢复了。Fedora 承载了来自上游的两个受支持的版本:2.5.x 和 3.0.x。

组合在一起

Fedora 一直为用户提供非常广泛的软件使用。Fedora 模块化现在为他们所需的软件版本提供了更深入的选择。接下来的几年对于 Fedora 来说将是非常令人兴奋的,因为开发人员和用户可以以新的和令人兴奋的(或旧的和令人兴奋的)方式组合他们的软件。


via: https://fedoramagazine.org/working-modules-fedora-28/

作者:Stephen Gallagher 选题:wxy 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出