Installer Packaging

The Foreman installer is released both in native (RPM/Debian) formats and as modules on Puppet Forge. Details of the native packaging can be found on RPM Packaging and Debian Packaging. This page is concerned with the module releases.

modulesync

Most of the Gemfiles and test configurations are identical between all of our modules. They are all managed with modulesync from a shared foreman-installer-modulesync repository.

Changes to the repo can be tested with this command, which generates diffs for each module:

msync update -n theforeman --noop

With committed changes, they can be pushed out using a command like this:

msync update -m "modulesync: speed improvements, new helpers and rspec 3.x minimum" -n theforeman -r modulesync

The command above checks out the master branches, applies all of the templates and pushes them back to the "modulesync" branch under each "theforeman" repo. Once the Travis CI tests have run, the modulesync branch can be merged back into master and deleted - or alternatively, the same command run again, but against master.

Warning: out of date information

Unfortunately this page is now largely out of date and needs to be rewritten. Modules are currently released using puppet-blacksmith to Puppet Forge and librarian-puppet assembles modules to create a tarball for consumption in Debian/RPM packages.

Artifacts

.tar.gz files for each of:

  • theforeman-apache
  • theforeman-concat_native
  • theforeman-dhcp
  • theforeman-dns
  • theforeman-foreman
  • theforeman-foreman_installer
  • theforeman-foreman_proxy
  • theforeman-git
  • theforeman-passenger
  • theforeman-puppet
  • theforeman-tftp

Project sources

The installer is a set of separate puppet-* repos, which are combined via git submodules into a parent foreman-installer repo.

The submodules each contain a Modulefile containing the version and other metadata used to generate the module tarball (using puppet module build). Each of these is built separately. The submodules only have a "master" branch where all development and releases are made.

The foreman-installer repo provides its own module (foreman_installer) and the generate_answers.rb wrapper script. The Modulefile there is under the foreman_installer module within this repo, as it's this module/subdirectory that gets built rather than the entire repo.

https://github.com/theforeman/foreman-installer/blob/master/foreman_installer/Modulefile

The foreman-installer repo has both a "develop" and "master" branch. The submodules are regularly updated (as and when people can) on the develop branch and master is only updated for releases.

Workflow

To release the modules, a build_modules script is provided in foreman-installer that will:

  1. Recurse into each submodule and build it (into SUBMODULE/pkg)
  2. Build the foreman_installer module
  3. Move all built modules into pkg/

Example run:

$ ./build_modules 
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/apache for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/apache/pkg/theforeman-apache-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/concat_native for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/concat_native/pkg/theforeman-concat_native-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/dhcp for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/dhcp/pkg/theforeman-dhcp-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/dns for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/dns/pkg/theforeman-dns-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/foreman for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/foreman/pkg/theforeman-foreman-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/foreman_proxy for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/foreman_proxy/pkg/theforeman-foreman_proxy-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/git for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/git/pkg/theforeman-git-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/passenger for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/passenger/pkg/theforeman-passenger-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/puppet for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/puppet/pkg/theforeman-puppet-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/tftp for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/tftp/pkg/theforeman-tftp-1.2.0-rc1.tar.gz
Notice: Building /home/dcleal/code/foreman/installer/foreman-installer/foreman_installer for release
Module built: /home/dcleal/code/foreman/installer/foreman-installer/foreman_installer/pkg/theforeman-foreman_installer-1.2.0-rc1.tar.gz
$ ls pkg/*.gz
pkg/theforeman-apache-1.2.0-rc1.tar.gz pkg/theforeman-foreman_proxy-1.2.0-rc1.tar.gz
pkg/theforeman-concat_native-1.2.0-rc1.tar.gz pkg/theforeman-git-1.2.0-rc1.tar.gz
pkg/theforeman-dhcp-1.2.0-rc1.tar.gz pkg/theforeman-passenger-1.2.0-rc1.tar.gz
pkg/theforeman-dns-1.2.0-rc1.tar.gz pkg/theforeman-puppet-1.2.0-rc1.tar.gz
pkg/theforeman-foreman-1.2.0-rc1.tar.gz pkg/theforeman-tftp-1.2.0-rc1.tar.gz
pkg/theforeman-foreman_installer-1.2.0-rc1.tar.gz