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.

Warnung
SuSEconfig läuft aus und sollte nicht mehr genutzt werden. Sie sollten Lösungen finden, die ohne die Notwendigkeit auskommen, dass nach der Installation eines Pakets mit rpm ein Aufruf von SuSEconfig nötig ist.


6.1. Das Werkzeug

SuSEconfig ist ein Werkzeug zur Aktualisierung der Systemkonfiguration.

Übersicht:

SuSEconfig [-force] [-nomodule] [-nonewpackage] [-norestarts] [-quick] [-verbose] [-moduleModul]

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.

-moduleModul — 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:

  1. SuSEconfig sollte 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”.
  2. 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
  1. 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, SuSEconfig zu 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 –norestarts auf “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 -nonewpackage auf “false” gesetzt.
  • FASTRUN — wird genutzt, um Aktionen zu überspringen, die nicht unbedingt sofort ausgeführt werden müssen. Wird durch die Optionen -quick und -module auf “true” gesetzt.
  • FORCE_REPLACE — ungenutzt. Wird von der Option -force auf “true” gesetzt.
  • VERBOSE — wird genutzt, um auf Anfrage mehr Nachrichten auszugeben. Wird durch die Option -verbose auf “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_moveKonfigurationsdatei

Die Funktion check_md5_and_move hilft dabei, Änderungen von Nutzern unangetastet zu lassen. Sie führt dabei die folgenden Aktionen durch:

  1. Sie prüft auf Konfigurationsdatei.SuSEconfig, welche die von SuSEconfig vorgeschlagenen Änderungen enthält. Der Dateiname besteht aus dem der angegebenen Konfigurationsdatei der Endung .SuSEconfig.
  2. Sie prüft die MD5-Summe der Konfigurationsdatei. Die MD5-Summe wird in /var/adm/SuSEconfig/md5/Konfigurationsdatei gespeichert.
  3. Falls die Prüfsumme die gleiche oder nicht vorhanden ist, ersetzt sie die originale Konfigurationsdatei durch die vorgeschlagene Konfigurationsdatei.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_writeVerz

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_spaceVerz

Die Funktion my_test_for_space versucht, im Verzeichnis dir eine 50kB große Testdatei anzulegen. Bei Erfolg liefert sie “0” zurück.




Weiter