Solaris Jumpstart von Linux

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

Solaris Jumpstart von Linux aus

Möchte man einen Jumpstart für Solaris einrichten, so gehen viele HowTos von einer vorhandenen Solaris Installation aus. Hier wird kurz beschrieben, wie man ohne Solaris, ein Solaris installieren kann. Diese Seite dient mehr der Notiz, denn einer vollständigen Anleitung.

Als Grundlage dient ein Debian Squeeze und Solaris 10 für SPARC. Für Solaris X86 lässt sich die Anleitung natürlich auch verwenden, einzig der Grub/PXE Teil muss dann noch er'google't werden.


DHCP

Wir verwenden den ISC-DHCP Server

Debian-term.png
# aptitude install dhcp3-server
  • /etc/default/isc-dhcp-server
Ascii.png
INTERFACES="eth1"


  • /etc/dhcp/dhcpd.conf
Ascii.png

# Globaler Teil

ddns-update-style none;
option domain-name "domain.foo";
option domain-name-servers 130.83.160.60;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option dhcp-max-message-size 2048; 
use-host-decl-names on;

# Sun Spezifikationen

authoritative;
log-facility local7;
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;

# Unser Subnetz

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.5 192.168.1.10;
  option broadcast-address 192.168.1.255;
 #option routers 192.168.1.1;
  option subnet-mask 255.255.255.0;
  next-server 192.168.1.1;
  default-lease-time 600;
  max-lease-time 7200;
  server-name dhcp9;
  allow booting;
}

# Unser Gruppe für die Jumpstarts 

group{
  vendor-option-space SUNW;
  option SUNW.install-server-hostname "192.168.1.1";
  option SUNW.install-server-ip-address 192.168.1.1;
  # Wo liegt die Dateien von der DVD/CD 
  option SUNW.install-path "/srv/jumpstart/sol10sparc/root/";
  # Wo liegen die Konfigurationsdateien
  option SUNW.JumpStart-server "192.168.1.1:/srv/jumpstart/sol10sparc/config";
  # Konfigdatei für Terminal, Zeitzone, welche Platten verwendet werden etc.
  option SUNW.sysid-config-file-server "192.168.1.1:/srv/jumpstart/sol10sparc/config";
  option SUNW.root-server-hostname "192.168.1.1";
  option SUNW.root-server-ip-address 192.168.1.1;
  # Wo liegen die Bootdateien
  option SUNW.root-path-name "/srv/jumpstart/sol10sparc/root/Solaris_10/Tools/Boot";

 # Ein Host in der Gruppe
host t2000 {
  hardware ethernet 00:14:4f:aa:bb:cc;
  option host-name "t2000";
  option domain-name "domain.foo";
  fixed-address 192.168.1.12;
  # Eventuell angepasste Datei, hier aber die selbe, wie in der Gruppe
  option SUNW.sysid-config-file-server = "192.168.1.1:/srv/jumpstart/sol10sparc/config";
  # Welches Images gestartet wird. sun4v ist für SPARC T2000
  filename "jumpstart/sun4v";
  } 
}

NFS

Standard NFS-Kernel-Server

Debian-term.png
# aptitude install nfs-kernel-server
  • /etc/default/nfs-kernel-server
Ascii.png
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS=--manage-gids
NEED_SVCGSSD=
RPCSVCGSSDOPTS=
RPCNFSDCOUNT='8 --no-nfs-version 4'


  • /etc/exports
Ascii.png
/srv/jumpstart/sol10sparc/root 192.168.1.0/24(ro,no_root_squash,no_subtree_check)
/srv/jumpstart/sol10sparc/config 192.168.1.0/24(ro,no_root_squash,no_subtree_check)

TFTP

Um das Bootimage auf den zu installierenden zu bekommen.

Debian-term.png
# aptitude install tftpd-hpa
  • /etc/default/tftpd-hpa
Ascii.png
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp/"
TFTP_ADDRESS="192.168.1.1:69"
TFTP_OPTIONS="--secure"

Dateien

Nun legen wir die nötigen Ordner an und Kopieren die Daten von der DVD auf die Platte

Gnome-terminal.png
# mkdir -p /srv/tftp/jumpstart/
# mkdir -p /srv/jumpstart/sol10sparc/{root,config}

Ich gehe davon aus, dass die Solaris DVD od. ein ISO Image unter /media/cdrom eingehangen wurde:

