Red Hat 8 greatly simplifies the layout of the content available for Red Hat Enterprise Linux. RHEL 8 content is distributed through the two main repositories: BaseOS and AppStream.


Content in the BaseOS repository is intended to provide the core set of the underlying OS functionality that provides the foundation for all installations. This content is available in the RPM format and is subject to support terms similar to those in previous releases of Red Hat Enterprise Linux.


Content in the AppStream repository includes additional user space applications, runtime languages, and databases in support of the varied workloads and use cases. Content in AppStream is available in one of two formats – the familiar RPM format and an extension to the RPM format called modules.

As a result, most RHEL 8 systems will only need two repositories enabled. However, this may lead to the question, where do I find alternate versions of software if there is only 1 application repository?

Red Hat Enterprise Linux 8 introduces the concept of Application Streams – versions of user applications (Stream = version). Multiple versions of these components are now delivered and updated more frequently than the core operating system packages. This provides greater flexibility to customize Red Hat Enterprise Linux without impacting the underlying stability of the platform or specific deployments. Applications made available as Application Streams can be packaged as modules (group of RPM packages) and are delivered through the AppStream repository. Thus, Each AppStream component has a given life cycle.

The AppStream repository contains content packaged in two ways:

  • Individual RPM packages: Traditional RPM packages available for immediate installation.
  • Modules: Besides individual RPM packages, the AppStream repository contains modules. A module is a set of RPM packages grouped together to represent a component and are usually installed together. A typical module contains packages with an application, packages with the application-specific dependency libraries, packages with documentation for the application, and packages with helper utilities.

 Module Stream (a.k.a Versions)

Module streams are filters that can be imagined as virtual repositories in the AppStream physical repository. Module streams represent versions of the AppStream components. Each of the streams receives updates independently.

Module streams can be active or inactive. Active streams give the system access to the RPM packages within the particular module stream (version), allowing installation of the respective component version. Streams are active either if marked as default or if they are explicitly enabled by a user action.

Only one stream of a particular module can be active at a given point in time. Thus only one version of a component can be installed on a system.

Each module may have a default stream which usually provides the latest or recommended version of the component. Default streams make it easy to consume RHEL packages the usual way, without the need to learn about modules. The default stream is active, unless the whole module has been disabled or another stream of that module enabled.

Module Profiles

A profile is a list of recommended packages to be installed together for a particular use case, such as for a server, client, development, or minimal install. These package lists can contain packages outside the module stream, usually from the BaseOS repository or the dependencies of the stream

It is possible to install packages by using multiple profiles of the same module stream, without any further preparatory steps. Each module stream can have any number of profiles, including none. For any given module stream, one of its profiles can be marked as default and is then used for profile installation actions when no other profile is explicitly specified. However, existence of a default profile for a module stream is not required.

Here are the most common commands for AppStream and Modules:

Listing Available Modules

To list module streams available to your system:
# yum module list

The output of this command lists module streams with name, stream, profiles, and summary on a separate line.

To display details about a module, including a description, a list of all profiles, and a list of all provided packages
# yum module info module-name

To display the current status of a module, including enabled streams and installed profiles
# yum module list module-name

For example, to install the postgresql module using the default stream 10 and profile server:
# yum install @postgresql

Listing Content

To find out which modules provide a package
# yum module provides package

Note: when using YUM to install a package:

  • If the package is not provided by any module stream, this procedure is identical to the procedure used on previous versions of Red Hat Enterprise Linux. That is, normal YUM action will be executed.
  • If the package is provided by a module stream that is enabled, the package is installed without any further manipulation using the YUM command.
  • If the package is provided by a module stream marked as default, the yum tool automatically transparently enables that module stream before installing this package.
  • If the package is provided by a module stream that is not active (neither of the above cases), it is not recognized until you manually enable the respective module stream.

Selecting a Stream before Installation of Packages

Default module streams ensure that users can install packages without caring about the modular features. That is, it will be installed using the defaulted YUM command. However, when the user wants packages with version from a non-default stream, that stream must be enabled before packages provided by it can be installed.

To enable the module stream:
# yum module enable module-name:stream

Installing a Module Stream

To install a profile of the module stream:
# yum install @module-name:stream/profile

This enables the stream and installs the recommended set of packages for a given stream (version) and profile (purpose) of the module. Omit /profile to use the default profile. If no profile is set as default, this step fails without a specified profile and you must specify it

Some modules may not define default streams. In such case, you must explicitly specify the stream.

Enable a module using a specific stream
# yum module enable module-name:stream

And then install a module using the default stream and profiles
# yum install @module-name

# yum module install module-name

Removing Installed Modules

To remove a module
# yum module remove module-name

Resetting Module Streams

Resetting a module is an action that returns all of its streams to their initial state – neither enabled nor disabled. If the module has a default stream, that stream becomes active as a result of resetting the module.
# yum module reset module-name

All streams of the module are returned to the initial state. No installed content is removed.

To disable a module and all its streams
# yum module disable module-name

Note that it is not possible to enable a stream of a module when another stream of the same module is already enabled. To switch streams, you must first reset the module, and then enable the new stream. Removing all packages installed from a stream before switching to a different stream is highly recommended, because it prevents the system from reaching states where packages could be installed with no repository or stream providing them.