Version information
This version is compatible with:
- Puppet Enterprise 2023.2.x, 2023.1.x, 2023.0.x, 2021.7.x, 2021.6.x, 2021.5.x, 2021.4.x, 2021.3.x, 2021.2.x, 2021.1.x, 2021.0.x, 2019.8.x, 2019.7.x, 2019.5.x, 2019.4.x, 2019.3.x, 2019.2.x, 2019.1.x, 2019.0.x, 2018.1.x, 2017.3.x, 2017.2.x, 2016.4.x
- Puppet >= 4.10.0 < 8.0.0
- ,
Start using this module
Add this module to your Puppetfile:
mod 'cirrax-reprepro', '4.0.2'
Learn more about managing modules with a PuppetfileDocumentation
reprepro puppet module
Table of Contents
Overview
This module assists with creating a local apt repository.
Usage
The only use-case it has been tested with has been to create a repository of pre-built packages. For example, I create a local repository of Puppet 2.7.x packages by downloading them from the official Puppet repository and then adding them to my local repo.
A Full Example
Using Puppet to create GPG keys is a bit complicated -- for example, the Puppet run could time out before the key is actually made. Because of this, I recommend creating the key manually:
$ su - reprepro
$ gpg --gen-key
# Configure as necessary.
# Note that you will have to maintain reprepro manually if you
# choose to use a passphrase.
$ gpg --export --armor foo@bar.com > /etc/puppet/modules/reprepro/files/localpkgs.gpg
# Alternatively, you can run the above commands as root and then later
# copy them to the reprepro user's home directory. This is a way to get
# around the chicken-and-egg scenario of having to create a key owned
# by a user that won't exist until after using the reprepro module.
The following is a full-stack example. This will create a reprepro-based repository, configure apache to allow access to the repository via http, and install the repository to your local apt configuration.
Once this is all set up, you can then add packages to ${basedir}/${repository}/tmp/${name}
. reprepro will install packages left in that directory into the repository every 5 minutes via cron.
# Base Directory shortcut
$basedir = '/var/lib/apt/repo'
# Main reprepro class
class { 'reprepro':
basedir => $basedir,
}
# Set up a repository
reprepro::repository { 'localpkgs':
options => ['basedir .'],
}
# Create a distribution within that repository
reprepro::distribution { 'precise':
repository => 'localpkgs',
origin => 'Foobar',
label => 'Foobar',
suite => 'precise',
architectures => 'amd64 i386',
components => 'main contrib non-free',
description => 'Package repository for local site maintenance',
sign_with => 'F4D5DAA8',
not_automatic => 'No',
}
# Set up apache
class { 'apache': }
# Make your repo publicly accessible
apache::vhost { 'localpkgs':
port => '80',
docroot => '/var/lib/apt/repo/localpkgs',
manage_docroot => false,
servername => 'apt.example.com',
require => Reprepro::Distribution['precise'],
}
# Ensure your public key is accessible to download
file { '/var/lib/apt/repo/localpkgs/localpkgs.gpg':
owner => 'www-data',
group => 'reprepro',
mode => '0644',
source => 'puppet:///modules/reprepro/localpkgs.gpg',
require => Apache::Vhost['localpkgs'],
}
# Set up an apt repo
apt::source { 'localpkgs':
location => 'http://apt.example.com',
release => 'precise',
repos => 'main contrib non-free',
key => 'F4D5DAA8',
key_source => 'http://apt.example.com/localpkgs.gpg',
require => File['/var/lib/apt/repo/localpkgs/localpkgs.gpg'],
include_src => false,
}
Reference
All classes and reources are documented in theire respective code file. For information on classes, types and functions see the REFERENCE.md
Contributing
Please report bugs and feature request using GitHub issue tracker.
For pull requests, it is very much appreciated to check your Puppet manifest with puppet-lint and the available spec tests in order to follow the recommended Puppet style guidelines from the Puppet Labs style guide.
Authors / Credits
This module was based off of the existing work done by saz, camptocamp and desc.
See the list of contributors for a list of all contributors.
Reference
Table of Contents
Classes
reprepro
: Configures reprepro on a server
Defined types
reprepro::distribution
: Adds a "Distribution" to manage.reprepro::filterlist
: Adds a FilterList Packages list have the same syntax as the output of dpkg --get-selectionsreprepro::key
: Import a PGP key into the local keyring of the reprepro userreprepro::pull
: Add a repository pull rule.reprepro::repository
: Adds a packages repository.reprepro::update
: Adds a packages repository.
Classes
reprepro
Configures reprepro on a server
Parameters
The following parameters are available in the reprepro
class:
basedir
Data type: String
The base directory to house the repository.
Default value: '/var/packages'
homedir
Data type: String
The home directory of the reprepro user.
Default value: '/var/packages'
manage_user
Data type: Boolean
if true, creates the user $user_name
Default value: true
user_name
Data type: String
user_name who own reprepro
Default value: 'reprepro'
group_name
Data type: String
group of user who own reprepro
Default value: 'reprepro'
keys
Data type: Hash
hash to create reprepro::key resources.
Default value: {}
key_defaults
Data type: Hash
hash with defaults for keys creation.
Default value: {}
package_ensure
Data type: String
what to ensure for packages
Default value: 'present'
package_name
Data type: String
name of the package to install
Default value: 'reprepro'
Defined types
reprepro::distribution
Adds a "Distribution" to manage.
Examples
reprepro::distribution {"lenny":
repository => "my-repository",
origin => "Camptocamp",
label => "Camptocamp",
suite => "stable",
architectures => "i386 amd64 source",
components => "main contrib non-free",
description => "A simple example of repository distribution",
sign_with => "packages@camptocamp.com",
}
Parameters
The following parameters are available in the reprepro::distribution
defined type:
repository
origin
label
suite
architectures
components
description
sign_with
codename
fakecomponentprefix
udebcomponents
deb_indices
dsc_indices
update
pull
uploaders
snapshots
install_cron
not_automatic
but_automatic_upgrades
log
create_pull
create_update
create_filterlist
repository
Data type: String
the name of the distribution
origin
Data type: Optional[String]
package origin
Default value: undef
label
Data type: Optional[String]
package label
Default value: undef
suite
Data type: Optional[String]
package suite
Default value: undef
architectures
Data type: String
available architectures
components
Data type: String
available components
description
Data type: Optional[String]
a short description
Default value: undef
sign_with
Data type: String
email of the gpg key
Default value: ''
codename
Data type: String
codename (defaults to $title)
Default value: $title
fakecomponentprefix
Data type: Optional[String]
fakecomponentprefix
Default value: undef
udebcomponents
Data type: String
udebcomponents
Default value: $components
deb_indices
Data type: String
file name and compression
Default value: 'Packages Release .gz .bz2'
dsc_indices
Data type: String
file name and compression
Default value: 'Sources Release .gz .bz2'
update
Data type: String
update policy name
Default value: ''
pull
Data type: String
pull policy name
Default value: ''
uploaders
Data type: String
who is allowed to upload packages
Default value: ''
snapshots
Data type: Boolean
create a reprepro snapshot on each update
Default value: false
install_cron
Data type: Boolean
install cron job to automatically include new packages
Default value: true
not_automatic
Data type: String
automatic pined to 1 by using NotAutomatic, value are "yes" or "no"
Default value: ''
but_automatic_upgrades
Data type: String
set ButAutomaticUpgrades, value are "yes" or "no"
Default value: 'no'
log
Data type: String
log
Default value: ''
create_pull
Data type: Hash
hash to create reprepro::pull resource the name will be appended to $pull
Default value: {}
create_update
Data type: Hash
hash to create reprepro::update resource the name will be appended to $update
Default value: {}
create_filterlist
Data type: Hash
hash to create reprerpo::filterlist resource
Default value: {}
reprepro::filterlist
Adds a FilterList
Packages list have the same syntax as the output of dpkg --get-selections
Examples
reprepro::filterlist {"lenny-backports":
ensure => present,
repository => "dev",
packages => [
"git install",
"git-email install",
"gitk install",
],
}
Parameters
The following parameters are available in the reprepro::filterlist
defined type:
list_name
Data type: String
name of the filter list
Default value: $title
ensure
Data type: String
present/absent, defaults to present
Default value: 'present'
repository
Data type: String
the name of the repository
packages
Data type: Array
a list of packages, if the list is empty, the file content won't be managed by puppet
Default value: []
reprepro::key
Import a PGP key into the local keyring of the reprepro user
Parameters
The following parameters are available in the reprepro::key
defined type:
key_name
Data type: String
name of the key
Default value: $title
key_source
Data type: Optional[String]
Path to the key in gpg --export format. This is used as the source parameter in a puppet File resource.
Default value: undef
key_content
Data type: Optional[String]
define the key content instead of pointing to a source file
Default value: undef
reprepro::pull
Add a repository pull rule.
Examples
reprepro::pull {'lenny-backports':
repository => 'localpkgs',
from => 'dev',
filter_name => 'lenny-backports',
}
Parameters
The following parameters are available in the reprepro::pull
defined type:
name
repository
from
components
architectures
udebcomponents
filter_action
filter_name
filter_src_name
filter_formula
name
the name of the pull rule to use in the Pull field in conf/distributions
repository
Data type: String
the local repository to pull to
from
Data type: String
The codename of the distribution to pull packages from.
components
Data type: String
The components of the distribution to get from.
Default value: ''
architectures
Data type: String
The architectures to update.
Default value: ''
udebcomponents
Data type: String
Like Components but for the udebs.
Default value: ''
filter_action
Data type: String
default action when something is not found in the list
Default value: ''
filter_name
Data type: String
a list of filenames in the format of dpkg --get-selections
Default value: ''
filter_src_name
Data type: String
FilterSrcList parameter
Default value: ''
filter_formula
Data type: String
FilterFormula
Default value: ''
reprepro::repository
Adds a packages repository.
Examples
reprepro::repository { 'localpkgs':
ensure => present,
options => ['verbose', 'basedir .'],
}
Parameters
The following parameters are available in the reprepro::repository
defined type:
repo_name
ensure
incoming_name
incoming_dir
incoming_tmpdir
incoming_allow
options
createsymlinks
documentroot
max_files
repo_name
Data type: String
the name of the repository
Default value: $title
ensure
Data type: String
present/absent, defaults to present
Default value: 'present'
incoming_name
Data type: String
the name of the rule-set, used as argument
Default value: 'incoming'
incoming_dir
Data type: String
the name of the directory to scan for .changes files
Default value: 'incoming'
incoming_tmpdir
Data type: String
directory where the files are copied into before they are read
Default value: 'tmp'
incoming_allow
Data type: Variant[String, Array]
allowed distributions
Default value: ''
options
Data type: Array
reprepro options
Default value: ['verbose', 'ask-passphrase', 'basedir .']
createsymlinks
Data type: Boolean
create suite symlinks
Default value: false
documentroot
Data type: Optional[String]
documentroot of the webserver (default undef) if set, softlinks to the reprepro directories are made the directory $documentroot must already exist
Default value: undef
max_files
Data type: Optional[Integer]
maximum number of file resources created for recursion see puppet file resource, available only on puppet > 7
Default value: undef
reprepro::update
Adds a packages repository.
Examples
reprepro::update {"lenny-backports":
suite => 'lenny',
repository => "dev",
url => 'http://backports.debian.org/debian-backports',
filter_name => "lenny-backports",
}
Parameters
The following parameters are available in the reprepro::update
defined type:
update_name
suite
repository
url
architectures
components
udebcomponents
flat
verify_release
ignore_release
filter_action
filter_name
filter_src_name
download_lists_as
getinrelease
update_name
Data type: String
the name of the update-upstream use in the Update field in conf/distributions
Default value: $title
suite
Data type: String
package suite
repository
Data type: String
the name of the repository
url
Data type: String
a valid repository URL
architectures
Data type: Optional[String]
architectures
Default value: undef
components
Data type: Optional[String]
components
Default value: undef
udebcomponents
Data type: Optional[String]
udebcomponents
Default value: undef
flat
Data type: Optional[String]
flat
Default value: undef
verify_release
Data type: String
check the GPG signature Releasefile
Default value: 'blindtrust'
ignore_release
Data type: String
ignore_release
Default value: 'No'
filter_action
Data type: String
default action when something is not found in the list
Default value: ''
filter_name
Data type: String
Name of a filter list created with reprepro::filterlist, matching binary packages
Default value: ''
filter_src_name
Data type: String
Name of a filter list created with reprepro::filterlist, matching source packages
Default value: ''
download_lists_as
Data type: String
specify in which order reprepro will look for a usable variant of needed index files ( .gz, .bz2, .lzma, .xz and .diff)
Default value: ''
getinrelease
Data type: Optional[String]
if this is set to 'no', no InRelease file is downloaded but only Release (and Release.gpg ) are tried.
Default value: undef
Dependencies
- puppetlabs/stdlib (>=3.0.0 < 8.0.0)
- puppetlabs/concat (>= 1.0.0 < 8.0.0)