Gnome-terminal.png
# mount -o loop /media/sol-10-u10-ga2-sparc-dvd.iso /media/cdrom0
# cp -r /media/cdrom0/*  /srv/jumpstart/sol10sparc/root/
# cp /media/cdrom0/Solaris_10/Tools/Boot/platform/sun4v/inetboot /srv/tftp/jumpstart/sun4v

Ich meine, ich hätte noch irgendwelche Links aufgelöst, leider ist mir das nun entfallen. Es muss sich um irgendwas mit boot gedreht haben ...


Konfigurations- Dateien

Kurz ein Überblick, über meine Dateien:

  • /srv/jumpstart/sol10sparc

├── config
│   ├── files/
│   ├── finish_t2000.sh
│   ├── inst_profile_min
│   ├── packages/
│   ├── patches/
│   ├── rules
│   ├── rules.ok
│   ├── rules.sh
│   └── sysidcfg
└── root
    ├── boot/
    ├── Copyright
    ├── installer/
    ├── Offer_to_Provide_Source_Code.txt
    ├── platform/
    └── Solaris_10/
  • Eine Erläuterung der wichtigsten Dateien
    • files/ - da lege ich Dateien ab, die auf das neue System kopiert werden sollen
    • finish_t2000.sh - Diese Datei wird am Schluss, vor dem Reboot ausgeführt und erledigt diverse Arbeiten
    • inst_profile_min - Welche Pakete installiert werden sollen und Partitionsaufteilung
    • packages/ zusäztliche Pakete die installiert werden sollen
    • patches/ - Oracle Cluster Patch etc.
    • rules Steuert welcher Clients welches Profil etc. bekommt
    • rules.ok - wird erzeugt aus dem ...
    • rules.sh - ... Script, da innerhalb der rules eine Prüfsumme enthalten ist.
    • sysidcfg - Generelle Einstellungen, wie Terminal, Zeitzone, Root Kennwort, Netzwerkkarte ..., welches Profil(!)
  • Der Reihe nach:

sysidcfg

keyboard=German
system_locale=C
timezone=Europe/Berlin
timeserver=localhost
network_interface=e1000g3 {dhcp protocol_ipv6=no}
terminal=vt100
name_service=NONE
auto_reg=disable
security_policy=NONE
nfs4_domain=dynamic
root_password=5e39ecefee4f42f856be37eb313c5545
service_profile=limited_net

Das Rootkennwort habe ich einfach mit:

Gnome-terminal.png
$ echo _secret_Mona_22 | openssl md5

für dieses HowTo erzeugt. In echt ist da ein Blowfish String enthalten.


Wird irgendeine Zeile verändert die Jumpstart nicht versteht, springt er auf den Interaktiven Installer zurück.

inst_profile_min

Quelle: http://kdl.nobugware.com/post/2009/07/28/ultimate-solaris-10-jumpstart-profile/ + Addons

Es wird ZFS für den Pool verwendet, mit den Platten c1t0d0s0 c1t1d0s0. Es muss eine Slice angegeben werden, und nicht die vollständige Platte (z.B. c1t0d0).

# http://kdl.nobugware.com/post/2009/07/28/ultimate-solaris-10-jumpstart-profile/
install_type    initial_install

system_type     server
pool rpool auto auto auto mirror c1t0d0s0 c1t1d0s0
bootenv         installbe bename s10u10 dataset /var


cluster         SUNWCrnet
cluster         SUNWCssh        add
cluster 	SUNWCadm 	add
cluster 	SUNWCcpc 	add
cluster SUNWCcry add
cluster SUNWCfwcmp add
cluster SUNWCfwshl add
cluster SUNWCfwutil add
cluster SUNWCged add
cluster SUNWCntp add
cluster SUNWCperl add
cluster SUNWCpm add
cluster SUNWCpmgr add
cluster SUNWCpool add
cluster SUNWCsma add
cluster SUNWCssh add
cluster SUNWCwget add 
cluster SUNWCzone add
cluster SUNWpiclu add
cluster SUNWsmapi add
cluster SUNWCnfss add
cluster SUNWCnfsc add
package SUNWluzone add
package SUNWbipr add
package SUNWbip add
package SUNWtnetc add
package SUNWggrp add
package SUNWgtar add 
package SUNWrsg add # needed by sshd
package SUNWgssdh add # needed by sshd
package SUNWspnego add # needed by sshd 
package SUNWbind add # host&dig
package SUNWzsh add
package SUNWless add
package	SUNWdoc add 
package SUNWman add
package SUNWiscsitgtr add # iscsi tgt
package SUNWiscsitgtu add # iscsi tgt
package SUNWiscsiu add # iscsiadm
package SUNWiscsir add # iscsi adm 
package SUNWman add # man
package SUNWrcmdc add # snoop
package SUNWpiclu add # fuer prtdiag
package SUNWpiclr add
package SUNWuiu8 add
package SUNWopensslr add
package SUNWPython add
package SUNWtoo add
package SUNWsprot add
package SUNWbtool add
package SUNWhea add
package SUNWarc add

