Ein Finish-Skript ist ein benutzerdefiniertes Bourne-Shell-Skript, das Sie in der Datei rules angeben. Ein Finish-Skript führt bestimmte Aufgaben nach der Installation der Solaris-Software auf einem System auf, jedoch bevor das System erneut gebootet wird. Sie können Finish-Skripte nur verwenden, wenn Sie die Solaris-Software mit dem benutzerdefinierten JumpStart-Installationsverfahren installieren.
Mit einem Finish-Skript können Sie unter anderem die folgenden Aufgaben ausführen:
Hinzufügen von Dateien
Hinzufügen von einzelnen Packages oder Patches zusätzlich zu denen, die zusammen mit einer bestimmten Softwaregruppe installiert wurden
Anpassen der Root-Umgebung
Definieren des Root-Passworts für das System
Installieren zusätzlicher Software
Das Solaris-Installationsprogramm hängt die Dateisysteme des Systems auf /a ein. Die Dateisysteme bleiben bis zum Neustart des Systems in /a eingehängt. Mit einem Finish-Skript können Sie Dateien in der neu installierten Dateisystemhierarchie hinzufügen, ändern oder entfernen, indem Sie die in /a eingehängten Dateisysteme modifizieren.
Während der Installation wird die Ausgabe des Finish-Skripts in der Datei /tmp/finish.log gespeichert. Nach Abschluss der Installation wird die Protokolldatei wieder nach /var/sadm/system/logs/finish.log geleitet.
Stellen Sie sicher, dass root Eigentümer des Finish-Skripts ist und die Berechtigungen auf 644 gesetzt sind.
In Finish-Skripten können Sie benutzerdefinierte JumpStart-Umgebungsvariablen verwenden. Eine Liste der Umgebungsvariablen finden Sie unter Benutzerdefinierte JumpStart-Umgebungsvariablen.
Speichern Sie Finish-Skripte im JumpStart-Verzeichnis.
Mit einem Finish-Skript können Sie Dateien aus dem JumpStart-Verzeichnis zu einem bereits installierten System hinzufügen. Sie können Dateien hinzufügen, weil das JumpStart-Verzeichnis in dem Verzeichnis eingehängt ist, das in der Variablen SI_CONFIG_DIR angegeben wird. Standardmäßig ist dies das Verzeichnis /tmp/install_config.
Sie können Dateien auch ersetzen, indem Sie Dateien aus dem JumpStart-Verzeichnis über bereits vorhandene Dateien auf einem installierten System kopieren.
Kopieren Sie alle Dateien, die Sie dem installierten System hinzufügen möchten, in das JumpStart-Verzeichnis.
Fügen Sie für jede in die neu installierte Dateisystemhierarchie zu kopierende Datei die folgende Zeile in das Finish-Skript ein:
cp ${SI_CONFIG_DIR}/Dateiname /a/Pfadname |
Angenommen, es gibt eine speziell für alle Benutzer am Standort entwickelte Anwendung mit dem Namen site_prog. Wenn Sie eine Kopie von site_prog in das JumpStart-Verzeichnis stellen, bewirkt die folgende Zeile in einem Finish-Skript, dass site_prog aus dem JumpStart-Verzeichnis in das Verzeichnis /usr/bin eines Systems kopiert wird:
cp ${SI_CONFIG_DIR}/site_prog /a/usr/bin |
Sie können mit einem Finish-Skript nach der Installation der Solaris-Software automatisch Packages oder Patches hinzufügen. Indem Sie Packages mit einem Finish-Skript hinzufügen, sparen Sie Zeit und stellen außerdem sicher, dass Packages und Patches auf unterschiedlichen Systemen konsistent installiert werden.
Wenn Sie in Finish-Skripten den Befehl pkgadd(1M) oder patchadd(1M) verwenden, geben Sie mit der Option-R den Pfad /a als Root-Pfad an.
Beispiel 7–3 zeigt ein Beispiel eines Finish-Skripts, das Packages hinzufügt.
Beispiel 7–4 zeigt ein Beispiel eines Finish-Skripts, das Patches hinzufügt.
#!/bin/sh BASE=/a MNT=/a/mnt ADMIN_FILE=/a/tmp/admin mkdir ${MNT} mount -f nfs sherlock:/export/package ${MNT} cat >${ADMIN_FILE} <<DONT_ASK mail=root instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck rdepend=nocheck space=ask setuid=nocheck conflict=nocheck action=nocheck basedir=default DONT_ASK /usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz umount ${MNT} rmdir ${MNT} |
Nachfolgend werden einige Befehle dieses Beispiels erläutert.
Der folgende Befehl hängt ein Verzeichnis auf einem Server ein, in dem sich das zu installierende Package befindet.
mount -f nfs sherlock:/export/package ${MNT} |
Der folgende Befehl erzeugt die temporäre Package-Administrationsdatei admin und bewirkt, dass der Befehl pkgadd(1M) bei der Package-Installation keine Prüfung vornimmt und keine Eingabeaufforderungen ausgibt. Verwenden Sie die temporäre Package-Administrationsdatei, damit die Installation beim Hinzufügen von Packages ohne Benutzereingriff abläuft.
cat >${ADMIN_FILE} <<DONT_ASK |
Der nachfolgende pkgadd-Befehl fügt das Package unter Verwendung der Option -a zur Angabe der Package-Administrationsdatei und der Option -R zur Angabe des Root-Pfads hinzu.
/usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz |
#!/bin/sh ######## # # USER-CONFIGURABLE OPTIONS # ######## # The location of the patches to add to the system after it's installed. # The OS rev (5.x) and the architecture (`mach`) will be added to the # root. For example, /foo on a 8 SPARC would turn into /foo/5.8/sparc LUPATCHHOST=ins3525-svr LUPATCHPATHROOT=/export/solaris/patchdb ######### # # NO USER-SERVICEABLE PARTS PAST THIS POINT # ######### BASEDIR=/a # Figure out the source and target OS versions echo Determining OS revisions... SRCREV=`uname -r` echo Source $SRCREV LUPATCHPATH=$LUPATCHPATHROOT/$SRCREV/`mach` # # Add the patches needed # echo Adding OS patches mount $LUPATCHHOST:$LUPATCHPATH /mnt >/dev/null 2>&1 if [ $? = 0 ] ; then for patch in `cat /mnt/*Recommended/patch_order` ; do (cd /mnt/*Recommended/$patch ; echo yes | patchadd -u -d -R $BASEDIR .) done cd /tmp umount /mnt else echo "No patches found" if |
Früher wurde der Befehl chroot(1M) zusammen mit dem Befehl pkgadd und patchadd in Finish-Skripten verwendet. In seltenen Fällen kann es vorkommen, dass bei einigen Packages oder Patches die Option -R nicht funktioniert. Sie müssen eine /etc/mnttab-Dummy-Datei im Root-Pfad /a erstellen, bevor Sie den Befehl chroot absetzen.
Zum Erstellen einer /etc/mnttab-Dummy-Datei fügen Sie die folgende Zeile zum Finish-Skript hinzu:
cp /etc/mnttab /a/etc/mnttab
Sie können mithilfe von Finish-Skripten auch Dateien anpassen, die bereits auf einem System installiert sind. Beispielsweise passt das Finish-Skript in Beispiel 7–5 die Root-Umgebung an, indem Informationen an die ..cshrc-Datei im Root-Verzeichnis (/) angehängt werden.
#!/bin/sh # # Customize root's environment # echo "***adding customizations in /.cshrc" test -f a/.cshrc || { cat >> a/.cshrc <<EOF set history=100 savehist=200 filec ignoreeof prompt="\$user@`uname -n`> " alias cp cp -i alias mv mv -i alias rm rm -i alias ls ls -FC alias h history alias c clear unset autologout EOF } |
Nach der Installation der Solaris-Software wird das System neu gebootet. Vor dem Abschluss des Boot-Vorgangs fordert das System zur Eingabe des Root-Passworts auf. Der Boot-Vorgang kann erst abgeschlossen werden, wenn ein Passwort eingegeben wird.
Ein Finish-Skript mit dem Namen set_root_pw ist im Verzeichnis auto_install_sample gespeichert. Dieses Finish-Skript zeigt, wie das Root-Passwort automatisch, ohne Eingabeaufforderung definiert werden kann. set_root_pw wird in Beispiel 7–6 gezeigt.
Wenn Sie das Root-Passwort eines Systems mit einem Finish-Skript definieren, könnten Benutzer versuchen, das Root-Passwort anhand des verschlüsselten Passworts in dem Finish-Skript zu ermitteln. Sichern Sie das System gegen Versuche ab, das Root-Passwort auf diese Weise zu ermitteln.
#!/bin/sh # # @(#)set_root_pw 1.4 93/12/23 SMI # # This is an example Bourne shell script to be run after installation. # It sets the system's root password to the entry defined in PASSWD. # The encrypted password is obtained from an existing root password entry # in /etc/shadow from an installed machine. echo "setting password for root" # set the root password PASSWD=dKO5IBkSF42lw #create a temporary input file cp /a/etc/shadow /a/etc/shadow.orig mv /a/etc/shadow /a/etc/shadow.orig nawk -F: '{ if ( $1 == "root" ) printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,passwd,$3,$4,$5,$6,$7,$8,$9 else printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9 }' passwd="$PASSWD" /a/etc/shadow.orig > /a/etc/shadow #remove the temporary file rm -f /a/etc/shadow.orig # set the flag so sysidroot won't prompt for the root password sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$ mv /tmp/state.$$ ${SI_SYS_STATE} |
Nachfolgend werden einige Befehle dieses Beispiels erläutert.
Der folgende Befehl setzt die Variable PASSWD auf ein verschlüsseltes Root-Passwort, das aus einem vorhandenen Eintrag in der Datei /etc/shadow eines Systems abgerufen wird.
#create a temporary input file |
Der folgende Befehl erzeugt aus /a/etc/shadow eine temporäre Eingabedatei.
cp /a/etc/shadow /a/etc/shadow.orig |
Der folgende Befehle modifiziert den Root-Eintrag in der Datei /etc/shadow für das neu installierte System unter Verwendung von $PASSWD als Passwortfeld.
if ( $1 == "root" ) |
Der folgende Befehl entfernt die temporäre Datei /a/etc/shadow.
rm -f /a/etc/shadow.orig |
Der folgende Befehl ändert den Eintrag in der state-Datei von 0 in 1 ab, so dass der Benutzer nicht zur Eingabe des Root-Passworts aufgefordert wird. Der Zugriff auf die state-Datei erfolgt über die Variable SI_SYS_STATE, die zurzeit den Wert /a/etc/.sysIDtool.state aufweist. Damit in den Skripten keine Probleme auftreten, wenn sich dieser Wert ändert, referenzieren Sie diese Datei immer mithilfe von $SI_SYS_STATE. Der hier gezeigte sed-Befehl enthält nach dem Zeichen 0 und nach dem Zeichen 1 ein Tabulatorzeichen.
sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$ |
Sie können Finish-Skripte zur Installation zusätzlicher Software nach der Installation von Solaris einsetzen. Das Solaris Installationsprogramm fordert Sie während der Installation zur Eingabe von Informationen auf. Damit die Installation ohne Benutzereingriffe abläuft, können Sie das Solaris Installationsprogramm mit der Option -nodisplay oder -noconsole ausführen.
Tabelle 7–1 Solaris-Installationsoptionen
Option |
Beschreibung |
---|---|
-nodisplay |
Das Installationsprogramm wird ohne grafische Benutzeroberfläche ausgeführt. Verwenden Sie die Standardproduktinstallation, es sei denn, die Installation wurde mit der Option -locales modifiziert. |
-noconsole |
Die Installation wird ohne interaktives Text-Konsolengerät ausgeführt. Dies ist zusammen mit -nodisplay nützlich, wenn Sie UNIX-Skripte verwenden wollen. |
Weitere Informationen finden Sie in der Manpage installer(1M).