Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Actualización de Solaris 10 con "Live Upgrade" (de Update 8 a Update 9)

Última Actualización: 30 de septiembre de 2010 - Jueves

En este documento abundo en mi experiencia con "Live Upgrade". En este caso describo la migración de Solaris 10 Update 8 (10/09) a Solaris 10 Update 9 (09/10).

Para comprender completamente este documento, habría que leerse los artículos anteriores sobre este tema. Para ir limpiando el asunto sólo enlazo a la actualización anterior. Recomiendo leer toda la serie sobre "Live Upgrade":

La nueva actualización de Solaris es bastante "light", aunque algunos usuarios encontrará cambios valiosos: Diversas mejoras en las zonas, migración P2V, mejoras en ZFS (holding Snapshots, RAIDZ-3, mejora en la gestión de dispositivos de log ZFS, recuperación ante "Uberblocks" corruptos, "zpool split", mejor observabilidad), soporte de discos con sectores de más de 512 bytes, mejoras iSCSI, API GLDv3 para drivers de red, nuevos drivers, cambios en la configuración SMF de "sendmail".

Los pasos para actualizar nuestro sistema mediante "Live Upgrade" son los siguientes:

# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      yes    yes       no     -         
Solaris10u8BACKUP          yes      no     no        yes    -         

# ludelete Solaris10u8BACKUP
System has findroot enabled GRUB
No entry for BE <Solaris10u8BACKUP> in GRUB menu
Determining the devices to be marked free.
Updating boot environment configuration database.
Updating boot environment description database on all BEs.
Updating all boot environment configuration databases.
Boot environment <<Solaris10u8BACKUP> deleted.

# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      yes    yes       no     -

A continuación clonamos el BE actual, para poder actualizarlo:

# svcadm disable svc:/jcea/sendmail:sendmail

# time lucreate -n Solaris10u9
Checking GRUB menu...
System has findroot enabled GRUB
Analyzing system configuration.
Comparing source boot environment <Solaris10u8> file systems with the file 
system(s) you specified for the new boot environment. Determining which 
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
Creating configuration for boot environment <Solaris10u9>.
Source boot environment is <Solaris10u8>.
Creating boot environment <Solaris10u9>.
Cloning file systems from boot environment <Solaris10u8> to create boot environment <Solaris10u9>.
Creating snapshot for <datos/ROOT/Solaris10u8> on <datos/ROOT/Solaris10u8@Solaris10u9>.
Creating clone for <datos/ROOT/Solaris10u8@Solaris10u9> on <datos/ROOT/Solaris10u9>.
Setting canmount=noauto for </> in zone <global> on <datos/ROOT/Solaris10u9>.
Creating snapshot for <datos/ROOT/Solaris10u8/var> on <datos/ROOT/Solaris10u8/var@Solaris10u9>.
Creating clone for <datos/ROOT/Solaris10u8/var@Solaris10u9> on <datos/ROOT/Solaris10u9/var>.
Setting canmount=noauto for </var> in zone <global> on <datos/ROOT/Solaris10u9/var>.
Saving existing file </boot/grub/menu.lst> in top level dataset for BE <Solaris10u9> as <mount-point>//boot/grub/menu.lst.prev.
File </boot/grub/menu.lst> propagation successful
Copied GRUB menu from PBE to ABE
No entry for BE <Solaris10u9> in GRUB menu
Population of boot environment <Solaris10u9> successful.
Creation of boot environment <Solaris10u9> successful.

real    0m32.911s
user    0m4.570s
sys     0m8.035s

# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      yes    yes       no     -         
Solaris10u9                yes      no     no        yes    - 

# zfs snapshot datos/sendmail@20100930-03:40
# svcadm enable svc:/jcea/sendmail:sendmail

(copiamos el fichero de descripción del nuevo BE y editamos el original para quitar "/etc/mail".
El fichero de descripción del nuevo BE está en "/etc/lu/ICF.*". ESE CAMBIO DEBE HACERSE EN EL "BE"
ACTUAL Y DENTRO DEL NUEVO "BE", montado con "lumount")

Como puede verse, el clonado del BE actual, si estamos bajo ZFS, lleva apenas unos pocos segundos.

Durante el proceso de clonado desactivo el correo electrónico, de forma que el BE clonado tenga el correo electrónico desactivado. El motivo es el mismo que llevo explicando desde el primer artículo de la serie: mi sistema de correo está MUY modificado, y cuando instalo una actualización de Solaris debo reinstalar luego encima mi versión personalizada. Si en el nuevo BE el correo está parado, mi esperanza es que siga así cuando lanzo el nuevo BE, de forma que puedo reinstalar mi personalización antes de que el sistema operativo haya tenido ocasión de recibir correo y no haya sabido qué hacer con ellos.

