En este artículo veremos los pasos seguidos para instalar Opensolaris 2009.06 en un servidor Sparc. El servidor utilizado fue el servidor de Gnome Hispano, un servidor Sun Fire T2000 que hasta este momento estaba ejecutando Solaris 10. Decidimos pasar a Opensolaris ya que Solaris 10 no cubría nuestras necesidades: en Gnome Hispano no tenemos contrato de soporte con Sun, con lo que los parches del sistema no eran accesibles. Por otro lado, la integración de software libre en Solaris 10 es, hoy por hoy, menos potente que cualquier distribución GNU/Linux, lo que nos creaba muchas limitaciones.
Nota: esta sección incluye los preparativos que fueron necesarios en el servidor de Gnome Hispano. Deben modificarse en función de la instalación actual de la que partamos. Si se va a instalar Opensolaris en un servidor "en blanco" pueden omitirse.
El servidor de Gnome Hispano se encontraba ejecutando Solaris 10. Las particiones estándar UFS se encontraban espejadas mediante SDS (el proceso de espejado fue detallado aquí en su dia). Las particiones de datos se crearon con ZFS, también con RAID-1.
La idea sería aprovechar el espejo en el disco 1, para guardar los datos de la instalación actual. Una vez que tengamos Opensolaris instalado en el disco 0, recuperaríamos los datos desde el disco 1 y ya podríamos disponer de él para hacer un espejo completo con ZFS en Opensolaris.
Lo primero, hacemos un backup del contenido de ZFS, con tar, que almacenaríamos en una de las particiones UFS. Después, destruimos el pool ZFS con los comandos ZFS correspondientes.
A continuación, debemos arrancar con un CD de Solaris 10 y eliminar la configuración de Solaris Volume Manager. Esto permite acceder a las particiones de los discos 0 y 1 como particiones UFS normales, pero dejan de estar espejadas. Así, para recuperar los datos en Opensolaris montaremos las particiones UFS del disco 1.
Para eliminar la configuración de Solaris Volume Manager, usaremos un CD de Solaris 10 para arrancar la máquina y ejecutaremos metaclear:
ok boot cdrom -s ... ... Please give root password: xxxx ... # metaclear -a d6: Mirror is cleared d16: Concat/Stripe is cleared d26: Concat/Stripe is cleared d3: Mirror is cleared d13: Concat/Stripe is cleared d23: Concat/Stripe is cleared d1: Mirror is cleared d11: Concat/Stripe is cleared d21: Concat/Stripe is cleared d0: Mirror is cleared d10: Concat/Stripe is cleared d20: Concat/Stripe is cleared
A continuación dejamos los slices del disco 0 listos para recibir ZFS sin errores. La tabla de particiones será muy simple: una sola partición 0 que ocupe todo el disco, es decir, igual a la partición 2 (backup), es decir, la tabla que debemos obtener es la siguiente:
Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 14086 68.35GB (14087/0/0) 143349312 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 14086 68.35GB (14087/0/0) 143349312 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0
Con esto el servidor queda preparado para recibir Opensolaris en el disco 0.
Como veremos a continuación, Opensolaris 2009.06 en Sparc solo puede instalarse mediante el procedimiento "Automated Install", que viene a ser una instalación desatendida por red. Esto exige la configuración de un servidor de instalaciones. Este servidor puede ser un Opensolaris 2009.06 x86 sobre el que se preparará un instalador para Sparc, utilizando la imagen ISO de Sparc y este procedimiento.
Si se siguen exactamente las instrucciones, funcionará. Si no se sigue exactamente alguno de los pasos, el comando installadm fallará. En particular, cualquier variación en el fichero /etc/hosts lo hará fallar sistemáticamente. Con estas pistas y las instrucciones, que son bastante claras, no deberíamos tener problemas para configurar el servidor de Instalaciones de Opensolaris 2009.06.
Para instalar Opensolaris 2009.06 en Sparc tenemos dos grandes problemas:
En nuestro caso, la interfaz de red "0" fue conectada por cable cruzado al servidor de instalaciones (un Opensolaris x86 corriendo en una máquina virtual VMWare), usando una red privada. La interfaz de red "1" fue conectada al switch principal que da acceso a Internet. De este modo podremos arrancar el nodo desde la red "0" y posteriormente, manipular a mano la configuración de red para que tenga acceso a Internet (en particular, al repositorio de paquetes pkg.opensolaris.org).
Para arrancar por red sin usar DHCP es necesario establecer en Openboot los parámetros de red, como se detalla a continuación (teniendo en cuenta que el servidor de instalaciones tiene como IP estática 192.168.12.139, para más información sobre cómo hacer un servidor de instalaciones, mirar aquí):
{0} ok setenv network-boot-arguments host-ip=192.168.12.141,router-ip=192.168.12.1,subnetmask=255.255.255.0,hostname=opensolaris,file=http://192.168.12.139:5555/cgi-bin/wanboot-cgi
A continuación podemos proceder a arrancar. Sabemos que el proceso va a fallar, pues en Opensolaris tienen un bug abierto al respecto. Este blog nos dio las pistas necesarias.
Veamos el log del arranque:
{0} ok boot net
[...]
Sun Fire T200, No Keyboard
Copyright 2007 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.27.4, 32640 MB memory available, Serial #70066726.
Ethernet address 0:14:4f:2d:22:26, Host ID: 842d2226.
Boot device: /pci@780/pci@0/pci@1/network@0 File and args:
100 Mbps full duplex Link up
[...]
ramdisk-bootfs
<time unavailable> wanboot progress: wanbootfs: Read 366 of 366 kB (100%)
<time unavailable> wanboot info: wanbootfs: Download complete
ramdisk-root
Sat Aug 8 02:19:12 wanboot progress: Read 175868 of 175868 kB (100%)
Sat Aug 8 02:23:20 wanboot info: miniroot: Download complete
ufs-file-system
Loading: /platform/SUNW,Sun-Fire-T200/kernel/sparcv9/unix
Loading: /platform/sun4v/kernel/sparcv9/unix
SunOS Release 5.11 Version snv_111b 64-bit
Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
os-io ---
Hostname: opensolaris
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:44:19-- http://192.168.12.139:5555/export/aiserver/osol-0906-ai-sparc//solaris.zlib
=> `/tmp/solaris.zlib'
Connecting to 192.168.12.139:5555... failed: Network is unreachable.
FAILED
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run
Enter user name for system maintenance (control-d to bypass):
Como vemos, el sistema arrancó bien hasta intentar bajarse la imagen "live" de Opensolaris (solaris.zlib). Aquí lo que se deduce es que los parámetros de red se han perdido y vamos a tener que establecerlos a mano, tal como se indica en el blog anterior. Nosotros aprovecharemos esta parada (y el acceso a los comandos de consola) para establecer también la red pública en la interfaz 1, para que también tenga acceso a pkg.opensolaris.org durante la instalación. A continuación el proceso seguido:
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 e1000g0 192.168.12.141 netmask 255.255.255.0 up
root@:~# cat > /etc/resolv.conf
nameserver 140.211.166.130
root@:~# cat > /etc/defaultrouter
140.211.167.129
root@:~# ifconfig e1000g1 plumb
root@:~# ifconfig e1000g1 140.211.167.154 netmask 255.255.255.128 up
root@:~# route add default 140.211.167.129
add net default: gateway 140.211.167.129
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.12.139:5555/export/aiserver/osol-0906-ai-sparc//solaris.zlib
=> `/tmp/solaris.zlib'
Connecting to 192.168.12.139: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.12.139:5555/export/aiserver/osol-0906-ai-sparc//solarismisc.zlib
=> `/tmp/solarismisc.zlib'
Connecting to 192.168.12.139: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.12.139:5555/export/aiserver/osol-0906-ai-sparc//install.conf
=> `/tmp/install.conf'
Connecting to 192.168.12.139: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
Ahora comenzó a instalarse. Podemos entrar en consola y observar el fichero /tmp/install_log para comprobar el progreso de instalación. La clave inicial de root es opensolaris.
Una vez instalado el sistema (tarda una hora aproximadamente), nos aparecerá lo siguiente por consola:
Automated Installation finished successfully The system can be rebooted now Please refer to /tmp/install_log file for details After reboot it will be located at /var/sadm/system/logs/install_log <AI Aug 8 02:37:43> Auto install succeeded. You may wish to reboot the system at this time
La máquina recién instalada tiene como cuenta de usuario, jack (y contraseña opensolaris). Y jack tiene privilegios para hacerse root. Como no queremos que esto se quede así, debemos al menos modificar la contraseña de jack. Además, deberíamos ajustar el hostname deseado para nuestra máquina y tal vez volver a poner el cable de la interfaz 0 de red con el cable público. Hecho esto, reiniciaremos el sistema para ver cómo arranca nuestro flamante Opensolaris 2009.06 en nuestra Sun T2000.
Una vez arrancada la máquina, montamos normalmente (como UFS) la partición del disco 1 donde guardamos los backups y los recuperamos. Una vez que ya no sea necesario el disco 1, podemos proceder, primero a colocar una tabla de particiones similar a la del disco 0 (para evitar errores del comando zpool), y luego a espejar:
# zpool attach rpool c6t0d0s0 c6t1d0s0 Please be sure to invoke installboot(1M) to make 'c6t1d0s0' bootable.
Es necesario ejecutar el comando installboot para que el disco sea arrancable, de modo que si el disco 0 falla es posible arrancar el sistema utilizando el disco 1. El procedimiento es un simple comando:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c6t1d0s0
Ahora podemos ver que la máquina comienza a realizar el espejado ("resilvering"):
# zpool status
pool: rpool
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h0m, 1.13% done, 1h16m to go
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c6t0d0s0 ONLINE 0 0 0
c6t1d0s0 ONLINE 0 0 0 239M resilvered
errors: No known data errors
Los parámetros de arranque por red ya no son necesarios, por lo que podemos borrarlos de la Openprom. Esto puede hacerse desde Opensolaris con el comando:
# eeprom network-boot-arguments=""