User Documentation

This section contains information for users of Copr Build System. You can find a running Copr instance at You may also be interested in Developer Documentation and Downloads.

Build Source Types

Copr supports several types of build sources.

URL to a SRPM package

This is the only method to submit more builds at once. First, you need to upload your SRPM package(s) on a public server and then provide the URL(s).

Direct Upload of a SRPM package

Upload a SRPM package directly to Copr using the web interface or copr-cli command line client.


Currently, this is divided into two forms: SCM-1 and SCM-2. Both forms go through the same logic, they just offer a bit different form fields. SCM-2 offers possibility to specify name of the spec file that should be used for the build. SCM-1 form offers auto-tagging feature that tags Release and Source0 of the package with XX.commitId where XX is number of commits from the latest tagged commit for the given package. For SCM-1 source type, spec file is always autolocated based on .spec extension. For SCM-2 the spec file is auto-located only if the spec file name was not explicitly specified.

Note that for both SCM-1 and SCM-2, COPR auto-recognizes two types of repositories: upstream and downstream:

  • Downstream repo: is empty (except .spec, README, tito.props, hidden files, currently) or contains at least one source or patch mentioned in the specfile
  • Upstream repo: is not a downstream repo, meaning it contains something significant not mentioned in .spec as source or patch

For upstream repository, COPR will pack the content of the repository (subrooted by the specified ‘Subdirectory’ if specified) as Source0. For downstream repo, nothing is packed and the content is expected to be obtained from the supplied Source urls during build process.

In copr-cli, SCM-1 is referred by ‘buildtito’ command and SCM-2 is referred by ‘buildmock’ command. This is original, not yet updated, naming. We would like to unify SCM-1 and SCM-2 into single SCM source eventually.

Additional note to SCM-1 option checkbox:

“Build from HEAD instead of the latest package tag and mark the package with the commit ID”

If checkbox is unchecked (default), then the latest tagged commit of the given subpackage (marked by ‘Git Directory’) is looked up and built. This is equivalent to using tito _without_ –test.

If checkbox is checked, then the build is done directly from HEAD commit and Release and Source0 name in .spec is tagged with XX.<commit_short_hash> where XX is number of commits from the latest subpackage tag. This is equivalent to using tito _with_ –test.

GitHub Webhooks

Webhooks allows you to automatically trigger build.

First you need to go to your Copr project and tab “Packages” and define some package. The only source type which make sense together with webhooks is “SCM”. Check the “Webhook rebuild” option. You may hit “rebuild” and test the build actually works.

Now you can navigate to “Setting” tab and then “Webhooks” There is your webhook url in the form of<ID>/<UUID>/.

Then in your GitHub project, go to Settings / Webhooks and services. Click on the Add webhook button. Fill in the Payload URL field with the url you noted previously. Set the other fields to the values: content: application/json; send just push event; no secret. Click the Add webhook button.

And next time you push anything to your git, Copr will automatically rebuild your package.

Pagure “Webhooks”

Are not really webhooks but rather fedmsg binds. You also need to have webhook auto-rebuilding enabled for the package.

However, the only necessary thing on the Pagure side is to set Fedmsg to active in your project settings (in ‘Hooks’ section almost at the bottom).

Now your marked SCM packages will be rebuilt on specific commits.

Custom-location Webhooks

You can look here for how to do this: COPR auto-rebuilds with custom Git repositories


In Copr you cannot build multilib packages, i.e. build a i386 package in a x86_64 chroot. If you need to use multilib packages you will need to specify both repos on your x86_64 system. An example of the rhughes/f20-gnome-3-12 project follows:

Install the repo file for this Copr by copying it to /etc/yum.repos.d and run yum update. If you have a multilib system (i.e. are running x86_64 but have i686 packages installed for flash / steam) then you’ll need to modify the .repo file to include both i386 and x86_64 sources, e.g.:

$ cat rhughes-f20-gnome-3-12.repo
name=Copr repo for f20-gnome-3-12 owned by rhughes (i386)

name=Copr repo for f20-gnome-3-12 owned by rhughes (x86_64)

Status Badges

Do you want to add such badge:

to your page? E.g. to GitHub You can use those urls:


And this badge will reflect current status of your package.


What is the purpose of Copr?

Copr is a build system available for everybody. You provide the src.rpm and Copr provides a yum repository. Copr can be used for upstream builds, for continuous integration, or to provide a yum repository for users of your project, if your project is not yet included in the standard Fedora repositories.

You will need a FAS account in order to get started.

What I can build in Copr?

You agree not to use Copr to upload software code or other material (“Material”) that:

  1. you do not have the right to upload or use, such as Material that infringes the rights of any third party under intellectual property or other applicable laws;
  2. is governed in whole or in part by a license not contained in the list of acceptable licenses for Fedora, currently located at, as that list may be revised from time to time by the Fedora Project Board;
  3. is categorized as a “Forbidden Item” at, as that page may be revised from time to time by the Fedora Project Board;
  4. is designed to interfere with, disable, overburden, damage, impair or disrupt Copr or Fedora Project infrastructure;
  5. violates any rules or guidelines of the Fedora Project; or
  6. violates any applicable laws and regulations.

It is your responsibility to check licenses and to be sure you can make the resulting yum repo public.

If you think that some repo may be violating a license, you can raise a legal flag - there is a dedicated text area in each project to do so. This will send a notification to the admins and we will act accordingly.

It would be nice if you stated the license of your packages in the Description or Install instructions.

How can I enable a Copr repository?

See How to enable repo.

How can I package software as RPM?

There are several tutorials:

Can I build for different versions of Fedora?

Yes. Just hit the “Edit” tab in your project and select several chroots, e.g. “fedora-19-x86_64” and “fedora-18-x86_64”. After doing so, when you submit the src.rpm, your package will be built for both of those selected versions of Fedora.

You can build for EPEL as well.

Can I have more yum repositories?

Yes. Each user can have more than one project and each project has one yum repository - to be more precise one repository per chroot.

Can I submit multiple builds at once?

Yes. Just separate them by a space or a new line, but keep in mind that we do not guarantee build order.

What happens when I try to build a package with the same version number?

Nothing special. Your package will just be rebuilt again.

Can I depend on other packages, which are not in Fedora/EPEL?

Yes, they just need to be available in some yum repository. It can either be another Copr repo or a third-party yum repo (e.g jpackage). Click on “Edit” in your project and add the appropriate repositories into the “Repos” field. Packages from your project are available to be used at build time as well, but only for the project you are currently building and not from your other projects.

Can I give access to my repo to my team mate?

Yes. If somebody wants to build into your project and you want give them access, just point them to your Copr project page. They should then click on the “Permission” tab, and request the permissions they want. “Builder” can only submit builds and “Admin” can approve permissions requests. You will then have to navigate to the same “Permission” tab and either approve or reject the request.

Do you have a command-line client?

Yes. Just do dnf install copr-cli and learn more by man copr-cli.

Do you have an API?

Yes. See the link in the footer of every Copr page or jump directly to the API page.

How long do you keep the builds?

We keep the last successful build from each package indefinitely. All other builds (old packages, failed builds) are deleted after 14 days.

How is Copr pronounced?

In American English Copr is pronounced /ˈkɑ.pɚ/ like the metallic element spelled “copper”.

Why another buildsystem?

We didn’t start off to create another buildsystem. We originally just wanted to make building third party rpm repositories easier, but after talking to the koji developers and the developers who are building packages for CentOS we realized that there was a need for a maintainable, pluggable, and lightweight build system.

Did you consider OBS?

Yes, we did. See Copr and integration with Koji and Copr Implemented using OBS. And the mailing list discussion, as well as the conclusion.

Can I get notifications from Copr builds?

Yes, you can. Enable email/irc/android notifications at Fedora notifications service.

See this example on how to process fedmsg notifications.

What does Copr mean?

Community projects (formerly Cool Other Package Repositories)

How can I tell yum to prefer Copr packages?

Building a package with the same version-release number in Copr as the package distributed in the official Fedora repos is discouraged. You should instead bump the release number. Should you build with the same version-release number, you can tell yum to prefer the Copr packages over the distribution provided packages by adding cost=900 to the .repo file.

Can Copr build directly from git?

Yes, it can. See SCM source type.

If you want to know more about tools to generate srpm from a Git repo, see:

  1. Tito (blog post)
  2. dgroc (blog post)

How do I get notifications about finished builds?

See this blog post.

Why doesn’t Copr download my updated package?

Sometimes people report that even though they have updated the src.rpm file and submitted the new build, Copr is still using the old src.rpm. This is typically caused when changes are made to the src.rpm file, but the release number was not bumped up accordingly. As a consequence the resulting files have the same URL, so your browser does not bother to fetch new log files and continues to show those files in its cache. Therefore you are still seeing old content from the previous task.

You should press Ctrl+Shift+R to invalidate your cache and reload page

How can I create new group?

Groups membership is handled by FAS. It can add/remove members to existing group. However it cannot create new group. You can create new group by creating new fedora-infra ticket.

Note that you have to log out and then log in again to Copr so Copr can read your new settings.

I see some strange error about /devel/repodata/ in logs.

This is intended. In fact in next release there will be something like “Please ignore the error above”.

This is part of feature where you can check in your settings “Create repositories manually”. This is intended for big projects like Gnome or KDE, which consist of hundreds of packages. And you want to release them all at the same time. But on the other hand it take days to build them. And of course during the buildtime you need to enable that repository, while at the same time have it disabled/frozen for users.

So if you check “Create repositories manually”, we do not run createrepo_c in normal directory, but in ./devel/ directory. This is directory is always passed to mock with skip_if_unavailable=1. So if Copr have it, then it is used, otherwise ignored. But if it is missing DNF/YUM print the warning above even if it is ignored. Currently there is no way to tell DNF/YUM to not print this warning.

I have a problem and I need to talk to a human.

We do not provide support per se, but try your luck here: Communication