Richtlinien für GConf-Scriptlets
|
⚠️ Veraltete Informationen
GConf war das frühere Konfigurationsschema, das in der Arbeitsumgebung GNOME 2.x verwendet wurde. In GNOME 3 wurde es durch DConf ersetzt. GConf wird noch von etwa einem halben Dutzend älterer Fedora-Pakete verwendet. Sie müssen sich nur dann mit GConf auseinandersetzen, wenn Sie eines dieser Pakete betreuen. Der Rest dieses Dokuments wird zu historischen Zwecken aufbewahrt. |
GConf-Scriptlets schreiben
Programme, die GConf verwenden, legen Standardwerte in einer .schemas-Datei fest, die unter %{_sysconfdir}/gconf/schemas/[NAME].schemas installiert wird. Diese Standardwerte werden dann beim GConf-Daemon registriert, der die Konfigurationswerte überwacht und Anwendungen benachrichtigt, wenn sich für sie relevante Werte ändern. Die Schemadateien enthalten außerdem eine Dokumentation, die die Bedeutung der einzelnen Werte im Konfigurationssystem erläutert (diese Dokumentation wird beim Durchsuchen der Datenbank im GConf-Editor angezeigt).
Für die Paketierung muss die Schemainstallation während des Bauprozesses deaktiviert werden. Außerdem müssen die Werte in der Datei [NAME].schemas bei der Installation beim gconf-Daemon registriert und bei der Deinstallation wieder abgemeldet werden. Aufgrund der Reihenfolge der Skripte besteht dieser Prozess aus vier Schritten.
Die Deaktivierung der GConf-Installation während der Paketerstellung kann wie folgt geschehen:
%install
export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1
make install DESTDIR=$RPM_BUILD_ROOT
...
Die Umgebungsvariable GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL unterdrückt die Installation des Schemas während des Paketbaus. Alternativ kann für einige Pakete ein Konfigurationsflag übergeben werden:
%build
%configure --disable-schemas
...
Leider funktioniert dieser Konfigurationsschalter nur, wenn der Upstream-Paketierer seine Makefile.am-Datei entsprechend angepasst hat. Ist die Makefile.am-Datei nicht konfiguriert, hat dieser Schalter keine Auswirkung, und Sie müssen stattdessen die Umgebungsvariable verwenden.
Und hier der zweite Teil:
BuildRequires: GConf2
Requires(pre): GConf2
Requires(post): GConf2
Requires(preun): GConf2
...
%pre
%gconf_schema_prepare schema1 schema2
%gconf_schema_obsolete schema3
In diesem Abschnitt deinstallieren wir alte Schemas während der Aktualisierung mit Hilfe eines oder zweier Makros.
%gconf_schema_prepare wird für alle vorhandenen GConf-Schemas verwendet. Es kümmert sich um die Deinstallation vorheriger Versionen von Schemas, die dieses Paket aktuell installiert. Es erwartet eine durch Leerraum getrennte Liste der Schemanamen ohne Pfad oder Suffix, die das Paket installiert. Beachten Sie, dass dieses Makro im Hintergrund mit dem Scriptlet %post zusammenarbeitet, um GConf-Schemas nur dann zu verarbeiten, wenn Änderungen vorgenommen wurden.
%gconf_schema_obsolete wird für Schemas verwendet, die dieses Paket zuvor bereitgestellt hat, aber nun nicht mehr. Es deregistriert das alte Schema, sofern es auf dem System vorhanden ist. Ist das alte Schema nicht vorhanden, geschieht nichts. Dieses Makro erwartet eine durch Leerraum getrennte Liste der zu deinstallierenden Schemas. Ein Anwendungsbeispiel wäre eine Namensänderung des Pakets. Wenn das alte Schema foo.schemas heißt und das neue Schema foobar.schemas hieß, verwenden Sie Folgendes:
%gconf_schema_prepare foobar
%gconf_schema_obsolete foo
Im nächsten Abschnitt werden die neu installierten Schemas verarbeitet:
%post
%gconf_schema_upgrade schema1 schema2
%gconf_schema_upgrade erwartet, genau wie %gconf_schema_prepare, eine durch Leerraum getrennte Liste der Schemas, die das Paket aktuell installiert. Im Hintergrund führt es die eigentliche Arbeit aus, nämlich die neue Version des Schemas zu registrieren und die alte Version abzumelden.
Der letzte Abschnitt dient der Abmeldung von Schemas, wenn ein Paket entfernt wird:
%preun
%gconf_schema_remove schema1 schema2
Beim Aktualisieren eines Pakets ruft rpm das Scriptlet %pre auf, um die Schemas zu registrieren und abzumelden. Bei der Deinstallation eines Pakets wird das Scriptlet %preun verwendet. %gconf_schema_remove nimmt die Liste der aktuell vom Paket bereitgestellten Schemas entgegen und entfernt sie.
Neuerstellungen aufgrund von Änderungen an Makros
Wenn sich Makros ändern, müssen die Pakete, die diese verwenden, neu erstellt werden, um die Änderungen zu übernehmen. Mit diesem repoquery-Befehl lässt sich das Schema einschließlich der neu zu kompilierenden Pakete ermitteln:
repoquery --whatprovides "/etc/gconf/schemas/*" |sort |uniq |wc -l
Want to help? Learn how to contribute to Fedora Docs ›