En perspectiva, toda esta personalización ha sido un error. Tendría que haber instalado el "sendmail" en otros "paths" completamente independientes del "sendmail" del sistema. De hecho es así como lo tengo en instalaciones, más recientes, pero este equipo es histórico y nunca le llega el turno de modificarlo y dejarlo como dios manda. Algo a solucionar en el futuro...

Comparado con versiones anteriores, esta vez clono el "dataset" que contiene la configuración y el software personalizado de "sendmail", para poder restaurarlo correctamente tras actualizar la nueva BE. En actualizaciones anteriores no era necesario, porque no tenía segregado estos datos en un "dataset" separado, así que podía mirarlos en el "snapshot" que "Live Upgrade" crea al crear el nuevo BE. Con la segregación del dataset, si se me hubiera olvidado hacerle un "snapshot", tendría que irme a los backups, lo que siempre es un riesgo y una mala experiencia.

El objetivo de editar el fichero de configuración de BE es porque no quiero que la configuración del "sendmail" se monte como "read only" durante la instalación, porque la haría fallar.

Podemos ver si todo está bien con un "lumount Solaris10u9" y comprobando que "/etc/mail" no está montado "read only" dentro del nuevo BE.

Mucha complejidad por una decisión incorrecta del pasado...

Bien, en esta ocasión todo ha ido bien. No obstante actualizando otras máquinas he encontrado algunos posibles problemas:

  • Al crear el nuevo BE, podemos tener problemas para montar el nuevo "/var", porque el directorio raíz del BE contiene un "/var" no vacío. No podemos vaciar el "/var" del raíz, porque en el BE actual tenemos montado encima el dataset "var", y no podemos ver qué hay debajo, mucho menos eliminarlo.

    La solución es montarlo vía NFS, que no cruza puntos de montaje.

  • Si aparece un "warning" sobre que no es posible que el nuevo dataset "var" herede los atributos de su padre, porque son "filesystems" distintos, hay que asegurarse de que en el "/etc/vfstab" del nuevo BE (lo podemos montar y examinar con "lumount") no aparece ni el dataset "root" ni el dataset "var". Si es así, borrarlo, porque sino tendremos problemas al reiniciar la máquina (intentará montar "var" a través de "/etc/vfstab" en vez de la herencia ZFS).

    Hay que prestar mucha atención a los "warning".

El siguiente paso consiste en actualizar el sistema operativo en el nuevo BE. Para ello copio la imagen ISO en "/tmp", la monto y actualizo desde ella:

# lofiadm -a /tmp/sol-10-u9-ga-x86-dvd.iso
/dev/lofi/1
# mkdir /tmp/sol-10-u9-ga-x86-dvd
# mount -o ro -F hsfs /dev/lofi/1 /tmp/sol-10-u9-ga-x86-dvd
# time luupgrade -n Solaris10u9 -u -s /tmp/sol-10-u9-ga-x86-dvd
System has findroot enabled GRUB
No entry for BE <Solaris10u9> in GRUB menu
Uncompressing miniroot
Copying failsafe kernel from media.
61364 blocks
miniroot filesystem is <lofs>
Mounting miniroot at </tmp/sol-10-u9-ga-x86-dvd/Solaris_10/Tools/Boot>
Validating the contents of the media </tmp/sol-10-u9-ga-x86-dvd>.
The media is a standard Solaris media.
The media contains an operating system upgrade image.
The media contains <Solaris> version <10>.
Constructing upgrade profile to use.
Locating the operating system upgrade program.
Checking for existence of previously scheduled Live Upgrade requests.
Creating upgrade profile for BE <Solaris10u9>.
Checking for GRUB menu on ABE <Solaris10u9>.
Saving GRUB menu on ABE <Solaris10u9>.
Checking for x86 boot partition on ABE.
Determining packages to install or upgrade for BE <Solaris10u9>.
Performing the operating system upgrade of the BE <Solaris10u9>.
CAUTION: Interrupting this process may leave the boot environment unstable 
or unbootable.
Upgrading Solaris: 100% completed
Installation of the packages from this media is complete.
Restoring GRUB menu on ABE <Solaris10u9>.
Updating package information on boot environment <Solaris10u9>.
Package information successfully updated on boot environment <Solaris10u9>.
Adding operating system patches to the BE &Solaris10u9>.
The operating system patch installation is complete.
ABE boot partition backing deleted.
PBE GRUB has no capability information.
PBE GRUB has no versioning information.
ABE GRUB is newer than PBE GRUB. Updating GRUB.
GRUB update was successfull.
Configuring failsafe for system.
Failsafe configuration is complete.
INFORMATION: The file </var/sadm/system/logs/upgrade_log> on boot
environment <Solaris10u9> contains a log of the upgrade operation.
INFORMATION: The file </var/sadm/system/data/upgrade_cleanup> on boot
environment <Solaris10u9> contains a log of cleanup operations required.
WARNING: <1> packages failed to install properly on boot environment <Solaris10u9>.
INFORMATION: The file </var/sadm/system/data/upgrade_failed_pkgadds> on
boot environment <Solaris10u9> contains a list of packages that failed to
upgrade or install properly.
INFORMATION: Review the files listed above. Remember that all of the files
are located on boot environment <Solaris10u9>. Before you activate boot
environment <Solaris10u9>, determine if any additional system maintenance
is required or if additional media of the software distribution must be
installed.
The Solaris upgrade of the boot environment <Solaris10u9> is partially complete.
Installing failsafe
Failsafe install is complete.