SMPATCH ist nicht mit dabei, da dieses Tool der blanke Schrott ist und zig tausend weitere Pakete erfordert. Ich verwende das PCA Tool.

rules

# rules keyword & values   begin script  profile    finish script
#-----------------------------------------------------------------
hostname t2000 -   -   inst_profile_min finish_t2000.sh

rules.sh

Nach dem Anlegen muss dieses Script ausgeführt werden:

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

rules.ok

Dann entsteht diese Datei

# rules keyword & values   begin script  profile    finish script
#-----------------------------------------------------------------
hostname t2000 -   -   inst_profile_min finish_t2000.sh
# version=2 checksum=07476
</code>

==== files/ ====

Ordner in dem ich meine Dateien packe, die später auf das System kopiert werden sollen. Das passiert '''nicht''' automatisch, sondern muss durch das Finish Script erledigt werden.

*Beispiele:

{{shell|
<pre>
ls -l files/
total 216
-rw-r--r-- 1 root root    601 Mar  5 11:21 authorized_keys
-rw-r--r-- 1 root root    712 Feb 29 11:51 bash.bashrc
-rw-r--r-- 1 root root    136 Mar  5 16:00 ld.config
-rw-r--r-- 1 root root    162 Mar  6 14:08 nocheck
-rw-r--r-- 1 root root    637 Mar  7 14:39 nsswitch.conf
-rwxr-xr-x 1 root root 166550 Mar  6 08:54 pca
-rw-r--r-- 1 root root     88 Mar  6 08:54 pca.conf
-rw-r--r-- 1 root root    230 Feb 29 11:20 profile
-rw-r--r-- 1 root root   2080 Mar  6 12:32 puppetd.xml
-rwxr-xr-x 1 root root    539 Mar  7 10:52 S99After_reboot.sh
-rwxr-xr-x 1 root root    857 Mar  6 12:31 svc-puppetd
-rw-r--r-- 1 root root    969 Feb 29 16:50 syslog.conf
-rwxr-xr-x 1 root root   1707 Mar  7 12:09 zonecreate

}}


Da sich nicht alle Aufgaben innerhalb des Jumpstart erledigen lassen, lasse ich nach dem ersten Boot das Script S99After_reboot.sh über das alte /etc/rc2.d/ ausführen und dann wieder löschen, wenn die Aufgaben erledigt worden sind, z.B. per PCA die letzten Patches installieren od. ISCSI einrichten ...


packages/

Ordner die Pakete von SunFreeware etc. enthalten und auch eigene, die auch installiert werden sollen

Gnome-terminal.png
ls -l packages/
total 76160
-rw-r--r-- 1 root root      157 Mar  6 09:05 admin
-rw-r--r-- 1 root root  5099520 Mar  5 09:49 bacula-sparc.tar
-rw-r--r-- 1 root root   179712 Jan 22 05:53 iperf-2.0.5-sol10-sparc-local
-rw-r--r-- 1 root root  1921536 Jan 22 06:01 libgcc-3.4.6-sol10-sparc-local
-rw-r--r-- 1 root root  2642944 Jan 22 06:03 libiconv-1.14-sol10-sparc-local
-rw-r--r-- 1 root root   132096 Jan 22 06:06 libintl-3.4.0-sol10-sparc-local
-rw-r--r-- 1 root root 20951040 Mar  5 11:30 nagios-sparc.tar
-rw-r--r-- 1 root root   122880 Jan 22 06:46 nc-110-sol10-sparc-local
-rw-r--r-- 1 root root 15502336 Jan 25 09:51 openssl-1.0.0g-sol10-sparc-local
-rw-r--r-- 1 root root   299008 Jan 22 08:11 popt-1.14-sol10-sparc-local
-rw-r--r-- 1 root root   878080 Jan 22 08:51 rsync-3.0.9-sol10-sparc-local
-rw-r--r-- 1 root root 28023808 Jan 22 08:55 ruby-1.9.2p0-sol10-sparc-local
-rw-r--r-- 1 root root   252560 Feb 17 20:15 rubygems-1.8.17.tgz
-rw-r--r-- 1 root root  1831424 Jan 22 09:55 screen-4.0.3-sol10-sparc-local

