JavaScript is required to for searching.
Omitir V�nculos de navegaci�n
Salir de la Vista de impresi�n
Instalación de sistemas Oracle Solaris 11     Oracle Solaris 11 Information Library (Español)
search filter icon
search icon

Información del documento

Prefacio

Parte I Opciones de instalación de Oracle Solaris 11

1.  Descripción general de opciones de instalación

Parte II Instalación con medios de instalación

2.  Preparación de la instalación

3.  Uso de LiveCD

4.  Uso del instalador de texto

5.  Instalaciones automatizadas que se inician desde medios

6.  Anulación de configuración o reconfiguración de una instancia de Oracle Solaris

Parte III Instalación con un servidor de instalación

7.  Instalación automatizada de varios clientes

8.  Configuración de un servidor de instalación

9.  Personalización de instalaciones

10.  Aprovisionamiento del sistema cliente

Personalización de un archivo de manifiesto AI XML

Creación de un manifiesto AI en la instalación del cliente

Crear una secuencia de comandos de manifiestos derivados

Recuperar atributos de cliente

Personalizar el manifiesto AI

Ejemplos de secuencias de comandos de manifiestos derivados

Prueba de secuencias de comandos de manifiestos derivados

Agregar una secuencia de comandos de manifiestos derivados a un servicio de instalación

11.  Configuración del sistema cliente

12.  Instalación y configuración de zonas

13.  Ejecución de una secuencia de comandos personalizada durante el primer inicio

14.  Configuración de Oracle Configuration Manager para su uso en sistemas cliente AI

15.  Instalación de sistemas cliente

16.  Resolución de problemas en instalaciones automatizadas

Creación de un manifiesto AI en la instalación del cliente

Una alternativa a la creación de manifiestos AI personalizados antes de la instalación del cliente es escribir una secuencia de comandos que cree de manera dinámica un manifiesto AI para cada cliente durante la instalación del cliente. La secuencia de comandos puede consultar variables de entorno y otra información de configuración del cliente para crear un manifiesto AI personalizado para cada cliente. Dado que el manifiesto se basa en los atributos de cada cliente detectados en el momento de la instalación, el manifiesto se denomina manifiesto derivado.

Un manifiesto derivado resulta especialmente útil si tiene una gran cantidad de sistemas que se pueden instalar casi de manera idéntica de modo que los manifiestos AI de estos sistemas tengan diferencias relativamente menores. Cree un manifiesto AI que especifique los parámetros de instalación que son comunes a este grupo de sistemas. Utilizando este manifiesto común como base, cree una secuencia de comandos de manifiestos derivados que agregue los parámetros que son diferentes para cada cliente al manifiesto común cuando se instale cada cliente. Por ejemplo, una·secuencia de comandos de manifiestos derivados puede detectar el número y el tamaño de discos adjuntarse a cada sistema cliente y modificar el manifiesto AI en hora de instalación del cliente para especificar un personalizado diseño de disco para cada cliente.

Para crear y aplicar una secuencia de comandos de manifiestos derivados, siga estos pasos:

  1. Identifique un manifiesto AI existente para utilizar como manifiesto base para modificar.

    Para desarrollar y probar la secuencia de comandos, puede trabajar con una copia local. En el momento de la instalación, el manifiesto base debe estar disponible para cada cliente que utiliza esta secuencia de comandos de manifiestos derivados.

  2. Escriba una secuencia de comandos para modificar de forma dinámica el manifiesto base en el momento de la instalación en función de los atributos de cada cliente que se desea instalar.

  3. Agregue la secuencia de comandos de manifiestos derivados al servicio de instalación AI adecuado y especifique los criterios que definen qué clientes deben usar esta secuencia de comandos para crear sus instrucciones de instalación en el momento de la instalación.

AI ejecuta la secuencia de comandos en el momento de la instalación del cliente para generar una instancia de un manifiesto AI. AI valida el manifiesto resultante desde el punto de vista sintáctico.


Nota - Si no se crea un manifiesto o si no se valida el manifiesto derivado, se interrumpe la instalación del cliente. Para investigar la causa del fallo de la validación, consulte /system/volatile/install_log en el cliente.


Si la instalación del cliente se realiza correctamente, se copia el manifiesto derivado en /var/sadm/system/logs/derived/manifest.xml, en el cliente, y la secuencia de comandos utilizada para derivar el manifiesto se copia en /var/sadm/system/logs/derived/manifest_script.

Crear una secuencia de comandos de manifiestos derivados

En general, una secuencia de comandos de manifiestos derivados recupera información del cliente y utiliza esa información para modificar un manifiesto AI base a fin de crear un manifiesto AI personalizado sólo para este cliente. Una secuencia de comandos de manifiestos derivados puede combinar también varios manifiestos AI parciales. El manifiesto derivado final debe estar completo y superar la validación.

Una secuencia de comandos de manifiestos derivados puede ser cualquier clase de secuencia de comandos que se admita en la imagen. Por ejemplo, ksh93 y python están en la imagen de manera predeterminada. Si desea utilizar otra clase de secuencia de comandos, asegúrese de que el soporte necesario esté en la imagen.

Recuperar atributos de cliente

La secuencia de comandos de manifiestos derivados puede ejecutar comandos para leer los atributos del sistema. AI ejecuta la secuencia de comandos como un rol aiuser. El rol aiuser tiene todos los privilegios de un usuario que no dispone de privilegios, además de los siguientes privilegios adicionales:

solaris.network.autoconf.read
solaris.smf.read*

El rol aiuser no dispone de privilegios, con la excepción de que puede leer más información del sistema que otros usuarios sin privilegios. El rol aiuser no puede cambiar el sistema.

Para obtener información sobre roles, perfiles y privilegios, consulte la Parte III, Roles, perfiles de derechos y privilegios de Administración de Oracle Solaris: servicios de seguridad.

Además de utilizar comandos para leer los atributos del sistema, los atributos del cliente están disponibles a través de las variables de entorno mostradas en la siguiente tabla.

Tabla 10-1 Variables de entorno de atributos de cliente

Nombre de variable de entorno
Descripción
SI_ARCH
Arquitectura del cliente que se instalará. Equivalente a la salida de uname -p.
SI_CPU
ISA o tipo de procesador del cliente que se instalará. Equivalente a la salida de uname -p.
SI_NUMDISKS
Cantidad de discos en el cliente.
SI_DISKNAME_#
Conjunto plano de variables que representan los nombres ctds de los discos detectados en el cliente. Existirán número SI_NUMDISKS de variables SI_DISKNAME_#, donde # se reemplaza por un número entero comenzando a partir del 1, hasta SI_NUMDISKS. Este conjunto de variables se correlaciona con el conjunto de variables descrito por SI_DISKSIZE_#.
SI_DISKSIZE_#
Conjunto plano de variables que representan el tamaño de los discos detectados en el cliente. Existirán número SI_NUMDISKS de variables SI_DISKSIZE_#, donde # se reemplaza por un número entero comenzando a partir del 1, hasta SI_NUMDISKS. Este conjunto de variables se correlaciona con el conjunto de variables descrito por SI_DISKNAME_#. Los tamaños son números enteros de megabytes.
SI_HOSTADDRESS
Dirección IP del cliente como se definió en el entorno de instalación.
SI_HOSTNAME
Nombre de host del cliente como se definió en el entorno de instalación.
SI_KARCH
Arquitectura de núcleo del cliente. Equivalente a la salida de uname -m.
SI_INSTALL_SERVICE
Nombre del servicio de instalación utilizado para obtener la secuencia de comandos del manifiesto. Esta variable de entorno sólo tiene un valor para los inicios desde redes, no para los inicios desde medios.
SI_MANIFEST_SCRIPT
Dirección URL de la secuencia de comandos del manifiesto.
SI_MEMSIZE
Cantidad de memoria física en el cliente. El tamaño es un número entero de megabytes.
SI_MODEL
Nombre de modelo del cliente. Equivalente a la salida de uname -i.
SI_NATISA
Arquitectura de conjunto de instrucciones nativa del cliente. Equivalente a la salida de isainfo -n.
SI_NETWORK
Número de red del cliente. El número de red es (IP_ADDR y máscara_red).
SI_PLATFORM
Plataforma del cliente. Equivalente a la salida de uname -i.

Personalizar el manifiesto AI

Para agregar o modificar elementos XML en un manifiesto AI, utilice el comando /usr/bin/aimanifest.

