dgo’s Blog

Just another WordPress.com weblog

Jumpstart

Posted by sundgo - Oktober 18, 2008

Da meine beiden Netra t1 105 keine CD-ROM-Laufwerke haben, musste ich mich mit der Installation übers Netzwerk beschäftigen. Bei Sun heißt heißt die automatisierte Installation Jumpstart.

Dafür braucht man eigentlich einen Jumpstart-Server auf Solaris-Basis. Damit hatte ich das berühmte Henne-Ei-Problem. Ich hatte 2 Sun-Server, auf die Solaris installiert werden soll, aber für die Installation brauche ich ein fertiges Solaris.

Aber hier ließ sich das Problem einfacher lösen: einen Jumpstart-Server auf Linux-Basis. Im Internet lassen sich diverse Artikel finden, die alle gute Hinweise enthalten, aber keinen, der alles genau beschreibt. Daher werd ich das hier mal ausführlich dokumentieren.

Da ich auf meinem Linux-Server einen DHCP-Server installiert habe, berichte ich hier nur über die DHCP-Methode.

Am ok-Prompt sieht das ganze so aus:
ok boot net:dhcp – install
… und einiger Zeit ist Solaris fertig installiert. Aber was passiert genau im Hintergrund?

Wie funktioniert Jumpstart eigentlich?

Nach dem „boot net:dhcp – install“ wird eine DHCP-Anfrage vom Sun-Server abgeschickt. Die Antwort enthält neben den üblichen Daten, wie IP-Adresse, Subnet-Mask, Router, DNS-Server und Host-Name auch noch einige spezielle Daten. Hierzu gehören die Felder „Next server IP address“, „Boot file name“ und DHCP-Option 43 (Vendor-Specific Information).

Die Antwort wird vom Sun-Server ausgewertet und das Boot-File wird vom TFTP-Server (Next server IP address) heruntergeladen. Das Boot-File enthält einen Solaris-Kernel und wird nach dem Herunterladen gestartet. Anschließend wird das Root-Dateisystem per NFS gemountet. In dem NFS-Root ist das komplette Installationssystem enthalten.

In einem gesonderten NFS-Share liegen die Solaris-Installations-Quellen und die config-Dateien für eine automatische Installation.

Was braucht man für einen Jumpstart-Server auf Linux?

Ich benutze ein Debian-Stable. Benötigte Software

  • Solaris 10 (da ich mich erst seit einem Jahr mit Solaris beschäftige, kenne ich nur Solaris 10)
  • DHCP-Server (dhcp3-server)
  • TFTP-Server (atftpd)
  • NFS-Server (nfs-kernel-server)
  • optional: HTTP-Server

Solaris 10 herunterladen

Solaris 10 kann man nach Anmeldung bei Sun kostenlos herunterladen. Ich habe die Solaris 10 (Update 5, sol10u5) für SPARC gewählt. Die Benutzung der Software ist kostenlos, allerdings bekommt man hier keinen Support und keine Patch-Cluster.

Das heruntergeladene DVD-Image habe ich per Loop-Device in ein Verzeichnis gemountet. Von dort aus benutze ich die Daten für Boot und als Installations-Source.

Verzeichnis-Struktur

Ich benutze folgende Verzeichnis-Struktur auf meinem Linux-Server:

/export/config           # Config-Dateien für Jumpstart
/export/jumpstart        # Solaris 10 DVD
/export/iso              # die ISO-Dateien

Nun wird die Solaris-DVD in das jumpstart-Verzeichnis gemountet.

# mount -o loop,ro /export/iso/sol-10-u5-ga-sparc-dvd.iso /export/jumpstart

Konfiguration DHCP-Server

Bei meinem DHCP-Server handelt es sich um den ISC-DHCP-Server 3. Hier müssen zunächst die Definitionne für die DHCP-Option-43 eingetragen werden.

