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
|
if WITH_LUAEXT
|
||||||
SUBDIRS += luaext
|
SUBDIRS += luaext
|
||||||
endif
|
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
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
|
||||||
|
|
|
@ -811,5 +811,6 @@ AC_CONFIG_FILES([Makefile
|
||||||
python/Makefile
|
python/Makefile
|
||||||
luaext/Makefile
|
luaext/Makefile
|
||||||
tests/Makefile
|
tests/Makefile
|
||||||
|
plugins/Makefile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -1159,6 +1159,11 @@ done \
|
||||||
%__urlhelper_proxyopts %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}}
|
%__urlhelper_proxyopts %{?_httpproxy:--proxy %{_httpproxy}%{?_httpport::%{_httpport}}}%{!?_httpproxy:%{nil}}
|
||||||
%_urlhelper %{__urlhelpercmd} %{?__urlhelper_localopts} %{?__urlhelper_proxyopts} %{__urlhelperopts}
|
%_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
|
# \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