Már írtam a Solaris tipikus deployment tooljáról a Jumpstart-ról. Ez egy a telepítőkön található script, mely képes NFS-es megosztások révén hálózati telepítő funkcióval felruházni akármely Solaris 10 rendszert. Eléggé puritán dologról van szó, és a legtöbb esetben a megfelelő konfigurációs állományokat az adminisztrátornak magának kell megírnia. A JumpStart Enterprise Toolkit (JET), semmilyen többlet tudással nem vértezi fel a rendszerünket, csupán a jumpstart funkcióinak egyszerűbb és gyorsabb élérhetőséget teszi lehetővé. Nézzük is hogyan.

Letöltés és installáció

Sajnos a JET-nek nincs valami nagyon informatív és vizuális hivatalos weboldala. A legtöbb információt itt lehet megtalálni, ahol elérhető a legutolsó (jelenleg 4.8) telepítő csomag is.

A 300kb-os telepítő is sokat elárul erről a JET csomagról. Telepítsük a jól megszokott módon:

# pkgadd -d SUNWjet

A csomag az /opt alá fog létrehozni egy SUNWjet könyvtárstruktúrát.

A továbbiakban létre kell hoznunk tetszőleges volume managerrel, és tetszőleges filesystemen három helyet. (Én ilyen tagoltságot, választottam és a bemutató is ezt fogja követni, habár egyszerűbben is megoldható)

# zfs list|grep install
store/install 11.4G 89.6G 63.5M /store/install
store/install/media 4.21G 89.6G 4.21G /store/install/media
store/install/patches 7.15G 89.6G 7.15G /store/install/patches
store/install/pkgs 16.3M 89.6G 16.3M /store/install/pkgs

Ezeket persze meg is kell osztanunk NFS-en keresztül. Részletesen erről itt lehet olvasni.

#zfs get sharenfs|grep install
store/install sharenfs off local
store/install/media sharenfs ro,anon=0 local
store/install/patches sharenfs ro,anon=0 local
store/install/pkgs sharenfs ro,anon=0 local

Ezeket a könyvtárakat adjuk is meg a JET jumpstart konfigurációs állományának:

# vi /opt/SUNWjet/etc/jumpstart.conf

JS_Default_Root_PW=boajrOmU7GFmY
JS_BUILD_DIR=/var/opt/sun/jet
JS_PKG_DIR=/store/install/pkgs
JS_PATCH_DIR=/store/install/patches

JS_CFG_SVR=
JS_SOLARIS_DIR=/store/install/media
#JS_DHCP_VENDOR=”SUNW.Ultra-5_10 SUNW.Ultra-30″
#JS_CLIENT_MANAGEMENT=”dhcp bootp”
JS_CLIENT_MANAGEMENT=”bootp”
JS_CLIENT_BOOT=”local”

JET előkészítés

Ha telepítve van a csomag, akkor első lépésként, ugyan úgy ahogy a jumpstart esetében, itt is a megfelelő telepítő médiákról kell gondoskodnunk.

Ezt megtehetjük a CD/DVD olvasóban lévő médi által a következő képpen:

# cd /opt/SUNWjet/bin
# ./copy_solaris_media -d /store/install/media/sol10u9_sparc -n sol10u9_sparc /cdrom/sol10_11_10

Vagy egyből ISO imageből a következő kép:

# cd /opt/SUNWjet/bin
# ./copy_solaris_media -d /store/install/media/sol10u9_sparc -n sol10u9_sparc -i /store/software/SunOS5.10/Sparc/ sol-10-u9-ga-sparc-dvd.iso

A script argumentumai a következőek:

-d : A hely ahová másolja az adott telepítő médiát
-n : Az adott jumpstart média hivatkozási neve a továbbiakban
-i : Ha iso image-t akarunk megadni, abban az esetben az iso könyvtára majd szóközzel elválasztva a file neve.

Ha ez lefut, akkor a következő paranccsal tudjuk lekérni az elérhető jumpstart médiákat:

./list_solaris_locations

Nem egy varázslat ez persze, egy egyszerű másolás, és egy meghatározott text alapú file-ról van szó. Ezt akár kézzel is módosíthatjuk ha szükséges a /opt/SUNWjet/etc/solaris_media_locations-ban.

