ReleaseEngineering/PuppetAgain/Modules/packages: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
 
(9 intermediate revisions by 4 users not shown)
Line 4: Line 4:


"Installation" here is taken to mean getting the package installed, along with any supporting files (e.g., NRPE plugins).
"Installation" here is taken to mean getting the package installed, along with any supporting files (e.g., NRPE plugins).
== Requiring ==
All packages can be required as a class:
  require => Class['packages::foo']


= Implementation =
= Implementation =
Line 23: Line 29:
; $gpg_key: (optional) puppet location of the gpg key for the repo
; $gpg_key: (optional) puppet location of the gpg key for the repo
; $gpg_key_pkg: (required if $gpg_key given) gpg-pubkey package that appears when the key is installed (use 'rpm -q gpg-pubkey' to find this)
; $gpg_key_pkg: (required if $gpg_key given) gpg-pubkey package that appears when the key is installed (use 'rpm -q gpg-pubkey' to find this)
Many of the basic repos - CentOS, releng, and puppet - are included by default.  Others are defined in `modules/packages/manifests/setup.pp` as virtual resources and realized in the package manifests when required.


== Darwin ==
== Darwin ==
Line 35: Line 43:
This define automatically calculates the DMG path and uses the puppet pkgdmg provider to install it.
This define automatically calculates the DMG path and uses the puppet pkgdmg provider to install it.


