Article ID: 113129, created on Feb 6, 2012, last review on Mar 9, 2016

  • Applies to:
  • Plesk for Linux/Unix
  • Virtuozzo 6.0
  • Virtuozzo containers for Linux
  • Virtuozzo hypervisor

Información

Este artículo describe los pasos a realizar para evitar posibles incidencias durante una migración. La mayoría de incidencias de migración pueden evitarse fácilmente teniendo las plantillas de SO debidamente actualizadas y disponiendo de repositorios válidos para todas las aplicaciones y plantillas EZ de SO. La solución también es aplicable a contenedores que ya hayan sido migrados.

Síntomas

Un contenedor no se inicia tras la migración. Se observa un error similar al siguiente:

    ~# vzctl start 102
Starting the Container ...
Container is mounted
Setting permissions 20002 dev 0x7d00
Set up ioprio: 4
Adding offline management to Container(1): 4643 8443 
Adding IP addresses: 10.20.30.40
Error: Unable to execute bash: No such file or directory
Container is unmounted
Failed to start the Container

Existen otros síntomas de la existencia de un problema, como puede ser el hecho de que no se pueden mostrar las propiedades de los archivos en algún directorio:

CT-102-bash-4.2# ls -al /usr/bin/ | grep '\?'
ls: cannot access /usr/bin/mailq: No such file or directory
ls: cannot access /usr/bin/hoststat: No such file or directory
ls: cannot access /usr/bin/praliases: No such file or directory
ls: cannot access /usr/bin/purgestat: No such file or directory
ls: cannot access /usr/bin/newaliases: No such file or directory
??????????  ? ?    ?              ?            ? hoststat
??????????  ? ?    ?              ?            ? mailq
??????????  ? ?    ?              ?            ? newaliases
??????????  ? ?    ?              ?            ? praliases
??????????  ? ?    ?              ?            ? purgestat
CT-12264-bash-4.2# 

Esto puede afectar al arranque de servicios importantes, como por ejemplo SSH:

# /etc/rc.d/init.d/sshd restart
Stopping sshd:                                             [FAILED]
Starting sshd: /usr/sbin/sshd: error while loading shared libraries: libpam.so.0: cannot open shared object file: No such file or directory
                                                           [FAILED]

En este caso, el siguiente comando para el contenedor montado o iniciado devuelve alguna salida, como por ejemplo find: ...: No such file or directory:

    ~# find /vz/root/$CTID -xdev -ls >/dev/null

Reemplace "$CTID" por el ID del contenedor en cuestión.

Resolución

Antes de realizar la migración, prepare los nodos hardware de origen y de destino, así como el contenedor que desea migrar tal y como se describe a continuación.

  1. Establezca SCAN_PRIVATE a "yes" para garantizar que el archivo vzpackages enumerará todos los paquetes (y todas sus versiones) instalados en el contenedor mediante las herramientas de gestión de paquetes de Virtuozzo en función de los enlaces existentes en el área privada del contenedor. Edite /etc/vztt/vztt.conf en ambos nodos:

    ~# grep SCAN_PRIVATE /etc/vztt/vztt.conf 
    #SCAN_PRIVATE="yes"
    ~# sed -i 's/#SCAN_PRIVATE/SCAN_PRIVATE/' /etc/vztt/vztt.conf 
    ~# grep SCAN_PRIVATE /etc/vztt/vztt.conf 
    SCAN_PRIVATE="yes"
    

    NOTA: esta opción aumentará el tiempo de duración de la migración. Le recomendamos comentarla de nuevo antes de proceder con la migración.

  2. Sincronice los paquetes para el contenedor que desea migrar:

    ~# vzpkg sync_vzpackages $CTID
    

    Reemplace "$CTID" por el ID del contenedor.

  3. También puede resultar útil realizar vzpkg repair para el contenedor migrado si la migración resultó fallida antes de este paso. Generalmente, este comando se ejecuta automáticamente durante la migración:

    ~# vzpkg repair /vz/private/$CT_ID /etc/sysconfig/vz-scripts/$CTID.conf
    

    El paso 3 puede devolver el siguiente error:

    Error: The next package(s) are not available
    

