Obsah
Solaris 10 je unixový operační systém od společnosti Sun Microsystems vydaný začátkem roku 2005. Tento manuál slouží jako popis několika použití zajímavé technologie Solaris Zones.
Solaris Zones - (dovolím si přeložit jako zóny) je technologie umožňující vytvářet a provozovat virtuální servery a tím poskytovat na nezávislé a zabezpečené prostředí pro provoz aplikací. Zóny lze provozovat v operačním sytému Solaris 10. Zóny jsou dvojího druhu - jediná globální zóna (global zone) a lokální zóny (non-global zone), kterých v globální zóně lze provozovat množství omezené pouze výkonem HW do počtu 8192 na jednom serveru.
Globální zóna je plná bootovatelná instalace operačního systému Solaris 10 na x86 nebo sparc platformě. Ne-globální zóny z globální zóny lze instalovat, startovat, monitorovat, mazat či jinak spravovat příkazy zonecfg a zoneadm.
Základní vlastností, pro někoho výhodou pro jiného omezením, je jediný kernel v systému (FS /platform, /usr a /sbin), vše ostatní je odděleno od procesu init dále (co zóna to vlastní init). Například lze využívat vlastní souborový systém, virtuální HW, samozřejmostí je oddělené jmenný prostor i prostor procesů, tedy procesy i root konta v lokálních zónách nemají přístup do jiných zón.
Souhrný soupis:
až 8192 zón na jediném fyzickém serveru
každá lokální zóna má vlastní oddělený systém kont ( například /etc/passwd), souborové systémy, zařízení, nastavení sítě, zdroje a zabezpečení.
komunikovat mezi lokálními zónami lze pouze přes síť
Solaris v zónach není nijak pozměněn, aplikace není nutno portovat
každou lokální zónu lze zapínat, vypínat nezávisle na ostatních
pro každou zónu lze přidělit systémové prostředky pomocí SW pro správu zdrojů (resource management). Například přidělit procentuální podíl na CPU nebo síťovce.
Pro instalaci jsem použil notebook jedné nejmenované značky a SW Vmware Worstation 5.0 (s demo licencí) pro snadnost instalace a snadnost testování z mého oblíbeného Debiánu.
Solaris 10 jsem nainstaloval do souboru a mnou vybraná instalace (vše bez GNU) zabírá na disku cca. 4GB prostoru. Pro Solaris 10 doporučuji min. 256MB RAM. Při 128MB v Java Desktopu (upravené Gnome) již mi odmítal spouštet procesy. :-) Instalace Solarisu do Vmware je jednoduchá, přesto doporučuji přečíst si návody na stránkách vmware.org.
Každá zóna spotřebuje minimálně 40MB RAM a 320MB na HDD.
Identifikace systému v Solarisu:
global-zone# uname -a
SunOS solaris 5.10 Generic i86pc i386 i86pcVýpis souborového systému:
global-zone# df -h
Filesystem size used avail capacity Mounted on
/dev/dsk/c0d0s0 11G 3,1G 7,5G 30% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 271M 608K 271M 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
/dev/dsk/c0d0p0:boot 10M 1,5M 8,6M 15% /boot
/usr/lib/libc/libc_hwcap1.so.1
11G 3,1G 7,5G 30% /lib/libc.so.1
fd 0K 0K 0K 0% /dev/fd
swap 271M 0K 271M 0% /tmp
swap 271M 20K 271M 1% /var/runVýpis informace o procesoru:
global-zone# psrinfo -v
Status of virtual processor 0 as of: 07/10/2005 23:01:23
on-line since 07/09/2005 20:39:45.
The i386 processor operates at 1600 MHz,
and has an i387 compatible floating point processor.Nastavení sítě v Solarisu, relevatní soubory:
global-zone# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
pcn0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2
inet 172.16.146.128 netmask ffffff00 broadcast 172.16.146.255
ether 0:c:29:7a:ce:75 global-zone# cat /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost loghost
172.16.146.130 zone1
172.16.146.128 solaris # Added by DHCP
global-zone# cat /etc/netmasks
172.16.146.0 255.255.255.0
global-zone# cat /etc/defaultrouter
172.16.146.129Vytvoření cílového adresáře pro zóny:
global-zone# mkdir /ZONEStav zón, ve výpisu je pouze globální zóna, což je hostitelský Solaris 10:
global-zone# zoneadm list -vc
ID NAME STATUS PATH
0 global running / Vytvoření zóny s názvem zone1 a nastavení automatického spuštění po startu, nastavení sítě a nakonec výpis sdílených adresářů. "pcn0" je název fyzického síťového zařízení.
global-zone# zonecfg -z zone1
zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
zonecfg:zone1> set zonepath=/ZONE/zone1
zonecfg:zone1> set autoboot=true
zonecfg:zone1> add net
zonecfg:zone1:net>
zonecfg:zone1:net> set address=172.16.146.130
zonecfg:zone1:net>
zonecfg:zone1:net> set physical=pcn0
zonecfg:zone1:net> end
zonecfg:zone1> info
zonepath: /ZONE/zone1
autoboot: true
pool:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 172.16.146.130
physical: pcn0
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1> ^DVýpis nastavení zóny a stavu zón:
global-zone# zonecfg -z zone1 info
zonepath: /ZONE/zone1
autoboot: true
pool:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 172.16.146.130
physical: pcn0Ve výpisu je globální zóna a jedna zóna pouze nakonfigurovaná:
global-zone# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
- zone1 configured /ZONE/zone1Tak a teď je čas zónu nainstalovat, doba instalace na mém notebooku trvá přibližně 15 minut.
global-zone# zoneadm -z zone1 install
Preparing to install zone <zone1>.
Creating list of files to copy from the global zone.
Copying <14666> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <965> packages on the zone.
Initialized <965> packages on zone.
Zone <zone1> is initialized.
The file </ZONE/zone1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.Velikost zóny po instalaci
global-zone# ls -la /ZONE/zone1/
total 6
drwx------ 3 root root 512 Jul 10 23:28 .
drwxr-xr-x 3 root root 512 Jul 10 23:20 ..
drwxr-xr-x 16 root root 512 Jul 10 23:32 rootglobal-zone# du -sk /ZONE/zone1 317476 /ZONE/zone1
Teď již je vidět zóna ve výpisu ve stavu po nainstalování, není běžící:
global-zone# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
- zone1 installed /ZONE/zone1 Když mám jednu zónu již vytvořenou mohu k instalaci dalších použít export nastavení do souboru současné zóny, pozměnit hostname a IP a nainstalovat.
Export nastavení do souboru:
gloval-zone# zonecfg -z zone1 zonecfg:zone1> export create -b set zonepath=/DATA/zone1 set autoboot=true add net set address=172.16.146.130 set physical=pcn0 end zonecfg:zone1> export -f /root/zone3.cfg
Změna údajů v souboru
/root/zone3.cfg:
create -b set zonepath=/DATA/zone3 set autoboot=true add net set address=172.16.146.133 set physical=pcn0 end
Konfigurace nové zóny ze šablony:
global-zone# zonecfg -z zone3 -f /root/zone3.cfgmáme zónu nastavenou, následuje instalace:
global-zone# zoneadm -z zone3 installBoot zóny:
global-zone# zoneadm -z zone1 bootPro první připojení do zóny z hostitelského Solarisu - globální zóny je nutný parametr -C, který připojení k systémové konzoli a vyvolá následující dialogy. Průchod těmito dialogy způsobí konečnou dokonfiguraci zóny.
global-zone# zlogin -C zone1
[Connected to zone 'zone1' console]Zvolení jazyka a locales v interaktivním módu:
Select a Language 0. English 1. German 2. fr Please make a choice (0 - 2), or press h or ? for help: 0
Select a Locale 0. English (C - 7-bit ASCII) 1. Czech Republic (ISO8859-2) 2. Czech Republic (UTF-8 + euro) 3. Czech Republic (UTF-8) 4. Hungary (ISO8859-2) 5. Hungary (UTF-8) 6. Poland (ISO8859-2) 7. Poland (UTF-8) 8. Slovakia (ISO8859-2) 9. Go Back to Previous Screen Please make a choice (0 - 9), or press h or ? for help: 1
V dalších krocích následuje volba jméno (hostname) počítače, nastavení sítě, zvolení časové zóny, zadání root hesla a reboot zóny. Mimo jiné se také vygenerují ssh klíče a nastaví se ssh daemon aktivní po startu.
Tato kapitola popisu jak nastavovat a pracovat se zónami.
Připojení do zóny na konzoli:
global-zone# zlogin -C zone1
[Connected to zone 'zone1' console]Výpis procesů v zóně:
zone1# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 590 516 0 12:13:30 ? 0:00 /sbin/sh /lib/svc/method/sysidtool-net
root 617 503 0 12:14:14 pts/2 0:00 -sh
root 598 503 0 12:13:31 ? 0:00 /usr/sbin/cron
root 516 503 0 12:13:16 ? 0:04 /lib/svc/bin/svc.startd
root 503 503 0 12:13:15 ? 0:00 zsched
root 514 503 0 12:13:16 ? 0:00 /sbin/init
root 518 503 0 12:13:16 ? 0:07 /lib/svc/bin/svc.configd
root 629 622 0 12:14:55 pts/2 0:00 bash
root 628 622 0 12:14:55 pts/2 0:00 ps -ef
root 599 593 0 12:13:31 ? 0:00 /usr/sbin/sysidnet -l
root 562 503 0 12:13:28 ? 0:00 /usr/sbin/nscd
root 622 617 0 12:14:15 pts/2 0:00 bash
daemon 564 503 0 12:13:28 ? 0:00 /usr/lib/crypto/kcfd
root 593 590 0 12:13:30 ? 0:00 /usr/sbin/sysidnet -l
root 626 503 0 12:14:47 ? 0:00 /usr/lib/ssh/sshd
Odpojení ze zóny kombinací kláves ~., což ve std. nastavení koliduje s ssh, nutno přenastavit (například parametr ssh -e "#" ...).
zone1# ~.Výpis procesů init při spuštěné zóně:
global-zone# ps -ef | grep init root 1 0 0 Nov 10 ? 0:13 /sbin/init root 6084 6077 0 21:11:36 ? 0:00 /sbin/init root 6504 28720 0 21:17:17 pts/2 0:00 grep init global-zone# ps -ef | grep 6077 root 6077 1 0 21:11:24 ? 0:00 zsched root 6084 6077 0 21:11:36 ? 0:00 /sbin/init
Konfigurační soubory se nachází v adresáři
/etc/zone.
Soubor /etc/zones/index obsahuje informace o
nastavených zónách:
global:installed:/ zone1:installed:/DATA/zone1 zone2:installed:/DATA/zone2 zone3:installed:/DATA/zone3
Konfigurace konkrétních zón se nacházejí v samostatných souborech
/etc/zones/zone_name.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
DO NOT EDIT THIS FILE. Use zonecfg(1M) instead.
-->
<zone name="zone1" zonepath="/DATA/zone1" autoboot="true">
<network address="172.16.146.130" physical="eri0"/>
</zone>Vytvoření loop-back souborového systému (FS) v souboru:
global-zone# mkfile 1g /DATA/file1 global-zone# lofiadm -a /DATA/file1
Přidání zařízení do zóny, pozor je nutné přidat raw i character device:
global-zone# zonecfg -z zone1
zonecfg:zone1> add device
zonecfg:zone1:device> set match=/dev/lofi/1
zonecfg:zone1:device> set match=/dev/rlofi/1
zonecfg:zone1:device> end
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1>D^Výpis zařízení v zóně po rebootu:
zone1# ls -la /dev/lofi/1
brw------- 1 root sys 147, 1 Nov 13 21:47 /dev/lofi/1Vytvoření souborového systému:
zone1# newfs /dev/lofi/1
newfs: construct a new file system /dev/rlofi/1: (y/n)? y
/dev/rlofi/1: 2097000 sectors in 3495 cylinders of 1 tracks, 600 sectors
1023.9MB in 219 cyl groups (16 c/g, 4.69MB/g, 2240 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 9632, 19232, 28832, 38432, 48032, 57632, 67232, 76832, 86432,Připojení FS a výpis obsazeného prostoru:
zone1# mount /dev/lofi/1 /DATA bash-3.00# df -h Filesystem size used avail capacity Mounted on / 33G 4.0G 29G 13% / /dev 33G 4.0G 29G 13% /dev proc 0K 0K 0K 0% /proc ctfs 0K 0K 0K 0% /system/contract swap 3.0G 272K 3.0G 1% /etc/svc/volatile mnttab 0K 0K 0K 0% /etc/mnttab fd 0K 0K 0K 0% /dev/fd swap 3.0G 0K 3.0G 0% /tmp swap 3.0G 32K 3.0G 1% /var/run /dev/lofi/1 961M 1.0M 902M 1% /DATA
Zóny je nejdříve vhodné vypnout příkazem (v zóně) init 5 nebo halt nebo z hostitelského Solarisu:
global-zone# zlogin zone1 shutdown -y -i0 -g0deinstalace zóny:
global-zone# zoneadm -z zone1 uninstall -Fglobal-zone# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
- zone1 configured /ZONE/zone1a smazání zóny:
global-zone# zonecfg -z zone1 delete -Fglobal-zone# zoneadm list -cv
ID NAME STATUS PATH
0 global running / Seznam odkazů použité literatury: