Introduction

This role helps in setting up rsync based mirrors of various Linux distributions. Currently supported are:

  • openSUSE
  • CentOS
  • elrepo
  • py-modules

Fedora and EPEL are not supported as the recommended way for mirroring those is using quick-fedora-mirror.

Each profile will generate a mirror script in /usr/lib/dist-mirror, and create a matching systemd service. For example, a profile for opensuse will create /usr/lib/dist-mirror/opensuse, with dist-mirror@opensuse.service to start it, and optionally dist-mirror@opensuse.timer to autostart it.

Note that currently only the openSUSE mirror is verified to behave according to this documentation - the other mirrors may have site specific hardcoded values which will need to be fixed eventually.

Configuration

A variable named dist_mirrors is used for configuration, with the following top level keys:

proxy_host

The name of a proxy server to use. It is not possible to configure individual proxies for different sync profiles, but a sync profile can disable the global proxy by setting no_proxy to true.

mirror_base

The absolute path to the directory storing the local mirror. This key is mandatory. Sync profiles can override it by setting a profile specific mirror_base.

centos

Settings for a CentOS mirror. In addition to the generic keys listed below this profile also supports the following:

releases

A list of CentOS releases to mirror. Defaults to 7 and 8 if unset.

releases:
  - 8

archived_releases

A list of CentOS archived releases to pull from archive.kernel.org.

archived_releases:
  - 7.6.1810
  - 7.7.1908

opensuse

Settings for an openSUSE mirror.

elrepo

Settings for an elrepo mirror.

py-modules

A list of python modules to mirror via pip3 download. WIP.

common keys for all profiles

times

A time specification suitable for a systemd timer. If set this will create and enable a timer to start the sync service for the profile.

excludes

A list of patterns to pass to rsync as excludes, in the syntax described in the rsync documentation.

includes

A list of patterns to pass to rsync as includes.

mirror_source

The host and module or path to pull from. Examples are mirror.aardsoft.fi::opensuse/opensuse/ or rsync://archive.kernel.org/centos-vault/.

no_proxy

When set to false disables a globally set proxy for a specific profile.

rsync

Binary name and arguments to rsync. Defaults to rsync -rlptDvzvSHPhi --stats --chmod=D755,F644 --delete --delete-after --delete-excluded

Examples

Full openSUSE mirror with repositories

dist_mirrors:
  mirror_base: /srv/mirror
  user: mirror
  opensuse:
    times: "*-*-* 00/5:00:00"
    rsync: rsync -4 -rlpt --delay-updates --delete-delay --max-delete=400000 --timeout=1800 -hi
    mirror_source: 'stage.opensuse.org::opensuse-full-with-factory/opensuse/'
    excludes:
      - '.~tmp~'
      - /repositories/
  opensuse_repositories:
    type: opensuse
    times: "2024-*-* 08:30:00"
    rsync: rsync -4 -rlpt --delay-updates --delete-delay --delete-excluded --max-delete=4000 --timeout=1800 -hi
    directory: repositories/
    mirror_base: /srv/mirror/opensuse
    mirror_source: 'stage.opensuse.org::buildservice-repos/'
    excludes:
      - '.~tmp~'

CentOS 7, EPEL and limited openSUSE mirror

dist_mirrors:
  mirror_base: /srv/cache/mirrors/
  centos:
    times: "*-*-* 19:05:00"
    releases:
      - 7
    archived_releases:
      - 7.6.1810
      - 7.7.1908
    excludes:
      - 'local*'
      - 'Source/'
      - 'isos'
  elrepo:
    excludes:
      - 'local*'
      - 'isos'
      - 'el5/'
      - 'el6/'
      - 'el8/'
  opensuse:
    times: "*-*-* 08:30:00"
    mirror_source: 'mirror.aardsoft.fi::opensuse/'
    excludes:
      - '.~tmp~'
      - '/debug'
      - '/FOSDEM'
      - '/discontinued'
      - '/education'
      - '/project'
      - '/source'
      - '/repositories'
      - '/history'
      - 'armv6hl/'
      - '/ports/debug'
      - 'ppc/'
      - 'riscv/'
      - 'zsystems/'
      - '42.3'
      - '42.2'
      - '42.1'
      - 'leap/15.0'
      - 'leap/15.1'
      - 'leap/15.2'
      - 'leap/15.4'
      - 'leap/15.5'
      - '-test/'
      - '*.xz'
      - '*.vmx'
      - '*.qcow2'
      - '*.box'
      - '*Snapshot*.iso'
      - '*.iso'