Este error denota que los paquetes enumerados no se encuentran en el área de la plantilla y que estos no están disponibles en los repositorios configurados - por ejemplo, debido a que estos paquetes pertenecen a una versión obsoleta del SO.

Supongamos que nuestro contenedor se basa en la plantilla centos-5-x86_64:

    ~# vzpkg list 113
    centos-5-x86_64      2012-04-16 15:13:10

El error es el siguiente:

    Error: The next package(s) are not available:
    samba-swat.x86_64                        0:3.0.33-3.29.el5_5
    samba-common.x86_64                      0:3.0.33-3.29.el5_5
    glibc-common.x86_64                      2.5-49.el5_5.4
    openldap.x86_64                          2.3.43-12.el5_5.2
    krb5-libs.i386                           1.6.1-36.el5_5.5
    krb5-libs.x86_64                         1.6.1-36.el5_5.5
    nss.x86_64                               3.12.6-2.el5.centos
    glibc.i686                               2.5-49.el5_5.4
    nscd.x86_64                              2.5-49.el5_5.4
    samba.x86_64                             0:3.0.33-3.29.el5_5
    dhclient.x86_64                          12:3.0.5-23.el5_5.1
    device-mapper-multipath.x86_64           0.4.7-34.el5_5.4

Todos los paquetes ausentes detallados aquí pertenecen a Centos 5.5 (tal y como puede verse en la parte el5_5 en la versión del paquete).

Añada los repositorios de Centos 5.5. Los demás repositorios para CentOS pueden añadirse siguiendo el mismo método y reemplazando "5.5" por el ID de la versión actual:

    ~# echo http://vault.centos.org/5.5/os/x86_64 >> /vz/template/centos/5/x86_64/config/os/default/repositories
    ~# echo http://vault.centos.org/5.5/updates/x86_64 >> /vz/template/centos/5/x86_64/config/os/default/repositories

**NOTA**: si la lista contiene un gran número de repositorios, la actualización de los metadatos (que se efectúa cada vez que se alcanza el tiempo de espera de expiración en 24 horas) tardará mucho en completarse. Es por este motivo que le recomendamos eliminar los repositorios adicionales una vez finalizada la migración.

Tras añadir o eliminar repositorios, actualice los metadatos en el servidor para la plantilla EZ del SO:

    ~# vzpkg update metadata centos-5-x86_64 -r

A continuación, `vzpkg repair` debería poder localizar los paquetes necesarios.

Algunos paquetes no contienen el ID de la versión. En este caso, deberá comprobar manualmente todos los repositorios disponibles. Ejemplos de estos paquetes son `httpd` y `mod_ssl`.

Los sufijos digitales, como puede ser el caso de `.2` en la versión `.el5_5.2`, indican que estas versiones se distribuyen en las actualizaciones de una versión determinada.

**NOTA**: estas instrucciones son aplicables a Virtuozzo, Virtuozzo hypervisor 5.0 y Virtuozzo containers para Linux 4.6, 4.7 con contenedores basados en plantillas EZ de SO.  

En el caso de versiones anteriores, sólo son válidas para Virtuozzo hypervisor 4.0 (la última versión) y Virtuozzo containers 4.0 a partir de la versión 4.0.0-520.
El comando vzpkg repair sólo puede usarse si es posible crear contenedores nuevos basados en la plantilla de SO en cuestión.

  1. A veces no es posible encontrar un mirror con los paquetes ausentes, recopilados en el tercer paso. En este caso, copie dichos archivos del nodo de origen:

    ~# rsync -a --ignore-existing --rsh="ssh" root@${SOURCE_NODE}:/vz/template/centos/5/x86_64/ root@${DESTINATION_NODE}:/vz/template/centos/5/x86_64/
    

    NOTA: la opción ignore-existing es esencial en este comando, ya que los archivos, ya usados por los contenedores en ejecución, no deben actualizarse.

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c 29d1e90fd304f01e6420fbe60f66f838 a26b38f94253cdfbf1028d72cf3a498b 2897d76d56d2010f4e3a28f864d69223 e8e50b42231236b82df27684e7ec0beb d02f9caf3e11b191a38179103495106f 0dd5b9380c7d4884d77587f3eb0fa8ef c62e8726973f80975db0531f1ed5c6a2

Email subscription for changes to this article
Save as PDF