Paketbau/SUSE-Paketkonventionen/SUSEConfig
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
6. SuSEconfig (auslaufend)
Dieses Kapitel beschreibt ein SUSE-spezifisches Werkzeug: SuSEconfig. Es wird erklärt, wofür dieses Werkzeug gedacht ist, wie ein neues Modul erstellt wird, und welche Umgebungsvariablen und vordefinierten Funktionen in den Modulen zur Verfügung stehen.
|
6.1. Das Werkzeug
SuSEconfig ist ein Werkzeug zur Aktualisierung der Systemkonfiguration.
Übersicht:
SuSEconfig [-force] [-nomodule] [-nonewpackage] [-norestarts] [-quick] [-verbose] [-module Modul]
Das Konfigurationswerkzeug SuSEconfig wird genutzt, um Konfigurationen zu warten, die von vielen Paketen abhängen. In der Vergangenheit wurde es auch genutzt, um native Konfigurationsdateien anhand der in /etc/sysconfig gesetzten Variablen zu aktualisieren, was allerdings nicht mehr erlaubt ist. Weiter unten erhalten Sie eine detailliertere Beschreibung.
Das Werkzeug basiert auf Shell-Skripten. Es besteht aus einer Hülle (engl. wrapper) /sbin/SuSEconfig und unter /sbin/conf.d installierten Modulen. Des weiteren stellt die Datei /lib/YaST/SuSEconfig.functions einige Funktionen bereit, die von mehreren Modulen genutzt werden.
Die einzige Aufgabe von SuSEconfig ist aktuell die Wartung von Konfigurationen, die aktualisiert werden müssen, wenn eins von mehreren damit verbundenen Paketen geändert (installiert, aktualisiert, entfernt) wird. So muss beispielsweise die Konfiguration der X11-Schriftarten aktualisiert werden, wenn irgendein Paket, dass Schriftarten enthält, geändert wird. Solche Probleme können mit RPM-Skripten wie triggers, %post und %preun gelöst werden. Die Verwendung von SuSEconfig hat den Vorteil, dass es unabhängiger von Paketen ist. Der Nachteil ist, dass SuSEconfig oftmals auch dann gestartet wird, wenn es gar nicht notwendig ist (siehe unten).
Es gibt noch weitere Alternativen zur Konfiguration von X11-Schriftarten. Eine Lösung wäre, in %post und %postun von jedem Paket mit X11-Schriftarten komplexen Code zu verwenden. Eine bessere Lösung als diese ist, diesen Code in ein Extraskript zu packen, welches immer installiert würde und dann von %post und %postun aus aufgerufen würde. Die in openSUSE und SUSE Linux verwendete Lösung ähnelt der zweiten, nur dass dieses Skript auch von SuSEconfig in Form des Moduls fonts aufgerufen wird. Der Vorteil dabei ist, dass der Nutzer externe (nicht-SUSE) Pakete mit X11-Schriftarten oder auch die Schriftarten direkt so installieren kann. Danach reicht es, SuSEconfig aufzurufen und die X11-Schriftartenkonfiguration wird aktualisiert.
Eine weitere Aufgabe von SuSEconfig war es, Informationen aus /etc/sysconfig in über das System verteilte native Konfigurationsdateien von Anwendungen zu verteilen. Ein einzelnes SuSEconfig-Modul war in der Regel für eine Anwendung und ihre nativen Konfigurationsdateien verantwortlich. So aktualisierte das Modul apache beispielsweise die native Konfiguration von Apache. Dieser Ansatz brachte mehr Nach- als Vorteile, weshalb /etc/sysconfig und SuSEconfig nun nicht mehr dafür genutzt werden müssen.
Die grundlegende Idee ist, nach einer Änderung die zugehörigen SuSEconfig-Module laufen zu lassen, wobei ein fortgeschrittener Nutzer über die Option –module auch nur bestimmte Module starten kann. Da es in der Regel schwierig zu entscheiden ist, welche Module abgearbeitet werden sollen, wird empfohlen, nach jeder Änderung unter /etc/sysconfig oder nach einer Paketänderung, SuSEconfig (alle Module) auszuführen. YaST macht dies automatisch. Der Nutzer muss es selber ausführen, wenn er eine Änderungen manuell, beispielsweise direkt mit rpm, vorgenommen hat.
SuSEconfig muss vom Nutzer root ausgeführt werden.
Optionen:
-force — nicht genutzt.
-nomodule — führt nur den wrapper ohne Module aus.
-nonewpackage — überspringt Aktionen die nur notwendig sind, wenn ein Paket neu installiert wurde.
-norestarts — nicht genutzt.
-quick — führt nur die wichtigsten Module aus.
-verbose — mehr Rückmeldungen.
-module Modul — führt nur ein angegebenes Modul aus. Standardmäßig werden alle Module verarbeitet.
6.2. Module
Ein SuSEconfig-Modul ist ein als /sbin/conf.d/SuSEconfig.module_name installiertes Shell-Skript. Die Datei beginnt dabei mit den gewöhnlichen Kopfdaten:
#!/bin/sh
oder
#!/bin/bash
Dann werden normalerweise die benötigten Konfigurationsdateien aus /etc/sysconfig eigenbunden. Dieses Beispiel entstammt dem Modul postfix:
test -s $r/etc/sysconfig/postfix || {
echo "No $r/etc/sysconfig/postfix found."
exit 1
}
. $r/etc/sysconfig/postfix
Danach werden, falls benötigt, vordefinierte Funktionen eingebunden. Weitere Details dazu finden Sie in Kapitel 6.4, “Funktionen”.
Zum Abschluss folgt dann der Code, der die Systemkonfiguration aktualisiert. Für diesen gibt es keine Einschränkungen, jedoch ein ein paar Ratschläge:
-
SuSEconfigsollte von Nutzern vorgenommene Änderungen nicht ersetzen; für diesen Zweck kann die Funktion check_md5_and_mode genutzt werden. Weitere Details dazu erhalten Sie in Kapitel 6.4.1, “check_md5_and_move”. - Das Modul sollte prüfen, ob eine zeitaufwändige Aktion überhaupt notwendig ist. So können bspw. MD5-Summen und Zeitstempel geprüft werden. Das Modul kann auch dann gestartet werden, wenn es nicht wirklich benötigt wird.
Dieses Beispiel entstammt dem Modul icu:
export ICU_DATA=/usr/share/icu/2.6.2 if test ! -f $ICU_DATA/cnvalias.dat -o \ /etc/icu/convrtrs.txt -nt $ICU_DATA/cnvalias.dat then echo "Compiling converters and aliases list from /etc/icu/convrtrs.txt" /usr/bin/gencnval /etc/icu/convrtrs.txt fi
- Falls eine Aktion nur nötig ist, falls ein neues Paket installiert wurde, sollte sie nur ausgeführt werden, wenn
CHECK_NEWPACKAGE = “true”ist. Dies hilft auch dabei,SuSEconfigzu beschleunigen.
Dieses Beispiel entstammt dem Modul perl:
test "$CHECK_NEWPACKAGE" = false && exit 0
Veraltete Fähigkeiten:
Einige ältere SuSEconfig-Module enthalten noch die folgenden überflüssigen Tests. Diese befinden sich im Wrapper /sbin/SuSEconfig und müssen nicht mehr in den Modulen sein:
# check if we are started as root
# only one of UID and USER must be set correctly
#
if test "$UID" != 0 -a "$USER" != root; then
echo "You must be root to start $0."
exit 1
fi
# check if SuSEconfig is enabled
test -f $ROOT/etc/sysconfig/suseconfig || {
echo "No /etc/sysconfig/suseconfig found."
exit 1
}
. $ROOT/etc/sysconfig/suseconfig
if test -n "$ENABLE_SUSECONFIG" -a
"$ENABLE_SUSECONFIG" = "no" ; then
echo "SuSEconfig is disabled in $ROOT/etc/sysconfig/suseconfig. Exit..."
exit 0
fi
6.3. Variablen
Diese Variablen werden durch SuSEconfig-Kommandozeilenoptionen gesetzt und werden in die SuSEconfig-Module exportiert.
-
DO_RESTARTS— ungenutzt. Wird von der Option–norestartsauf“false”gesetzt. -
CHECK_NEWPACKAGE— wird genutzt um Aktionen zu überspringen, die nur im Fall eines neu installierten Pakets nötig sind. Wird von durch die Option-nonewpackageauf“false”gesetzt. -
FASTRUN— wird genutzt, um Aktionen zu überspringen, die nicht unbedingt sofort ausgeführt werden müssen. Wird durch die Optionen-quickund-moduleauf“true”gesetzt. -
FORCE_REPLACE— ungenutzt. Wird von der Option-forceauf“true”gesetzt. -
VERBOSE— wird genutzt, um auf Anfrage mehr Nachrichten auszugeben. Wird durch die Option-verboseauf“true”gesetzt.
6.4. Funktionen
Die folgenden Funktionen werden von verschiedenen SuSEconfig-Modulen genutzt. Sie sind in der Datei /lib/YaST/SuSEconfig.functions implementiert und können folgendermaßen in ein Modul eingebunden werden:
test -f /lib/YaST/SuSEconfig.functions || {
echo "ERROR - can not find /lib/YaST/SuSEconfig.functions!!"
echo "This should not happen. Exit..."
exit 1
}
. /lib/YaST/SuSEconfig.functions
6.4.1. check_md5_and_move
Diese Funktion prüft eine Datei daraufhin, ob das Original von einem Nutzer verändert wurde und ersetzt sie, falls dem nicht so ist, durch eine neue Version.
Übersicht:
check_md5_and_move Konfigurationsdatei
Die Funktion check_md5_and_move hilft dabei, Änderungen von Nutzern unangetastet zu lassen. Sie führt dabei die folgenden Aktionen durch:
- Sie prüft auf
Konfigurationsdatei.SuSEconfig, welche die vonSuSEconfigvorgeschlagenen Änderungen enthält. Der Dateiname besteht aus dem der angegebenenKonfigurationsdateider Endung.SuSEconfig. - Sie prüft die MD5-Summe der
Konfigurationsdatei. Die MD5-Summe wird in/var/adm/SuSEconfig/md5/Konfigurationsdateigespeichert. - Falls die Prüfsumme die gleiche oder nicht vorhanden ist, ersetzt sie die originale
Konfigurationsdateidurch die vorgeschlageneKonfigurationsdatei.SuSEconfig. Danach wird die MD5-Prüfsumme aktualisiert. Andernfalls wird die vorhandene Datei beibehalten und die folgende Nachricht wird ausgegeben:
ATTENTION: You have modified Konfigurationsdatei. Leaving it untouched... You can find my version in Konfigurationsdatei.SuSEconfig...
Diese Beispiele entstammen dem Modul guile:
test -f /lib/YaST/SuSEconfig.functions || {
echo "ERROR - can not find /lib/YaST/SuSEconfig.functions!!"
echo "This should not happen. Exit..."
exit 1
}
. /lib/YaST/SuSEconfig.functions
[...]
mv /usr/share/guile/1.6/slibcat \
/usr/share/guile/1.6/slibcat.old_version
guile -c "(use-modules (ice-9 slib)) (require 'new-catalog)"
mv /usr/share/guile/1.6/slibcat \
/usr/share/guile/1.6/slibcat.SuSEconfig
mv /usr/share/guile/1.6/slibcat.old_version \
/usr/share/guile/1.6/slibcat
check_md5_and_move /usr/share/guile/1.6/slibcat
Dieser Code bindet die vordefinierten Funktionen ein. Dann bereitet er eine neue Version von /usr/share/guile/1.6/slibcat als /usr/share/guile/1.6/slibcat.SuSEconfig vor. Schlussendlich wird die Funktion check_md5_and_move aufgerufen, die die originale /usr/share/guile/1.6/slibcat nur ersetzt, wenn ein Nutzer keine Änderungen an ihr durchgeführt hat.
6.4.2. my_test_write
Diese Funktion stellt einen einfachen Test bereit, mit dem sich prüfen lässt, ob ein Verzeichnis beschreibbar ist.
Übersicht:
my_test_write Verz
Die Funktion my_test_write prüft, ob das Verzeichnis dir beschreibbar ist. Bei Erfolg liefert sie “0” zurück.
6.4.3. my_test_for_space
Diese Funktion bietet einen einfachen Test an, mit dem sich prüfen lässt, ob in einem Verzeichnis noch genügend freier Speicherplatz vorhanden ist.
Übersicht:
my_test_for_space Verz
Die Funktion my_test_for_space versucht, im Verzeichnis dir eine 50kB große Testdatei anzulegen. Bei Erfolg liefert sie “0” zurück.