# Jumpstart Support
option space SUNW;
option SUNW.root-mount-options code 1 = text;
option SUNW.root-server-ip-address code 2 = ip-address;
option SUNW.root-server-hostname code 3 = text;
option SUNW.root-path-name code 4 = text;
option SUNW.swap-server-ip-address code 5 = ip-address;
option SUNW.swap-file-path code 6 = text;
option SUNW.boot-file-path code 7 = text;
option SUNW.posix-timezone-string code 8 = text;
option SUNW.boot-read-size code 9 = unsigned integer 16;
option SUNW.install-server-ip-address code 10 = ip-address;
option SUNW.install-server-hostname code 11 = text;
option SUNW.install-path code 12 = text;
option SUNW.sysid-config-file-server code 13 = text;
option SUNW.JumpStart-server code 14 = text;
option SUNW.terminal-name code 15 = text;

Die einzelnen Server werden dann wie folgt eingetragen:

host netra1 {
   fixed-address 192.168.0.3;
   hardware ethernet 08:00:20:D9:D8:24;
   filename "inetboot.sol10.sun4u";
   option host-name "netra1";
   vendor-option-space SUNW;
   option SUNW.sysid-config-file-server "192.168.0.254:/export/config";
   option SUNW.JumpStart-server "192.168.0.254:/export/config";
   option SUNW.install-server-hostname "server.home";
   option SUNW.install-server-ip-address 192.168.0.254;
   option SUNW.install-path "/export/jumpstart";
   option SUNW.root-server-hostname "server.home";
   option SUNW.root-server-ip-address 192.168.0.254;
   option SUNW.root-path-name "/export/jumpstart/Solaris_10/Tools/Boot";
}

Die Einstellungen müssen natürlich an die jeweilige Umgebung angepasst werden.

TFTP-Server

Als TFTP-Server verwende ich den atftpd. Ob der atftpd als Daemon läuft oder per inetd ist egal. Auf meinem Linux-Server läuft er als Daemon und benutzt das Verzeichnis /tftpboot.

In dieses Verzeichnis muss nun das Boot-File kopiert werden. Das Boot-File findet man auf der Solaris-DVD. Es gibt für die verschiedenen Sun-SPARC-Architekturen unterschiedliche Boot-Images: sun4u, sun4us und sun4v.

Bis einschließlich Solaris 10u5 findet man die Dateien unter:

/export/jumpstart/Solaris_10/Tools/Boot/usr/platform/sun4u/lib/fs/nfs/inetboot
/export/jumpstart/Solaris_10/Tools/Boot/usr/platform/sun4us/lib/fs/nfs/inetboot
/export/jumpstart/Solaris_10/Tools/Boot/usr/platform/sun4v/lib/fs/nfs/inetboot

Ab Solaris 10u6 sind die Dateien hier zu finden:

/export/jumpstart/Solaris_10/Tools/Boot/platform/sun4u/inetboot
/export/jumpstart/Solaris_10/Tools/Boot/platform/sun4us/inetboot
/export/jumpstart/Solaris_10/Tools/Boot/platform/sun4v/inetboot

Am Besten kopier man sich alle 3 Dateien ins das TFTP-Verzeichnis und trägt dann für den jeweiligen Rechner im DHCP-Server das korrekte Image ein.

/tftpboot/inetboot.sol10.sun4u
/tftpboot/inetboot.sol10.sun4u2
/tftpboot/inetboot.sol10.sun4v

Wenn man nicht weiß, welches das richtige Image ist, schaut man einfach mal auf die Links unter:

/export/jumpstart/Solaris_10/Tools/Boot/usr/platform

Hier findet man meistens den richtigen Hinweis. Diese Struktur gibt es ab Solaris 10u6 nicht mehr. Für meine Netra t1 105 ist das sun4u-Image das richtige. Also wird inetboot.sol10.sun4u im DHCP-Server eingetragen.

Generell gilt wohl:

UltraSPARC Enterprise-CPUs: sun4u
UltraSPARC Niagara T1/t2:   sun4v

NFS-Server

