En Solaris es posible crear zonas que no son mas que «particiones» del sistema operativo. Desde la zona Global, el equivalente a un ESXi en VMware, puede acceder a los procesos y sistemas de ficheros de las zonas. No así desde una zona, que están aisladas unas de otras y es imposible acceder a la zona global desde una zona. Es mas, es muy difícil identificar la zona global sobre la que esta corriendo una zona en concreto.
Para hacer mas fácil esta identificación he montado un script que lo que hace es generar un fichero /etc/GLOBALZONE en cada una de las zonas con el nombre de la zona:
#!/usr/bin/python
#
# zoneadm list output
# zoneadm list -cv
# ID NAME STATUS PATH BRAND IP
# 0 global running / native shared
# 5 zona1 running /zonas/zona1 native shared
# 7 zona2 running /zonas/zona2 native shared
# – zona3 installed /zonas/zona3 native shared
#
#
from subprocess import *
p = Popen([‘hostname’], stdout=PIPE, stderr=PIPE)
hostname, err = p.communicate()
p = Popen([‘zoneadm’, ‘list’, ‘-cv’], stdout=PIPE, stderr=PIPE)
zoneList, err = p.communicate()
for zone in zoneList.splitlines():
name = zone.split()[1]
if (name ==’NAME’) or (name == ‘global’): continue
cfgfile = «/zonas/%s/root/etc/GLOBALZONE» % name
try:
f = open(cfgfile, «w»)
f.write(hostname)
f.close()
except:
pass
El script lo he configurado en el cron para que se ejecute cada hora por ejemplo. De esta forma, si creo alguna zona nueva, o si muevo una zona de un servidor a otro, este fichero se actualizará.
También se puede modificar el perfil del usuario, de modo que el nombre de la zona global aparezca en la variable PS1:
PS1 = "\u@\h \w (`cat /etc/GLOBALZONE`) $ "