Wenn Sie Solaris Live Upgrade verwenden und eine neue Boot-Umgebung erstellen, befolgen Sie die folgenden Richtlinien, um Probleme zu vermeiden.
Package-Prozedurskripte müssen unabhängig von der aktuellen Betriebssystemumgebung sein. Prozedurskripte definieren Aktionen, die an bestimmten Punkten während der Installation bzw. der Deinstallation von Packages auftreten. Es gibt vier Prozedurskripte, die mit diesen vordefinierten Namen erstellt werden können: preinstall, postinstall, preremove und postremove. Package-Prozedurskripte müssen von der zurzeit aktiven Betriebssystemumgebung unabhängig sein, da mit Solaris Live Upgrade zu einer alternative Boot-Umgebung gewechselt werden kann.
Diese Skripte dürfen keine Prozesse starten oder stoppen und dürfen nicht von der Ausgabe von Befehlen wie ps oder truss abhängig sein, die vom Betriebssystem abhängen und Informationen über das zurzeit laufende System zurückgeben.
In Prozedurskripten können andere Standard-UNIX-Befehle wie expr, cp und ls sowie weitere Befehle verwendet werden, die das Schreiben von Skripten erleichtern. Das aktuelle alternative Root-Dateisystem (/) darf nur insoweit modifiziert werden, als dies gemäß der im Abschnitt "Anforderungen bezüglich des alternativen Root-Dateisystems (/) für das benutzerdefinierte JumpStart-Programm und Solaris Live Upgrade" erläuterten Regeln zulässig ist.
Alle Skripte müssen in der Bourne-Shell (/bin/sh ) geschrieben werden. Die Bourne-Shell wird beim Ausführen von Prozedurskripten vom Befehl pkgadd als Interpreter verwendet.
Package-Prozedurskripte dürfen keine Befehle aufrufen, die in Releases vor Release 2.6 nicht vorhanden sind. So dürfen Package-Prozedurskripte zum Beispiel nicht den Befehl pgrep aufrufen. Seit dem Release 2.6 wurden viele Befehle um weitere Funktionen erweitert. Package-Prozedurskripte dürfen keine Befehlsoptionen verwenden, die im Release 2.6 nicht vorhanden sind. Die Option -f ist zum Beispiel eine neue Option für den Befehl umount.
Alle Packages müssen mit pkgchk validiert werden. Nachdem Sie ein Package erstellt haben, müssen Sie es vor der Installation mit dem folgenden Befehl überprüfen:
# pkgchk -d Verz_name Pkg-Name |
Verz_name |
Gibt den Namen des Verzeichnisses an, in dem sich das Package befindet. |
Pkg-Name |
Gibt den Namen des Package an. |
Wenn ein Package zum Beispiel in /export/SUNWvxvm gespeichert ist, setzen Sie den folgenden Befehl ab:
# pkgchk -d /export SUNWvxvm |
Es sollten keine Fehler angezeigt werden.
Nachdem Sie ein Package erstellt haben, müssen Sie testen, indem Sie es mit der Option -R Verz_name des Befehls pkgadd in einem alternativen Root-Dateisystem (/) installieren. Danach muss das Package wie im folgenden Beispiel mit dem Befehl pkgchk überprüft werden.
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
Es sollten keine Fehler angezeigt werden.
Außerdem dürfen Packages keine Befehle ausführen, die vom Package selbst geliefert werden. Dadurch wird die Kompatibilität gewährleistet und sichergestellt, dass keine Befehle ausgeführt werden, für die gemeinsam genutzte Bibliotheken benötigt werden, die noch nicht installiert sind.
Ob die Anforderungen bezüglich des Erstellens, Modifizierens und Löschens von Dateien erfüllt sind, können Sie mit einer Vielzahl von Befehlen prüfen. Mit dem Befehl dircmp und fssnap können Sie zum Beispiel verifizieren, ob sich Packages wie gewünscht verhalten. Mit dem Befehl ps können Sie außerdem die Konformität von Dämonen testen, indem Sie sicherstellen, dass das Package keine Dämonen stoppt oder startet. Mit dem Befehl truss und pkgadd können Sie testen, ob die Konformität der Package-Installation zur Laufzeit gegeben ist, doch dies funktioniert möglicherweise nicht in allen Situationen. Im folgenden Beispiel entfernt der Befehl truss alle schreibgeschützten Nicht-$BASEDIR-Zugriffe und zeigt nur die nicht schreibgeschützten Zugriffe auf Pfade an, die nicht im angegebenen alternativen Root-Dateisystem (/) liegen.
# BASEDIR=/a; export BASEDIR # truss -t open /usr/sbin/pkgadd -R ${BASEDIR} SUNWvxvm \ 2>&1> /dev/null | grep -v O_RDONLY | grep -v \ 'open("'${BASEDIR} |
Detaillierte Informationen zu den im diesem Abschnitt erwähnten Befehlen finden Sie in den Manpages dircmp(1), fssnap(1M), ps(1) und truss(1).