Da die Jumpstart-Installation auf NFS basiert, braucht man natürlich auch einen NFS-Server. Ich verwende den kernel-basierten NFS-Server. Mit NFS ist das leider manchmal etwas kompliziert. Die NFS-Implementation unter Linux und Solaris ist doch leider unterschiedlich. Hat man NFSv4 im Linux-Kernel aktiviert, kann das zu Problemen führen. Bisher habe ich es nur mit NFSv3 geschafft.

Hier ein Auszug aus der /etc/exports:

/export/config      *(ro,no_root_squash,async)
/export/jumpstart   *(ro,no_root_squash,async)

HTTP-Server

Als HTTP-Server benutze ich einen apache2. Der HTTP-Server wird eigentlich nur für Solaris-Flash-Images verwendet. Für eine Erstinstallation also nicht erforderlich.

Config-Dateien

Nun kommt die eigentliche Arbeit: Die Erstellung der Konfigurationsdateien. Die Konfigurationsdateien sorgen für eine komplett automatische Installation.

/export/config/sysidcfg

In dieser Datei werden die Basis-Einstellungen für Solaris gesetzt.

system_locale=C
timezone=Europe/Berlin
timeserver=localhost
terminal=xterm
name_service=NONE
network_interface=PRIMARY {dhcp protocol_ipv6=yes}
security_policy=NONE
nfs4_domain=dynamic
root_password=.V1jrm2KxTsGU
service_profile=limited_net

Die meisten Einstellungen erklären sich von selbst. Das Root-Passwort muss hier als Passwort-Hash gesetzt werden. Diesen kopiert man sich aus der /etc/shadow. Hinter dem hier im Beispiel angegebenen Passwort-Hash verbirgt sich das Passwort „abc“. Solaris kennt eine einfach Einstellung, um die meisten unsicheren Netzwerkdienste zu beenden oder aus loopback-Interfaces zu binden. Diese wird hier mit service_profile=limited_net gesetzt.

/export/config/inst_profile_std

In dieser Datei ist eines der Installations-Profile beschrieben. Ich habe in diesem Profil eine Standard-Solaris-Installation konfiguriert, die die Festplatten partitioniert, mittels Meta-Devices spiegelt und alle Solaris-Software-Pakete installiert.

Für diese Datei gibt es eine sehr gute Dokumentation bei Sun. Hier meine Datei:

install_type    initial_install
system_type     server
partitioning    explicit
filesys         mirror:d0  c0t0d0s0 c0t1d0s0    1024    /
filesys         mirror:d10 c0t0d0s1 c0t1d0s1    free    /var
filesys         c0t0d0s3                        1024    swap
filesys         c0t1d0s3                        1024    swap
metadb          c0t0d0s4   size     8192        count   3
metadb          c0t1d0s4   size     8192        count   3
filesys         mirror:d50 c0t0d0s5 c0t1d0s5    2048    /opt
filesys         mirror:d60 c0t0d0s6 c0t1d0s6    6144    /usr
filesys         mirror:d70 c0t0d0s7 c0t1d0s7    2048    /export/home
cluster         SUNWCall
#patch          patch_list nfs://192.168.0.254/export/

Den Patch-Parameter konnte ich noch nicht ausprobieren, da mir leider kein Support-Vertrag und somit auch kein Patch-Cluster zur Verfügung steht.

/export/config/inst_profile_min

Dieses Profil sorgt für eine schöne, kleine, schlanke Solaris-Installation. Hier werden nur wenige Pakete installiert, allerdings muss eventuell einiges hinterher manuell installiert werden – je nach Bedarf. Allerdings empfinde ich es für Einsteiger als eher kompliziert, herauszufinden, welches Softwarepaket denn nun fehlt.

