Upgrade de versión Servidor Solaris 11

Con la llegada de Solaris 11 ya se puede subir la versión de “release” fácilmente. Hasta ahora, en Solaris 10, si queríamos pasar del “Update X” al “Update Y” había que reinstalar el servidor. El instalador detectaba que existía una versión instalada y daba la opción de subir de “release“. En Solaris 11 sin embargo, gracias al gestor de paquetes que tiene es mucho mas fácil y el tiempo de parada se ha disminuido al máximo.

 

Veamos como se haría en el siguiente ejemplo. Tenemos un servidor con los siguientes datos:
  • Release:
# more /etc/release 
             Oracle Solaris 11 11/11 X86 
Copyright (c) 1983, 2011, Oracle and/or its affiliates. 
     All rights reserved. Assembled 18 October 2011 

  • Uname:

# uname -a 
SunOS HOSTNAME 5.11 11.0 i86pc i386 i86pc 
  • Kernel:
# pkg info system/kernel 
          Name: system/kernel 
       Summary: Core Kernel 
   Description: Core operating system kernel, device drivers and other modules. 
      Category: System/Core 
         State: Installed 
     Publisher: solaris 
       Version: 0.5.11 
 Build Release: 5.11 
        Branch: 0.175.0.11.0.4.1 
Packaging Date: 30 de agosto de 2012 14:21:42 
          Size: 32.04 MB 
          FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.0.11.0.4.1:20120830T142142Z
  • Entire:
# pkg info entire 
         Name: entire 
      Summary: entire incorporation including Support Repository Update (Oracle Solaris 11 11/11 SRU 11.4). 
  Description: This package constrains system package versions to the same 
               build. WARNING: Proper system update and correct package 
               selection depend on the presence of this incorporation. 
               Removing this package will result in an unsupported system. For
               more information see https://support.oracle.com/CSP/main/article 
               ?cmd=show&type=NOT&doctype=REFERENCE&id=1372094.1. 
     Category: Meta Packages/Incorporations 
        State: Installed 
    Publisher: solaris 
      Version: 0.5.11 (Oracle Solaris 11 SRU 11.4) 
Build Release: 5.11 Branch: 0.175.0.11.0.4.1 
Packaging Date: 1 de septiembre de 2012 01:14:39 
          Size: 5.45 kB 
          FMRI: pkg://solaris/entire@0.5.11,5.11-0.175.0.11.0.4.1:20120901T011439Z 
  • Boot Environments:
root@solaris11repo:~# beadm list 
BE Active Mountpoint Space Policy Created 
— —— ———- —– —— ——- 
solaris-1 NR / 10.82G static 2012-10-10 16:26

Como vemos actualmente tenemos la versión 5.11 SRU 11.4. Procedemos a lanzar el parcheo del servidor indicando que cree un nuevo Boot Environment:

# pkg update –require-new-be –be-name SolarisU11.1 –accept
———————————————————— 

Package: pkg://solaris/consolidation/osnet/osnet-incorporation@0.5.11,5.11-0.175.1.0.0.24.2:20120919T184141Z 
License: usr/src/pkg/license_files/lic_OTN 

Oracle Technology Network Developer License Agreement 

Oracle Solaris, Oracle Solaris Cluster and Oracle Solaris Express 

… 

Oracle may contact you to ask if you had a satisfactory experience installing and using this OTN software download. 

            Packages to remove: 1 
           Packages to install: 36 
            Packages to update: 455 
           Mediators to change: 2 
       Create boot environment: Yes 
Create backup boot environment: No 
DOWNLOAD                      PKGS         FILES        XFER (MB) 
Completed                  492/492   25247/25247      467.8/467.8 
PHASE                                    ACTIONS 
Removal Phase                          8164/8164 
Install Phase                        17909/17909 
Update Phase                         14639/14639 
PHASE                                      ITEMS 
Package State Update Phase               945/945 
Package Cache Update Phase               455/455 
Image State Update Phase                     2/2 
A clone of solaris-1 exists and has been updated and activated. 
On the next boot the Boot Environment SolarisU11.1 will be 
mounted on ‘/’. Reboot when ready to switch to this updated BE. 

The following unexpected or editable files and directories were 
salvaged while executing the requested package operation; they 
have been moved to the displayed location in the image: 

    var/crash -> /tmp/tmpa0wceg/var/pkg/lost+found/var/crash-20121029T111717Z 

————————————————————————— 

—————————————————————————  

Se ha creado un nuevo “Boot Environment” donde se ha realizado el upgrade de versión y que se ha activado para el próximo reinicio:

# beadm list 
BE Active Mountpoint Space Policy Created 
— —— ———- —– —— ——- 
SolarisU11.1 R – 7.41G static 2012-10-29 11:11 
solaris-1 N / 525.0K static 2012-10-10 16:26
Una vez reiniciado y arrancado con el nuevo “Boot Environment” podemos realizar las mismas comprobaciones que al inicio y veremos como estamos en una nueva ““Release” de Solaris 11, la 11.1:

  • Release

# cat /etc/release 
                           Oracle Solaris 11.1 X86 
Copyright (c) 1983, 2012, Oracle and/or its affiliates. All rights reserved. 
                         Assembled 19 September 2012

  • Uname

# uname -a 
SunOS solaris11repo 5.11 11.1 i86pc i386 i86pc

  • Kernel

# pkg info system/kernel 
          Name: system/kernel 
       Summary: Core Kernel 
   Description: Core operating system kernel, device drivers and other modules. 
      Category: System/Core 
         State: Installed 
     Publisher: solaris 
       Version: 0.5.11 
 Build Release: 5.11 
        Branch: 0.175.1.0.0.24.2 
Packaging Date: 19 de septiembre de 2012 18:50:11 
          Size: 32.59 MB 
          FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.1.0.0.24.2:20120919T185011Z

  • Entire

# pkg info entire 
          Name: entire 
       Summary: Incorporation to lock all system packages to the same build
   Description: This package constrains system package versions to the same
                build. WARNING: Proper system update and correct package
                selection depend on the presence of this incorporation. 
                Removing this package will result in an unsupported system. 
      Category: Meta Packages/Incorporations 
         State: Installed 
     Publisher: solaris 
       Version: 0.5.11 
 Build Release: 5.11 
        Branch: 0.175.1.0.0.24.2 
Packaging Date: 19 de septiembre de 2012 19:01:35 
          Size: 5.46 kB 
          FMRI: pkg://solaris/entire@0.5.11,5.11-0.175.1.0.0.24.2:20120919T190135Z

En el caso de que deseemos actualizar el servidor que contiene nuestro repositorio para poder actualizar el resto de nuestra infraestructura, deberemos primero realizar el upgrade sobre este servidor. A continuación, ya se podría actualizar el repositorio para tener los paquetes de la última Release:

  • Desde los repositorios de release (publicos de Oracle)

# pkgrecv -s http://pkg.oracle.com/solaris/release/ -d /export/repoSolaris11 ‘*’ 

Processing packages for publisher solaris… 
Retrieving and evaluating 4401 package(s)… 
PROCESS                                       ITEMS   GET (MB)    SEND (MB) 
Completed                                 1270/1270  5894/5894  19638/19638

  • Desde los repositorios de Soporte (es necesario un CSI activo):

# pkgrecv -s https://pkg.oracle.com/solaris/support/ -d /export/repoSolaris11\ –key /var/pkg/ssl/Oracle_Solaris_11_Support.key.pem \ –cert /var/pkg/ssl/Oracle_Solaris_11_Support.certificate.pem ‘*’ 
Processing packages for publisher solaris … 
Retrieving and evaluating 4414 package(s)… 

PROCESS                                      ITEMS     GET (MB)   SEND (MB) 
Completed                                      6/6      4.5/4.5   12.0/12.0

Anuncios

Crear repositorio local solaris 11

Una de las novedades de Solaris 11 con respecto a sus versiones anteriores es la utilización, por fin, de un sistema de gestión de paquetes parecido a los disponibles en linux. Este sistema permite la instalación de software de manera sencilla, conectandose a un repositorio (por defecto el de Oracle) de donde baja el software y todas sus dependencias. Ya no es necesario bajarse el paquete, revisar las dependencias, bajarse las dependencias, revisar a su vez las dependencias de las primeras, etc, etc…
Si solo vamos a tener unos pocos servidores será suficiente con mantener el repositorio de Oracle. En cambio, si vamos a tener una gran instalación puede interesar montar un repositorio local. De esta forma, el repositorio estará sincronziado con el de Oracle y los servidores no necesitarán conectarse a internet para la instalación de software. 
El aprovisionado de zonas también es mas rápido ya que en Solaris 11 es necesario la conexión al repositorio, haciendo que sea mas rápido si está en la red local.
Para la instalación del repositorio bajamos las imágenes ISO que ofrece Oracle desde su web de descargas. Son necesarias dos imágenes ISO que deberemos concatenarlas y montarlas en un directorio:

# cat sol-11-1111-repo-full.iso-a sol-11-1111-repo-full.iso-b > sol-11-1111-repo-full.iso
# mkdir /export/repoSolaris11
# mv sol-11-1111-repo-full.iso /export/repoSolaris11/
# mount -F hsfs /export/repoSolaris11/sol-11-1111-repo-full.iso /mnt
# ls /mnt
COPYRIGHT NOTICES README repo

A continuación se deberá sincronizar el contenido de la ISO con el directorio que servirá como repositorio:  

# rsync -aP /mnt/repo/ /export/repoSolaris11
sending incremental file list
./
pkg5.repository

240 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1378/1380)

publisher/
publisher/solaris/
publisher/solaris/catalog/
publisher/solaris/catalog/catalog.attrs

1250 100% 23.94kB/s 0:00:00 (xfer#2, to-check=1369/1380)

publisher/solaris/catalog/catalog.base.C

602328 100% 6.24MB/s 0:00:00 (xfer#3, to-check=1368/1380)

publisher/solaris/catalog/catalog.dependency.C

Una vez haya terminado de sincronizar podemos desmontar la ISO:

root@s11template:/var/tmp# umount /mnt

    Con el contenido ya en su ubicación final es momento de crear el indice del repositorio:

    # pkgrepo -s /export/repoSolaris11 refresh
    Initiating repository refresh

      El repositorio hara uso de servicios que deberán ser configurados adecuadamente para que sirvan correctamente el software. El servicio publisher se configurará de la siguiente manera para hacer accesible el repositorio por http:

      # svccfg -s application/pkg/server setprop pkg/inst_root=/export/repoSolaris11
      # svccfg -s application/pkg/server setprop pkg/readonly=true
      # svcprop -p pkg/inst_root application/pkg/server /export/repoSolaris11

        Podemos verificar que se han guardado los cambios en la configuración y a continuación aplicar las modificaciones refrescando el servicio:

          # svcprop application/pkg/server
          pkg/address net_address
          pkg/cfg_file astring “”
          pkg/content_root astring usr/share/lib/pkg
          pkg/debug astring “” pkg/file_root astring “”
          pkg/log_access astring none
          pkg/log_errors astring stderr
          pkg/mirror boolean false
          pkg/pkg_root astring /
          pkg/port count 80
          pkg/proxy_base astring “”
          pkg/socket_timeout count 60
          pkg/sort_file_max_size astring “”
          pkg/ssl_cert_file astring “”
          pkg/ssl_dialog astring smf
          pkg/ssl_key_file astring “”
          pkg/threads count 60
          pkg/writable_root astring “”
          pkg/inst_root astring /export/repoSolaris11
          pkg/readonly boolean true
          pkg_bui/feed_description ustring “”
          pkg_bui/feed_icon ustring web/_themes/pkg-block-icon.png
          pkg_bui/feed_logo ustring web/_themes/pkg-block-logo.png
          pkg_bui/feed_name ustring package\ repository\ feed
          pkg_bui/feed_window count 24
          pkg_secure/read_authorization astring solaris.smf.read.pkg-server
          pkg_secure/ssl_key_passphrase astring “”
          fs/entities fmri svc:/system/filesystem/local
          fs/grouping astring require_all
          fs/restart_on astring none
          fs/type astring service
          autofs/entities fmri svc:/system/filesystem/autofs
          autofs/grouping astring optional_all
          autofs/restart_on astring none
          autofs/type astring service
          ntp/entities fmri svc:/network/ntp
          ntp/grouping astring optional_all
          ntp/restart_on astring none
          ntp/type astring service
          network/entities fmri svc:/milestone/network
          network/grouping astring require_all
          network/restart_on astring none
          network/type astring service
          manifestfiles/lib_svc_manifest_application_pkg_pkg-server_xml astring /lib/svc/manifest/application/pkg/pkg-server.xml
          general/entity_stability astring Unstable
          start/exec astring %{pkg/pkg_root}/lib/svc/method/svc-pkg-depot\ %m
          start/timeout_seconds count 0
          start/type astring method
          stop/exec astring %{pkg/pkg_root}/lib/svc/method/svc-pkg-depot\ %m\ %{restarter/contract}
          stop/timeout_seconds count 30
          stop/type astring method tm_common_name/C ustring image\ packaging\ repository

          # svcadm refresh application/pkg/server
          # svcadm enable application/pkg/server

            Con esto ya esta el servicio configurado. Ahora, al propio servidor se le puede configurar el publisher local como repositorio principal:

            # pkg set-publisher -G ‘*’ -M ‘*’ -g http://localhost:80/ solaris
            # pkg publisher
            PUBLISHER TYPE STATUS URI
            solaris origin online http://localhost:80/

              Si quisieramos volver al repositorio de Oracle:

              # pkg set-publisher \
              > -k /var/pkg/ssl/Oracle_Solaris_11_Support.key.pem \
              > -c /var/pkg/ssl/Oracle_Solaris_11_Support.certificate.pem \
              > -g https://pkg.oracle.com/solaris/support/ \
              > -G http://pkg.oracle.com/solaris/release/ solaris

              # pkg publisher
              PUBLISHER TYPE STATUS URI
              solaris origin online https://pkg.oracle.com/solaris/support/

                NOTA: Oracle dispone de dos repositorios, uno público, en el que no publica parches y otro privado que requiere el uso de certificados. Los certificados se consiguen aqui: http://pkg-register.oracle.com/ y es requesito disponer de un CSI válido para obtenerlos.

                Con el repositorio ya configurado podemos realizar una simulación de actualización:

                # pkg update -nv

                Packages to install: 6
                Packages to update: 238
                Mediators to change: 1
                Estimated space available: 1.67 GB
                Estimated space to be consumed: 1.04 GB
                Create boot environment: Yes
                Activate boot environment: Yes
                Create backup boot environment: No
                Rebuild boot archive: Yes

                Changed mediators:
                mediator java:
                version: None -> 1.6 (system default)

                Changed packages:
                solaris
                database/mysql-51/library
                None -> 5.1.37,5.11-0.175.0.0.0.2.537:20111019T091844Z
                library/apr-util-13/apr-ldap

                  Con este nuevo sistema podemos sacar un listado de paquetes con actualizaciones disponibles:

                  # pkg list -u
                  NAME (PUBLISHER) VERSION IFO
                  consolidation/SunVTS/SunVTS-incorporation 0.5.11-0.172.0.0.0.0.0 i–
                  consolidation/X/X-incorporation 0.5.11-0.175.0.0.0.0.1215 i–
                  consolidation/cacao/cacao-incorporation 0.5.11-0.174.0.0.0.0.0 i–
                  consolidation/cns/cns-incorporation 0.5.11-0.175.0.0.0.1.0 i–
                  consolidation/desktop/desktop-incorporation 0.5.11-0.175.0.0.0.2.0 i–
                  consolidation/desktop/gnome-incorporation 0.5.11-0.175.0.0.0.2.0 i–
                  consolidation/install/install-incorporation 0.5.11-0.175.0.0.0.2.1482 i–
                  consolidation/ips/ips-incorporation 0.5.11-0.175.0.0.0.2.2576 i–
                  consolidation/java/java-incorporation 0.5.11-0.173.0.0.0.0.0 i–
                  consolidation/l10n/l10n-incorporation 0.5.11-0.175.0.0.0.1.765 i–
                  consolidation/ldoms/ldoms-incorporation 0.5.11-0.175.0.0.0.1.0 i–

                  Actualización del Repositorio:

                  Existen dos repositorios de oracle, uno con los paquetes de la release y otro con los paquetes con actualizaciones y parches. Con el primero es normal que no actualice nada:

                  # pkgrecv -s http://pkg.oracle.com/solaris/release/ -d /export/repoSolaris11 ‘*’
                  Processing packages for publisher solaris …
                  Retrieving and evaluating 4292 package(s)…

                  En cambio, si configuramos el repositorio de soporte, si que bajará los parches que se han ido añadiendo al repositorio. Para poder configurar este repositorio deberemos disponer de las claves.

                  # pkgrecv -s https://pkg.oracle.com/solaris/support/ -d /export/repoSolaris11 \
                  > –key /var/pkg/ssl/Oracle_Solaris_11_Support.key.pem \
                  > –cert /var/pkg/ssl/Oracle_Solaris_11_Support.certificate.pem ‘*’
                  Processing packages for publisher solaris …
                  Retrieving and evaluating 4304 package(s)…
                  PROCESS ITEMS GET (MB) SEND (MB)
                  mail/thunderbird 21/391 56.5/2535.6 56.9/8402.3

                  Actualizando un sistema

                    Una vez tenemos el repositorio local actualizado podríamos parchear un sistema de la siguiente manera

                    # pkg update
                    Packages to install: 6
                    Packages to update: 238
                    Mediators to change: 1
                    Create boot environment: Yes
                    Create backup boot environment: No

                    DOWNLOAD PKGS FILES XFER (MB)
                    Completed 244/244 6412/6412 166.1/166.1

                    PHASE ACTIONS
                    Removal Phase 1944/1944
                    Install Phase 2455/2455
                    Update Phase 8580/8580

                    PHASE ITEMS
                    Package State Update Phase 482/482
                    Package Cache Update Phase 238/238
                    Image State Update Phase 2/2

                    A clone of solaris exists and has been updated and activated.
                    On the next boot the Boot Environment solaris-1 will be mounted on ‘/’.
                    Reboot when ready to switch to this updated BE.

                    —————————————————————————
                    NOTE: Please review release notes posted at:
                    http://www.oracle.com/pls/topic/lookup?ctx=E23824&id=SERNS
                    ————————————————————————–

                      Al existir parches de Kernel nos ha creado un nuevo Boot Environment, aunque no lo hayamos especificado explícitamente. Listanto los Boot Enviroments verificamos que se ha creado uno nuevo y se ha activado para el próximo reboot:

                      # beadm list
                      BE Active Mountpoint Space Policy Created
                      — —— ———- —– —— ——-
                      solaris N / 6.72M static 2012-10-08 17:42
                      solaris-1 R – 4.04G static 2012-10-10 16:26

                       
                      Antes de reiniciar para activar el nuevo Boot Environment verificaremos la versión de Kernel que tenemos actualmente instalada:

                      # pkg info system/kernel
                      Name: system/kernel
                      Summary: Core Kernel
                      Description: Core operating system kernel, device drivers and other modules.
                      Category: System/Core
                      State: Installed
                      Publisher: solaris
                      Version: 0.5.11
                      Build Release: 5.11
                      Branch: 0.175.0.0.0.2.1
                      Packaging Date: October 19, 2011 07:57:11 AM
                      Size: 32.33 MB
                      FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.0.0.0.2.1:20111019T075711Z

                       Una vez reiniciado el sistema, podemos ver que ha arrancado con una versión superior:

                      # pkg info system/kernel
                      Name: system/kernel
                      Summary: Core Kernel
                      Description: Core operating system kernel, device drivers and other modules.
                      Category: System/Core
                      State: Installed
                      Publisher: solaris
                      Version: 0.5.11
                      Build Release: 5.11
                      Branch: 0.175.0.11.0.4.1
                      Packaging Date: August 30, 2012 02:21:42 PM
                      Size: 32.04 MB
                      FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.0.11.0.4.1:20120830T142142Z

                      Vuelta atrás de un parcheo

                      Siempre que se lanza un parcheo existe la posibilidad de indicarle sobre que Boot Enviroment aplicarlo. Se le puede especificar que cree uno nuevo, donde se instalarán los parches, y posteriormente reiniciar el servidor con ese nuevo Boot Enviroment. El nuevo Boot Enviroment no siempre se crea de forma automática, pero si se lanza una simulacion de la actualización se indica en el resumen de la misma.
                      Para lanzar una actualización forzando la creación de un nuevo Boot Enviroment lo haremos de la siguiente forma:
                       
                      root@s11client:~# pkg update –require-new-be –be-name parcheo –accept
                      Packages to install: 6
                      Packages to update: 238
                      Mediators to change: 1
                      Create boot environment: Yes
                      Create backup boot environment: No

                      DOWNLOAD PKGS FILES XFER (MB)
                      Completed 244/244 6412/6412 166.1/166.1

                      PHASE ACTIONS
                      Removal Phase 1944/1944
                      Install Phase 2455/2455
                      Update Phase 8580/8580

                      PHASE ITEMS
                      Package State Update Phase 482/482
                      Package Cache Update Phase 238/238
                      Image State Update Phase 2/2

                      A clone of solaris exists and has been updated and activated.
                      On the next boot the Boot Environment parcheo will be mounted on ‘/’.
                      Reboot when ready to switch to this updated BE.

                      —————————————————————————
                      NOTE: Please review release notes posted at:
                      http://www.oracle.com/pls/topic/lookup?ctx=E23824&id=SERNS
                      —————————————————————————

                      Verificaremos el nuevo Boot Enviroment creado y que será el activo en el próximo arranque del servidor. Posteriormente reiniciamos para aplicarlo.

                      # beadm list
                      BE Active Mountpoint Space Policy Created
                      — —— ———- —– —— ——-
                      parcheo R – 4.15G static 2012-10-11 09:37
                      solaris N / 502.0K static 2012-10-08 17:42
                      # init 6

                      Al reiniciar vemos que la versión del kernel es la nueva, el boot enviroment activo es el creado durante el parcheo:

                      $ beadm list
                      BE Active Mountpoint Space Policy Created
                      — —— ———- —– —— ——-
                      parcheo NR / 4.22G static 2012-10-11 09:37
                      solaris – – 11.08M static 2012-10-08 17:42 

                      # pkg info system/kernel
                      Name: system/kernel
                      Summary: Core Kernel
                      Description: Core operating system kernel, device drivers and other modules.
                      Category: System/Core
                      State: Installed
                      Publisher: solaris
                      Version: 0.5.11
                      Build Release: 5.11
                      Branch: 0.175.0.11.0.4.1
                      Packaging Date: August 30, 2012 02:21:42 PM
                      Size: 32.04 MB
                      FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.0.11.0.4.1:20120830T142142Z

                      Si queremos volver atras el parcheo por algún motivo, basta con activar el boot enviroment original y reiniciar:

                      # beadm activate solaris
                      # beadm list BE
                      Active Mountpoint Space Policy Created
                      — —— ———- —– —— ——-
                      parcheo N / 810.33M static 2012-10-11 09:37
                      solaris R – 3.52G static 2012-10-08 17:42
                      root@s11client:~# init 6

                      Una vez reinicado vemos que el boot enviroment original es el activo y que la versión de kernel es la que teniamos inicialmente:

                      # pkg info system/kernel
                      Name: system/kernel
                      Summary: Core Kernel
                      Description: Core operating system kernel, device drivers and other modules.
                      Category: System/Core
                      State: Installed
                      Publisher: solaris
                      Version: 0.5.11
                      Build Release: 5.11
                      Branch: 0.175.0.0.0.2.1
                      Packaging Date: October 19, 2011 07:57:11 AM
                      Size: 32.33 MB
                      FMRI: pkg://solaris/system/kernel@0.5.11,5.11-0.175.0.0.0.2.1:20111019T075711Z
                      # beadm list BE
                      Active Mountpoint Space Policy Created
                      — —— ———- —– —— ——-
                      parcheo – – 812.17M static 2012-10-11 09:37
                      solaris NR / 3.57G static 2012-10-08 17:42
                       

                      Configuración del servicio a traves de proxy

                      Si no funciona la actualización y da time out es posible que sea debido a la configuración del proxy. Hay que configurar en las propiedades del servicio para que tome el proxy y también en las variables de entorno:
                       
                      # svccfg -s svc:/application/pkg/system-repository:default setprop config/http_proxy=astring: “http://USUARIO:PASSWORD@X.X.X.X:PPPP”
                      # svccfg -s svc:/application/pkg/system-repository:default setprop config/https_proxy=astring: “http://USUARIO:PASSWORD@X.X.X.X:PPPP”


                      Reconfigurar el servicio

                      # svcadm refresh svc:/application/pkg/system-repository:default

                      Verificacion de las propiedades:

                      # svcprop pkg/system-repository | grep proxy
                      config/http_proxy astring http://USUARIO:PASSWORD@X.X.X.X:PPPP
                      config/https_proxy astring http://USUARIO:PASSWORD@X.X.X.X:PPPP

                      Además es recomendable definir las variables de entorno:
                       
                      # export http_proxy=”http://USUARIO:PASSWORD@X.X.X.X:PPPP”
                      # export https_proxy=”http://USUARIO:PASSWORD@X.X.X.X:PPPP”

                      Openstack: Prueba de concepto – Parte 2

                      En relación a la entrada anterior, he querido mostrar una demostración en un vídeo en YouTube. El vídeo esta grabado sobre la prueba de concepto que monté. En el siguiente gráfico se puede ver la arquitectura:


                      Existen cuatro nodos de computación, y uno de ellos además, lleva el resto de elementos de Openstack. Todo está funcionando sobre Ubuntu 12.04 y montado con servidores con una única interfaz física.

                      Para las instancias he descargado las imágenes UEC que ya tiene preparadas Canonical.

                      El vídeo se podría dividir en dos partes. En la primera parte se muestran los principales comandos para trabajar con imagenes, “flavors”, arrancar instancias y terminarlas.

                      A continuación se hace un repaso por la Dashboard viendo como es sumamente sencillo la creación y despliegue de nuevas instancias. También he aprovechado para trabajar con volúmenes y demostrando que se pueden mover de una instancia a otra manteniendo la información que contienen.

                      Aquí se puede ver el vídeo:

                      OpenStack: Prueba de concepto – Parte 1

                      Estos días he tenido la opción de montar una pequeña prueba de concepto sobre Openstack. La idea es ver como funciona y analizar si en un futuro se podría implementar en un entorno productivo.

                      Me he basado en la documentación de Cloud – IES Gonzalo Nazareno concretamente en el documento bk-admin-openstack.pdf. También he seguido el libro de “recetas”: OpenStack Cloud Computing Cookbook.

                      Lo que he montado es básicamente una arquitectura de cuatro nodos. Uno de ellos es el Cloud Controller, donde estará todo el software necesario de Openstack: nova-compute, nova-network, nova-volume, glance y keystone. En los otros tres nodos únicamente se ha instalado el modulo de computación, nova-compute.

                      El hipervisor elegido para las pruebas ha sido KVM, con la idea de poder tener imagenes de otros sistemas operativos, además de imágenes de distribuciones GNU/Linux.

                      El esquema lógico sería el siguiente:

                      Por ciertas limitaciones únicamente he podido disponer de una interfaz de red cableada, por ello he apostado por el diseño mas sencillo con FlatDHCP. Aún así, las instancias son capaces de verse entre si a pesar de correr en diferentes hosts.

                      Ficheros de configuración:
                      Tal y como se explica en la documentación, el único fichero que hay que ir tocando es el /etc/nova/nova.conf. Yo copié el que indica en el documento  bk-admin-openstack.pdf y lo adapté a mi entorno. Básicamente hay que cambiar la IP que aparece por cada servicio por la del nodo que yo utilizaba como controlador. El apartado que me dió mas problemas fue el de red. Hay que tener mucho cuidado con los segmentos que se definen para las redes privadas, ya que es posible que se den problemas de routing. El apartado de configuración de red quedó de la siguiente manera:

                      # NETWORK
                      network_manager=nova.network.manager.FlatDHCPManager
                      force_dhcp_release=True
                      dhcpbridge_flagfile=/etc/nova/nova.conf
                      dhcpbridge=/usr/bin/nova-dhcpbridge
                      firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
                      my_ip=X.X.3.91
                      public_interface=eth0
                      flat_network_bridge=br100
                      flat_interface=eth1
                      fixed_range=192.168.221.0/27
                      floating_range=192.168.221.32/27
                      routing_source_ip=X.X.3.91
                      start_guests_on_host_boot=true
                      resume_guests_state_on_host_boot=true
                      network_size=10
                      flat_network_dhcp_start=192.168.221.10
                      flat_injected=False
                      force_dhcp_release=True
                      root_helper=sudo nova-rootwrap

                      El fichero nova.conf será el mismo en todos los nodos, lo único que habrá que cambiar es la variable my_ip. También hay que tener en cuenta la configuración de la consola vnc para poder acceder desde la interfaz web:

                      # VNC
                      novnc_enabled=true
                      vnc_keymap=es
                      novncproxy_base_url=http://10.150.3.91:6080/vnc_auto.html
                      vncserver_proxyclient_address=10.150.3.92
                      vncserver_listen=10.150.3.92
                      vnc_console_proxy_url=http://10.150.3.91:6080

                      Aquí habrá que modificar las IPs en las variables vncserver_proxyclient_address y vncserver_listen. En las otras dos variables se dejará la IP del nodo donde se instala la Dashboard.

                      Como punto importante, ya en la configuración de Keystone, es necesario configurar las variables de entorno del usuario que vamos a autilizar para manejar los servicios de Nova. Para ello, en el fichero .bahsrc hay que introducir las siguientes líneas (en mi caso en el de root):

                      export SERVICE_ENDPOINT=”http://X.X.3.91:35357/v2.0″
                      export SERVICE_TOKEN=PASSWORD
                      export OS_TENANT_NAME=admin
                      export OS_USERNAME=admin
                      export OS_PASSWORD=PASSWORD
                      export OS_AUTH_URL=”http://X.X.3.91:5000/v2.0/”

                      Una vez con esto configurado ya podemos empezar a hacer pruebas con Openstack.

                      Problemas encontrados:
                      Hasta encontrar la configuración que funciona he tenido que ir jugando con los diferentes flags de los ficheros de configuración. Alguna vez, después de arrancar instancias, se han quedado en un estado inconsistente, siendo imposible el borrado de de las instancias de forma convencional. Para ello hay que conectarse a la base de datos y borrar los datos que hacen referencia a las instancias. Para hacerlo mas sencillo me monté un pequeño script en python que saca un listado de las instancias y permite borrar una o el borrado de todas. El script es el siguiente:

                      #!/usr/bin/python
                      #coding: iso-8859-15
                      import MySQLdb
                      import sys

                      db = MySQLdb.connect(host=’HOST’,user=’nova’, passwd=’PASSWORD’, db=’nova’)
                      cursor = db.cursor()
                      consulta = ‘select id, uuid from instances’
                      cursor.execute(consulta)
                      instances = cursor.fetchall()

                      for inst in instances:
                          print “Instancia: %s UUID: %s” % (str(inst[0]), str(inst[1]))



                      if “–all” in sys.argv:
                          print ‘Limpiando todas las instancias’
                          cont = raw_input(‘¿Continuar? (s/n): ‘)
                          if cont == ‘s’ or cont == ‘S’:
                              for inst in instances:
                                  id=str(inst[0])
                                  print ‘Borrando instancia %s’ % id
                                  consulta = ‘delete from instance_info_caches where id=%s’ % id
                                  cursor.execute(consulta)
                                              consulta = ‘delete from security_group_instance_association where id=%s’ % id
                                              cursor.execute(consulta)
                                              consulta = ‘delete from instances where id=%s’ % id
                                              cursor.execute(consulta)
                                  db.commit()
                              print ‘Todas las instancias borradas’
                      else:
                          id = raw_input(‘Selecciona la instancia a borrar: ‘)
                         
                          for inst in instances:
                              if str(inst[0]) == id:
                                  print “Se va a borrar la instancia %s con UUID %s” % (str(id), str(inst[1]))
                                  cont = raw_input(‘¿Continuar? (s/n): ‘)
                                  if cont == ‘s’ or cont == ‘S’:
                                      print ‘Borrando instancia %s’ % id
                                      consulta = ‘delete from instance_info_caches where id=%s’ % id
                                      cursor.execute(consulta)
                                      consulta = ‘delete from security_group_instance_association where id=%s’ % id
                                      cursor.execute(consulta)
                                      consulta = ‘delete from instances where id=%s’ % id
                                      cursor.execute(consulta)
                                      print ‘Ejecute “nova list | grep %s” para confirmar que se ha borrado la instancia’ % str(inst[1])
                                      db.commit()

                      En una ocasión no pude borrar la instancia con el script y era porque a la instancia le había asignado un volumen. Al borrar daba un error de clave referenciada en una tabla, con lo que tuve que borrar dicha entrada en la tabla que indicaba el error. Una vez limpiado se pudo borrar con el script.

                      Es importante, en caso de tener algún problema, revisar los logs. Allí encontraremos muchas pistas de que puede estar fallando y es muy probable que a alguien le haya pasado antes. Los logs de nova se encuentran en /var/logs/nova y los de KVM, no menos importantes, están en /var/logs/libvirt.