A JET mindent a maga kis struktúrájába szervez. Amennyiben gondoskodtunk már a telepítő médiáról, akkor még opcionálisan gondoskodhatunk patchekről.

# ./copy_solaris_patches 10_sparc /home/mpaluska

Értelem szerűen azt a könyvtárat kell csak megadnunk, ahol a Patcheket találni fogja.

Készítsünk Templateket és Clienteket

Most, hogy minden szükséges állományt megfelelően strukturáltan beimportáltunk a JET struktúrájába, elkezdhetjük a szükséges config állományokat létrehozni. Alapvetően, ugye kellene nekünk egy sysidcfg és profile file. Ezek írogatása helyett, a JET kínál számunkra templateket.

A template nem más mint előre megírt konfigurációs filek. Minden témához egy-egy. Ezek egymás után fűzésével tudunk kialakítani egy alapot a leendő gépünk számára. Nézzük, hogy is működik ez:

# cd /opt/SUNWjet/bin/
Adding product configuration information for
+ base_config
+ custom
+ sds
+ vts
+ explo
+ flash
+ san
+ jass
+ zones
+ sbd
+ ldom
+ zfs
Updating base_config template specifics
Client template created in /opt/SUNWjet/Templates

Mint látszik a make_template parancs után, csupán a leendő gép nevét kellett megadnunk. Automatikusan az összes elérhető template modul betöltődik ebbe a configba.

Amennyiben tudjuk jól, hogy mely modulokat akarjuk csak betölteni, azokat fel is sorolhatjuk. (a -f kapcsolót tudjuk használni egy már meglévő file felülírásához, ilyenkor viszont minden már a file-ba kézzel módosított dolog is felül fog íródni!)

# cd /opt/SUNWjet/bin/
# ./make_template -f test base_config sds custom
Adding product configuration information for
+ base_config
+ sds
+ custom
Updating base_config template specifics
Client template created in /opt/SUNWjet/Templates

Az így létrehozott file-t a /opt/SUNWjet/Templates/test alatt fogjuk megtalálni. Ez egy JET szöveges konfigurációs file, ami a template modulok alapján jött. Elég informatív. Minden beállítás előtt hosszú kikommentezett magyarázat található.

Fent látszik egy aprócska rész az igen-igen hosszú konfigból. Értelemszerűen amit nem használunk kommentezzük csak ki.

Íme egy működő JET konfiguráció, amivel én telepítettem. Természetesenkiszedve a kommentelt és üres sorokat:

# egrep -v “#|^$” /opt/SUNWjet/Templates/netra

base_config_ClientArch=sun4u
base_config_ClientEther=08:00:20:f9:e5:63
base_config_ClientOS=sol10u9_sparc
base_config_client_allocation=”bootp”
base_config_products=” custom sds sbd jass explo”
base_config_sysidcfg_nameservice=NONE
base_config_sysidcfg_network_interface=hme1
base_config_sysidcfg_ip_address=192.168.132.6
base_config_sysidcfg_netmask=255.255.255.128
base_config_sysidcfg_root_password=”ViJAU76UWdw4A”
base_config_sysidcfg_system_locale=”C”
base_config_sysidcfg_timeserver=localhost
base_config_sysidcfg_timezone=”MET”
base_config_sysidcfg_terminal=vt100
base_config_sysidcfg_security_policy=NONE
base_config_sysidcfg_protocol_ipv6=no
base_config_sysidcfg_default_route=192.168.132.126
base_config_sysidcfg_auto_reg=disable
base_config_sysidcfg_auto_reg_oracle_user=””
base_config_sysidcfg_auto_reg_oracle_pw=””
base_config_sysidcfg_auto_reg_http_proxy_host=””
base_config_sysidcfg_auto_reg_http_proxy_port=””
base_config_sysidcfg_auto_reg_http_proxy_user=””
base_config_sysidcfg_auto_reg_http_proxy_pw=””
base_config_label_disks=”all”
base_config_profile_fdisk=””
base_config_profile=””
base_config_profile_append=””
base_config_profile_cluster=SUNWCXall
base_config_profile_usedisk=rootdisk.
base_config_profile_dontuse=””
base_config_profile_root=6000
base_config_profile_swap=2048
base_config_profile_s3_mtpt=”/var”
base_config_profile_s3_size=”4000″
base_config_ufs_logging_filesys=”all”
base_config_nodename=”netra”
base_config_defaultrouter=”192.168.132.126″
base_config_notrouter=””
base_config_dns_domain=”test.oss”
base_config_dns_nameservers=”192.168.132.1″
base_config_dns_searchpath=”test.oss”
base_config_dns_disableforbuild=”no”
base_config_ntp_servers=”192.168.132.1″
base_config_update_terminal=”yes”
base_config_enable_savecore=”yes”
base_config_dumpadm_minfree=”20000k”
base_config_noautoshutdown=”pm_disabled”
base_config_enable_rootlogin=””
base_config_enable_rootftp=””
base_config_shutup_sendmail=””
base_config_poweroff_afterbuild=””
base_config_dedicated_dump_device=””
base_config_enable_altbreak=””
base_config_disable_sysid_probe=””
base_config_productdir=”/store/install/pkgs”
base_config_patchdir=”/store/install/patches”
custom_search_path=”../common.files”
custom_scripts_1=””
custom_scripts_m=””
custom_scripts_n=”general-post.sh”
sds_product_version=”default”
sds_nummetasets=””
sds_nummetadevices=””
sds_root_mirror=”c0t1d0″
sds_use_fmthard=”yes”
sds_database_locations=”rootdisk.s7:3″
sds_database_partition=”s7:32″
sds_metadb_size=””
sds_root_alias=”rootdisk”
sds_root_mirror_devalias_name=”rootmirror”
sds_mirrored_root_flag=”yes”
sds_device_numbers=”/:d10:d11:d12 /var:d30:d31:d32″
sds_md_tabfiles=”md.tab”