install_type    initial_install
system_type     server
partitioning    explicit
filesys         mirror:d0  c0t0d0s0 c0t1d0s0    1024    /
filesys         mirror:d10 c0t0d0s1 c0t1d0s1    free    /var
filesys         c0t0d0s3                        1024    swap
filesys         c0t1d0s3                        1024    swap
metadb          c0t0d0s4        size    8192    count   3
metadb          c0t1d0s4        size    8192    count   3
filesys         mirror:d50 c0t0d0s5 c0t1d0s5    2048    /opt
filesys         mirror:d60 c0t0d0s6 c0t1d0s6    4096    /usr
filesys         mirror:d70 c0t0d0s7 c0t1d0s7    2048    /export/home
cluster         SUNWCreq
cluster         SUNWCssh        add
package         SUNWless        add
package         SUNWman         add
package         SUNWzsh         add
package         SUNWdoc         add
#patch          patch_list      nfs://192.168.0.254/export/

/export/config/upgrade_profile

Mit Jumpstart kann man auch seine Solaris-Installation updaten. Das funktioniert recht gut. Ich habe mit dem folgenden Profil meine beiden Solaris-10-u4-Installationen auf Solaris-10-u5 aktualisiert.

install_type    upgrade
root_device     c0t0d0s0
#patch          patch_list nfs://192.168.0.254/export/

Das Root-Device muss man Solaris mitteilen. Wenn das Device per Meta-Devices gespiegelt ist, wird auch automatisch der Spiegel aktualisiert.

Die einzelnen Schritte zum Upgrade:

  • umount des „alten“ Solaris-ISO
  • mount des neuen Solaris-ISO-Files nach /export/jumpstart
  • Boot-Files aktualisieren
  • Upgrade-Profil zuweisen (siehe rules – weiter unten)
  • ok boot net:dhcp – install

/export/config/flash_profile

Das Flash-Profile benutzt man, wenn ein bereits erstelltes Image installiert werden soll. Das Image liegt auf einem HTTP-Server, kann auch auch per NFS installiert werden. Das habe ich allerdings noch nicht ausprobiert.

install_type	 flash_install
archive_location http://192.168.0.254/sol10flash/sol10u4_basic.flar
partitioning	 explicit
filesys		 mirror:d0  c0t0d0s0 c0t1d0s0	1024	/
filesys		 mirror:d10 c0t0d0s1 c0t1d0s1	free	/var
filesys		 c0t0d0s3		 	1024	swap
filesys		 c0t1d0s3		 	1024	swap
metadb		 c0t0d0s4   size     8192	count	3
metadb		 c0t1d0s4   size     8192	count	3
filesys		 mirror:d50 c0t0d0s5 c0t1d0s5	4096	/opt
filesys		 mirror:d60 c0t0d0s6 c0t1d0s6	2048	/usr
filesys		 mirror:d70 c0t0d0s7 c0t1d0s7	2048	/export/home
#patch		 patch_list nfs://192.168.0.254/export/

Ich bastel später mal ein HowTo, wie man ein Image erstellt.

Profile ohne Spiegelung per Meta-Device

Möchte man keine Spiegelung per Meta-Device oder ist stolzer Besitzer eines Hardware-Raid-Controllers, geht das ganze natürlich auch ohne Meta-Devices:

partitioning	 explicit
filesys		 c0t0d0s0       1024	/
filesys		 c0t0d0s1	free	/var
filesys		 c0t0d0s3 	1024	swap
filesys		 c0t0d0s5 	4096	/opt
filesys		 c0t0d0s6 	2048	/usr
filesys		 c0t0d0s7 	2048	/export/home

/export/rules

Diese Datei steuert indirekt, welcher Server welches Profil benutzt. Das Format ist:

hostname <Hostname> <Pre-Install-Skript> <Profil> <Post-Install-Skript>

Achtung! Der Hostname ist case-sensitive!!!

Da ich bisher noch keine Skripte erstellen musste, sieht meine Datei so aus:

hostname netra1 - inst_profile_std -
hostname netra2 - inst_profile_std -

Das sieht recht einfach aus – hat aber leider einen Haken: Jumpstart erwartet in der letzten Zeile eine Check-Summe. Sonst funktioniert die Installation nicht. Aber auch dafür habe ich im Internet (leider kann ich die Seite nicht mehr finden, von der ich dieses Skript kopiert habe) Abhilfe gefunden: ein kleines Shell-Skript, welches eine rules.ok-Datei erstellt, die auch die korrekte Prüfsumme errechnet:

