Instalacja Solarisa 10 przez Custom JumpStart
Custom JumpStart to obecnie najczęściej wykorzystywany przeze mnie sposób instalacji Solarisa. Polega on na przygotowaniu serwera instalacji i zdefiniowaniu reguł dla poszczególnych klientów. Klientów możemy rozróżniać ze względu na architekturę, ilość pamięci RAM, ilość i/lub pojemność dysków itp. itd. Można też zrobić reguły dla konkretnych klientów, identyfikując ich np. po nazwie albo adresie IP. Zbiór słów kluczowych dla reguł można znaleźć w dokumentacji. Custom JumpStart jest rewelacyjnym sposobem instalacji jeśli mamy kilka(naście/set/tysięcy) maszyn do instalacji i/lub chcemy mieć taką samą konfigurację.
Pierwszym etapem w procesie instalacji JumpStart to przygotowanie serwera instalacji. Oczywiście najpierw należy ściągnąć odpowiednią wersję systemu (patrz Instalacja Solarisa z CD/DVD) i wypalić ją na CD/DVD lub podmontować obraz ISO. Jeśli na serwerze, z którego będziemy instalować następne maszyny mamy uruchomionego automountera, to po włożeniu CD/DVD do napędu w katalogu /cdrom będziemy mieli zamontowaną zawartość płyty – z tym raczej nie powinno być problemu. Ja jednak nie lubię chodzić do serwerowni ani niepotrzebnie wypalać płyt, więc ściągam obraz ISO odpowiedni dla architektury docelowej wrzucam go przez SFTP na serwer (który może być nawet w innej architekturze) i tam go montuje na urządzeniu wirtualnym:
# lofiadm -a `pwd`/sol-10-u7-ga-sparc-dvd.iso
/dev/lofi/1
# mount -F hsfs -r /dev/lofi/1 /cdrom
Zakładam więc w tym miejscu, że w katalogu /cdrom mamy podmontowany nośnik z systemem Solaris 10. Uruchamiam więc tworzenie serwera instalacji, jako katalog docelowy wybieram /data/install/Sol10-U7-SP (Solaris 10 Update7 SPARC):
# cd /cdrom/Solaris_10/Tools
# ./setup_install_server /data/install/Sol10-U7-SP
Verifying target directory...
Calculating the required disk space for the Solaris_10 product
Calculating space required for the installation boot image
Copying the CD image to disk...
Copying Install Boot Image hierarchy...
Copying /boot netboot hierarchy...
Install Server setup complete
Teraz czas na przygotowanie reguł dla instalacji JumpStart. Najlepiej skopiować sobie przykładowe reguły i dostosować je do własnych potrzeb. Znajdziemy je w podkatalogu Misc serwera instalacji utworzonego w poprzednim kroku:
# cp -RPp /data/install/Sol10-U7-SP/Solaris_10/Misc/jumpstart_sample /data/install/jumpstart
Następnie przygotowujemy plik opisu instalacji, wygląda to mniej więcej tak:
install_type initial_install
system_type server
partitioning explicit
#usedisk c1t0d0 c1t1d0
metadb c1t0d0s7 count 4
metadb c1t1d0s7 count 4
filesys mirror:d0 c1t0d0s0 c1t1d0s0 8192 / logging
filesys c1t0d0s1 16384 swap
filesys c1t1d0s1 16384 swap
filesys mirror:d50 c1t0d0s5 c1t1d0s5 16384 /var logging
filesys mirror:d60 c1t0d0s6 c1t1d0s6 16384 /usr logging
filesys mirror:d30 c1t0d0s3 c1t1d0s3 512 /globaldevices logging
filesys mirror:d40 c1t0d0s4 c1t1d0s4 free /local logging
cluster SUNWCreq
#
package SUNWauda delete
package SUNWcnsr delete
package SUNWcnsu delete
...
package SUNWaccr
package SUNWaccu
package SUNWadmap
package SUNWadmc
...
pokrótce mówiąc, powyższe spowoduje: zainstalowanie systemu od nowa (initial_install) w systemie serwerowym, z określonym ściśle partycjonowaniem dysku (explicit). Na dyskach c1t0d0 i c1t1d0 zostaną utworzone slice’y na repliki baz (metadb) oraz mirrorowane slice’y na systemy plików. Odpowiednio: 8 GB na /, po 16 GB na /usr, /var i swap. Pozostawiam 512 MB na /globaldevices pod instalację klastrową. Reszta będzie podmontowana jako /local. Zostaną zainstalowane pakiety core, czyli praktycznie te wymagana do uruchomienia systemu. Resztę pakietów do usunięcia i instalacji wyszczególniam explicite.
Oczywiście partycjonowanie dysku zależy od potrzeb systemu/użytkownika i wielkości dysku, można też wybrać partycjonowanie automatyczne. Podobnie listę pakietów należy dostosować do swoich potrzeb. Listę słów kluczowych można oczywiście znaleźć w dokumentacji na stronach SUN.
W nowszych wersjach systemu Solaris 10 (od Update 6, 10/08) można już tworzyć root filesystem w systemie plików ZFS. W tym celu zamiast całej sekcji od partitioning
do filesys
włącznie można zastąpić jedną linią, która utworzy odpowiednią pulę dyskową i założy filesystemy:
pool zfsroot auto 16g auto mirror c1t0d0s0 c1t1d0s0
Uwaga: pulę na root filesystem tworzymy podając slice’y a nie na całe dyski. Jest to opisane w dokumentacji.
Plik zapisujemy na dysku w katalogu jumpstart, ja nadałem nazwę V890_servers
, gdyż będę go używał do instalowania wszystkich serwerów Sun Fire V890. Można sobie też przygotować skrypty pre- i postinstalacyjne, które zostaną wykonane odpowiednio przed lub po zakończeniu instalacji. Ja przygotowałem sobie skrypt, który oszczędza mi trochę pracy i ustawia środowisko, kawałek poniżej:
#!/bin/sh
echo "Setting /etc/default PATH and SUPATH variables"
echo "PATH=/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb" >> /a/etc/default/login
echo "SUPATH=/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb" >> /a/etc/default/login
echo "PATH=/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb" >> /a/etc/default/su
echo "SUPATH=/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin:/usr/ucb" >> /a/etc/default/su
Zapisuję go w katalogu jumpstart
jako V890_finish.sh
i dopisuję do pliku rules
aby z tych plików korzystał:
model SUNW,Sun-Fire-V890 - V890_servers V890_finish.sh
Słowa kluczowe i przykłady zastosowania można znaleźć w samym pliku rules
i oczywiście w dokumentacji. Po każdej zmianie w pliku rules
należy dokonać jego walidacji skryptem ./check
, który powinien znajdywać się w katalogu jumpstart
. Jeśli wszystko jest w porządku to powstanie plik rules.ok
.
Polecam też przygotowanie pliku sysidcfg
, nie jest to wymagane przy instalacji JumpStart, ale zwalnia nas z obowiązku odpowiadania na pytania konfiguracyjne podczas instalacji. Plik ten musi się nazywać sysidcfg
więc jeśli chcemy instalować więcej niż jeden serwer to trzeba te pliki umieszczać w osobnych katalogach. Ja wrzucam to do /data/install/profiles/nazwa-serwera/sysidcfg
. Opis słów kluczowych i wartości można oczywiście znaleźć w dokumentacji, u mnie wygląda to mniej więcej tak:
system_locale=C #install_locale=pl_PL.UTF-8 # lepiej ustawic locale na C timezone=Poland timeserver=localhost terminal=vt100 #nfs4_domain=DYNAMIC # lepiej ustawic, bo pozniej bywaja klopoty z NFS nfs4_domain=priv.moja.domena.tld name_service=NONE network_interface=eri0 { primary hostname=nazwa ip_address=192.168.1.10 netmask=255.255.255.0 default_route=NONE protocol_ipv6=no } network_interface=qfe0 { hostname=nazwa.moja.domena.tld ip_address=ADD.RE.SS.IP netmask=255.255.255.0 default_route=ADD.RE.SS.RTR protocol_ipv6=no } security_policy=NONE service_profile=limited_net
Oczywiście ustawiamy nazwy interfejsów, serwera i adresy IP właściwe dla naszych potrzeb, ja podałem tu przykładowe, interfejs eri0 dla sieci prywatnej 192.168.1.0 i qfe0 dla sieci publicznej. Podstawowym interfejsem jest tu eri0 i instalacja odbędzie się po sieci prywatnej.
Wcześniej można/trzeba jeszcze wyeksportować odpowiednie katalogi po NFSie:
# share -F nfs -o ro=@192.168.1.0,anon=0 /data/install/Sol10-U7-SP
# share -F nfs -o ro=@192.168.1.0,anon=0 /data/install/jumpstart
# share -F nfs -o ro=@192.168.1.0,anon=0 /data/install/profiles
i dodać klienta do serwera instalacji, MAC adres bierzemy z podstawowego interfejsu klienta (u mnie eri0), zakładamy, że serwer instalacji ma adres 192.168.1.4:
# cd /data/install/Sol10-U7-SP/Solaris_10/Tools/
# ./add_install_client -e 0:14:4f:MA:C:AD -s 192.168.1.4:/data/install/Sol10-U7-SP \
-c 192.168.1.4:/data/install/jumpstart \
-p 192.168.1.4:/data/install/profiles/nazwa-serw nazwa-serw sun4u
Adding "share -F nfs -o ro,anon=0 /data/install/Sol10-U7-SP/Solaris_10/Tools/Boot" to /etc/dfs/dfstab
share_nfs: /data/install/Sol10-U7-SP/Solaris_10/Tools/Boot: parent-directory (/data/install/Sol10-U7-SP) already shared
cleaning up preexisting install client "nazwa-serw"
updating /etc/bootparams
W tym miejscu proces przygotowania do instalacji można uznać za zakończony. Teraz logujemy się na konsolę klienta (serwera), na którym chcemy zainstalować system i z poziomu BootPROM wydajemy polecenie instalacji:
{10} ok boot net - install Resetting ...
Po kilku linijkach self-testu i przedstawieniu się systemu powinniśmy zobaczyć coś takiego:
Rebooting with command: boot net - install Boot device: /pci@9,700000/network@1,1 File and args: - install Requesting Internet Address for 0:14:4f:MA:C:AD Requesting Internet Address for 0:14:4f:MA:C:AD Requesting Internet Address for 0:14:4f:MA:C:AD /
jeśli w ostatniej linijce mamy zmieniające się znaki /-|\ dające efekt obrotu, to znaczy, że nasza instalacja wystartowała poprawnie i możemy iść do domu/na kawę/whatever.
Po jakimś (nie wiedzieć czemu bardzo długim) czasie powinien pokazać się banner:
SunOS Release 5.10 Version Generic_139555-08 64-bit Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Configuring devices. SUNW,eri0 : 100 Mbps half duplex link up
i informacja o próbach konfiguracji kart sieciowych oraz dalsze kroki instalacji. Wszystko dzieje się automagicznie, chyba że w pliku sysidcfg brakuje opcji konfiguracyjnych, które są wymagane (np. hasło roota – wtedy należy wprowadzić je i potwierdzić).
... Skipped interface ge0 Attempting to configure interface eri0... Configured interface eri0 Reading ZFS config: done. Setting up Java. Please wait... Serial console, reverting to text install Beginning system identification... Searching for configuration file(s)... Using sysid configuration file 192.168.1.4:/data/install/profiles/nazwa-serw/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.1.4:/data/install/jumpstart. Checking rules.ok file... Using profile: V890_servers Using finish script: V890_finish.sh 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. ... - Selecting all disks - Configuring boot device - Configuring / (c1t0d0s0) - Configuring (c1t1d0s0) - Automatically configuring disks for Solaris operating system - Deselecting unmodified disk (c1t2d0) - Deselecting unmodified disk (c1t3d0) - Deselecting unmodified disk (c1t4d0) ... Verifying disk configuration Verifying space allocation - Total software size: 1057.69 Mbytes Preparing system for Solaris install Configuring disk (c1t0d0) - Creating Solaris disk label (VTOC) Configuring disk (c1t1d0) - Creating Solaris disk label (VTOC) - Creating pool zfsroot - Creating swap zvol for pool zfsroot - Creating dump zvol for pool zfsroot Creating and checking file systems - Creating zfsroot/ROOT/s10s_u7wos_08 dataset Beginning Solaris software installation Starting software installation SUNWlucfg........................done. 1057.61 Mbytes remaining. SUNWcsu..........................done. 1042.15 Mbytes remaining. ... Completed software installation Solaris 10 software installation succeeded Customizing system files - Mount points table (/etc/vfstab) - Unselected disk mount points (/var/sadm/system/data/vfstab.unselected) - 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 (c1t0d0s0) - Installing boot blocks (/dev/rdsk/c1t0d0s0) - Installing boot blocks (/dev/rdsk/c1t1d0s0) Installation log location - /a/var/sadm/system/logs/install_log (before reboot) - /var/sadm/system/logs/install_log (after reboot) Installation complete Executing SolStart postinstall phase... Executing finish script "patch_finish"... Finish script patch_finish execution completed. Executing JumpStart postinstall phase... Executing finish script "V890_finish.sh"...
tutaj zaczyna się działanie skryptu postinstalacyjnego, u mnie nazywa się on V890_finish.sh
:
Setting /etc/default PATH and SUPATH variables Setting /etc/netmasks Setting /etc/profile EDITOR and MANPATH variables ... Finish script V890_finish.sh execution completed. 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. Creating boot_archive for /a updating /a/platform/sun4u/boot_archive 15+0 records in 15+0 records out syncing file systems... done rebooting... Resetting ...
Po reboocie powinniśmy znów zobaczyć banner, informację o ładowaniu opisów usług (SMF), tworzeniu kluczy SSH i prompt logowania na konsolę:
SunOS Release 5.10 Version Generic_139555-08 64-bit Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Hostname: nazwa-serw SUNW,eri0 : 100 Mbps full duplex link up Configuring devices. Loading smf(5) service descriptions: 120/120 Reading ZFS config: done. Mounting ZFS filesystems: (5/5) Creating new rsa public/private host key pair Creating new dsa public/private host key pair nazwa-serw console login:
Oczywiście powyższe jest zależne od wersji Solarisa, tego jakie pakiety zostały zainstalowane, jaki system plików został wybrany itd. Ale ogólnie rzecz biorąc świadczy to, że system został zainstalowany.
Jeśli komuś uda się ta sztuka za pierwszym razem, to chylę czoła, zwykle trzeba poświęcić sporo czasu na wytworzenie właświwego profilu instalacji i konfiguracji, ale później i tak się to opłaca, bo na kolejnych maszynach robimy już tylko boot net - install
, idziemy do domu i przychodzimy rano na gotowe. Zresztą stara zasada informatyczna/elektroniczna mówi, że jak program/układ zadziała za pierwszym razem to na pewno jest wadliwy 😉
Ja na przykład przy tej konkretnej instalacji postanowiłem użyć systemu ZFS na root filesystem i natknąłem się na błąd:
ERROR: (_app_set_slice) Disk is not selected
spowodowane było to tym, że na jednym z dysków, na których jest root filesystem był już założony label EFI (cały dysk był wcześniej wykorzystywany w puli ZFS). Oczywiście jest w dokumentacji wzmianka o tym w ograniczeniach, ale sądziłem, że instalator sobie z tym poradzi. Okazuje się zresztą, że nie tylko ja się na tym wyłożyłem, bo znalazłem też o tym wątek na forum. Aby to naprawić trzeba uruchomić format -e
i ustawić etykiety SMI na dyskach wykorzystywanych do bootowania.