patches/

Enthält den ausgepackten Patch Cluster von Oracle

Gnome-terminal.png
patches/
└── 10_Recommended
    ├── 10_Recommended.html
    ├── 10_Recommended.README
    ├── Copyright
    ├── installcluster -> installpatchset
    ├── installpatchset
    ├── LEGAL_LICENSE.TXT
    ├── patches
    ├── patch_order
    └── patchset.conf

finish_t2000.sh

Zu guter letzt, mein zusammen gestückeltes Script, was aus diversen Quellen stammt und aus dem Kopf.

#!/bin/sh -x
# Script for finishing 

# Global settings
PRE=/
[ -f /a/usr/sbin/dladm ] && PRE=/a

PATH=$PRE/usr/bin:$PRE/usr/sbin
export PATH

############## Change Root account ##############

GROUPS_FILE=$PRE/etc/group
PASSWD_FILE=$PRE/etc/passwd
SSH_AUTH="$SI_CONFIG_DIR/files/authorized_keys"

# Change Root Account
# Setup root's environment
echo "Setting up root's HOME (/root)"
mkdir $PRE/root
chmod 700 $PRE/root
chown root:root $PRE/root
echo 'export PATH=":$PATH:/usr/sfw/bin/:/usr/sfw/sbin/:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin"' >>  $PRE/etc/profile

# everything for Bash #
cat $SI_CONFIG_DIR/files/profile >> $PRE/etc/profile
cp $SI_CONFIG_DIR/files/bash.bashrc $PRE/etc/bash.bashrc
cp $PRE/etc/profile $PRE/root/.profile

chown root:root $PRE/root/.profile
chmod 400 $PRE/root/.profile
cp $PRE/etc/passwd $PRE/etc/passwd.old
sed s!Super-User:/:/sbin/sh!Super-User:/root:/usr/bin/bash! $PRE/etc/passwd > $PRE/etc/passwd.sed
cp $PRE/etc/passwd.sed $PRE/etc/passwd
mkdir $PRE/root/.ssh/
chmod 700  $PRE/root/.ssh/

############## syslog #############
cp $SI_CONFIG_DIR/files/syslog.conf $PRE/etc/syslog.conf
touch $PRE/var/adm/syslog
touch $PRE/var/adm/login

############## Network ############


### SSH root Login allow ###

cp $SSH_AUTH  $PRE/root/.ssh/
sed s!PermitRootLogin\ no!PermitRootLogin\ yes! $PRE/etc/ssh/sshd_config > $PRE/etc/ssh/sshd_config.sed
mv $PRE/etc/ssh/sshd_config.sed $PRE/etc/ssh/sshd_config

## Network Base ##

# LACP for Nics
# ip for configured device to use  eg 10.1.1.1
IP=192.168.10.1

# netmasks for configured device eg 255.255.255.0
Netmasks=255.255.255.192

# DNS
DNS1="192.168.1.1"
DNS2="8.8.8.8"
DNS3="4.4.4.4"
DOMAIN="domain.foo"
SEARCH1="andere.domain.foo"
SEARCH2="super.domain.foo"
SEARCH3="domain.foo"

## LACP fuer Cisco ##

# Nics for LACP
Nic1="e1000g0"
Nic2="e1000g1"
vNics="$Nic1 $Nic2"

# set default route
GW="192.168.1.1"

showError() {
        echo "$0: $1"
        exit 1
}

# exit if no ip or netmask
[ -z "$IP" -o  -z "$Netmasks" ] && showError "IP and Netmasks must be defined"


# Shutdown Nics for dladm
ifconfig $Nic1 unplumb && ifconfig $Nic2 unplumb 
[ $? != 0 ] && showError "error unplumbing $vNics"

# configure and plumb device
dladm create-aggr -R $PRE -l active -PL2 -d $Nic1 -d $Nic2  1
[ $? != 0 ] && showError "error configuring aggr1 with dladm and $vNics"

ifconfig aggr1 plumb
ifconfig aggr1 $IP netmask $Netmasks up
[ $? != 0 ] && showError "error bringing up aggr1 with ifconfig $IP netmask $Netmasks "

## store nic details ##
echo $IP >$PRE/etc/hostname.aggr1
IP=`echo $IP|cut -f1-3 -d\\.`.0
echo "$IP $Netmasks" >>$PRE/etc/netmasks
echo "$GW" >$PRE/etc/defaultrouter
echo "domain $DOMAIN"  > $PRE/etc/resolv.conf
echo "search $DOMAIN $SEARCH1 $SEARCH2 $SEARCH3"  >> $PRE/etc/resolv.conf
echo "nameserver $DNS1"  >> $PRE/etc/resolv.conf
echo "nameserver $DNS1"  >> $PRE/etc/resolv.conf
echo "nameserver $DNS1"  >> $PRE/etc/resolv.conf


############### ZFS ################

## create datasets ##

zfs create -o mountpoint=/zone rpool/zone
zfs create -o quota=20g -o mountpoint=/zone/bacula rpool/zone/bacula 

## ISCSI initiator options ##

# disable naggle Algo

echo 'tcp-nodelay=1;' >> $PRE/kernel/drv/iscsi.conf

############## Packages ###############

echo "Install additinal packages"

# Bacula Backup
cd $PRE && tar xf $SI_CONFIG_DIR/packages/bacula-sparc.tar

# pkg Admin file for installing packages without questions and basedir /a
cp $SI_CONFIG_DIR/packages/admin /var/sadm/install/admin/default
pkgadd -d $SI_CONFIG_DIR/packages/libintl-3.4.0-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/libgcc-3.4.6-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/iperf-2.0.5-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/nc-110-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/screen-4.0.3-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/popt-1.14-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/rsync-3.0.9-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/libiconv-1.14-sol10-sparc-local -R $PRE/ -n all
pkgadd -d $SI_CONFIG_DIR/packages/openssl-1.0.0g-sol10-sparc-local -R $PRE/ -n all

# nagios / icinga
cd $PRE && tar xf $SI_CONFIG_DIR/packages/nagios-sparc.tar
chown 100:100 $PRE/usr/local/icinga
echo 'nagios:x:100:1::/usr/local/nagios:/usr/bin/bash' >> $PRE/etc/passwd
echo 'nagios::100:nagios' >> $PRE/etc/group

# Misc Files

mkdir -p $PRE/usr/local/{bin,sbin,lib,man,var}
cp $SI_CONFIG_DIR/files/nsswitch.conf  $PRE/etc
cp $SI_CONFIG_DIR/files/pca  $PRE/usr/local/bin
cp $SI_CONFIG_DIR/files/pca.conf $PRE/root/ 
cp $SI_CONFIG_DIR/files/ld.config $PRE/var/ld/ld.config
cp $SI_CONFIG_DIR/files/svc-puppetd $PRE/lib/svc/method/svc-puppetd
cp $SI_CONFIG_DIR/files/puppetd.xml $PRE/var/svc/manifest/network/
cp $SI_CONFIG_DIR/files/zonecreate $PRE/usr/local/bin
cp $SI_CONFIG_DIR/files/S99After_reboot.sh $PRE/etc/rc2.d/
cp $SI_CONFIG_DIR/packages/ruby-1.9.2p0-sol10-sparc-local $PRE/root
cp $SI_CONFIG_DIR/packages/rubygems-1.8.17.tgz $PRE/root
cp $SI_CONFIG_DIR/packages/nocheck $PRE/var/sadm/install/admin/nocheck

##### Patches #####

# Install the latest patch cluster
#
echo "Installing the latest patch cluster from Sun..."
cd $SI_CONFIG_DIR/patches/10_Recommended 
./installcluster -R $PRE --s10patchset
echo "Patch cluster installed..."

#echo "Dropping you into a shell." 
#echo "To complete the installation, and reboot this machine," 
#echo "simply 'exit' the shell." 
#/bin/sh


Man kann da viel optimieren, Fehler abfangen, auslagern etc. ... aber das darf dann jeder für sich machen :-)

Quellen


--Denny 10:48, 9. Mär. 2012 (UTC)