Solaris Jumpstart von Linux
Inhaltsverzeichnis
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
# aptitude install dhcp3-server |
- /etc/default/isc-dhcp-server
INTERFACES="eth1" |
- /etc/dhcp/dhcpd.conf
# 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
# aptitude install nfs-kernel-server |
- /etc/default/nfs-kernel-server
RPCNFSDPRIORITY=0 RPCMOUNTDOPTS=--manage-gids NEED_SVCGSSD= RPCSVCGSSDOPTS= RPCNFSDCOUNT='8 --no-nfs-version 4' |
- /etc/exports
/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.
# aptitude install tftpd-hpa |
- /etc/default/tftpd-hpa
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
# 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:
# 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:
$ 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
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
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
- http://www.krenger.ch/blog/bash-setup-in-solaris/ - Bash in Solaris
- http://www.5dollarwhitebox.org/wiki/index.php/Projects_Linux_Jumpstart_Installer - In Englisch
- http://sundgo.wordpress.com/2008/10/18/jumpstart/ - Andere Anleitung, selbes Ziel
- http://kdl.nobugware.com/post/2009/07/28/ultimate-solaris-10-jumpstart-profile/ - Jumpstart Profil
- http://sysadminsjourney.com/content/2009/09/23/not-so-typical-jumpstart-part-three-scripts/ - Wie man Jumpstart Scripte gestalten sollte
--Denny 10:48, 9. Mär. 2012 (UTC)