Nem kívánok abba belemenni, hogy melyik változó miért lett megadva, vagy miért kellett. Aki elkezdi szerkeszteni, az úgy is szépen végig kell, hogy értelmezze maga ezeket. Természetesen minden szükséges változó előtt lesz bő magyarázat a funkcióról és a használatról is.

Amint megvan a fenti konfigunk, az akkor abból már csak a szükséges jumpstart állományokat kell kiexportálnunk.

# cd /opt/SUNWjet/bin/
# ./make_client -f netra

Ez a make_client script rengeteg szintaktikai és szemantikai ellenőrzést végez a neki átadott szerkesztett template file-on. Amennyiben nem lesz minden rendben hibát fog visszadobni, amit javítani kell. Amennyiben viszont minden rendben talál akkor a fentiek szerint le fog futni, és elkészíti a szükséged fileket.

bash-3.00# ls -lah /opt/SUNWjet/Clients/netra/
total 150
drwxrwsr-x 2 root root 512 Mar 11 19:31 .
drwxrwsr-x 11 root jet 512 Mar 9 08:34 ..
-rw-r–r– 1 root root 69K Mar 11 19:31 host.config
-rw-r–r– 1 root root 781 Mar 11 19:31 module_hints
-rw-r–r– 1 root root 349 Mar 11 19:31 profile
-rw-r–r– 1 root root 294 Mar 11 19:31 sysidcfg

BOOTP vs. DHCP

A fenti példában jól szembetűnik, hogy tftp, bootp, dhcp servicek konfigurációjával, vagy indítgatásával nem törődtünk. Ugyanis ezt is make_client script elvégzi. Viszont meg kell különböztetnünk SPARC és x86 gépeket. A SPARC gépek BOOTP míg a x86 alapú gépek DHCP alapon kezdik meg a netboot-ot. A BOOTP esetén nincs semmi gond, csupán a telepítendő gép MAC address-ét szükséges helyesen megadni. A DHCP viszont egy fokkal nyűgösebb. Ugyanis a DHCP esetén azon túl, hogy a JET template-t megfelelőképp átírjuk, még a DCHP service-t is konfigurálnunk kell. Természetesen ebben is segítségünkre lesz a JET.

Íme itt egy x86 működő, átírt jet Template:

# egrep -v “#|^$” /opt/SUNWjet/Templates/sol10-sc1

