Setup a local package mirror of a COPR repository which is able to provide packages that will be deleted by COPR over time. It can then be served to other machines with Web server.
A synchronization job will be created as a 'oneshot' systemd service which can be executed through a (optional) systemd timer.
This role must run on a Linux host that uses systemd and has the dnf-utils
and createrepo_c
packages available which is typically Fedora or CentOS 8.
-
Download this role via:
$ ansible-galaxy install ganto.copr_reposync
-
Create a minimal playbook (e.g. called
reposync.yml
) to run this role:- name: Setup COPR repository mirror hosts: localhost become: True gather_facts: False vars_prompt: - name: 'copr_reposync_name' prompt: 'Enter COPR repository name (e.g. ganto/jo)' private: no roles: - name: ganto.copr_reposync
-
Run this role (for example against the ganto/jo repository):
$ ansible-playbook reposync.yml Enter COPR repository name (e.g. ganto/jo): ganto/jo PLAY [Setup COPR repository mirror] ************************ ...
After playbook execution completed there will be a directory /var/www/html/ganto/jo
that includes the package repositories for the most common distributions and releases e.g. epel-7-x86_64
with all RPMs that are part of this repository including newly generated repository metadata so that this folder than be easily used as a yum/dnf repository by itself.
There is also a systemd timer that will regularly synchronize new package builds from COPR and regenerate the repository metadata.
$ sudo systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Sun 2020-02-23 06:00:00 UTC 5h 31min left Sun 2020-02-23 00:00:07 UTC 28min ago reposync@jo-epel-7-x86_64.timer reposync@jo-epel-7-x86_64.service
Sun 2020-02-23 06:00:00 UTC 5h 31min left Sun 2020-02-23 00:00:07 UTC 28min ago reposync@jo-epel-8-x86_64.timer reposync@jo-epel-8-x86_64.service
Sun 2020-02-23 06:00:00 UTC 5h 31min left Sun 2020-02-23 00:00:07 UTC 28min ago reposync@jo-fedora-30-x86_64.timer reposync@jo-fedora-30-x86_64.service
Sun 2020-02-23 06:00:00 UTC 5h 31min left Sun 2020-02-23 00:00:07 UTC 28min ago reposync@jo-fedora-31-x86_64.timer reposync@jo-fedora-31-x86_64.service
Serving the COPR repository mirror
-
Install and start a Web server. E.g.:
$ sudo dnf install httpd $ sudo systemctl enable --run httpd
-
Download the repository file for your distribution. E.g.:
$ sudo wget -O /etc/yum.repos.d/_copr-mirror_ganto-jo.repo http://localhost/ganto/jo/ganto-jo-fedora.repo
-
Now you can install every package version from the synchronized repository mirror:
$ sudo dnf install jo-1.3
There is a Molecule test profile that can be used to verify the basic functionality of the role. The default scenario is using the podman container driver. If you prefer docker you can select the corresponding scenario with the -s docker
molecule arguments.
- Ensure you have the necessary dependencies installed (e.g. in a Python venv):
pip install -r molecule/podman/requirements.txt # for podman
# or
pip install -r molecule/docker/requirements.txt # for docker
- Run the test suite. When using docker, then you need to add the
-s docker
option. The other options in brackets are optional but useful if you need to troubleshoot issues:
molecule [-vvv] test [--destroy never][-s docker]
- If you used
--destroy never
the container will remain after the test run and can be inspected interactively via:
podman exec -it <container-id> /bin/sh # for podman
# or
docker exec -it <container-id> /bin/sh # for docker
- Once you're done with inspecting the instance it has to be deleted before a new test run can be started:
molecule destroy [-s docker]
The ganto.copr_reposync role was written and is maintained by: