A library and a cli tool for building module streams.
The module-build
tool only accepts version 3 of the modulemd-packager yaml file format.
After cloning the project we have to setup the required dependencies.
First we need to fullfill dependencies which are required on system level. This can be done on Fedora 34 and up.
$ sudo dnf install libmodulemd mock createrepo_c
For development we recommend to create a python virtualenv with the --system-site-packages
argument.
$ mkvirtualenv -p python3 --system-site-packages module-build
After the virtualenv is created, install the rest of the dependencies with pip.
$ pip install -r requirements.txt
and
$ pip install -r test-requirements.txt
After the dependencies are installed you can run unittests with:
$ tox
To run only flake8
on your code run:
$ tox -e flake8
To enable the module-build
commmand in the command line run:
NOTE
We recommend that you run the command below inside a virtualenv.
$ python setup.py develop
For now module-build
only works with Fedora dist-git. We assume that every ref of a component in your modulemd yaml file refers to a dist-git branch and every name of the component refers to a dist-git repository name.
There are 3 required parameters for module-build
:
--mock-cfg
- mock configuration file
--modulemd
- the path to your modulemd yaml file
<working directory>
- directory where the log files and built rpms will be stored
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg ./workdir
If your modulemd yaml file does not provide module name or module stream it can be added by --module-name
or --module-stream
respectively.
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg --module-name=flatpak-runtime --module-stream=devel ./workdir
If you want to build a specific context
out your module stream you can define it by --module-context
parameter:
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg --module-name=flatpak-runtime --module-stream=devel --module-context=mycontext ./workdir
If a build of a component fails you can resume the build from that component. For this you need to spefify the --resume
flag and the --module-version=<version_timestapm>
option which can identify which build context you want to resume.
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg --resume --module-version=20211112140429 ./workdir
When your module stream has modular dependencies you have to provide those dependencies to module-build
in a form of a repo created by createrepo_c
.
For example the flatpak-runtime
module is a modular dependency for module flatpak-common
. To provide flatpak-runtime
you will need to use the --add-repo
option to your build.
$ module-build -f flatpak-common.yaml -c /etc/mock/fedora-35-x86_64.cfg --add-repo=/path/to/repository/containin/flatpak-runtime/module ./workdir
Sometimes a build of a component can consume a lot of disk space. By default mock
stores all its chroots in /var/lib/mock
which can cause problems if you are low on disk space. You can change the location of the chroot dir to custom one with option --rootdir
.
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg --rootdir=/path/to/custom/dir/ ./workdir
This option allows to build all components directly from SRPM instead of utilizing SCM. You acn turn in on by specifiing directory path with source RPMs in --srpm-dir
.
$ module-build -f flatpak-runtime.yaml -c /etc/mock/fedora-35-x86_64.cfg --srpm-dir /path/to/srpms ./workdir
This option allows to build components simultaneously. To utilize this mode, please specify amount of --workers
higher than 1
.
This mode requires to turn off logger stdout by --no-stdout
argument.
$ module-build -f perl-bootstrap-new.yaml -c /etc/mock/fedora-35-x86_64.cfg --module-name=perl-bootstrap -w 2 --no-stdout /workdir