GConf Scriptlets Guidelines
⚠️ Outdated information
GConf is the previous configuration scheme used by the GNOME 2.x desktop. It was replaced in GNOME 3 by DConf. GConf is still used by a half-dozen or so legacy Fedora packages. You will not need to deal with GConf unless you are maintaining one of those packages. The remainder of this document is preserved for historical reference. |
Writing GConf Scriptlets
Programs which use GConf setup default values in a .schemas
file
which is installed under %{_sysconfdir}/gconf/schemas/[NAME].schemas
.
These defaults are then registered with the gconf daemon
which monitors the configuration values
and alerts applications when values the applications are interested in change.
The schema files also provide documentation
about what each value in the configuration system means
(which gets displayed when you browse the database in the gconf-editor program).
For packaging purposes, we have to disable schema installation during build,
and also register the values in the [NAME].schemas
file
with the gconf daemon on installation
and unregister them on removal.
Due to the ordering of the scriptlets, this is a four step process.
Disabling the GConf installation during the package creation can be done like so:
%install
export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1
make install DESTDIR=$RPM_BUILD_ROOT
...
The GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
environment variable
suppresses the installation of the schema during the building of the package.
An alternative for some packages is to pass a configure flag:
%build
%configure --disable-schemas
...
Unfortunately, this configure switch only works
if the upstream packager has adapted their Makefile.am
file to handle it.
If the Makefile.am
file is not configured,
this switch won’t do anything
and you’ll need to use the environment variable instead.
Here’s the second part:
BuildRequires: GConf2
Requires(pre): GConf2
Requires(post): GConf2
Requires(preun): GConf2
...
%pre
%gconf_schema_prepare schema1 schema2
%gconf_schema_obsolete schema3
In this section we uninstall old schemas during upgrade using one of two macros.
%gconf_schema_prepare
is used for any current GConf schemas.
It takes care of uninstalling previous versions of schemas
that this package currently installs.
It takes a space separated list of schema names without path or suffix
that the package installs.
Note that behind the scenes, this macro works with the %post
scriptlet
to only process GConf schemas if changes have occurred.
%gconf_schema_obsolete
is used for schemas
that this package previously provided but no longer does.
It will deregister the old schema if it is present on the system.
Nothing will happen if the old schema is not present.
This macro takes a space separated list of schemas to uninstall.
One example of using this might be if the package changed names.
If the old schema was named foo.schemas
and the new schema is named foobar.schemas
you’d use:
%gconf_schema_prepare foobar
%gconf_schema_obsolete foo
The next section does the processing of the newly installed schemas:
%post
%gconf_schema_upgrade schema1 schema2
%gconf_schema_upgrade
takes a space separated list of schemas
that the package currently installs just like %gconf_schema_prepare
.
Behind the scenes, it does the actual work of registering the new version
of the schema and deregistering the old version.
The last section is for unregistering schemas when a package is removed:
%preun
%gconf_schema_remove schema1 schema2
When a package is upgraded rpm invokes the %pre
scriptlet
to register and deregister the schemas.
When a package is uninstalled, the %preun
scriptlet is used.
%gconf_schema_remove
takes the list of schemas
that this package currently provides and removes them for us.
Want to help? Learn how to contribute to Fedora Docs ›