Introduction to modules
Besides individual RPM packages, the AppStream repository contains modules. A module is a set of RPM packages that 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.
The subsequent sections describe further features for organization and handling of content within modules:
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, 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. Different versions can be used in separate containers.
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 CentOS 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.
Certain module streams depend on other module streams. For example, the perl-App-cpanminus, perl-DBD-MySQL, perl-DBD-Pg, perl-DBD-SQLite, perl-DBI, perl-YAML, and freeradius module streams depend on certain perl module streams.
The postgresql module provides the PostgreSQL database versions 9.6 and 10 in the respective streams 9.6 and 10. Stream 10 is currently the default one. This means that the system will attempt to install the postgresql-10.6 package if asked for postgresql.
For more information about modular dependencies, see Modular dependencies and stream changes.
A profile is a list of recommended packages to be installed together for a particular use case such as for a server, client, development, minimal install, or other. These package lists can contain packages outside the module stream, usually from the BaseOS repository or the dependencies of the stream.
Installing packages by using a profile is a one-time action provided for the user’s convenience. It does not prevent installing or uninstalling any of the packages provided by the module. It is also 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.
The httpd module, which provides the Apache web server, offers the following profiles for installation:
common- a hardened production-ready deployment, the default profile
devel- the packages necessary for making modifications to
minimal- the smallest set of packages that will provide a running webserver