模組化使 Fedora 能夠在倉庫中提供替代版本的 RPM 軟體包。每個 Fedroa 版本可以原生構建不同應用、語言執行時和工具版本的多個版本。
Fedora Magazine 大約一年前就寫了 。那時,它只是一個有附加內容的可選倉庫,並且明確只支援伺服器版。到目前為止,它已經發生了很多變化,現在模組化是 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 等等。
有關完整的命令集(包括從一個流切換到另一個流),請參閱模組化的官方使用者文件。