commit 309b476ffea7f55b61450e23047bfa93f60ffb0f Author: Julien 'Lta' BALLET Date: Fri Mar 6 11:02:16 2015 -0800 Add a plugin that calls command (from the host) on the produced rpms. As it has been developped to auto-sign package after build the plugin name is sign. It's disabled by default, but its default configuration is to call rpmsign diff --git a/Makefile.am b/Makefile.am index 597906d..84ca35e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -57,7 +57,8 @@ plugins_PYTHON = \ py/mockbuild/plugins/yum_cache.py \ py/mockbuild/plugins/selinux.py \ py/mockbuild/plugins/mount.py \ - py/mockbuild/plugins/lvm_root.py + py/mockbuild/plugins/lvm_root.py \ + py/mockbuild/plugins/sign.py mockbuilddir = $(pythondir)/mockbuild mockbuild_PYTHON = \ diff --git a/etc/mock/site-defaults.cfg b/etc/mock/site-defaults.cfg index bbdfedc..275869c 100644 --- a/etc/mock/site-defaults.cfg +++ b/etc/mock/site-defaults.cfg @@ -146,6 +146,13 @@ # config_opts['plugin_conf']['compress_logs_opts'] = {} ### Command used to compress logs - e.g. "/usr/bin/xz -9" # config_opts['plugin_conf']['compress_logs_opts']['command'] = "" +# +# Configuration options for the sign plugin: +# config_opts['plugin_conf']['sign_enable'] = False +# config_opts['plugin_conf']['sign_opts']['cmd'] = 'rpmsign' +# The options to pass to the signing command. %(rpms)s will be expanded to +# the rpms in the results folder +# config_opts['plugin_conf']['sign_opts']['opts'] = '--addsign %(rpms)s' ############################################################################# # diff --git a/mock.spec.in b/mock.spec.in index 6a7bdca..5f182c2 100644 --- a/mock.spec.in +++ b/mock.spec.in @@ -61,7 +61,7 @@ Requires: python-requests Requires: python >= 2.6 BuildRequires: python-devel %endif - +Suggests: rpm-sign %description Mock takes an SRPM and builds it in a chroot. @@ -95,7 +95,7 @@ of the buildroot. %prep %setup -q %if 0%{?rhel} == 6 -sed -i "s|^USE_NSPAWN = True|USE_NSPAWN = False|" py/mockbuild/util.py +sed -i "s|^USE_NSPAWN = True|USE_NSPAWN = False|" py/mockbuild/util.py %endif %if %{use_python3} sed -i 's/AM_PATH_PYTHON/AM_PATH_PYTHON([3])/' configure.ac diff --git a/py/mockbuild/plugin.py b/py/mockbuild/plugin.py index 435e0f5..be74a87 100644 --- a/py/mockbuild/plugin.py +++ b/py/mockbuild/plugin.py @@ -24,6 +24,7 @@ class Plugins(object): self.plugin_conf[key]['cache_topdir'] = buildroot.cache_topdir self.plugin_conf[key]['cachedir'] = buildroot.cachedir self.plugin_conf[key]['root'] = buildroot.shared_root_name + self.plugin_conf[key]['resultdir'] = buildroot.resultdir self.state.start("init plugins") # Import plugins (simplified copy of what yum does). Can add yum diff --git a/py/mockbuild/plugins/sign.py b/py/mockbuild/plugins/sign.py new file mode 100644 index 0000000..ea5d48d --- /dev/null +++ b/py/mockbuild/plugins/sign.py @@ -0,0 +1,38 @@ +# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0: +# License: GPL2 or later see COPYING +# Written by Julien BALLET +# Copyright (C) 2014 Facebook + +# python library imports +from mockbuild.trace_decorator import traceLog, getLog +from mockbuild.util import do +import glob + +requires_api_version = "1.1" + +# plugin entry point +@traceLog() +def init(plugins, conf, buildroot): + Sign(plugins, conf, buildroot) + + +class Sign(object): + """Automatically sign package after build""" + + @traceLog() + def __init__(self, plugins, conf, buildroot): + self.plugins = plugins + self.conf = conf + self.buildroot = buildroot + self.plugins.add_hook('postbuild', self.sign_results) + + getLog().info(conf) + getLog().info("enabled package signing") + + def sign_results(self): + rpms = glob.glob('%s/*.rpm' % self.buildroot.resultdir) + if rpms: + getLog().info("Signing %s", ', '.join(rpms)) + opts = self.conf['opts'] % {'rpms': ' '.join(rpms)} + cmd = "{0} {1}".format(self.conf['cmd'], opts) + do(cmd, pty=True, printOutput=True, shell=True) diff --git a/py/mockbuild/util.py b/py/mockbuild/util.py index 33bc617..a6271c6 100644 --- a/py/mockbuild/util.py +++ b/py/mockbuild/util.py @@ -72,7 +72,7 @@ personality_defs = { PLUGIN_LIST = ['tmpfs', 'root_cache', 'yum_cache', 'bind_mount', 'ccache', 'selinux', 'package_state', 'chroot_scan', - 'lvm_root', 'compress_logs'] + 'lvm_root', 'compress_logs', 'sign'] # This is set to False on EL6 in build time USE_NSPAWN = False @@ -685,6 +685,11 @@ def setup_default_config_opts(unprivUid, version, pkgpythondir): "\\bcore(\\.\\d+)?$", "\\.log$", ]}, + 'sign_enable': False, + 'sign_opts': { + 'cmd' : 'rpmsign', + 'opts' : '--addsign %(rpms)s', + }, } config_opts['environment'] = {