Add a generic plugin for use by simple Collections
This patch adds a generic plugin, exec.so, that should be sufficient for the majority of Collection actions. After all packages in a Collection have been installed/removed, this plugin executes the arguments by calling system(3), allowing for a very generic and powerful method to perform many actions. This also adds two sample macros as examples of the format, using the exec.so plugin.
This commit is contained in:
parent
85d89bafdc
commit
f3bcf9a18c
|
@ -19,9 +19,9 @@ endif
|
|||
if WITH_LUAEXT
|
||||
SUBDIRS += luaext
|
||||
endif
|
||||
SUBDIRS += rpmio lib build python scripts fileattrs doc . tests
|
||||
SUBDIRS += rpmio lib build python scripts fileattrs doc . tests plugins
|
||||
|
||||
DIST_SUBDIRS = po misc luaext rpmio lib build python scripts fileattrs doc tests
|
||||
DIST_SUBDIRS = po misc luaext rpmio lib build python scripts fileattrs doc tests plugins
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
|
||||
|
|
|
@ -811,5 +811,6 @@ AC_CONFIG_FILES([Makefile
|
|||
python/Makefile
|
||||
luaext/Makefile
|
||||
tests/Makefile
|
||||
plugins/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
|
|
@ -1159,6 +1159,11 @@ done \
|
|||
%__urlhelper_proxyopts %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}}
|
||||
%_urlhelper %{__urlhelpercmd} %{?__urlhelper_localopts} %{?__urlhelper_proxyopts} %{__urlhelperopts}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Collection specific macros
|
||||
%__plugindir %{_rpmconfigdir}/plugins
|
||||
%__collection_font %{__plugindir}/exec.so /usr/bin/fc-cache
|
||||
%__collection_java %{__plugindir}/exec.so /usr/bin/rebuild-gcj-db
|
||||
|
||||
# \endverbatim
|
||||
#*/
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Makefile for rpm library.
|
||||
|
||||
include $(top_srcdir)/rpm.am
|
||||
|
||||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_builddir)/include/
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/misc
|
||||
AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\""
|
||||
AM_CPPFLAGS += -DSYSCONFDIR="\"$(sysconfdir)\""
|
||||
AM_CPPFLAGS += -DLOCALSTATEDIR="\"$(localstatedir)\""
|
||||
AM_CPPFLAGS += -DLIBRPMALIAS_FILENAME="\"rpmpopt-${VERSION}\""
|
||||
|
||||
AM_LDFLAGS = -avoid-version -module -shared
|
||||
|
||||
pluginsdir = $(rpmconfigdir)/plugins
|
||||
|
||||
plugins_LTLIBRARIES = exec.la
|
||||
|
||||
exec_la_SOURCES = collection.h ../lib/rpmchroot.c exec.c
|
||||
exec_la_LIBADD = $(top_builddir)/lib/librpm.la $(top_builddir)/rpmio/librpmio.la
|
|
@ -0,0 +1,12 @@
|
|||
#include "system.h"
|
||||
|
||||
#include <rpm/rpmlib.h>
|
||||
#include <rpm/rpmlog.h>
|
||||
#include <rpm/rpmts.h>
|
||||
|
||||
#include "lib/collections.h"
|
||||
#include "lib/rpmchroot.h"
|
||||
|
||||
rpmRC COLLHOOK_POST_ANY_FUNC(rpmts ts, const char * collname, const char * options);
|
||||
rpmRC COLLHOOK_POST_ADD_FUNC(rpmts ts, const char * collname, const char * options);
|
||||
rpmRC COLLHOOK_PRE_REMOVE_FUNC(rpmts ts, const char * collname, const char * options);
|
|
@ -0,0 +1,32 @@
|
|||
#include "collection.h"
|
||||
|
||||
#include <sys/wait.h>
|
||||
|
||||
rpmCollHook COLLECTION_HOOKS = COLLHOOK_POST_ANY;
|
||||
|
||||
rpmRC COLLHOOK_POST_ANY_FUNC(rpmts ts, const char *collname,
|
||||
const char *options)
|
||||
{
|
||||
int rc = RPMRC_FAIL;
|
||||
|
||||
if (rpmChrootIn()) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (options) {
|
||||
int status = system(options);
|
||||
if (!WIFEXITED(status) || WEXITSTATUS(status)) {
|
||||
rpmlog(RPMLOG_ERR, "%s collection action failed\n", collname);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
rc = RPMRC_OK;
|
||||
|
||||
exit:
|
||||
if (rpmChrootOut()) {
|
||||
rc = RPMRC_FAIL;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
Loading…
Reference in New Issue