base_config_ClientArch=i86pc
base_config_ClientEther=0:50:56:96:0:2b
base_config_ClientOS=sol10u9_x86
base_config_client_allocation=”grub”
base_config_grub_append=””
base_config_grub_timeout=””
base_config_grub_singleuser=””
base_config_menulst_append=””
base_config_products=” custom zfs jass explo”
base_config_sysidcfg_nameservice=NONE
base_config_sysidcfg_network_interface=PRIMARY
base_config_sysidcfg_ip_address=192.168.132.14
base_config_sysidcfg_netmask=255.255.255.128
base_config_sysidcfg_root_password=”ViJAU76UWdw4A”
base_config_sysidcfg_system_locale=”C”
base_config_sysidcfg_timeserver=localhost
base_config_sysidcfg_timezone=”MET”
base_config_sysidcfg_terminal=vt100
base_config_sysidcfg_security_policy=NONE
base_config_sysidcfg_protocol_ipv6=no
base_config_sysidcfg_default_route=192.168.132.1
base_config_sysidcfg_auto_reg=disable
base_config_sysidcfg_auto_reg_oracle_user=””
base_config_sysidcfg_auto_reg_oracle_pw=””
base_config_sysidcfg_auto_reg_http_proxy_host=””
base_config_sysidcfg_auto_reg_http_proxy_port=””
base_config_sysidcfg_auto_reg_http_proxy_user=””
base_config_sysidcfg_auto_reg_http_proxy_pw=””
base_config_x86_nowin=”yes”
base_config_x86_console=””
base_config_x86_disable_acpi=””
base_config_x86_safetoreboot=””
base_config_x86_disable_kdmconfig=””
base_config_x86_confflags=””
base_config_sysidcfg_x86_kdmfile=””
base_config_label_disks=”all”
base_config_profile_fdisk=””
base_config_profile=””
base_config_profile_append=””
base_config_profile_cluster=SUNWCXall
base_config_profile_zfs_disk=”any”
base_config_profile_zfs_pool=”rpool”
base_config_profile_zfs_be=”original”
base_config_profile_zfs_size=”auto”
base_config_profile_zfs_swap=”auto”
base_config_profile_zfs_dump=”auto”
base_config_profile_zfs_compress=””
base_config_profile_zfs_var=””
base_config_profile_usedisk=rootdisk.
base_config_profile_dontuse=””
base_config_profile_root=8000
base_config_profile_swap=2048
base_config_profile_additional_disks=””
base_config_profile_add_locales=””
base_config_profile_del_locales=””
base_config_profile_add_geos=””
base_config_profile_del_geos=””
base_config_profile_add_packages=””
base_config_profile_del_packages=””
base_config_profile_add_clusters=””
base_config_profile_del_clusters=””
base_config_recpatch_passcode=””
base_config_nfs_mounts=””
base_config_nodename=”sol10-sc1″
base_config_defaultrouter=”192.168.132.126″
base_config_notrouter=””
base_config_dns_domain=”test.oss”
base_config_dns_nameservers=”192.168.132.1″
base_config_dns_searchpath=”test.oss”
base_config_dns_disableforbuild=”yes”
base_config_ntp_servers=”192.168.132.1″
base_config_update_terminal=”yes”
base_config_enable_savecore=”yes”
base_config_dumpadm_minfree=”20000k”
base_config_noautoshutdown=”pm_disabled”
base_config_enable_rootlogin=””
base_config_enable_rootftp=””
base_config_shutup_sendmail=””
base_config_poweroff_afterbuild=””
base_config_dedicated_dump_device=””
base_config_enable_altbreak=””
base_config_disable_sysid_probe=””
base_config_nfsv4_domain=””
base_config_media=””
base_config_client_boot=””
base_config_productdir=”/store/install/pkgs”
base_config_patchdir=”/store/install/patches”
base_config_debug_jumpstart_postinstall=””
custom_packages=””
custom_packages_1=””
custom_packages_m=””
custom_packages_n=””
custom_patches=””
custom_patches_1=””
custom_patches_m=””
custom_patches_n=””
custom_patchsets=””
custom_patchsets_1=””
custom_patchsets_m=””
custom_patchsets_n=””
custom_search_path=”../common.files”
custom_files=””
custom_files_1=””
custom_files_m=””
custom_files_n=””
custom_scripts_1=””
custom_scripts_m=””
custom_scripts_n=”general-post.sh”
custom_scripts_b=””
custom_scripts_f=””

Mielőtt elkészítenénk a make_client-el a megfelelő jumpstart állományokat először akiváljuk a dhcp-t.

Ehhez szerkesszük meg a következő file-t:

# cp /opt/SUNWjet/Products/base_config/solaris/make_dhcp /tmp/
# vi /tmp/make_dhcp

Ahogy látszik fent is, csupán a hálózat, netmask, router változókat kell definiálni.

Ezek után pedig futtathatóvá tenni és lefuttatni.

Mostantól nyugodtan adhatunk meg ebbe a hálózatba netboot klienseket.

Hogy is települ most akkor a gép?

Jogos kérdés, ha most minden be van állítva. Akkor, hogy is tudjuk rávenni a távoli gépeket, hogy a JET segítségével induljanak.

Ez hasonlóan a sima Jumpstarthoz a következő képen tehető meg:

SPARC:

OK promptban kiadandó a parancs, és fontos, hogy a net devalias arra az interface-ra mutasson, amelyik MAC addresset a JET-be definiáltuk.

ok> boot net – install

Itt elérhető a fenti SPARC JET template installálásának logja, amely a kliens gépen.

x86:

BIOS-ban vagy előre hozni a net (PXE) boot-ot, vagy rendszer hiányában kivárni amíg a boot szekvencia oda ér.



Speciális modulok és custom scriptek

Természetesen, ha automatizálni akarjuk a telepítést, akkor azt szeretnénk, hogy minél kevesebb utómunkát kelljen a rendszeren véghezvinnünk. Mondjuk semmit se.

Ehhez vannak alapból hasznos modulok. Az SUN explorer-ről már írtam, ennek a telepítése és első futása is integrálható a JET-be. Ehhez egy részt hozzá kell adnunk a templatünkhöz a megfelelő explo modult, és a konfigban kitölteni az explorer részt megfelelőképpen. Másrészről pedig a telepítő csomagról is gondoskodnunk kell. Sajnos külön Sparc és külön x86 platformhoz is.

# cd /opt/SUNWjet/bin/
# ./copy_product_media explo explo 6.0 /path/of/the/source/package/location

Ugyan ez a helyzet a JASS hardeningel. Amennyiben a telepítés alatt akarjuk, hogy JASS security hardening fusson le a gépünkün, akkor egyrész a JET template-hoz hozzá kell adnunk, a jass modult. Másrészről gondoskodnunk kell platformonként a csomagról.

# cd /opt/SUNWjet/bin/
# ./copy_product_media explo jass 4.2.0 /path/of/the/source/package/location

Természetesen nem lehet mindenre egy modul, így lehetőségünk van custom scripteket írni. Egyrészről definiálhatunk, minden jumpstart profil számára elérhető közös (common) scripteket, vagy csak és kizárólag az adott gép számára delegált scripteket. Ezek shell scriptek legyenek.

A custom template module betöltése után a custom értékeket kell ilyenkor szerkesztgetni.

custom_search_path=”../common.files”
résznél tudjuk definiálni a közös path elérését. Amit a fenti megadás szerint a /opt/SUNWjet/Clients/common.files/ path alatt fog keresni, a gép specifikus shell scripteket pedig a /opt/SUNWjet/Clients/[profile_neve]/ könyvtárba helyezzük el. Fontos, hogy egyéni scriptek futtatására telepítés, rebootok előtt, után külön van lehetőségünk.

Persze a custom alatt nem csak scripteket, packageket, sőt, patcheket is adhatunk meg.

Összefoglalás

Természetesen nem volt időm, és lehetőségem teljesen kivesézni a jumpstartot. Olyan lehetőségek, mint metadevicek tűkrözése, metasetek létrehozása, zfs poolok, telepítés flash archiveból is elérhetőek a JET által.

Bár a magyarázat és a bemutató hosszúra sikerült, de remélem szembeötlő, hogy a telepítés konfigurálásához alig pár parancsot is elég használni. A JET teljesen elénk tesz, és összeszed számunkra mindent.

Használata könnyű, és általa tényleg teljes mértékben automatizálható a Solaris telepítés

Utóirat

A Solaris 10 update 9 óta, a telepítésbe bekerült egy olyan rész, ahol az Oracle regisztrációt kell definiálnunk. Természetesen ez a képernyő kihagyható. Viszont erre a JET-ben csak a 4.8-as opciótól lesz lehetőség. Tehát ha valakinek a JET megáll, ennél a sysidcfg képernyőnél, akkor valószínüleg, nem definiálta helyesen ezt az autoreg opciót a template-be, vagy nem elég friss JET-et használ.