#!/bin/sh
chksum=`/usr/bin/sum rules | /usr/bin/awk '{print $1 }'`
rm -f /export/config/rules.ok
cp /export/config/rules /export/config/rules.ok
echo "# version=2 checksum=${chksum}" >> /export/config/rules.ok
exit 0

Diese rules.ok-Datei wird von Jumpstart gelesen und verarbeitet.

Ready 2 GO

Wenn nun alles korrekt ist, sollte das so aussehen:

lom>
LOM event: power on

Netra t1 (UltraSPARC-IIi 440MHz), No Keyboard
OpenBoot 3.10.27 ME, 1024 MB memory installed, Serial #14276644.
Ethernet address 8:0:20:d9:d8:24, Host ID: 80d9d824.

ok boot net:dhcp - install
Boot device: /pci@1f,0/pci@1,1/network@1,1:dhcp  File and args: - install
SunOS Release 5.10 Version Generic_127127-11 64-bit
Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Configuring devices.
Using DHCP for network configuration information.
Setting up Java. Please wait...
Beginning system identification...
Searching for configuration file(s)...
Using sysid configuration file /sysidcfg
Search complete.
Discovering additional network configuration...
Completing system identification...
Starting remote procedure call (RPC) services: done.
System identification complete.
Starting Solaris installation program...
Searching for JumpStart directory...
Using rules.ok from 192.168.0.254:/export/config.
Checking rules.ok file...
Using profile: inst_profile_std
Executing JumpStart preinstall phase...
Searching for SolStart directory...
Checking rules.ok file...
Using begin script: install_begin
Using finish script: patch_finish
Executing SolStart preinstall phase...
Executing begin script "install_begin"...
Begin script install_begin execution completed.

Processing profile
        - Selecting cluster (SUNWCall)
        - Selecting all disks
        - Configuring boot device
        - Configuring SVM State Database Replica on  (c0t0d0s4)
        - Configuring SVM State Database Replica on  (c0t1d0s4)
        - Configuring SVM Mirror Volume d0 on / (c0t0d0s0)
        - Configuring SVM Mirror Volume d0 on  (c0t1d0s0)
        - Configuring swap (c0t0d0s3)
        - Configuring swap (c0t1d0s3)
        - Configuring SVM Mirror Volume d50 on /opt (c0t0d0s5)
        - Configuring SVM Mirror Volume d50 on  (c0t1d0s5)
        - Configuring SVM Mirror Volume d60 on /usr (c0t0d0s6)
        - Configuring SVM Mirror Volume d60 on  (c0t1d0s6)
        - Configuring SVM Mirror Volume d70 on /export/home (c0t0d0s7)
        - Configuring SVM Mirror Volume d70 on  (c0t1d0s7)
        - Configuring SVM Mirror Volume d10 on /var (c0t0d0s1)
        - Configuring SVM Mirror Volume d10 on  (c0t1d0s1)
        - Deselecting unmodified disk (c0t2d0)
        - Deselecting unmodified disk (c0t3d0)
        - Deselecting unmodified disk (c0t4d0)

Verifying disk configuration

Verifying space allocation
        - Total software size:  3752.22 Mbytes

Preparing system for Solaris install

Configuring disk (c0t0d0)
        - Creating Solaris disk label (VTOC)

Configuring disk (c0t1d0)
        - Creating Solaris disk label (VTOC)

Creating and checking UFS file systems
        - Creating / (c0t0d0s0)
        - Creating /var (c0t0d0s1)
        - Creating /opt (c0t0d0s5)
        - Creating /usr (c0t0d0s6)
        - Creating /export/home (c0t0d0s7)
        - Creating  (c0t1d0s0)
        - Creating  (c0t1d0s1)
        - Creating  (c0t1d0s5)
        - Creating  (c0t1d0s6)
        - Creating  (c0t1d0s7)