El archivo mínimo que aimanifest puede modificar debe contener las siguientes dos secciones:

El siguiente ejemplo muestra el archivo de manifiesto base mínimo para un manifiesto AI, incluida la especificación del archivo DTD AI para el servicio de instalación, donde se agregará esta secuencia de comandos de manifiestos derivados:

<!DOCTYPE auto_install SYSTEM "file:///image_path/auto_install/ai.dtd.#">
<auto_install/>

# es un número entero, por ejemplo, 1. ruta_imagen es la ruta devuelta por el siguiente comando, donde nombre_servicio es el nombre del servicio de instalación donde se agregará esta secuencia de comandos de manifiestos derivados:

$ installadm list -n service_name

Utilice el subcomando load del comando aimanifest para cargar un manifiesto base antes que cualquier otra llamada aimanifest en la secuencia de comandos de manifiestos derivados. Los archivos que cargue debe estar disponibles para el cliente en el momento de la instalación del cliente. Por ejemplo, puede cargar un manifiesto desde ruta_imagen/auto_install/manifest/ en el servicio de instalación de destino.

En los ejemplos de este capítulo, se carga el archivo /usr/share/auto_install/manifest/default.xml. Los ejemplos de manifiestos de /usr/share/auto_install/manifest/ pueden ser diferentes de los manifiestos del servicio de instalación de destino. En tareas de producción, no debe cargar manifiestos desde /usr/share/auto_install/manifest/.

El subcomando load también se puede utilizar para cargar o insertar manifiestos parciales.

Utilice el subcomando add para agregar nuevos elementos. Utilice el subcomando set para agregar atributos de elementos o cambiar valores de atributos o elementos. Consulte la página del comando man aimanifest(1M) para obtener detalles. Consulte la página del comando man aimanifest(1M) y los ejemplos de secuencias de comandos a continuación para ver ejemplos de cómo se usa el comando aimanifest.

Si un valor especificado en un comando aimanifest contiene un carácter especial, como una barra diagonal (/) o comillas simples o dobles, dicho valor se deben encerrar entre comillas simples o dobles. Es posible que las comillas se deban escapar con un carácter de barra inversa (\) precedente en función de las reglas del shell utilizado, de modo que el shell no elimine ni interprete las comillas.

El siguiente ejemplo devuelve la acción del elemento software_data que contiene el nombre de paquete pkg:/entire. En este ejemplo, es necesario usar comillas antes y después de pkg:/entire porque el carácter de barra diagonal es un carácter especial. Los caracteres de barra invertida son necesarios para incluir un carácter de escape en las comillas si este comando se invoca en una secuencia de comandos de shell como una secuencia de comandos ksh93.