real    31m18.145s
user    6m46.419s
sys     4m24.370s

# luupgrade -p -n Solaris10u9 -s /tmp/sol-10-u9-ga-x86-dvd/Solaris_10/Product SUNWcsr
System has findroot enabled GRUB
No entry for BE <Solaris10u9> in GRUB menu
Validating the contents of the media </tmp/sol-10-u9-ga-x86-dvd/Solaris_10/Product>.
Mounting the BE <Solaris10u9>.
Adding packages to the BE <Solaris10u9>.

Processing package instance <SUNWcsr> from </tmp/sol-10-u9-ga-x86-dvd/Solaris_10/Product>

Core Solaris, (Root)(i386) 11.10.0,REV=2005.01.21.16.34
Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.

[...]

Installation of  successful.
Unmounting the BE .
The package add to the BE  completed.

# umount /tmp/sol-10-u9-ga-x86-dvd

# lofiadm -d /dev/lofi/1

El paquete que falla es: "Core Solaris" (SUNWcsr). Es debido a mi estructura personal de "datasets". Lo resuelvo instalando a mano, y prestando atención a los errores exactos que aparecen.

Lo único que quedaría por hacer ahora es cambiar el BE de arranque y reiniciar el sistema. En mi caso particular, no obstante, tengo algunos problemas que hay que resolver primero:

  • Debido a la personalización extrema del sistema de correo, y a todo el jueguecito que tengo con él, tengo que hacer lo siguente:

    • Monto el BE nuevo con "lumount Solaris10u9".

    • Renombro el directorio "/etc/mail/" del nuevo BE a "/etc/mail.Solaris10u9/".

    • Echamos un vistazo al fichero "/var/sadm/system/data/upgrade_cleanup_2010_09_30" en el nuevo "BE", buscando los ficheros relacionados con el correo electrónico, y restauramos mis ficheros personalizados. En este caso son los ficheros:

      • /usr/lib/sendmail

      • /usr/sbin/makemap

    • Recupero el estado inicial de los ficheros "/etc/lu/ICF.*", tanto en el BE actual como en el nuevo.

    • Desmonto el nuevo BE con "luumount Solaris10u9".

    • Lo vuelvo a montar con "lumount Solaris10u9", y compruebo que el dataset en "/etc/mail" se monta como "read only". Esto es así porque cuando se montan BE con datasets que coinciden con el BE actual, éstos se montan "read only". De esta forma nos aseguramos de que la personalización de correo sigue en su sitio.

    • Desmonto el nuevo BE con "luumount Solaris10u9".

  • Esta versión de Solaris es la primera distribuída tras la compra de Sun por Oracle. Uno de los cambios, aparte del banner de presentación del sistema al arrancar la máquina, es el autoregistro del servidor en Oracle. Por ello puede ser necesario estar delante del servidor cuando se produzca el primer arranque con el nuevo BE, ya que puede entrar en una pantalla interactiva para el registro. Si no tenemos acceso por consola o por KVM, estaremos en un buen lío. Avisados estáis.

    Existe una forma de desactivar este registro, pero no me tenido tiempo ni ganas de investigar el asunto con más detalle.

Ya solo queda activar el nuevo BE y reiniciar la máquina:

# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      yes    yes       no     -         
Solaris10u9                yes      no     no        yes    -         

# luactivate Solaris10u9
System has findroot enabled GRUB
Generating boot-sign, partition and slice information for PBE <Solaris10u8>
A Live Upgrade Sync operation will be performed on startup of boot environment <Solaris10u9>.
WARNING: <1> packages failed to install properly on boot environment <Solaris10u9>.
INFORMATION: </var/sadm/system/data/upgrade_failed_pkgadds> on boot 
environment <Solaris10u9> contains a list of packages that failed to 
upgrade or install properly. Review the file before you reboot the system 
to determine if any additional system maintenance is required.
Generating boot-sign for ABE <Solaris10u9>
Saving existing file </etc/bootsign> in top level dataset for BE <Solaris10u9> as <mount-point>//etc/bootsign.prev.
Generating partition and slice information for ABE <Solaris10u9>
Copied boot menu from top level dataset.
Generating multiboot menu entries for PBE.
Generating multiboot menu entries for ABE.
Disabling splashimage
Re-enabling splashimage
No more bootadm entries. Deletion of bootadm entries is complete.
GRUB menu default setting is unaffected
Done eliding bootadm entries.

**********************************************************************

The target boot environment has been activated. It will be used when you 
reboot. NOTE: You MUST NOT USE the reboot, halt, or uadmin commands. You 
MUST USE either the init or the shutdown command when you reboot. If you 
do not use either init or shutdown, the system will not boot using the 
target BE.

**********************************************************************

In case of a failure while booting to the target BE, the following process 
needs to be followed to fallback to the currently working boot environment:

1. Boot from Solaris failsafe or boot in single user mode from the Solaris 
Install CD or Network.

2. Mount the Parent boot environment root slice to some directory (like 
/mnt). You can use the following command to mount:

     mount -Fzfs /dev/dsk/c5t0d0s0 /mnt

3. Run <luactivate> utility with out any arguments from the Parent boot 
environment root slice, as shown below:

     /mnt/sbin/luactivate

4. luactivate, activates the previous working boot environment and 
indicates the result.

5. Exit Single User mode and reboot the machine.

**********************************************************************

Modifying boot archive service
Propagating findroot GRUB for menu conversion.
File </etc/lu/installgrub.findroot> propagation successful
File </etc/lu/stage1.findroot> propagation successful
File </etc/lu/stage2.findroot> propagation successful
File </etc/lu/GRUB_capability> propagation successful
Deleting stale GRUB loader from all BEs.
File </etc/lu/installgrub.latest> deletion successful
File </etc/lu/stage1.latest> deletion successful
File </etc/lu/stage2.latest> deletion successful
Activation of boot environment <Solaris10u9> successful.

# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      yes    no        no     -         
Solaris10u9                yes      no     yes       no     - 

# init 6

Una vez reiniciados, comprobamos que estamos ejecutando la versión correcta:

# cat /etc/release
                    Oracle Solaris 10 9/10 s10x_u9wos_14a X86
     Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
                            Assembled 11 August 2010

# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
Solaris10u8                yes      no     no        yes    -
Solaris10u9                yes      yes    yes       no     -

Los cambios más reseñables respecto a la anterior actualización son:

  • Hay cambios en el formato de disco ZFS, así que si lo actualizo, no podremos volver a la versión anterior si hay problemas. Por ello, espero unos días antes de actualizar el formato de los discos duros. Por ello tendré que esperar un poco antes de poder jugar con las nuevas funcionalidades ZFS.

  • No hay cambios en el "Solaris 10 Companion".

  • Una forma simple de comprobar que todo está funcionando bien es ejecutar "svcs -xv". Este comando nos mostrará los servicios que no están funcionando, y la razón para ello.

  • Tras actualizar el sistema es conveniente revisar si hay parches pendientes de aplicar. Suele ser el caso.

  • Tras comprobar que todo funciona correctamente, ¡backup!.

  • Tras comprobar que todo funciona bien, es buena idea crear un "BE" llamado "Solaris10u9BACKUP", por si algún parche posterior nos da guerra. Esto es menos necesario que en actualizaciones antiguas, porque voy haciendo snapshots ZFS, pero sigue siendo conveniente.

  • Una vez que actualizamos la versión del "pool" ZFS, es buena idea eliminar el BE antiguo ya que no podrá leer el disco, y su presencia -inusable- nos dará una falsa sensación de seguridad.


Historia

  • 30/sep/10: Primera versión de esta página.



Python Zope ©2010 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS