Solaris 10 5/09 Installationshandbuch: Benutzerdefinierte JumpStart-Installation und komplexe Installationsszenarien

Anhang B Zusätzliche SVR4-Packaging-Anforderungen (Referenz)

Dieser Anhang richtet sich an Systemadministratoren, die mit dem benutzerdefinierten JumpStart-Programm oder Solaris Live Upgrade Packages installieren bzw. entfernen müssen, insbesondere Packages von Drittherstellern. Die Beachtung dieser Packaging-Anforderungen bewirkt:

Dieses Kapitel enthält die folgenden Abschnitte:

Verhindern einer Modifikation des aktuellen BS

Wenn Sie die in diesem Abschnitt beschriebenen Anforderungen erfüllen, bleibt das aktuell ausgeführte BS unverändert.

Verwenden absoluter Pfade

Für eine erfolgreiche Installation eines Betriebssystems müssen die Packages alternative Root-Dateisysteme (/) wie z. B. eine inaktive Solaris Live Upgrade-Boot-Umgebung erkennen und fehlerfrei behandeln.

Packages können in der Datei pkgmap (Package-Map) absolute Pfade enthalten. Sind die Dateien vorhanden, werden sie relativ zu dem Verzeichnis geschrieben, das mit der Option -R des Befehls pkgadd angegeben wird. Packages, die absolute und relative (verschiebbare) Pfade enthalten, können ebenfalls in einem alternativen Root-Dateisystem (/) installiert werden. $PKG_INSTALL_ROOT wird absoluten und verschiebbaren Dateien vorangestellt, so dass alle Pfade bei der Installation mit pkgadd korrekt aufgelöst werden.

Verwenden des Befehls pkgadd -R

Packages, die mit dem Befehl pkgadd und der Option -R installiert bzw. mit dem Befehl pkgrm und der Option -R entfernt werden, dürfen das zurzeit laufende System nicht modifizieren. Dieses Leistungsmerkmal kommt in der benutzerdefinierten JumpStart-Installation, in Solaris Live Upgrade, nicht-globalen Zonen und Diskless-Clients zum Einsatz.

Prozedurskripten, die in den mit dem Befehl pkgadd und der Option -R installierten bzw. mit dem Befehl pkgrm und der Option -R entfernten Packages enthalten sind, dürfen das zurzeit laufende System nicht modifizieren. Von Ihnen zur Verfügung gestellte Installationsskripten müssen alle Verzeichnisse und Dateien mit vorangestellter $PKG_INSTALL_ROOT-Variable referenzieren. Das Package muss alle Verzeichnisse und Dateien mit dem vorangestellten $PKG_INSTALL_ROOT-Präfix schreiben. Das Package darf keine Verzeichnisse ohne $PKG_INSTALL_ROOT-Präfix entfernen.

Tabelle B–1 zeigt Beispiele der Skriptsyntax.

Tabelle B–1 Beispiele für Installationskriptsyntax

Skripttyp 

Richtige Syntax 

Falsche Syntax 

Auszüge aus “if”-Anweisungen (Borne-Shell) 

if [ -f ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf ] ; then
if [ -f /etc/myproduct.conf ] ; \
 then

Entfernen einer Datei 

/bin/rm -f ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf
/bin/rm -f /etc/myproduct.conf 

Ändern einer Datei 

echo "test=no" > ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf
echo "test=no" > \
/etc/myproduct.conf

Unterschiede zwischen $PKG_INSTALL_ROOT und $BASEDIR - Übersicht

$PKG_INSTALL_ROOT ist der Speicherort des Root-Dateisystems (/) auf dem Rechner, zu dem Sie das Package hinzufügen. Der Speicherort wird auf das -R-Argument des Befehls pkgadd gesetzt. So wird beispielsweise beim Aufruf des folgenden Befehls $PKG_INSTALL_ROOT während der Package-Installation zu /a.


# pkgadd -R /a SUNWvxvm

$BASEDIR verweist auf das verschiebbare Basisverzeichnis, in dem verschiebbare Package-Objekte installiert werden. Hier werden nur verschiebbare Objekte installiert. Nicht verschiebbare Objekte (Objekte mit absoluten Pfaden in der Datei pkgmap) werden immer relativ zur inaktiven Boot-Umgebung installiert, nicht jedoch relativ zum aktuellen $BASEDIR. Wenn ein Package keine verschiebbaren Objekte aufweist, wird es als absolutes bzw. nicht verschiebbares Package bezeichnet. $BASEDIR ist nicht definiert und steht Package-Prozedurskripten nicht zur Verfügung.

Angenommen, die Datei pkgmap eines Packages enthält zwei Einträge:


1 f none sbin/ls 0555 root sys 3541 12322 1002918510
1 f none /sbin/ls2 0555 root sys 3541 12322 2342423332

In der Datei pkginfo ist $BASEDIR definiert:


BASEDIR=/opt

Bei Installation dieses Packages mit dem folgenden Befehl wird ls in /a/opt/sbin/ls, aber ls2 als /a/sbin/ls2 installiert.


# pkgadd -R /a SUNWtest

Richtlinien zum Schreiben von Skripten

Package-Prozedurskripten müssen vom aktuell ausgeführten BS unabhängig sein, damit eine Änderung des BS verhindert werden kann. Prozedurskripten definieren Aktionen, die an bestimmten Punkten während der Installation bzw. der Deinstallation von Packages auftreten. Mit diesen vordefinierten Namen können vier Prozedurskripten erstellt werden: preinstall, postinstall, preremove und postremove.

Tabelle B–2 Richtlinien zum Erstellen von Skripten

Richtlinien 

Betrifft Solaris Live Upgrade 

Betrifft nicht-globale Zonen 

Skripten 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.

Skripten 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 Skripten können andere Standard-UNIX-Befehle wie expr, cp und ls sowie weitere Befehle verwendet werden, die das Schreiben von Skripten erleichtern.

Packages müssen auf allen unterstützten Solaris-Versionen lauffähig sein. Daher müssen alle Befehle, die von einem Skript aufgerufen werden, in allen unterstützten Versionen zur Verfügung stehen. Befehle, die in späteren Versionen als Solaris 8 eingeführt oder entfernt wurden, dürfen also nicht verwendet werden.  

Um herauszufinden, ob ein bestimmter Befehl bzw. eine Option in Solaris 8, 9 oder 10 unterstützt wird, können Sie im jeweiligen Solaris Reference Manual AnswerBook dieser Version auf http://docs.sun.com nachschlagen.

 

Erhalten der Diskless-Client-Kompatibilität

Packages dürfen keine Befehle ausführen, die vom Package selbst geliefert werden. Dadurch wird die Diskless-Client-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.

Überprüfen von Packages

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 dir_name pkg_name
Verz_name

Gibt den Namen des Verzeichnisses an, in dem sich das Package befindet

Pkg-Name

Gibt den Namen des Packages an


Beispiel B–1 Testen von Packages

Nachdem Sie ein Package erstellt haben, müssen Sie es testen, indem Sie es mit der Option R -Verz_name des Befehls pkgadd in einem alternativen Root-Dateisystem (/) installieren. Nach der Installation des Packages ist es wie in diesem Beispiel mit dem Befehl pkgchk auf Fehler zu überprüfen.


# pkgadd -d . -R /a SUNWvxvm
# pkgchk -R /a SUNWvxvm

Es sollten keine Fehler angezeigt werden.



Beispiel B–2 Testen eines Packages in /export/SUNWvxvm

Wenn ein Package in /export/SUNWvxvm gespeichert ist, führen Sie den folgenden Befehl aus:


# pkgchk -d /export SUNWvxvm

Es sollten keine Fehler angezeigt werden.


Beim Erstellen, Bearbeiten und Löschen von Dateien können andere Befehle das Package überprüfen. Die folgenden Befehle sind ein Beispiel hierfür.


# TEMPDIR=/a; export TEMPDIR
# truss -t open /usr/sbin/pkgadd -R ${TEMPDIR} SUNWvxvm \
2>&1 > /dev/null | grep -v O_RDONLY | grep -v \
'open("'${TEMPDIR}

Verhindern der Benutzerinteraktion bei Installation oder Upgrade

Bei der Verwendung der folgenden Solaris-Standarddienstprogramme müssen Packages hinzugefügt oder entfernt werden, ohne dass der Benutzer zu Eingaben aufgefordert wird:

Um zu testen, dass sich ein Package ohne Benutzereingriffe installieren lässt, können Sie mit dem Befehl pkgadd und der Option - a eine neue Administrationsdatei einrichten. Die Option -a definiert eine Installationsadministrationsdatei, die anstelle der Standardadministrationsdatei verwendet wird. Bei Verwendung der Standarddatei wird der Benutzer möglicherweise zur Eingabe weiterer Informationen aufgefordert. Sie können eine Administrationsdatei erstellen, in der pkgadd angewiesen wird, diese Abfragen auszulassen und das Package ohne Bestätigung seitens des Benutzers zu installieren. Genaueres hierzu entnehmen Sie bitte der Manpage admin(4) oder pkgadd(1M).

An den folgenden Beispielen wird deutlich, wie der Befehl pkgadd die Administrationsdatei verwendet.


Beispiel B–3 Installations-Administrationsdatei

Sie sehen hier ein Beispiel für eine Installations-Administrationsdatei, die im Zusammenhang mit dem Dienstprogramm pkgadd nur sehr wenig Benutzerinteraktion erfordert. Sofern das Package nicht mehr Festplattenspeicher benötigt, als auf dem System verfügbar ist, greift pkgadd auf diese Datei zu und installiert das Package, ohne den Benutzer zur Eingabe von Informationen aufzufordern.

mail=
instance=overwrite
partial=nocheck
runlevel=nocheck
idepend=nocheck
space=ask
setuid=nocheck
confiict=nocheck
action=nocheck
basedir=default

Einstellen von Package-Parametern für Zonen

Pakete enthalten Parameter, mit denen festgelegt wird, wie ihr Inhalt verteilt wird und in einem System mit installierten nicht-globalen Zonen sichtbar gemacht wird. Die Paketparameter SUNW_PKG_ALLZONES, SUNW_PKG_HOLLOW und SUNW_PKG_THISZONE definieren die Eigenschaften von Paketen auf einem System mit installierten Zonen. Diese Parameter sind so einzustellen, dass Packages auf einem System mit nicht-globalen Zonen verwaltet werden können.

In der folgenden Tabelle sind vier gültige Kombinationen für das Einstellen von Paketparameter aufgeführt. In dieser Tabelle nicht aufgeführte Kombinationen sind unzulässig und haben zur Folge, das Packages nicht ordnungsgemäß installiert werden.


Hinweis –

Achten Sie darauf, alle drei Paketparameter einzustellen. Sie können alle drei Paketparameter frei lassen. Die Package-Tools interpretieren leer gelassene Package-Parameter für Zonen als Wert „false“; es wird jedoch davon abgeraten, Package-Parameter nicht einzustellen. Durch das Einstellen aller drei Paketparameter geben Sie das exakte Verhalten der Paket-Tools beim Installieren oder Deinstallieren eines Pakets vor.


Tabelle B–3 Zulässige Einstellungen für Package-Parameter auf Systemen mit Zonen

SUNW_PKG_ALLZONES Einstellung

SUNW_PKG_HOLLOW Einstellung

SUNW_PKG_THISZONE Einstellung

Paketbeschreibung 

false 

false 

false 

Dies ist die Standardeinstellung für Pakete, die nicht für alle Zonen-Paketparameter Werte angeben. 

Ein Paket mit diesen Einstellungen kann entweder in der globalen oder in einer nicht-globalen Zone installiert werden.  

  • Wenn der Befehl pkgadd in der globalen Zone ausgeführt wird, erfolgt die Installation des Pakets in der globalen Zone und in allen nicht-globalen Zonen.

  • Wenn der Befehl pkgadd in einer nicht-globalen Zone ausgeführt wird, erfolgt die Installation des Pakets nur in der nicht-globalen Zone.

In beiden Fällen ist der gesamte Inhalt des Pakets in allen Zonen sichtbar, in denen das Paket installiert wurde. 

false 

false 

true 

Ein Paket mit diesen Einstellungen kann entweder in der globalen oder in einer nicht-globalen Zone installiert werden. Wenn nach der Installation neue nicht-globale Zonen erstellt werden, wird das Paket nicht auf diese neuen nicht-globalen Zonen installiert. 

  • Wenn der Befehl pkgadd in der globalen Zone ausgeführt wird, erfolgt die Installation des Pakets nur in der globalen Zone.

  • Wenn der Befehl pkgadd in einer nicht-globalen Zone ausgeführt wird, erfolgt die Installation des Pakets nur in der nicht-globalen Zone.

In beiden Fällen ist der gesamte Inhalt des Pakets in der Zone sichtbar, in der das Paket installiert wurde. 

true 

false 

false 

Ein Paket mit diesen Einstellungen kann nur in der globalen Zone installiert werden. Wenn der Befehl pkgadd ausgeführt wird, erfolgt die Installation des Pakets in der globalen Zone und in allen nicht-globalen Zonen. Der gesamte Inhalt des Pakets ist in allen Zonen sichtbar.


Hinweis –

Jeder Versuch, das Paket in einer nicht-globalen Zone zu installieren, schlägt fehl.


true 

true 

false 

Ein Paket mit diesen Einstellungen kann nur vom globalen Administrator und nur in der globalen Zone installiert werden. Wenn der Befehl pkgadd ausgeführt wird, erfolgt die Installation des Paketinhalts vollständig in der globalen Zone. Wenn die Paketparameter eines Pakets auf diese Werte gesetzt sind, wird der Paketinhalt nicht an eine nicht-globale Zone geliefert. In den nicht-globalen Zonen werden lediglich die Paket-Installationsinformationen installiert, die für die Anzeige des Pakets erforderlich sind. Dies ermöglicht die Installation anderer Pakete, deren Installation von diesem Paket abhängt. Weitere Informationen zu diesen sog. "hohlen" Packages finden Sie in Kapitel 24, Allgemeine Informationen zu den Paketen und Patches auf einem Solaris-System mit installierten Zonen in Systemverwaltungshandbuch: Solaris Container – Ressourcenverwaltung und Solaris Zones

Für die Paketabhängigkeitsprüfung scheint das Paket in allen Zonen installiert zu sein. 

  • In der globalen Zone ist der gesamte Inhalt des Pakets sichtbar.

  • In nicht-globalen Whole Root Zones ist der gesamte Inhalt des Pakets nicht sichtbar.

  • Wenn eine nicht-globale Zone ein Dateisystem von der globalen Zone übernimmt, ist ein in diesem Dateisystem installiertes Paket auch in einer nicht-globalen Zone sichtbar. Alle anderen Dateien, die aus dem Paket stammen, sind innerhalb der nicht-globalen Zone nicht sichtbar.

    Beispielsweise kann eine nicht-globale Sparse Root Zone bestimmte Verzeichnisse gemeinsam mit der globalen Zone nutzen. Diese Verzeichnisse sind schreibgeschützt. Nicht-globale Sparse Root Zones nutzen unter anderem das Dateisystem /platform gemeinsam mit der globalen Zone. Ein weiteres Beispiel sind Pakete mit Dateien, die nur für die Boot-Hardware relevant sind.


Hinweis –

Jeder Versuch, das Paket in einer nicht-globalen Zone zu installieren, schlägt fehl.


Beschreibung 

Weitere Informationen 

Ausführliche Informationen zu Packages und Zonen 

Kapitel 24, Allgemeine Informationen zu den Paketen und Patches auf einem Solaris-System mit installierten Zonen in Systemverwaltungshandbuch: Solaris Container – Ressourcenverwaltung und Solaris Zones

Übersicht über kleine und ganze root-Zonen 

Kapitel 16, Einführung in Solaris Zones in Systemverwaltungshandbuch: Solaris Container – Ressourcenverwaltung und Solaris Zones

Informationen zu Package-Eigenschaften und Parametern 

pkginfo(4)

Informationen zum Anzeigen von Werten von Package-Parametern 

pkgparam(1)

Hintergrundinformationen

An den folgenden Stellen finden Sie Hintergrundinformationen zu Packaging-Anforderungen und spezifischer Befehlssyntax.

Für spezifischere Informationen zu Packaging-Anforderungen sowie Begriffsdefinitionen siehe 

Kapitel 6, Advanced Techniques for Creating Packages in Application Packaging Developer’s Guide

Für grundlegende Informationen zum Hinzufügen und Entfernen von Packages und zur Installations-Administrationsdatei siehe 

Kapitel 19, Managing Software (Overview) in System Administration Guide: Basic Administration

Ausführliche Informationen zu bestimmten, in diesem Anhang erwähnten Befehlen finden Sie in den Manpages 

dircmp(1), fssnap(1M), ps(1), oder truss(1) pkgadd(1M), pkgchk(1M), oder pkgrm(1M)

Einen Überblick zu Solaris Live Upgrade bietet 

Kapitel 2, Solaris Live Upgrade (Übersicht) in Solaris 10 5/09 Installationshandbuch: Solaris Live Upgrade und Planung von Upgrades

Einen Überblick zum benutzerdefinierten JumpStart-Verfahren finden Sie in 

Kapitel 2Benutzerdefinierte JumpStart-Installation (Übersicht)

Einen Überblick zu Zones bietet 

Kapitel 16, Einführung in Solaris Zones in Systemverwaltungshandbuch: Solaris Container – Ressourcenverwaltung und Solaris Zones