/usr/bin/aimanifest get software_data[name=\"pkg:/entire\"]@action

Consejo - Se recomienda configurar una captura que se detenga ante un error.


La siguiente secuencia de comandos parcial constituye un modelo adecuado para una secuencia de comandos de manifiestos derivados.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load baseAImanifest.xml

# Customize AI manifest. For example:
/usr/bin/aimanifest load -i manifest_fragment.xml
/usr/bin/aimanifest set origin@name file:///net/myserver/myrepo/repo.redist

exit $SCRIPT_SUCCESS

Ejemplos de secuencias de comandos de manifiestos derivados

Esta sección muestra cómo escribir secuencias de comandos de manifiestos derivados para determinar los atributos de cliente y utilizar esa información para personalizar el manifiesto AI. Estos ejemplos no incluyen necesariamente toda la información necesaria para generar un manifiesto AI válido.

Para intentar estos ejemplos, realice los siguientes pasos de configuración:

  1. Defina la variable de entorno AIM_MANIFEST en una ubicación donde la secuencia de comandos desarrollará el manifiesto AI.

    El archivo $AIM_MANIFEST se vuelve a escribir para cada comando aimanifest que modifica el archivo. Cada invocación de aimanifest con el subcomando load, add o set abre, modifica y guarda el archivo AIM_MANIFEST. Si AIM_MANIFEST no está definido, se produce un error en el comando aimanifest.

  2. Defina la variable de entorno AIM_LOGFILE en una ubicación en la que la secuencia de comandos pueda escribir información detallada y mensajes de error.

    El comando aimanifest registra el nombre del subcomando, los valores de argumentos y el estado de retorno de cada llamada aimanifest en la pantalla y en el archivo $AIM_MANIFEST_LOG si se ha definido.

  3. Asegúrese de que el comando aimanifest esté disponible en el sistema en el que se ejecuta la secuencia de comandos. Si el comando aimanifest no está disponible, instale el paquete auto-install-common.

  4. Configure variables de entorno. Estos ejemplos demuestran cómo usar variables de entorno para recuperar información sobre el cliente. Para intentar estos ejemplos, es preciso configurar valores para estas variables de entorno.

    Al instalar un sistema con AI, las variables de entorno que se muestran en la Tabla 10-1 tienen valores y están disponibles para que se utilicen en una secuencia de comandos de manifiestos derivados.

Ejemplo 10-1 Especificar las particiones de discos en función del tamaño de disco

En este ejemplo, se personaliza el manifiesto AI para utilizar sólo la mitad del disco de destino para una partición fdisk de Solaris si el tamaño del disco es mayor que 1 TB. Intente configurar SI_DISKSIZE_1 en menos de 1 TB y, luego, en más de 1 TB para efectuar diferentes ejecuciones de esta secuencia de comandos.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

# Assume there is only one disk on the system for this example.
if [[ $SI_DISKSIZE_1 -gt "1048576" ]] ; then
    typeset -i PARTN_SIZE=$SI_DISKSIZE_1/2

    # Default action is to create.
    /usr/bin/aimanifest add \
        /auto_install/ai_instance/target/disk/partition@name 1
    /usr/bin/aimanifest add \
        /auto_install/ai_instance/target/disk/partition[@name=1]/size@val \
        ${PARTN_SIZE}mb
else
    /usr/bin/aimanifest add \
        /auto_install/ai_instance/target/disk/partition@action \
        use_existing_solaris2
fi
exit $SCRIPT_SUCCESS

Para algunos clientes, se agregan los siguientes elementos en $AIM_MANIFEST:

<target>
  <disk>
    <partition action="use_existing_solaris2"/>
  </disk>
</target>

Para otros clientes, se agregan elementos similares a los siguientes en $AIM_MANIFEST, según el valor de SI_DISKSIZE_1:

<target>
  <disk>
    <partition name="1">
      <size val="524288mb"/>
    </partition>
  </disk>
</target>

Ejemplo 10-2 Especificar el diseño de la agrupación root en función de la existencia de discos adicionales

En este ejemplo, se personaliza el manifiesto AI para configurar una duplicación de la agrupación root si existe un segundo disco y para configurar una duplicación de tres vías si existe un tercer disco. Defina SI_NUMDISKS y SI_DISKNAME_1 antes de ejecutar la secuencia de comandos. Defina SI_DISKNAME_2, SI_DISKNAME_3 y todos los demás elementos como sea necesario, según el valor definido para SI_NUMDISKS. Estas variables de entorno se definirán y estarán disponibles para las secuencias de comandos de manifiestos derivados durante las instalaciones AI.

En este ejemplo, se demuestra el uso de la ruta de retorno aimanifest (opción -r). Consulte la página del comando man aimanifest(1M) para obtener más información sobre la ruta de retorno.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

# Use the default if there is only one disk.
if [[ $SI_NUMDISKS -ge 2 ]] ; then
    typeset -i disk_num

    # Turn on mirroring. Assumes a root zpool is already set up.
    vdev=$(/usr/bin/aimanifest add -r \
        target/logical/zpool[@name=rpool]/vdev@name mirror_vdev)
    /usr/bin/aimanifest set ${vdev}@redundancy mirror

    for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do
        eval curr_disk="$"SI_DISKNAME_${disk_num}
        disk=$(/usr/bin/aimanifest add -r target/disk@in_vdev mirror_vdev)
        /usr/bin/aimanifest set ${disk}@in_zpool rpool
        /usr/bin/aimanifest set ${disk}@whole_disk true
        disk_name=$(/usr/bin/aimanifest add -r \
            ${disk}/disk_name@name $curr_disk)
        /usr/bin/aimanifest set ${disk_name}@name_type ctd
    done
fi
exit $SCRIPT_SUCCESS

Para un sistema con dos discos denominados c0t0d0 y c0t1d0, la salida de este ejemplo es el siguiente archivo XML:

<target>
  <disk in_vdev="mirror_vdev" in_zpool="rpool" whole_disk="true">
    <disk_name name="c0t0d0" name_type="ctd"/>
  </disk>
  <disk in_vdev="mirror_vdev" in_zpool="rpool" whole_disk="true">
    <disk_name name="c0t1d0" name_type="ctd"/>
  </disk>
  <logical>
    <zpool name="rpool">
      <vdev name="mirror_vdev" redundancy="mirror"/>
    </zpool>
  </logical>
</target>

Ejemplo 10-3 Especificar una configuración duplicada si al menos están presentes dos discos del tamaño especificado

En este ejemplo, se personaliza el manifiesto AI para especificar una configuración duplicada si el sistema tiene al menos dos discos de 200 GB. Utilice los primeros dos discos detectados que tengan al menos 200 GB. Defina SI_NUMDISKS, SI_DISKNAME_1 y SI_DISKSIZE_1 en el entorno de prueba antes de ejecutar la secuencia de comandos. También defina SI_DISKNAME_2, SI_DISKSIZE_2 y todos los demás elementos como sea necesario, según el valor definido para SI_NUMDISKS . Estas variables de entorno se definirán y estarán disponibles para las secuencias de comandos de manifiestos derivados durante las instalaciones AI.

En este ejemplo, se muestra cómo modificar un nodo cuando más de un nodo con la misma ruta está presente. La implementación de shell utiliza la opción de ruta de retorno (- r) de aimanifest para devolver la ruta a un nodo específico y utiliza esa ruta para realizar modificaciones adicionales en el mismo nodo. La implementación de Python demuestra el uso de subrutas (cuando se utiliza [] dentro de una ruta de nodo) para realizar modificaciones adicionales en el mismo nodo.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

# Find the disks first.
typeset found_1
typeset found_2
typeset -i disk_num

for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do
    eval curr_disk="$"SI_DISKNAME_${disk_num}
    eval curr_disk_size="$"SI_DISKSIZE_${disk_num}
    if [[ $curr_disk_size -ge "204800" ]] ; then
        if [ -z $found_1 ] ; then
            found_1=$curr_disk
        else
            found_2=$curr_disk
            break
        fi
    fi
done

# Now, install them into the manifest.
# Let the installer take the default action if two large disks are not found.

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

if [[ -n $found_2 ]] ; then
    # Turn on mirroring.
    vdev=$(/usr/bin/aimanifest add -r \
        /auto_install/ai_instance/target/logical/zpool/vdev@redundancy mirror)
    /usr/bin/aimanifest set ${vdev}@name mirror_vdev
    disk=$(/usr/bin/aimanifest add -r \
        /auto_install/ai_instance/target/disk@in_vdev mirror_vdev)
    disk_name=$(/usr/bin/aimanifest add -r ${disk}/disk_name@name $found_1)
    /usr/bin/aimanifest set ${disk_name}@name_type ctd

    disk=$(/usr/bin/aimanifest add -r \
        /auto_install/ai_instance/target/disk@in_vdev mirror_vdev)
    disk_name=$(/usr/bin/aimanifest add -r ${disk}/disk_name@name $found_2)
    /usr/bin/aimanifest set ${disk_name}@name_type ctd
fi

exit $SCRIPT_SUCCESS

La siguiente secuencia de comandos es una versión de Python de la versión de Kornshell anterior.

import os
from subprocess import call, check_call, CalledProcessError

SCRIPT_SUCCESS = 0
SCRIPT_FAILURE = 1

def main():

    # Find the disks first.
    found_1 = ""
    found_2 = ""

    for disk_num in range(1, SI_NUMDISKS + 1):
        curr_disk_var = "SI_DISKNAME_" + str(disk_num)
        curr_disk = os.environ[curr_disk_var]
        curr_disk_size_var = "SI_DISKSIZE_" + str(disk_num)
        curr_disk_size = os.environ[curr_disk_size_var]
        if curr_disk_size >= "204800":
            if not len(found_1):
                found_1 = curr_disk
            else:
                found_2 = curr_disk
                break

    # Now, write the disk specifications into the manifest.
    # Let the installer take the default action if two large disks are not found.

    try:
        subprocess.check_call(["/usr/bin/aimanifest", "load",
            "/usr/share/auto_install/manifest/default.xml"])
    except CalledProcessError as err:
        sys.exit(err.returncode)

    if len(found_2):
        try:            subprocess.check_call(["/usr/bin/aimanifest", "set",
               "target/logical/zpool/vdev@redundancy", "mirror"])
            subprocess.check_call(["/usr/bin/aimanifest", "set",
               "target/logical/zpool/vdev[@redundancy='mirror']@name", "mirror_vdev"])

            subprocess.check_call(["/usr/bin/aimanifest", "add",
                "target/disk/disk_name@name", "found_1"])
            subprocess.check_call(["/usr/bin/aimanifest", "set",
                "target/disk/disk_name[@name='" + found_1 + "']" + "@name_type", "ctd"])
            subprocess.check_call(["/usr/bin/aimanifest", "set",
                "target/disk[disk_name@name='" + found_1 + "']" + "@in_vdev", "mirror_vdev"])

            subprocess.check_call(["/usr/bin/aimanifest", "add",
                "target/disk/disk_name@name", "found_2"])
            subprocess.check_call(["/usr/bin/aimanifest", "set",
                "target/disk/disk_name[@name='" + found_2 + "']" + "@name_type", "ctd"])
            subprocess.check_call(["/usr/bin/aimanifest", "set",
                "target/disk[disk_name@name='" + found_2 + "']" + "@in_vdev", "mirror_vdev"])
        except CalledProcessError as err:
            sys.exit(err.returncode)

    sys.exit(SCRIPT_SUCCESS)

if __name__ == "__main__":
    main()

Ejemplo 10-4 Especificar paquetes para instalar en función de la dirección IP

En este ejemplo, se personaliza el manifiesto AI para instalar un paquete si la dirección IP del cliente están en un rango especificado y para instalar un paquete distinto si la dirección IP del cliente está en un rango diferente. Defina SI_HOSTADDRESS en el entorno de prueba antes de ejecutar la secuencia de comandos. Esta variable de entorno se definirá y estará disponible para las secuencias de comandos de manifiestos derivados durante las instalaciones AI.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

# First determine which range the host IP address of the client is in.
echo $SI_HOSTADDRESS | sed 's/\./ /g' | read a b c d

# Assume all systems are on the same class A and B subnets.

# If the system is on class C subnet = 100, then install the /pkg100 package.
# If the system is on class C subnet = 101, then install the /pkg101 package.
# Otherwise, do not install any other additional package.

if ((c == 100)) ; then
    /usr/bin/aimanifest add \
    software/software_data[@action='install']/name pkg:/pkg100
fi
if ((c == 101)) ; then
    /usr/bin/aimanifest add \
    software/software_data[@action='install']/name pkg:/pkg101
fi

exit $SCRIPT_SUCCESS

Ejemplo 10-5 Especificar que el disco de destino debe tener un tamaño determinado

En este ejemplo, se personaliza el manifiesto AI para que sólo se instale en un disco que tenga al menos 50 GB. Se ignoran los discos más pequeños. Defina SI_NUMDISKS, SI_DISKNAME_1 y SI_DISKSIZE_1 en el entorno de prueba antes de ejecutar la secuencia de comandos. También defina SI_DISKNAME_2, SI_DISKSIZE_2 y todos los demás elementos como sea necesario, según el valor definido para SI_NUMDISKS . Estas variables de entorno se definirán y estarán disponibles para las secuencias de comandos de manifiestos derivados durante las instalaciones AI.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

typeset found
typeset -i disk_num
for ((disk_num = 1; disk_num <= $SI_NUMDISKS; disk_num++)) ; do
    eval curr_disk="$"SI_DISKNAME_${disk_num}
    eval curr_disk_size="$"SI_DISKSIZE_${disk_num}
    if [[ $curr_disk_size -ge "512000" ]] ; then
        found=$curr_disk
        /usr/bin/aimanifest add \
            /auto_install/ai_instance/target/disk/disk_name@name $found
        break
    fi
done

if [[ -z $found ]] ; then
    exit $SCRIPT_FAILURE
fi

exit $SCRIPT_SUCCESS

Ejemplo 10-6 Secuencia de comandos con especificaciones de manifiesto incorrectas

La secuencia de comandos de este ejemplo contiene errores.

#!/bin/ksh93

SCRIPT_SUCCESS=0
SCRIPT_FAILURE=1

function handler
{
    exit $SCRIPT_FAILURE
}

trap handler ERR

/usr/bin/aimanifest load /usr/share/auto_install/manifest/default.xml

/usr/bin/aimanifest set \
    software[@type="IPS"]/software_data/name pkg:/driver/pcmcia
/usr/bin/aimanifest set \
    software/software_data[@name=pkg:/driver/pcmcia]@action uninstall

return $SCRIPT_SUCCESS

En este ejemplo, existen tres problemas con la escritura en $AIM_MANIFEST.

  1. El subcomando set de aimanifest puede cambiar el valor de un elemento o un atributo existente, o puede crear un nuevo atributo. El subcomando set no puede crear un nuevo elemento. El primer subcomando set intenta modificar un nombre de paquete existente en el manifiesto, en lugar de crear un nuevo nombre de paquete. Si ya existe más de un nombre de paquete en el manifiesto, se produce un error de ambigüedad porque no es posible determinar cuál es el paquete que se debe modificar. El primer subcomando set de este ejemplo debería haber sido un subcomando add.

  2. En el segundo subcomando set de este ejemplo, se especifica un elemento name con el valor pkg:/driver/pcmcia con un signo @ precedente. Los valores de atributos se especifican con un signo @ precedente. Los valores de elementos no.

  3. El valor pkg:/driver/pcmcia debe estar entre comillas. Los valores con barras diagonales u otros caracteres especiales deben estar entre comillas.

Las siguientes líneas debe reemplazar las dos líneas set de este ejemplo:

/usr/bin/aimanifest add \
    software[@type="IPS"]/software_data@action uninstall
/usr/bin/aimanifest add \
    software/software_data[@action=uninstall]/name pkg:/driver/pcmcia

Estos dos subcomandos add agregan las siguientes líneas al final de la sección software del manifiesto que se desea escribir:

<software_data action="uninstall">
  <name>pkg:/driver/pcmcia</name>
</software_data>

Prueba de secuencias de comandos de manifiestos derivados

Para probar la secuencia de comandos de manifiestos derivados, ejecute la secuencia de comandos en un entorno similar al entorno de instalación AI.

  1. Configure un manifiesto AI base para que la secuencia de comandos lo modifique.

    1. Asegúrese de que el primer comando aimanifest de la secuencia de comandos sea un comando aimanifest load. Asegúrese de que el archivo que desea cargar contenga una definición <!DOCTYPE> que especifique el DTD adecuado que se debe utilizar para la validación del manifiesto AI del servicio de instalación de destino. El siguiente ejemplo muestra el archivo de manifiesto base mínimo para un manifiesto AI, incluida la especificación del archivo DTD AI para el servicio de instalación, donde se agregará esta secuencia de comandos de manifiestos derivados:

      <!DOCTYPE auto_install SYSTEM "file:///image_path/auto_install/ai.dtd.#">
      <auto_install/>

      # es un número entero, por ejemplo, 1. ruta_imagen es la ruta devuelta por el siguiente comando, donde nombre_servicio es el nombre del servicio de instalación donde se agregará esta secuencia de comandos de manifiestos derivados:

      $ installadm list -n service_name
    2. Defina AIM_MANIFEST en una ubicación en la que la secuencia de comandos desarrollará el manifiesto AI. El usuario sin privilegios aiuser debe poder escribir esta ubicación.


      Nota - Cuando AI realiza la instalación, no es necesario definir AIM_MANIFEST. AI establece un valor predeterminado.


  2. Defina AIM_LOGFILE en una ubicación en la que la secuencia de comandos puede escribir información detallada y mensajes de error. El usuario sin privilegios aiuser debe poder escribir esta ubicación.


    Nota - Cuando AI realiza la instalación, no es necesario definir AIM_LOGFILE. Esta información de registro forma parte del registro de instalación más extenso, /system/volatile/install_log.


  3. Asegúrese de que el comando aimanifest esté disponible en el sistema en el que probará la secuencia de comandos. Si el comando aimanifest no está disponible, instale el paquete auto-install-common.

  4. Asegúrese de que puede asumir el rol de usuario root. Desde el rol de usuario root, puede asumir el rol aiuser sin especificar una contraseña.

    $ su
    Password: 
    # su aiuser -c ./script
    # 

    AI ejecuta la secuencia de comandos de manifiestos derivados como el rol aiuser. Para aproximar el entorno de instalación AI, asuma el rol aiuser para ejecutar la secuencia de comandos. Si ejecuta la secuencia de comandos como un usuario con privilegios distintos que los que tiene el rol aiuser, algunas operaciones de la secuencia de comandos pueden tener resultados diferentes.

  5. Establezca variables de entorno en el entorno de prueba con valores que representen los sistemas cliente que se instalarán mediante esta secuencia de comandos de manifiestos derivados. El archivo de muestra /usr/share/auto_install/derived_manifest_test_env.sh se puede utilizar como una plantilla. Cambie los valores según corresponda.

    Cuando AI realiza la instalación, las variables de entorno que se muestran en la Tabla 10-1 tienen valores y están disponibles para que las utilice una secuencia de comandos de manifiestos derivados.

El sistema cliente deseado puede ser muy diferente del servidor de instalación u otro sistema en el que puede probar la secuencia de comandos de manifiestos derivados. Es posible que los comandos que se llamen en la secuencia de comandos no estén disponibles o que tengan una versión diferente con un comportamiento distinto. Es posible que los sistemas tengan arquitecturas diferentes o que la cantidad y el tamaño de los discos sean diferentes. La configuración de las variables de entorno en el entorno de prueba como se describió anteriormente aborda algunas de estas diferencias.

Utilice el siguiente método para probar la secuencia de comandos de manifiestos derivados en uno de los sistemas cliente deseados:

  1. Inicie una imagen AI en ese sistema cliente con el modo "Text Installer and command line".

  2. Seleccione "Shell" en el menú inicial del instalador.

  3. Utilice wget o sftp para copiar su secuencia de comandos desde el servidor de instalación AI.

  4. Utilice uno de los siguientes métodos para depurar la secuencia de comandos:

    • Ejecute la secuencia de comandos manualmente.

    • Utilice el siguiente comando para ejecutar AI en modo de prueba:

      $ auto-install -m script -i

    Inspeccione el archivo de registro AI /system/volatile/install_log. El archivo de registro debe contener la siguiente línea para indicar la validación de la secuencia de comandos:

    Derived Manifest Module: XML validation completed successfully
  5. Copie la secuencia de comandos de nuevo en el servidor de instalación.

Agregar una secuencia de comandos de manifiestos derivados a un servicio de instalación

Agregue una secuencia de comandos a un servicio de instalación AI del mismo modo que agrega un manifiesto XML al servicio de instalación. Utilice las mismas opciones para especificar criterios para seleccionar qué clientes utilizarán esta secuencia de comandos a fin de crear un manifiesto para su instalación. Puede actualizar una secuencia de comandos al igual que puede actualizar un manifiesto XML. Se puede definir una secuencia de comandos como archivo de manifiesto predeterminado para el servicio. Las secuencias de comandos se muestran cuando enumera los manifiestos asociados a un servicio. El contenido de una secuencia de comandos se puede exportar de la misma forma en que se puede exportar un manifiesto XML.

Al agregar un manifiesto XML a un servicio de instalación, el manifiesto se valida. Al agregar una secuencia de comandos a un servicio de instalación, la secuencia de comandos no se valida.

Valide un manifiesto AI derivado antes de agregar la secuencia de comandos a un servicio de instalación.

  1. Ejecute la secuencia de comandos en un entorno similar al sistema cliente deseado.

  2. Utilice el subcomando validate en el manifiesto resultante.

    $ /usr/bin/aimanifest validate

    Se muestran mensajes sólo si falla la validación.

Agregue la secuencia de comandos al servicio de instalación AI adecuado y especifique los criterios que definen qué clientes deben usar estas instrucciones de instalación.

# installadm create-manifest -n s11-x86 -f ./mac1.ksh -m mac1 \
-c mac=BB:AA:AA:AA:AA:AA

Puede especificar varias opciones -c o un archivo -C. Consulte también el subcomando set-criteria. Consulte el Capítulo 9, Personalización de instalaciones para obtener información sobre cómo especificar criterios de clientes.

Consulte Mantener un servidor de instalación para obtener información sobre los subcomandos list, export, create-manifest, set-criteria, update-manifest y set-service.