Creating SVM Meta Devices. Please wait ...
        - Creating SVM State Replica on disk c0t0d0s4
        - Creating SVM State Replica on disk c0t1d0s4
        - Creating SVM Mirror Volume d0 (/)
        - Creating SVM Mirror Volume d50 (/opt)
        - Creating SVM Mirror Volume d60 (/usr)
        - Creating SVM Mirror Volume d70 (/export/home)
        - Creating SVM Mirror Volume d10 (/var)

Beginning Solaris software installation

Starting software installation
        SUNWocfd.........................done.  3751.87 Mbytes remaining.
        SUNWlucfg........................done.  3751.79 Mbytes remaining.

Und so sollte das dann am Schluss aussehen:

        SUNWtcsh.........................done.    2.62 Mbytes remaining.
        SUNWter..........................done.    1.00 Mbytes remaining.

Completed software installation

Solaris 10 software installation succeeded

Customizing system files
        - Mount points table (/etc/vfstab)
        - Network host addresses (/etc/hosts)
        - Environment variables (/etc/default/init)

Cleaning devices

Customizing system devices
        - Physical devices (/devices)
        - Logical devices (/dev)

Installing boot information
        - Installing boot blocks (c0t0d0s0)
        - Installing boot blocks (/dev/rdsk/c0t0d0s0)
        - Installing boot blocks (/dev/rdsk/c0t1d0s0)

Installation log location
        - /a/var/sadm/system/logs/install_log (before reboot)
        - /var/sadm/system/logs/install_log (after reboot)

Installation complete
        - Making SVM Mirror Volume as boot device (/dev/md/dsk/d0)
Executing SolStart postinstall phase...
Executing finish script "patch_finish"...

Finish script patch_finish execution completed.
Executing JumpStart postinstall phase...

The begin script log 'begin.log'
is located in /var/sadm/system/logs after reboot.

The finish script log 'finish.log'
is located in /var/sadm/system/logs after reboot.

syncing file systems... done
rebooting...
Resetting ...

Netra t1 (UltraSPARC-IIi 440MHz), No Keyboard
OpenBoot 3.10.25 ME, 1024 MB memory installed, Serial #12748474.
Ethernet address 8:0:20:c2:86:ba, Host ID: 80c286ba.

Executing last command: boot
Boot device: /pci@1f,0/pci@1,1/scsi@2/disk@0,0  File and args:
SunOS Release 5.10 Version Generic_120011-14 64-bit
Copyright 1983-2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: netra2
Configuring devices.
Loading smf(5) service descriptions: 156/156
/dev/md/rdsk/d70 is clean
/dev/md/rdsk/d50 is clean
Creating new rsa public/private host key pair
Creating new dsa public/private host key pair

syslogd: line 24: WARNING: loghost could not be resolved

netra2 console login:
Werbeanzeigen

2 Antworten to “Jumpstart”

  1. teaborn said

    Ab Solaris 10 U6 10/08 findet man die inetboot in:
    /export/jumpstart/Solaris_10/Tools/Boot/platform/sun4u/inetboot
    /export/jumpstart/Solaris_10/Tools/Boot/platform/sun4us/inetboot
    /export/jumpstart/Solaris_10/Tools/Boot/platform/sun4v/inetboot

    PS: Klasse HowTo

  2. teaborn said

    Für alle die vielleicht ein Problem haben, dass die rules.ok nicht gefunden wird. Hier eine eventuelle Lösung die mir geholfen hat:

    http://docs.sun.com/app/docs/doc/816-4554/eyatk?a=view
    Size Limit for DHCP Macros

    The sum total of the values assigned to all the options in a macro must not exceed 255 bytes, including the option codes and length information. This limit is dictated by the DHCP protocol.

    The macros that are most likely to be impacted by this limit are macros that are used to pass paths to files on Solaris installation servers. Generally, you should pass the minimum amount of vendor information needed. You should use short path names in options that require path names. If you create symbolic links to long paths, you can pass the shorter link names.

    Bei mir die Pfad Verzeichnis Tiefe der NFS mounts verkleinern, um diesem Problem zu entkommen

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

 
%d Bloggern gefällt das: