Skip to content

Hosting APT Repositories

Publish content

However you have obtained your Pulp repository content, you must publish and distribute it for it to become accessible on your Pulp instance.

Basic Workflow

Once you have obtained some pulp_deb content, either via sync or upload, that content must then be published and distributed so as to be available for clients. The most basic version of this workflow is always the same, and all you need is the name of the relevant Pulp repository:

pulp deb repository list
NAME=my-repository  # Insert some repository name from the list here.
pulp deb publication create --repository=${NAME}
pulp deb distribution create --name=${NAME} --base-path=${NAME} --repository=${NAME}

Creating the distribution will return the base_url in the API response, which will contain the URL to your hosted repository. The base_url has the following structure:

  • CONTENT_ORIGIN is a required pulpcore setting, containing the protocol, fqdn, and port where the content app is reachable. See also the pulpcore settings documentation.
  • CONTENT_PATH_PREFIX is a optional pulpcore setting that defaults to /pulp/content/.
  • The distribution base path is what you have supplied to the --base-path flag in the above example. In the examples in this documentation, we generally just use the repository name for the base path as well, but you may want to depart from that convention.

An example base_url could be:

Metadata Signing


This workflow assumes you have already created a signing service of type AptReleaseSigningService. See the workflow on signing service creation for how to do this.

Once you have created a signing service you can create signed publications from any repository:

pulp deb repository list
NAME=my-repository  # Insert some repository name from the list here.
pulp signing-service list
SIGNING_SERVICE_NAME=my-apt-release-signing-service  # Insert a signing service from the list.
pulp deb publication create --repository=${NAME} --signing-service=${SIGNING_SERVICE_NAME}
pulp deb distribution create --name=${NAME} --base-path=${NAME} --repository=${NAME}

The above example, will sign every distribution in your publication using the same signing service, and you will need to explicitly specify the signing service each time you create the publication.

You can also create a permanent link between a repository and a signing service using the signing_service parameter on your repository. At the time of this writing, this cannot be done via Pulp CLI.

It is also possible to use the signing_service_release_overrides parameter to specify different signing services for different distributions within a single repository. This parameter expects a dict of key-value pairs of the form {"<distribution>": "<signing_service_href>"}. At the time of this writing, this cannot be done via Pulp CLI.

Verbatim Publications


For an explanation on what a verbatim publication is, see the corresponding feature overview.

The following example uses a verbatim publication to host an official Debian repository, including the installer files:

http ${PULP_URL}/pulp/api/v3/remotes/deb/apt/ ${REMOTE_OPTIONS[@]}
pulp deb repository create --name=${NAME} --remote=${NAME}
pulp deb repository sync --name=${NAME}
pulp deb publication --type=verbatim create --repository=${NAME}
pulp deb distribution create --name=${NAME} --base-path=${NAME} --repository=${NAME}

As you can see, we had to create the remote using http, since Pulp CLI does not currently support the sync_udebs and sync_installer flags. The only other addition was to add --type=verbatim to the publication command.


Installing from synced content, as published above, is currently an experimental feature.

Simple Publishing

It is possible to create pulp_deb repositories, that contain .deb packages, without any associated structure content. Using the standard APT publisher, such packages are not included in the repo metadata. By extension they are not part of the published repository as far as any consuming clients are concerned. We recommend to stick to the workflows presented in this documentation, which ensure the creation of structured content. However, as an alternate workaround, you can set the --simple flag when creating your publication:

pulp deb publication create --simple --no-structured --repository=${NAME}

The --simple flag causes an additional distribution named default with a single component named all to be added to your publication. As the name suggests, this distribution-component combination, will simply contain all .deb packages from the repository, regardless of any structure content. If you omit the --no-structured flag, the default/all distribution-component combination will be added in addition to the usual structured distribution-componen combinations.