Atención: esta parte es delicada. Errores actualizando el firmware pueden dejar un servidor de más de 3000€ convertido en un ladrillo muy pesado. Se recomienda actuar con cuidado.
Antes de nada, entramos en el controlador de consola de la T2000 para ver la versión actual del firmware:
sc> showhost Sun-Fire-T2000 System Firmware 6.5.3 2007/10/03 05:56 Host flash versions: Hypervisor 1.5.2 2007/09/25 08:39 OBP 4.27.4 2007/10/02 18:35 POST 4.27.4 2007/10/02 19:03
De acuerdo con la Guia de ldoms 1.2, necesitamos tener el firmware 6.7.4 o posterior. El parche 139434-03 incluye esa revisión del firmware. Lo podemos bajar de esta página.
Dentro del parche encontraremos un fichero con instrucciones de instalación (Install.info) que nos dice que hay un método de instalación que puede iniciarse desde la consola de Solaris, y requiere menos configuración previa. En el fichero sysfwdownload.README encontramos las instrucciones específicas de este método: en primer lugar, es necesario que la revisión del firmware actual sea la 6.1.10 o posterior. En nuestro caso tenemos la 6.5.3, así que podemos continuar.
Descomprimimos el parche y nos llevamos los archivos Sun_System_Firmware-6_7_4-Sun_ Fire_T2000.bin y sysfwdownload al directorio /tmp/images. Allí ejecutamos:
# ./sysfwdownload ./Sun_System_Firmware-6_7_4-Sun_Fire_T2000.bin .......... (10%).......... (20%).......... (30%).......... (41%).......... (51%).......... (61%).......... (71%).......... (82%).......... (92%)........ (100%) Download completed successfully.
Ahora vamos a la parte delicada, es conveniente hacerlo desde la consola serie para analizar cualquier problema que pueda surgir.
Paramos el sistema, apagamos la máquina y cargamos el firmware:
# shutdown -i0
...
{1b} ok #.
sc> poweroff Are you sure you want to power off the system [y/n]? y sc>
SC Alert: SC Request to Power Off Host.
SC Alert: Host system has shut down.
Una vez que veamos el mensaje "Host system has shut down", procedemos a cargar el firmware:
sc> setkeyswitch -y normal
sc> flashupdate -s 127.0.0.1
.....................................................................
.....................................................................
Update complete. Reset device to use new software.
sc> resetsc
User Requested SC Shutdown
Esperamos un minuto y nos reconectamos a la consola:
sc> showhost Sun-Fire-T2000 System Firmware 6.7.4 2009/06/10 13:32 Host flash versions: OBP 4.30.3 2009/06/08 13:29 Hypervisor 1.7.3 2009/06/08 18:00 POST 4.30.3 2009/06/08 13:55
Ya tenemos el nuevo firmware, así que encendemos la máquina y la dejamos arrancar (tardará más de lo habitual, por los tests hardware):
sc> poweron sc> console ... ... gnomehispano console login:
En Opensolaris 2009.06 para Sparc es bastante simple:
global# pkg install ldomsmanager
La orden anterior instala los paquetes:
SUNWldom 0.5.11-0.111 installed ---- system/ldoms/ldomsmanager 1.2-0.111 installed ----
Como vemos, Opensolaris 2009.06 incluye LDOMS 1.2, la última versión lanzada.
En nuestro caso hizo falta importar el SMF de ldoms, como sigue:
# svccfg import /var/svc/manifest/platform/sun4v/ldmd.xml
Tras esto, tenemos el demonio controlador online:
global# svcs -a|grep ldom disabled 10:39:35 svc:/ldoms/vntsd:default online 10:42:56 svc:/ldoms/ldmd:default
El controlador de dominio ya puede consultarse:
global# ldm ls ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Configuration and resource information is displayed for the configuration under construction; not the current active configuration. The configuration being constructed will only take effect after it is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-c-- SP 32 32640M 0.1% 1h 2m
A nuestro controlador de dominio le vamos a asignar, ya que tiene actualmente varias zonas corriendo, suficientes recursos. En particular, le vamos a dar 16 hilos y 16 Gb de RAM, es decir, la mitad de los recursos de la máquina, lo cual es suficiente para los servicios actuales (servidores web públicos de la zona web y servidores web privados de la zona admin). Además, gestionaremos la red de los dominios con un virtual switch configurado en la interfaz física e1000g2, para nuestras pruebas iniciales.
Por otro lado, para los discos virtuales crearemos un espacio ZFS específico, /export/ldomsvdisks, donde iremos creando los discos virtuales.
Vamos a ir introduciendo los comandos para configurar el controlador de dominio. Estos comandos consisten en, por un lado, configurar un servidor de discos virtuales (para luego apoyar en él los discos virtuales que se vayan creando), configurar un rango de puertos para las consolas de los dominios lógicos, crear un switch virtual para los dispositivos de red y asignar solo una parte de los recursos hardware para dejar el resto libre para los dominios lógicos:
global# ldm add-vds primary-vds0 primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm add-vcc port-range=5000-5100 primary-vcc0 primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm add-vsw net-dev=e1000g2 primary-vsw0 primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm set-mau 1 primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm set-vcpu 16 primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm set-memory 16384m primary ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Any configuration changes made will only take effect after the machine configuration is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ global# ldm ls ------------------------------------------------------------------------------ Notice: the LDom Manager is running in configuration mode. Configuration and resource information is displayed for the configuration under construction; not the current active configuration. The configuration being constructed will only take effect after it is downloaded to the system controller and the host is reset. ------------------------------------------------------------------------------ NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-cv- SP 16 16G 0.0% 1h 9m
Guardamos configuración y reiniciamos, veremos en consola que el banner nos informa ya de la nueva configuración (4 Gb de RAM):
global# ldm list-spconfig factory-default [current] global# ldm add-spconfig config_01 global# ldm list-spconfig global# init 6 ... ... syncing file systems... done rebooting... SC Alert: Host System has Reset ... ... Sun Fire T200, No Keyboard Copyright 2009 Sun Microsystems, Inc. All rights reserved. OpenBoot 4.30.3, 16384 MB memory available, Serial #70066726. Ethernet address 0:14:4f:2d:22:26, Host ID: 842d2226. Boot device: /pci@780/pci@0/pci@9/scsi@0/disk@0,0:a File and args: zfs-file-system ... ... gnomehispano.osuosl.org console login:
Crearemos un dominio lógico de prueba e instalaremos en él Opensolaris 2009.06. A este dominio le asignaremos 2 Gb de RAM y 4 Gb de disco.
global# ldm list-domain NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-cv- SP 8 4G 0.2% 10m global# ldm add-domain t2000-01 global# ldm add-vcpu 4 t2000-01 global# ldm add-memory 2048m t2000-01 global# ldm add-vnet vnet1 primary-vsw0 t2000-01 global# zfs create rpool/export/ldomsvdisks global# mkfile 4G /export/ldomsvdisks/t2000-01-00.img global# ldm add-vdsdev /export/ldomsvdisks/t2000-01-00.img vol1@primary-vds0 global# ldm add-vdisk vdisk1 vol1@primary-vds0 t2000-01 global# ldm set-variable auto-boot\?=false testldm01 global# ldm bind-domain t2000-01 global# ldm list-domain NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-cv- SP 8 4G 0.2% 13m t2000-01 bound ------ 5000 4 2G
Inicio del dominio y conexión a consola:
global# ldm start-domain t2000-01 ; telnet 127.0.0.1 5000
LDom t2000-01 started
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connecting to console "t2000-01" in group "t2000-01" ....
Press ~? for control options ..
Sun Fire T200, No Keyboard
Copyright 2009 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.30.3, 2048 MB memory available, Serial #83521591.
Ethernet address 0:14:4f:fa:70:37, Host ID: 84fa7037.
{0} ok boot vdisk
Bad magic number in disk label
ERROR: /virtual-devices@100/channel-devices@200/disk@0: Can't open disk label package
ERROR: boot-read fail
{0} ok
Bien, como vemos el dominio está listo, pero como sabemos Opensolaris 2009.06 en Sparc solo se puede instalar con el procedimiento "Automated Install", basado en un servidor de instalaciones, por lo que vamos a proceder a instalarlo a continuación.
Para hacer el servidor de instalaciones, necesitamos configurar la interfaz de red vsw0, con la IP del rango elegido para los dominios, en nuestro caso 192.168.91.0/24 (podríamos mezclarla con las zonas, pero por ahora lo mantendremos separado). Para ello, crearemos el fichero /etc/hostname.vsw0 y la IP 192.168.91.1. Además podemos activar a mano la interfaz con el comando:
global# ifconfig vsw0 plumb ; ifconfig vsw0 192.168.91.1 netmask 255.255.255.0 up
Debemos añadir lo siguiente a /etc/ipf/ipnat.conf para permitir acceso al exterior a nuestros dominios virtuales:
map e1000g0 192.168.91.0/24 -> 0/32 proxy port ftp ftp/tcp map e1000g0 192.168.91.0/24 -> 0/32 portmap tcp/udp auto map e1000g0 192.168.91.0/24 -> 0/32
Y luego ejecutar el reinicio de ipnat:
global# ipnat -CF -f /etc/ipf/ipnat.conf
Ahora instalamos el paquete para el servidor de instalaciones:
# pkg install SUNWinstalladm-tools
Creamos un espacio ZFS y nos bajamos allí la imagen de instalación de Opensolaris 2009.06:
# zfs create rpool/export/aiserver # cd /export/aiserver # wget http://dlc.sun.com/osol/opensolaris/2009/06/osol-0906-ai-sparc.iso
Configuremos ahora el servidor de instalaciones:
# installadm create-service -n 0906sparc -s /export/aiserver/opensolaris200906-ai.iso /export/aiserver/0906sparc Setting up the target image at /export/aiserver/0906sparc ... Registering the service 0906sparc._OSInstall._tcp.local Detected that DHCP is not set up on this server. If not already configured, please create a DHCP macro named dhcp_macro_0906sparc with: Boot server IP (BootSrvA) : 140.211.167.154 Boot file (BootFile) : http://140.211.167.154:5555/cgi-bin/wanboot-cgi If you are running Sun's DHCP server, use the following command to add the DHCP macro, dhcp_macro_0906sparc: /usr/sbin/dhtadm -g -A -m dhcp_macro_0906sparc -d :BootSrvA=140.211.167.154:BootFile=\"http://140.211.167.154:5555/cgi-bin/wanboot-cgi\": Note: Be sure to assign client IP address(es) if needed (e.g., if running Sun's DHCP server, run pntadm(1M)). Service discovery fallback mechanism set up Creating SPARC configuration file
El servidor de instalaciones lo modificaremos para que no verifique que el disco destino tenga 12 Gb de capacidad libres. Esto se debe a que manejaremos discos virtuales más pequeños. Para ello, seguiremos este procedimiento. También, es conveniente reducir la instalación a unos 600 Mb, siguiendo este otro procedimiento.
Ahora que ya tenemos el servidor de instalaciones listo, vamos a instalar el dominio lógico. Como no queremos usar DHCP, pondremos a nuestro dominio la variable Openprom con los parámetros de red:
global# ldm set-variable network-boot-arguments=host-ip=192.168.91.2,router-ip=192.168.91.1,subnet-mask=255.255.255.0,hostname=opensolaris,file=http://192.168.91.1:5555/cgi-bin/wanboot-cgi t2000-01
Una vez hecho, nos vamos a la consola del dominio y tratamos de arrancar, aunque como no tenemos DHCP (intencionadamente) pondremos los parámetros de arranque en network-boot-arguments del Openboot como hicimos cuando instalamos la máquina física:
global# telnet 127.0.0.1 5000
Connecting to console "t2000-01" in group "t2000-01" ....
Press ~? for control options ..
~ ?
{0} ok boot net
...
...
Boot device: /virtual-devices@100/channel-devices@200/network@0 File and args:
Unknown key 'subnetmask'
<time unavailable> wanboot info: WAN boot messages->console
<time unavailable> wanboot info: configuring /virtual-devices@100/channel-devices@200/network@0
Unknown key 'subnetmask'
<time unavailable> wanboot info: Defaulting to classful subnetting
<time unavailable> wanboot progress: wanbootfs: Read 366 of 366 kB (100%)
<time unavailable> wanboot info: wanbootfs: Download complete
...
Una vez iniciado, tendremos los problemas que encontrábamos en nuestra instalación sin DHCP. En este caso, lo que tendremos que hacer es, poner desde la shell de emergencia los parámetros de red y el servidor DNS. El resto de la instalación tendrá lugar por red. Esto ya lo vimos en nuestro procedimiento de instalación de Opensolaris 2009.06 para Sparc sin DHCP, que ahora repetiremos para el dominio lógico.
Enter user name for system maintenance (control-d to bypass): root
Enter root password for system maintenance (control-d to bypass):
single-user privilege assigned to root on /dev/console.
Entering System Maintenance Mode
Aug 7 18:44:24 su: 'su root' succeeded for root on /dev/console
-bash: /usr/sbin/quota: No such file or directory
Sun Microsystems Inc. SunOS 5.11 snv_111b November 2008
-bash: /bin/mail: No such file or directory
-bash: /usr/bin/hostname: No such file or directory
root@:~# ifconfig vnet0 192.168.91.2 netmask 255.255.255.0 up
root@:~# cat > /etc/resolv.conf
nameserver 140.211.166.130
root@:~# cat > /etc/defaultrouter
192.168.91.1
root@:~# route add default 192.168.91.1
add net default: gateway 192.168.91.1
root@:~# rm /etc/nsswitch.conf
root@:~# cat /etc/nsswitch.dns > /etc/nsswitch.conf
root@:~# ping pkg.opensolaris.org
pkg.opensolaris.org is alive
root@:~# umount /etc/netboot
root@:~# rm -rf /etc/netboot
root@:~# umount /tmp
root@:~# svcadm disable dscp
root@:~# svcadm disable sckmd
root@:~# svcadm clear root:live-media
root@:~# Remounting root read/write
Probing for device nodes ...
Preparing automated install image for use
The AI image will be retrieved from /export/aiserver/osol-0906-ai-sparc/ directory
Downloading solaris.zlib archive
--18:47:42-- http://192.168.91.1:5555/export/aiserver/osol-0906-ai-sparc//solaris.zlib
=> `/tmp/solaris.zlib'
Connecting to 192.168.91.1:5555... connected.
HTTP request sent, awaiting response... 200 OK
Length: 83,334,656 (79M) [text/plain]
...
18:47:50 (10.04 MB/s) - `/tmp/solaris.zlib' saved [83334656/83334656]
Downloading solarismisc.zlib archive
--18:47:50-- http://192.168.91.1:5555/export/aiserver/osol-0906-ai-sparc//solarismisc.zlib
=> `/tmp/solarismisc.zlib'
Connecting to 192.168.91.1:5555... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3,857,408 (3.7M) [text/plain]
...
18:47:50 (11.24 MB/s) - `/tmp/solarismisc.zlib' saved [3857408/3857408]
--18:47:50-- http://192.168.91.1:5555/export/aiserver/osol-0906-ai-sparc//install.conf
=> `/tmp/install.conf'
Connecting to 192.168.91.1:5555... connected.
HTTP request sent, awaiting response... 200 OK
Length: 67 [text/plain]
18:47:50 (1.82 MB/s) - `/tmp/install.conf' saved [67/67]
Done mounting automated install image
Configuring devices.
Reading ZFS config: done
Aug 7 18:48:01 opensolaris sendmail[339]: My unqualified host name (localhost) unknown; sleeping for retry
root@opensolaris:~# svcadm clear dns/multicast
root@opensolaris:~# logout
Service discovery phase initiated
Service name to look up: 0906sparc
opensolaris console login: Service discovery finished successfully
Process of obtaining configuration manifest initiated
Configuration manifest obtained
Automated Installation started
The progress of the Automated Installation can be followed by viewing the logfile at /tmp/install_log
Una vez instalado el dominio lógico, debemos desactivar el servidor de instalaciones:
# installadm disable 0906sparc # pkill httpd
Para reactivarlo posteriormente pondremos:
# installadm enable 0906sparc
La respuesta simple es "bastante complicado, pero se puede". La respuesta más larga es: lo hemos intentado, con Natamar (otra distribución para Sparc basada en Opensolaris), Debian y Ubuntu, y solo en el caso de Debian lo hemos conseguido, y no resulta fácil. Veamos los detalles:
Podemos probar el CD-ROM de Natamar para un dominio lógico. En primer lugar nos lo bajamos:
global# wget http://www.martux.org/RELEASES/SPARC_distro_incl_Xorg7.2/cdrom__NoGnome_NoJDS_with_icewm/Natamar_0.4__b96_sparc_cdrom.iso
Y lo registramos en el dominio:
global# ldm add-vdsdev /export/aiserver/Natamar_0.4__b96_sparc_cdrom.iso vol2@primary-vds0 global# ldm add-vdisk vcdrom vol2@primary-vds0 t2000-01
Con esto podemos arrancar el dominio virtual e instalar Natamar en él.
... ok boot vcdrom -v
Veremos que la imagen del CDROM arranca, pero el menú posterior se queda bloqueado. Estamos pendientes de intentar eliminar dicho menú, construyéndonos una versión personalizada de Natamar.
Este es el único caso que nos ha funcionado. Hemos documentado el resultado en esta página aparte para Debian.
Necesitamos Ubuntu gutsy o posterior. La única distribución que no ha congelado el núcleo al cargarse él mismo o al cargar los drivers de disco, es Gutsy, que no está actualmente soportada por Ubuntu. Esto descarta su uso para VMs en producción, aunque tal vez se pueda instalar una Gutsy y luego ir actualizando hasta llegar a la actual.
Nos bajamos el fichero boot.img para hacer un servidor de arranque tftp:
global# mkdir /tftpboot ; cd /tftpboot global# wget http://old-releases.ubuntu.com/ubuntu/dists/gutsy/main/installer-sparc/current/images/sparc64/netboot/2.6/boot.img
Ahora creamos un link más en el /tftpboot que es dependiente de la dirección IP asignada a la instalación, que es 192.168.91.2. Es decir, haremos lo siguiente:
global# cd /tftpboot global# ln -sf boot.img `printf %02x 192 168 91 2|tr [:lower:] [:upper:]` global# ls -l ... lrwxrwxrwx 1 root root 15 Sep 18 19:42 C0A85B02 -> boot.img ...
Configuramos el servicio tftp:
global# echo "tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot" > ~/tftp.inetd.conf global# inetconv -i tftp.inetd.conf global# svcs -a|grep tftp online 19:05:45 svc:/network/tftp/udp6:default
Instalamos y configuramos RARP:
global# pkg install SUNWbs
Guardamos la dirección MAC de la máquina en /etc/ethers y activamos el rarp:
global# ldm ls -l testldm01
...
MAC
00:14:4f:fa:70:37
global# echo "00:14:4f:fa:70:37 testldm01" > /etc/ethers global# echo "192.168.91.2 testldm01" >> /etc/hosts global# svcadm enable rarp
En el dominio intentamos arrancar por red:
{0} boot net
Boot device: /virtual-devices@100/channel-devices@200/network@0 File and args: Requesting Internet Address for 0:14:4f:fb:2:4a
Cuando llegue la hora de seleccionar un mirror de instalación, debemos elegir la opción "Configurar manualmente", y poner los datos: http://old-releases.ubuntu.com/ como mirror, y /ubuntu/ como directorio. La instalación transcurrirá normalmente y al finalizar podremos iniciar el nuevo sistema operativo.
Para eliminar el dominio lógico, debemos liberar los discos y red virtuales y a continuación eliminarlo. En nuestro ejemplo:
# ldm remove-vdisk vdisk1 t2000-01 # ldm remove-vdsdev vol1@primary-vds0 # ldm remove-vnet vnet1 t2000-01 # ldm unbind-domain t2000-01 # ldm remove-domain t2000-01 # rm -f /export/ldomsvdisks/t2000-01-00.img