Different Kinds of Packages
- Modules: Modules extend and customize Drupal functionality.
- Themes: Themes allow users to change the look and feel of their Drupal site.
- Distributions/Profiles: Distributions/profiles provide site features and functions for a specific type of site.
Naming Scheme
Every package MUST be named drupal8-<drupal_project>
. Drupal itself enforces unique project names for each of its' projects and there is a single namespace for all modules, themes, and distributions/profiles. The <drupal_project>
MUST match the drupal.org project name (i.e. drupal.org/project/<drupal_project>
).
File Placement
- Modules: A module package MUST be placed in the
%drupal8_modules
directory - Themes: A theme package MUST be placed in the
%drupal8_themes
directory - Distributions/Profiles: A distribution/profile package MUST be placed in the
%drupal8_profiles
directory - Libraries: A library package MUST be placed in the
%drupal8_libraries
directory
Requires and Provides
Every package MUST include the following in its' spec:
BuildRequires: drupal8-rpmbuild
The drupal8-rpmbuild
package automatically scans files for provides [1] and requires [2] and automatically adds them to the package during build time as "drupal8(<drupal_project>)
" and "php-composer(<vendor>/<project>)
" virtual resources. The use of virtual provides and requires helps alleviate the confusion of sub-modules and which modules actually provide those sub-modules. They also help simplify spec files.
Automatic Requires
drupal8(core)
is always a requirementdrupal8(*)
requires are only determined from the project's main<drupal_project>.info.yml
file's "dependencies
" propertycomposer.json
files are not used for automatic requires because of dependency version formats and minimum Fedora/EPEL version for autoloaders- Also see Requiring a Minimum PHP Version section
Automatic Provides
[1] Automatic provides are determined from all project *.info.yml
and composer.json
files
Other Packages
PHP Extensions
Requiring a Minimum PHP Version
Since all packages require drupal8(core)
which requires Drupal 8's minimum PHP version, most packages do not need to require a minimum PHP version. If packages require a minimum PHP version greater than Drupal 8's minimum version, the project maintainers should have the minimum version provided in the project's main *.info.yml
file and drupal8-rpmbuild
will automatically find and require the minimum PHP version.
Macros and Scriptlets
Macros provided by the drupal8-rpmbuild
package:
Macro | Value | Description |
---|---|---|
%drupal8_version |
8.x.y* | Drupal 8 version. |
%drupal8 |
%{_datadir}/drupal8 |
Drupal 8 base directory. |
%drupal8_modules |
%{drupal8}/modules/rpm ** |
Drupal 8 modules directory. |
%drupal8_profiles |
%{drupal8}/profiles/rpm ** |
Drupal 8 profiles directory. |
%drupal8_themes |
%{drupal8}/themes/rpm ** |
Drupal 8 themes directory. |
%drupal8_libraries |
%{drupal8}/libraries |
Drupal 8 library directory. |
%drupal8_var |
%{_localstatedir}/lib/drupal8 |
Drupal 8 var directory. |
%drupal8_conf |
%{_sysconfdir}/drupal8 |
Drupal 8 conf directory. |
* Value is dynamically updated by the Drupal 8 core package.
** rpm
sub-directory so RPM-installed projects are separated from manually installed projects.
Additional Hints
Template
%global drupal_project __DRUPAL_PROJECT__ Name: drupal8-%{drupal_project} Version: __VERSION__ Release: 1%{?dist} Summary: __SUMMARY__ Group: Applications/Publishing License: GPLv2+ URL: https://www.drupal.org/project/%{drupal_project} Source0: https://ftp.drupal.org/files/projects/%{drupal_project}-8.x-%{version}.tar.gz BuildArch: noarch BuildRequires: drupal8-rpmbuild %description __DESCRIPTION__ This package provides the following Drupal project(s): * %{drupal_project} %prep %setup -qn %{drupal_project} : Licenses and docs mkdir -p .rpm/{licenses,docs} mv LICENSE.txt .rpm/licenses/ mv composer.json .rpm/docs/ %build # Empty build section, nothing to build %install mkdir -p %{buildroot}%{__TYPE_MACRO__}/%{drupal_project} cp -pr * %{buildroot}%{__TYPE_MACRO__}/%{drupal_project}/ %files %license .rpm/licenses/* %doc .rpm/docs/* %{__TYPE_MACRO__}/%{drupal_project} %changelog * ddd MMM DD YYYY __NAME__ <__EMAIL__> __VERSION__-1 - Initial package