In cases where a DMG is publicly available, a comment in the manifest file should indicate the source.  In the more common case where a DMG must be built by hand, a shell script named ''$pkg-dmg.sh'' that builds the DMG should be included next to the manifest file, e.g., ''modules/packages/manifests/wget-dmg.sh''.  This allows others to see changes from version to version of the DMG via 'hg diff', and also records the origin of the DMG so others can upgrade it.
See [[ReleaseEngineering/PuppetAgain/Packages#Darwin]] for details on installing and creating Darwin packages.


Since most software is not available in a pre-made DMG, we often find ourselves building DMGs for software like wget.  If the software is not customized or patched, then the manifest and shell script should be in ''modules/packages/manifests''.  If the package is customized or patched, it should be in the ''mozilla'' subdirectory, as described below for "Mozilla-Custom Packages".
= Packages =


= Packages =
See https://github.com/mozilla/build-puppet/tree/master/modules/packages/manifests for the current list of non-customized packages.  The names should be self-explanatory, right? 


See http://hg.mozilla.org/build/puppet/file/tip/modules/packages/manifests for the current list of non-customized packages.  The names should be self-explanatory, right?
The private Apple packages are from https://developer.apple.com/downloads (Apple ID required)


== Mozilla-Custom Packages ==
== Mozilla-Custom Packages ==


In many cases, we want customized or patched packages.  Those should be under ''packages::mozilla''.  Packages in this space have more requirements, since they are not simply pulling in a publicly available package. See [[ReleaseEngineering/PuppetAgain/HowTo/Hack on PuppetAgain#Custom Packages]].
In many cases, we want customized or patched packages.  Those should be under ''packages::mozilla''.  Packages in this space have more requirements, since they are not simply pulling in a publicly available package. See [[ReleaseEngineering/PuppetAgain/HowTo/Hack on PuppetAgain#Custom Packages]].
=== packages::mozilla::ccache ===
This is a newer version than is distributed by CentOS.  It seems no other changes have been made.
=== packages::mozilla::hgtool ===
This is a python wrapper around hg that simplifies using hg from build automation. The canonical source for hgtool is http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/hgtool.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/Makefile#l3
It installs to /usr/local/bin
=== packages::mozilla::gittool ===
This is a python wrapper around git that simplifies using git from build automation. The canonical source for gittool is http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/gittool.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/Makefile#l6
It installs to /usr/local/bin


=== packages::mozilla::git ===
=== packages::mozilla::git ===
Line 65: Line 87:
=== packages::mozilla::python27 ===
=== packages::mozilla::python27 ===


Same, but for Python-2.7.2.
This is a custom build of Python-2.7.2. The Python prefix is /tools/python27, with symlinks from /tools/python and /tools/python2.  The python binary is at /tools/python26/bin/python, with a symlink at /usr/local/bin/python2.7.


=== packages::mozilla::py27_mercurial ===
=== packages::mozilla::py27_mercurial ===
Line 75: Line 97:
Installs virtualenv, built against packages::mozilla::python27.  Note that virtualenv is a single .py file, and thus does not need to be built at all.  The python::virtualenv puppet module does not use this package.  This installs a symlink at /usr/local/bin/virtualenv.
Installs virtualenv, built against packages::mozilla::python27.  Note that virtualenv is a single .py file, and thus does not need to be built at all.  The python::virtualenv puppet module does not use this package.  This installs a symlink at /usr/local/bin/virtualenv.


=== packages::mozilla::tooltool ===
=== packages::mozilla::retry ===
This is a python tool to retry an operation a configurable number of times. The canonical source for hgtool is http://hg.mozilla.org/build/tools/file/tip/buildfarm/utils/retry.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/tip/buildfarm/utils/Makefile


This installs the tooltool script at /tools/tooltool.py; it is built from a template to use packages::mozilla::python27.
It installs to /usr/local/bin


=== packages::mozilla::screenresolution ===
=== packages::mozilla::screenresolution ===


This installs the jford's tool to set the screen resolution on a Mac in /usr/local/bin/screenresolution.  The screenresolution class uses this on Darwin.
This installs the jford's tool to set the screen resolution on a Mac in /usr/local/bin/screenresolution.  The screenresolution class uses this on Darwin.
=== packages::mozilla::supervisor ===
A newer version of supervisor package based on FC16 spec file and supervisor_3.0-0.10.a12. Used by <tt>supervisord</tt> module.
=== packages::mozilla::tooltool ===
This installs the tooltool script at /tools/tooltool.py; it is built from a template to use packages::mozilla::python27.

Latest revision as of 19:27, 4 June 2018

This module manages the installation of packages. It provides the level of abstraction between "NRPE should be installed" (include packages::nrpe) and the details of that installation, which will vary widely between linux, OSX, and Windows-based systems.

Most packages will have a dedicated module which abstracts the configuration of that package across operating systems -- for example, NRPE plugins may be installed in different directories on different operating systems.

"Installation" here is taken to mean getting the package installed, along with any supporting files (e.g., NRPE plugins).

Requiring

All packages can be required as a class:

 require => Class['packages::foo']

Implementation

In general, package management resources get set up by the packages::setup class in the 'packagesetup' stage (see [ReleaseEngineering/PuppetAgain#Stages]), so that subsequent uses of the package manager can assume it is configured. This is done with an invocation of packages::setup from the toplevel::base class.

CentOS

On CentOS, packages are installed with the yum provider, and the relevant repositories are added to yum in the packagesetup stage.

Yum caches repository metadata on clients for a default of six hours. This can cause problems when trying to land package changes, as the change will not be visible on clients for this time. A cache reload can be forced by incrementing $repoflag in modules/packages/manifests/setup.pp, working around the problem.

Setup

The packages::yumrepo class is used from packages::setup to install yum repositories. It takes

$repo_name
name of the repo
$url_path
path to the repo on the repo server (starting with repos/yum)
$gpg_key
(optional) puppet location of the gpg key for the repo
$gpg_key_pkg
(required if $gpg_key given) gpg-pubkey package that appears when the key is installed (use 'rpm -q gpg-pubkey' to find this)

Many of the basic repos - CentOS, releng, and puppet - are included by default. Others are defined in `modules/packages/manifests/setup.pp` as virtual resources and realized in the package manifests when required.

Darwin

There is no setup required for darwin packages. Each package is installed using packages::pkgdmg:

            packages::pkgdmg {
               screenresolution:
                   version => "1.6";
            }   

This define automatically calculates the DMG path and uses the puppet pkgdmg provider to install it.

See ReleaseEngineering/PuppetAgain/Packages#Darwin for details on installing and creating Darwin packages.

Packages

See https://github.com/mozilla/build-puppet/tree/master/modules/packages/manifests for the current list of non-customized packages. The names should be self-explanatory, right?

The private Apple packages are from https://developer.apple.com/downloads (Apple ID required)

Mozilla-Custom Packages

In many cases, we want customized or patched packages. Those should be under packages::mozilla. Packages in this space have more requirements, since they are not simply pulling in a publicly available package. See ReleaseEngineering/PuppetAgain/HowTo/Hack on PuppetAgain#Custom Packages.

packages::mozilla::ccache

This is a newer version than is distributed by CentOS. It seems no other changes have been made.

packages::mozilla::hgtool

This is a python wrapper around hg that simplifies using hg from build automation. The canonical source for hgtool is http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/hgtool.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/Makefile#l3

It installs to /usr/local/bin

packages::mozilla::gittool

This is a python wrapper around git that simplifies using git from build automation. The canonical source for gittool is http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/gittool.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/2dc15e3ec0ca/buildfarm/utils/Makefile#l6

It installs to /usr/local/bin

packages::mozilla::git

This is a customized build of Git without various GUI things and installed with a prefix of /tools/git, so that the git binary is at /tools/git/bin/git with a symlink at /usr/local/bin/git. The GUI utilities are not necessary on a buildslave, and pull in lots of unnecessary packages.

packages::mozilla::mock_mozilla

This is a build of a forked of fedora's mock - see the github page. The package:

  • installs a number of mock profiles in /etc/mock_mozilla (see /etc/mock_mozilla in the project)
  • installs /usr/sbin/mock_mozilla (and a consolehelper script in /usr/bin/mock_mozilla that authorizes users via the mock_mozilla group)
  • creates /builds/mock_mozilla
  • installs a bunch of python modules into the system python (*not* a mozilla python)

packages::mozilla::python26

This is a custom build of Python-2.6.7, primarily to put the binaries out of the way of the system python. It installs to /tools/python26, with python at /tools/python26/bin/python, and a symlink at /usr/local/bin/python2.6.

packages::mozilla::python27

This is a custom build of Python-2.7.2. The Python prefix is /tools/python27, with symlinks from /tools/python and /tools/python2. The python binary is at /tools/python26/bin/python, with a symlink at /usr/local/bin/python2.7.

packages::mozilla::py27_mercurial

Installs Mercurial, built against packages::mozilla::python27. This installs a symlink at /usr/local/bin/hg.

packages::mozilla::py27_virtualenv

Installs virtualenv, built against packages::mozilla::python27. Note that virtualenv is a single .py file, and thus does not need to be built at all. The python::virtualenv puppet module does not use this package. This installs a symlink at /usr/local/bin/virtualenv.

packages::mozilla::retry

This is a python tool to retry an operation a configurable number of times. The canonical source for hgtool is http://hg.mozilla.org/build/tools/file/tip/buildfarm/utils/retry.py, and it is packaged into a self-contained python script with http://hg.mozilla.org/build/tools/file/tip/buildfarm/utils/Makefile

It installs to /usr/local/bin

packages::mozilla::screenresolution

This installs the jford's tool to set the screen resolution on a Mac in /usr/local/bin/screenresolution. The screenresolution class uses this on Darwin.

packages::mozilla::supervisor

A newer version of supervisor package based on FC16 spec file and supervisor_3.0-0.10.a12. Used by supervisord module.

packages::mozilla::tooltool

This installs the tooltool script at /tools/tooltool.py; it is built from a template to use packages::mozilla::python27.