Understanding Copr repositories
Each Copr project has one repository per enabled chroot. For example, a project withfedora-39-x86_64 and fedora-40-x86_64 chroots will have two separate repositories.
Repository structure
Repositories are organized as:Managing chroots
Enabling chroots
Enable chroots when creating a project:Available chroots
View all available chroots:- Fedora:
fedora-{39,40,41,rawhide}-{x86_64,aarch64,ppc64le,s390x} - EPEL:
epel-{7,8,9}-{x86_64,aarch64,ppc64le,s390x} - CentOS Stream:
centos-stream-{8,9,10}-{x86_64,aarch64,ppc64le,s390x} - openSUSE:
opensuse-leap-{15.5,15.6}-x86_64,opensuse-tumbleweed-x86_64
Per-chroot configuration
Each chroot can have custom settings that override project-level defaults.- Web UI
- CLI
Chroot-specific options
Additional packages Install extra packages in the buildroot:module_name:stream. Disable a module with -module_name:stream.
Bootstrap configuration
Override project-level bootstrap settings:
default, on, off, image, custom_image, unchanged
Isolation method
Override isolation settings:
default, nspawn, simple, unchanged
Automatic repository creation
By default, Copr automatically updates repository metadata after each successful build. This makes new packages immediately available to users.How it works
- Build completes successfully
- RPMs are added to the repository directory
createrepo_cruns to update metadata- Repository is immediately available to users
Manual repository creation
For large projects with many packages (like KDE or GNOME stacks), you may want to control when repository metadata is published.Enabling manual mode
In the API, this feature is called
devel_mode. In the web UI, it’s the “Create repositories manually” checkbox.How manual mode works
- Build completes successfully
- RPMs are added to an internal
devel/repodatadirectory - This development repository is enabled for subsequent builds but not visible to users
- You manually regenerate repositories when ready to publish
Regenerating repositories
- Web UI
- CLI
Click the “Regenerate Repositories” button on your project overview page.
Use cases for manual mode
- Large software stacks: Build hundreds of packages, then publish them all at once
- Coordinated releases: Ensure all packages are built before users can install them
- Testing: Test the development repository before making it public
- Atomic updates: Prevent users from seeing partially-updated package sets
Repository metadata
AppStream metadata
AppStream metadata enables software centers to display your applications.Generating AppStream metadata slows down builds in large projects. Disable it if you don’t need it.
GPG signing
All packages in Copr repositories are automatically signed with the Copr signing key. The GPG key is included in the repository configuration file and is automatically imported when users enable your repository.Multilib repositories
Multilib allows users on 64-bit systems to install 32-bit packages.Enabling multilib
How multilib works
- Enable both 64-bit and 32-bit chroots (e.g.,
fedora-39-x86_64andfedora-39-i386) - Set
--multilib on - Users get special multilib-enabled repository files
- Both 32-bit and 64-bit packages are available concurrently
Multilib repository file example
Module repositories
Copr supports Fedora Modularity features.Module hotfixes
Allow non-module packages to override module packages:module_hotfixes=1 in repository files.
Building modules
See the modularity documentation for details on building module streams.Repository priority
Set repository priority to control package preference:It’s recommended to bump the release number instead of relying on repository priority.
Subprojects (CoprDirs)
Create isolated sub-repositories within a single project.Creating subprojects
Subprojects are created automatically when you submit builds to them:Subproject naming
Subproject names must follow this format:- Start with the project name
- Followed by
:custom:or:pr: - Followed by a suffix
my-project:custom:testingmy-project:custom:stagingmy-project:pr:42
Subproject isolation
- Subproject builds can see packages from:
- Their own subproject repository
- The main project repository
- Subproject builds cannot see packages from other subprojects
:pr:subprojects are automatically deleted after 40 days of inactivity
Enabling subprojects
Custom repositories in buildroot
Add external repositories to be available during builds.Project-level repositories
Chroot-level repositories
Repository URL formats
HTTP/HTTPS URLsRepository caching
Fedora Copr uses AWS CDN to distribute repositories globally. This can cause caching issues.Caching behavior
- Repository metadata may be cached for several minutes
- Directory listings may show outdated contents
- DNF/YUM always gets the latest metadata
- Web browsers may show stale directory listings
Viewing non-cached content
Access the non-cached backend directly:Caching doesn’t affect package manager behavior - only web browser directory listings.
Repository access
Public repositories
All Copr repositories are publicly accessible by default. Anyone can:- View the project page
- Enable the repository
- Install packages