Guía del desarrollador para la creación de paquetes de aplicaciones

Capítulo 3 Mejora de las funciones de un paquete (tareas)

En este capítulo se describe cómo crear secuencias de comandos de instalación y archivos de información optativos para un paquete. Mientras en el Capítulo 2Construcción de un paquete se trataban los requisitos mínimos para componer un paquete, este capítulo trata las funciones adicionales que puede realizar en un paquete. Estas funciones adicionales se basan en los criterios que haya considerado al planificar cómo diseñar el paquete. Para obtener más información, consulte Consideraciones antes de construir un paquete.

A continuación puede ver una lista de la información general que se ofrece en este capítulo.

Creación de secuencias de comandos de instalación y archivos de información (mapa de tareas)

El mapa de tareas siguiente describe las funciones optativas que puede realizar en un paquete.

Tabla 3–1 Creación de secuencias de comandos de instalación y archivos de información (mapa de tareas)

Tarea 

Descripción 

Para obtener instrucciones 

1. Crear archivos de información 

Definir dependencias de los paquetes

La definición de las dependencias de los paquetes permiten especificar si el paquete es compatible con versiones anteriores, si depende de otros paquetes, o bien si otros paquetes dependen del suyo. 

Cómo definir las dependencias de los paquetes

 

Escribir un mensaje de copyright

Un archivo de copyright ofrece protección legal a su aplicación de software.

Cómo escribir un mensaje de copyright

 

Reservar espacio adicional en el sistema de destino.

Un archivo space reserva bloques en el sistema de destino, lo cual le permite crear archivos durante la instalación que no están definidos en el archivo pkgmap.

Cómo reservar espacio adicional en un sistema de destino.

2. Crear secuencias de comandos de instalación 

Obtener información del instalador

Una secuencia de comandos request permite obtener información de la persona que está instalando su paquete.

Cómo escribir una secuencia de comandos request

 

Reunir los datos del sistema de archivos para la instalación

Una secuencia de comandos checkinstall permite realizar un análisis del sistema de destino y configurar el entorno correcto para la instalación, o bien detenerla adecuadamente.

Cómo reunir datos del sistema de archivos

 

Escribir secuencias de comandos de procedimientos

Las secuencias de comandos de procedimientos le permiten ofrecer instrucciones personalizadas de instalación durante fases concretas del proceso de instalación o supresión. 

Cómo escribir secuencias de comandos de procedimientos

 

Escribir secuencias de comandos de acción de clase

Las secuencias de comandos de acción de clase permiten especificar un conjunto de instrucciones que deben ejecutarse durante la supresión y la instalación de paquetes en grupos específicos de objetos de paquetes. 

Cómo escribir secuencias de comandos de acción de clase

Creación de archivos de información

En esta sección se tratan los archivos de información de paquetes optativos. Gracias a estos archivos puede definir dependencias de paquetes, ofrecer un mensaje de copyright y reservar espacio adicional en un sistema de destino.

Definición de dependencias de paquetes

Necesita determinar si el paquete tiene dependencias respecto a otros paquetes y si otros paquetes dependen del suyo. Es posible definir incompatibilidades y dependencias de paquetes con dos de los archivos de información de paquetes optativos, compver y depend.

La entrega de un archivo compver permite asignar nombres a versiones anteriores del paquete que sean compatibles con el paquete que se está instalando.

La entrega de un archivo depend permite definir tres tipos de dependencias asociadas al paquete. Estos tipos de dependencias son las siguientes:

El archivo depend soluciona solamente dependencias muy básicas. Si su paquete depende de un archivo concreto, su contenido o su comportamiento, el archivo depend no ofrece la precisión adecuada. En este caso se debe usar una secuencia de comandos request o checkinstall para la comprobación detallada de dependencias. La secuencia de comandos checkinstall también es la única capaz de detener correctamente el proceso de instalación de los paquetes.


Nota –

Compruebe que los archivos depend y compver tengan entradas en el archivo prototype. El tipo de archivo debe ser i (para el archivo de información de paquetes).


Consulte las páginas de comando man depend(4) y compver(4) para obtener más información.

ProcedureCómo definir las dependencias de los paquetes

  1. Convierta el directorio que contenga sus archivos de información en el directorio actual de trabajo.

  2. Si hay versiones anteriores del paquete y necesita especificar que el nuevo paquete es compatible con ellas, cree un archivo llamado compver con su editor de textos preferido.

    Enumere las versiones con las que su paquete sea compatible. Use este formato:


    string string . . .
    

    El valor de cadena es idéntico al valor asignado al parámetro VERSION en el archivo pkginfo, para cada paquete compatible.

  3. Guarde los cambios y salga del editor.

  4. Si su paquete depende de la existencia de otros paquetes, si otros paquetes dependen de la existencia de su paquete, o bien si su paquete es incompatible con otro paquete, cree un archivo llamado depend con su editor de textos preferido.

    Agregue una entrada para cada dependencia. Use este formato:


    type pkg-abbrev pkg-name
        (arch) version
        (arch) version . . .
    
    type

    Define el tipo de dependencia. Debe ser uno de los caracteres siguientes: P (paquete de prerrequisito), I (paquete incompatible), o bien R (dependencia inversa).

    abreviatura_paquete

    Especifica la abreviatura del paquete, como SUNWcadap.

    nombre_paquete

    Especifica el nombre completo del paquete, como Chip designers need CAD application software to design abc chips. Runs only on xyz hardware and is installed in the usr partition.

    (arq)

    Optativo. Especifica el tipo de hardware en el que se ejecuta el paquete. Por ejemplo, sparc o x86. Si especifica una arquitectura, debe usar paréntesis como delimitadores.

    versión

    Optativo. Especifica el valor asignado al parámetro VERSION en el archivo pkginfo.

    Para obtener más información, consulte depend(4).

  5. Guarde los cambios y salga del editor.

  6. Complete una de las tareas siguientes:

  7. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.


Ejemplo 3–1 Archivo compver

En este ejemplo hay cuatro versiones de un paquete: 1.0, 1.1, 2.0, y el nuevo paquete, 3.0. El nuevo paquete es compatible con las tres versiones anteriores. El archivo compver para la versión más reciente podría tener el siguiente aspecto:


release 3.0
release 2.0
version 1.1
1.0

Las entradas no tienen por qué estar en un orden secuencial. Sin embargo, deben coincidir exactamente con la definición del parámetro VERSION en el archivo pkginfo de cada paquete. En este ejemplo, los diseñadores de paquetes han utilizado formatos diferentes en las tres primeros versiones.



Ejemplo 3–2 Archivo depend

En este ejemplo se da por supuesto que el paquete de ejemplo, SUNWcadap, requiere que los paquetes SUNWcsr y SUNWcsu ya estén instalados en un sistema de destino. El archivo depend para SUNWcadap tiene el aspecto siguiente:


P SUNWcsr Core Solaris, (Root)
P SUNWcsu Core Solaris, (Usr)

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Escritura de un mensaje de copyright

Es necesario decidir si su paquete debe mostrar un mensaje de copyright mientras se está instalando. Si es así, cree el archivo copyright.


Nota –

Debe incluir un archivo copyright para ofrecer protección legal a su aplicación de software. Compruebe con el departamento legal de su empresa las palabras que se deben incluir en el mensaje.


Para entregar un mensaje de copyright, debe crear un archivo llamado copyright . Durante la instalación, el mensaje se muestra exactamente tal como aparece en el archivo (sin formato). Consulte la página de comando man copyright(4) para obtener más información.


Nota –

Asegúrese de que el archivo copyright tenga una entrada en el archivo prototype. El tipo de archivo debe ser i (para el archivo de información de paquetes).


ProcedureCómo escribir un mensaje de copyright

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Cree un archivo llamado copyright con su editor de textos preferido.

    Escriba el texto del mensaje de copyright exactamente como desea que aparezca durante la instalación del paquete.

  3. Guarde los cambios y salga del editor.

  4. Complete una de las tareas siguientes:

  5. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.


Ejemplo 3–3 Archivo copyright

Por ejemplo, un mensaje de copyright parcial podría tener el aspecto siguiente:


Copyright (c) 2003 Company Name
All Rights Reserved
 
This product is protected by copyright and distributed under
licenses restricting copying, distribution, and decompilation.

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Reserva del espacio adicional en un sistema de destino

Debe determinar si el paquete necesita espacio adicional de disco en el sistema de destino. Este espacio se suma al requerido por los objetos del paquete. Si es así, cree el archivo de información space. Esta tarea es diferente de crear archivos y directorios vacíos en el tiempo de la instalación, tal como se puede ver en Definición de objetos adicionales que se deben crear en el tiempo de la instalación.

El comando pkgadd asegura que haya suficiente espacio en el disco para instalar el paquete de acuerdo con las definiciones de objetos del archivo pkgmap. Sin embargo, puede que un paquete necesite espacio adicional en el disco más allá de lo que necesiten los objetos definidos en el archivo pkgmap. Por ejemplo, puede que el paquete cree un archivo después de la instalación que puede incluir una base de datos, archivos de registro u otro archivo creciente que consuma espacio del disco. Para asegurarse de que haya espacio reservado, debe incluir un archivo space que especifique los requisitos de espacio en el disco. El comando pkgadd comprueba que exista el espacio adicional especificado en un archivo space. Consulte la página de comando man space(4) para obtener más información.


Nota –

Asegúrese de que el archivo space tenga una entrada en el archivo prototype. El tipo de archivo debe ser i (para el archivo de información de paquetes).


ProcedureCómo reservar espacio adicional en un sistema de destino.

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Cree un archivo llamado space con su editor de textos preferido.

    Especifique los requisitos adicionales para el espacio en el disco que su paquete necesita. Use este formato:


    pathname blocks inodes
    
    nombre_ruta

    Especifica un nombre de directorio que puede ser, aunque no necesariamente, el punto de montaje de un sistema de archivos.

    bloques

    Especifica el número de bloques de 512 bytes que desea reservar.

    inodos

    Especifica el número de inodos necesarios.

    Para obtener más información, consulte la página de comando man space(4).

  3. Guarde los cambios y salga del editor.

  4. Complete una de las tareas siguientes.

  5. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.


Ejemplo 3–4 Archivo space

Este archivo space de ejemplo especifica que se reserven 1000 bloques de 512 bytes y 1 inodo en el directorio /opt del sistema de destino.


/opt   1000   1

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Creación de secuencias de comandos de instalación

En esta sección se tratan las secuencias de comandos de instalación de paquetes optativos. El comando pkgadd ejecuta automáticamente todas las acciones necesarias para instalar un paquete mediante los archivos de información de paquetes como entrada. No es necesario que suministre secuencias de comandos de instalación de paquetes. Sin embargo, si desea crear procedimientos de instalación personalizados para su paquete, puede hacerlo con secuencias de comandos de instalación. Secuencias de comandos de instalación:

Hay cuatro tipos de secuencias de comandos de instalación con los que puede llevar a cabo acciones personalizadas:

Proceso de secuencias de comandos durante la instalación de paquetes

El tipo de secuencias de comandos que utilice depende de cuándo se necesite la acción de la secuencia de comandos durante el proceso de instalación. Al instalar un paquete, el comando pkgadd ejecuta los pasos siguientes:

  1. Ejecuta la secuencia de comandos request.

    Este paso es el único punto en que su paquete puede solicitar alguna acción del administrador que esté instalando el paquete.

  2. Ejecuta la secuencia de comandos checkinstall.

    La secuencia de comandos checkinstall reúne datos del sistema de archivos y puede crear o modificar definiciones de variables de entorno para controlar la instalación posterior. Para obtener más información sobre las variables de entorno del paquete, consulte Variables de entorno de paquetes.

  3. Ejecuta la secuencia de comandos preinstall.

  4. Instala objetos del paquete, para cada clase que se vaya a instalar.

    La instalación de estos archivos se produce clase a clase; las secuencias de comandos de acción de clase se ejecutan consecuentemente. La lista de clases en las que se trabaja y el orden en el que se deben instalar se define inicialmente con el parámetro CLASSES en el archivo pkginfo. Sin embargo, la secuencia de comandos request o checkinstall puede cambiar el valor del parámetro CLASSES. Para obtener más información sobre cómo se procesan las clases durante la instalación, consulte Cómo se procesan las clases durante la instalación de los paquetes.

    1. Crea vínculos simbólicos, dispositivos, conducciones con nombre y los directorios necesarios.

    2. Instala los archivos regulares (tipos de archivos e, v, f), de acuerdo con su clase

      Sólo se pasan archivos regulares para instalar a la secuencia de comandos de acción de clase. Todos los demás objetos de paquetes se crean de forma automática a partir de la información del archivo pkgmap.

    3. Crea todos los vínculos físicos.

  5. Ejecuta la secuencia de comandos postinstall.

Proceso de secuencia de comandos durante la eliminación de paquetes

Cuando se suprime un paquete, el comando pkgrm ejecuta estos pasos:

  1. Ejecuta la secuencia de comandos preremove.

  2. Suprime los objetos de paquetes para cada clase

    La eliminación también se produce clase a clase. Las secuencias de comandos de eliminación también se procesan en el orden inverso de la instalación, de acuerdo con la secuencia definida en el parámetro CLASSES. Para obtener más información sobre cómo se procesan las clases durante la instalación, consulte Cómo se procesan las clases durante la instalación de los paquetes.

    1. Suprime los vínculos físicos.

    2. Suprime los archivos regulares.

    3. Suprime los vínculos simbólicos, los dispositivos y las conducciones con nombre.

  3. Ejecuta la secuencia de comandos postremove.

La secuencia de comandos request no se procesa en el tiempo de la supresión de paquetes. Sin embargo, la salida de la secuencia de comandos se retiene en el paquete instalado y queda disponible para las secuencias de comandos de supresión. La salida de la secuencia de comandos request es una lista de variables de entorno.

Variables de entorno de paquetes disponibles para las secuencias de comandos

Los grupos siguientes de variables de entorno están disponibles para todas las secuencias de comandos de instalación. Algunas de las variables de entorno se pueden modificar mediante una secuencia de comandos request o checkinstall.

Obtención de información del paquete para una secuencia de comandos

Se pueden usar dos comandos de secuencias de comandos para solicitar información sobre un paquete:

Códigos de salida para secuencias de comandos

Cada secuencia de comandos debe salir con uno de los códigos de salida que aparecen en la tabla siguiente.

Tabla 3–2 Instalación de códigos de salida de secuencias de comandos

Código 

Significado 

Finalización satisfactoria de la secuencia de comandos.  

Error fatal. El proceso de instalación se ha terminado en este momento.  

2  

Advertencia o condición de posible error. La instalación continúa. Aparece un mensaje de advertencia en el tiempo de la finalización.  

3  

El comando pkgadd se ha detenido de forma correcta. Sólo la secuencia de comandos checkinstall devuelve este código.

10  

Se debe reiniciar el sistema cuando la instalación de todos los paquetes seleccionados se haya completado. (Este valor se debe agregar a uno de los códigos de salida de un único dígito.)  

20  

El sistema se debe reiniciar inmediatamente al terminar la instalación del paquete actual. (Este valor se debe agregar a uno de los códigos de salida de un único dígito.)  

Consulte el Capítulo 5Casos prácticos de creación de paquetes si desea ver ejemplos de códigos de salida devueltos por las secuencias de comandos de la instalación.


Nota –

Todas las secuencias de comandos de instalación distribuidas con su paquete deben contar con una entrada en el archivo prototype. El tipo de archivo debe ser i (para la secuencia de comandos de instalación del paquete).


Escritura de una secuencia de comandos request

La secuencia de comandos request es el único modo de que su paquete pueda interactuar directamente con el administrador que lo instale. Esta secuencia de comandos se puede usar, por ejemplo, para preguntar al administrador si deben instalarse partes optativas de un paquete.

La salida de una secuencia de comandos request debe ser una lista de variables de entorno y sus valores. Esta lista puede incluir alguno de los parámetros que haya creado en el archivo pkginfo, así como los parámetros CLASSES y BASEDIR. La lista también puede presentar variables de entorno que no se hayan definido en otro lugar. Sin embargo, el archivo pkginfo debe ofrecer siempre valores predeterminados cuando convenga. Para obtener más información sobre las variables de entorno del paquete, consulte Variables de entorno de paquetes.

Cuando la secuencia de comandos request asigna valores a una variable de entorno, debe conseguir que esos valores estén disponibles para el comando pkgadd y otras secuencias de comandos de paquetes.

Comportamientos de la secuencia de comandos request

Normativa de diseño para secuencias de comandos request


Nota –

Si los administradores que instalen el paquete pudieran utilizar JumpStartTM, la instalación del paquete no debe ser interactiva. No debe proporcionar una secuencia de comandos request con su paquete, o bien debe comunicar a los administradores que deben usar el comando pkgask antes de la instalación. El comando pkgask guarda sus respuestas en la secuencia de comandos request. Para obtener más información sobre el comando pkgask, consulte la página de comando man pkgask(1M).


ProcedureCómo escribir una secuencia de comandos request

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Cree un archivo llamado request con su editor de textos preferido.

  3. Guarde los cambios y salga del editor cuando haya acabado.

  4. Complete una de las tareas siguientes.

  5. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.


Ejemplo 3–5 Escritura de una secuencia de comandos request

Cuando una secuencia de comandos request asigna valores a las variables de entorno, debe hacer que esos valores estén disponibles para el comando pkgadd. Este ejemplo muestra un segmento de secuencia de comandos request que ejecuta esta tarea para las cuatro variables de entorno: CLASSES, NCMPBIN, EMACS y NCMPMAN. Suponga que estas variables se definieron en una sesión interactiva con el administrador anteriormente, en la secuencia de comandos.


# make environment variables available to installation
# service and any other packaging script we might have
 
cat >$1 <<!
CLASSES=$CLASSES
NCMPBIN=$NCMPBIN
EMACS=$EMACS
NCMPMAN=$NCMPMAN
!

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Reunión de datos del sistema de archivos con la secuencia de comandos checkinstall

La secuencia de comandos checkinstall se ejecuta poco después de la secuencia de comandos request optativa. La secuencia de comandos checkinstall se ejecuta como usuario install, si dicho usuario existe, o bien como usuario nobody. La secuencia de comandos checkinstall no tiene autoridad para cambiar los datos del sistema de archivos. Sin embargo, de acuerdo con la información que la secuencia de comandos reúne, puede crear o modificar variables de entorno, con el fin de controlar el curso de la instalación resultante. La secuencia de comandos también es capaz de detener correctamente el proceso de instalación.

La secuencia de comandos checkinstall tiene como finalidad ejecutar comprobaciones básicas en un sistema de archivos que no sería normal para el comando pkgadd. Por ejemplo, esta secuencia de comandos se puede usar para determinar si algunos archivos del paquete actual sobrescribirán los archivos existentes, o bien para administrar dependencias de software general. El archivo depend sólo administra dependencias de paquetes.

A diferencia de la secuencia de comandos request, checkinstall se ejecuta independientemente de si se ha proporcionado un archivo de respuesta. La presencia de la secuencia de comandos no marca el paquete como interactivo. La secuencia de comandos checkinstall se puede usar en situaciones en las que se ha prohibido una secuencia de comandos request, o bien una interacción administrativa no es práctica.


Nota –

La secuencia de comandos checkinstall está disponible a partir de Solaris 2.5 y versiones compatibles.


Comportamientos de la secuencia de comandos checkinstall

Normativa de diseño para secuencias de comandos checkinstall

ProcedureCómo reunir datos del sistema de archivos

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Cree un archivo llamado checkinstall con su editor de textos preferido.

  3. Guarde los cambios y salga del editor cuando haya acabado.

  4. Complete una de las tareas siguientes.

  5. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.


Ejemplo 3–6 Escritura de una secuencia de comandos checkinstall

Esta secuencia de comandos de ejemplo checkinstall comprueba si el software de base de datos necesitado por el paquete SUNWcadap está instalado.


# checkinstall script for SUNWcadap
#
# This confirms the existence of the required specU database
 
# First find which database package has been installed.
pkginfo -q SUNWspcdA	# try the older one
 
if [ $? -ne 0 ]; then
   pkginfo -q SUNWspcdB	# now the latest
 
	  if [ $? -ne 0 ]; then	# oops
		    echo "No database package can be found. Please install the"
		    echo "SpecU database package and try this installation again."
		    exit 3		# Suspend
	  else
		    DBBASE="`pkgparam SUNWsbcdB BASEDIR`/db"	# new DB software
	  fi
else
	  DBBASE="`pkgparam SUNWspcdA BASEDIR`/db"	# old DB software
fi
 
# Now look for the database file we will need for this installation
if [ $DBBASE/specUlatte ]; then
	  exit 0		# all OK
else
	  echo "No database file can be found. Please create the database"
	  echo "using your installed specU software and try this"
	  echo "installation again."
	  exit 3		# Suspend
fi
 

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Escritura de secuencias de comandos de procedimientos

Las secuencias de comandos de procedimientos ofrecen un conjunto de instrucciones que llevar a cabo en fases concretas de la eliminación o la instalación de paquetes. Las cuatro secuencias de comandos de procedimientos deben tener uno de los nombres predefinidos, según cuándo se vayan a ejecutar las instrucciones. Las secuencias de comandos se ejecutan sin argumentos.

Comportamientos de secuencias de comandos de procedimientos

Las secuencias de comandos de procedimientos se ejecutan como uid=root y gid=other.

Normativa de diseño para secuencias de comandos de procedimientos

ProcedureCómo escribir secuencias de comandos de procedimientos

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Cree una o más secuencias de comandos de procedimientos con su editor de texto preferido.

    Una secuencia de comandos de procedimientos debe tener uno de los nombres predefinidos: preinstall, postinstall, preremove o postremove.

  3. Guarde los cambios y salga del editor.

  4. Complete una de las tareas siguientes.

  5. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.

Véase también

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explican estas tareas y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Escritura de secuencias de comandos de acción de clase

Definición de clases de objetos

Las clases de objetos permiten una serie de acciones que se deben ejecutar en un grupo de objetos de paquetes en la instalación o la eliminación. Asigne objetos a una clase en el archivo prototype. A todos los objetos del paquete se les debe proporcionar una clase, aunque la clase none se utiliza de forma predeterminada para objetos que no requieran una acción especial.

El parámetro de instalación CLASSES, definido en el archivo pkginfo, es una lista de clases que se deben instalar (incluida la clase none).


Nota –

Los objetos definidos en el archivo pkgmap que pertenecen a una clase que no aparece en este parámetro del archivo pkginfo no se instalarán.


La lista CLASSES determina el orden de instalación. La clase none siempre se instala en primer lugar, en el caso de que exista, y se suprime en último lugar. Puesto que los directorios son la estructura de apoyo fundamental para los demás objetos del sistema de archivos, deben asignarse todos a la clase none. Se pueden hacer excepciones, pero como norma general, la clase none es la más segura. Esta estrategia asegura que los directorios se crean antes de los objetos que incluirán. Asimismo, no se efectúa ningún intento de suprimir un directorio antes de que se haya vaciado.

Cómo se procesan las clases durante la instalación de los paquetes

A continuación se describen las acciones del sistema que tienen lugar cuando se instala una clase. Las acciones se repiten una vez para cada volumen de un paquete, durante la instalación de ese volumen.

  1. El comando pkgadd crea una lista de nombre de ruta.

    El comando pkgadd crea una lista de nombres de ruta sobre la que opera la secuencia de comandos de la acción. Cada línea de la lista contiene nombres de ruta de origen y de destino, separados por un espacio. El nombre de ruta de origen indica dónde reside el objeto que se debe instalar en el volumen de instalación. El nombre de ruta de destino indica la ubicación del sistema de destino donde el objeto se debe instalar. El contenido de la lista se restringe mediante los criterios siguientes:

    • La lista sólo contiene nombres de ruta que pertenecen a la clase asociada.

    • Si falla el intento de crear el objeto del paquete, los directorios, las conducciones con nombres, los dispositivos de caracteres, los dispositivos de bloques y los vínculos simbólicos se incluyen en la lista con el nombre de ruta de origen establecido en /dev/null. Normalmente, el comando pkgadd crea automáticamente estos elementos (en el caso de que no existieran) y se les otorga los atributos pertinentes (modo, propietario, grupo), tal como se define en el archivo pkgmap.

    • Los archivos vinculados donde el tipo de archivo es l no se incluyen en la lista bajo ninguna circunstancia. Los vínculos físicos de la clase proporcionada se crean en el elemento 4.

  2. Si no se proporciona una secuencia de comandos de acción de clase para la instalación de una clase determinada, los nombres de rutas de la lista generada se copian del volumen a la ubicación de destino pertinente.

  3. Se ejecutará una secuencia de comandos de acción de clase en el caso de que exista.

    La secuencia de comandos de acción de clase se ejecuta con la entrada estándar que contiene la lista que se genera en el elemento 1. Este volumen es el último, o en esta clase no hay más objetos, la secuencia de comandos se ejecuta con el único argumento de ENDOFCLASS.


    Nota –

    Incluso si no existen archivos regulares de esta clase en el paquete, se llama a la secuencia de comandos de acción de clase al menos una vez con una lista vacía y el argumento ENDOFCLASS.


  4. El comando pkgadd lleva a cabo una auditoría de atributos y contenido, además de crear vínculos físicos.

    Después de ejecutar correctamente los elementos 2 o 3, el comando pkgadd efectúa una auditoría de la información de atributos y contenido para la lista de nombres de ruta. El comando pkgadd crea los vínculos asociados con la clase automáticamente. Las incoherencias de atributos detectadas se corrigen en todos los nombres de ruta de la lista generada.

Cómo se procesan las clases durante la eliminación de los paquetes

Los objetos se suprimen clase a clase. Las clases que existen para un paquete pero que no aparecen en el parámetro CLASSES se suprimen en primer lugar (por ejemplo, un objeto instalado con el comando installf). Las clases que aparecen en el parámetro CLASSES se suprimen en el orden inverso. La clase none siempre se suprime en último lugar. A continuación se describen las acciones del sistema que se producen cuando se suprime una clase:

  1. El comando pkgrm crea una lista de nombres de ruta.

    El comando pkgrm crea una lista de nombres de rutas instaladas que pertenecen a la clase indicada. Los nombres de rutas a los que hace referencia otro paquete se excluyen de la lista, a menos que el tipo de archivo sea e. Un tipo de archivo e significa que el archivo se debe editar tras la instalación o la supresión.

    Si el paquete que se suprime había modificado archivos del tipo e durante la instalación, sólo debe suprimir las líneas que agregó. No suprima un archivo modificable que no esté vacío. Suprima las líneas que agregó el paquete.

  2. Si no existe una secuencia de comandos de acción de clase, las nombres de rutas se suprimen.

    Si el paquete no tiene una secuencia de comandos de acción de clase de eliminación para la clase, se suprimen todos los nombres de rutas de la lista generados por el comando pkgrm.


    Nota –

    Los archivos del tipo e (modificable) no se asignan a una clase ni a una secuencia de comandos de acción de clase asociada. Estos archivos se suprimen en este momento, incluso si el nombre de ruta se comparte con otros paquetes.


  3. Si existe una secuencia de comandos de acción de clase, se ejecutará.

    El comando pkgrm invoca la secuencia de comandos de acción de clase con entrada estándar para la secuencia de comandos que contiene la lista generada en el elemento 1.

  4. El comando pkgrm lleva a cabo una auditoría.

    Después de ejecutar correctamente la secuencia de comandos de acción de clase, el comando pkgrm suprime las referencias a los nombres de ruta de la base de datos de paquetes a menos que otro paquete haga referencia a un nombre de ruta.

Secuencia de comandos de acción de clase

La secuencia de comandos de acción de clase define un conjunto de acciones que se ejecutarán durante la instalación o eliminación de un paquete. Las acciones se llevarán cabo en un grupo de nombres de ruta basados en su definición de clase. Consulte el Capítulo 5Casos prácticos de creación de paquetes, si desea ver ejemplos de secuencias de comandos de acción de clase.

El nombre de una secuencia de comandos de acción de clase se basa en la clase en la que debe funcionar y si dichas operaciones deben producirse durante la instalación o la eliminación de paquetes. Los dos formatos de nombres aparecen en la tabla siguiente:

Formato de nombre 

Descripción 

i.clase

Realiza operacinoes en nombres de ruta en la clase indicada durante la instalación de paquetes 

r.clase

Realiza operaciones en nombres de ruta en la clase indicada durante la eliminación de paquetes  

Por ejemplo, el nombre de la secuencia de comandos de instalación de una clase llamada manpage sería i.manpage. La secuencia de comandos de eliminación se llamaría r.manpage.


Nota –

Este formato de nombre de archivos no se utiliza con los archivos que pertenecen a las clases de sistema sed, awk o build. Para obtener más información sobre estas clases especiales, consulte Clases de sistema especiales.


Comportamientos de las secuencias de comandos de acción de clase

Normativa de diseño para secuencias de comandos de acción de clase

Clases de sistema especiales

El sistema ofrece cuatro clases especiales:

Si varios archivos de un paquete requieren un procesamiento especial que se puede definir completamente a través de los comandos sed, awk o sh, la instalación es más rápida si se usan clases de sistemas en lugar de varias clases y sus secuencias de comandos de acción de clase correspondientes.

Secuencia de comandos de clase sed

La clase sed ofrece un método para modificar un objeto del sistema de destino. La secuencia de comandos de acción de clase sed se ejecuta automáticamente en la instalación si existe un archivo que pertenece a la clase sed. El nombre de la secuencia de comandos de acción de clase sed debe ser el mismo que el del archivo donde se ejecutan las instrucciones.

Una secuencia de comandos de acción de clase sed entrega instrucciones sed en el formato siguiente:

Dos comandos indican cuándo se deben ejecutar las instrucciones. Se ejecutan las instrucciones sed que siguen al comando !install durante la instalación del paquete. Se ejecutan las instrucciones sed que siguen al comando !remove durante la eliminación de paquetes. No importa el orden en el que estos comandos se usan en el archivo.

Para obtener más información sobre las instrucciones sed consulte la página de comando man sed(1) Si desea ver ejemplos de las secuencias de comandos de acción de clase sed, consulte el Capítulo 5Casos prácticos de creación de paquetes.

Secuencia de comandos de clase awk

La clase awk ofrece un método para modificar un objeto del sistema de destino. Las modificaciones se entregan como instrucciones awk en una secuencia de comandos de acción de clase awk.

La secuencia de comandos de acción de clase awk se ejecuta automáticamente en la instalación si existe un archivo que pertenece a la clase awk. Dicho archivo contiene instrucciones para la secuencia de comandos de clase awk con el formato siguiente:

Dos comandos indican cuándo se deben ejecutar las instrucciones. Se ejecutan las instrucciones awk que siguen al comando !install durante la instalación del paquete. Durante la eliminación del paquete se ejecutan las instrucciones que siguen al comando !remove. Estos comandos se pueden usar en cualquier orden.

El nombre de la secuencia de comandos de acción de clase awk debe ser el mismo que el del archivo donde se ejecutan las instrucciones.

El archivo que se debe modificar se utiliza como entrada al comando awk y la salida de la secuencia de comandos sustituye por último al objeto original. Es posible que las variables de entorno no pasen al comando awk con esta sintaxis.

Para obtener más información sobre las instrucciones awk, consulte la página de comando man awk(1).

Secuencia de comandos de clase build

La clase build crea o modifica un archivo de objeto de paquete mediante la ejecución de las instrucciones del shell Bourne. Estas instrucciones se entregan como objeto del paquete. Las instrucciones se ejecutan automáticamente en la instalación si el objeto del paquete pertenece a la clase build.

El nombre de la secuencia de comandos de acción de clase build debe ser el mismo que el del archivo donde se ejecutan las instrucciones. El nombre también debe ser ejecutable por parte del comando sh. La salida de la secuencia de comandos se convierte en la nueva versión del archivo al construirse o modificarse. Si la secuencia de comandos no produce salida alguna, el archivo no se crea ni se modifica. Por ello, la secuencia de comandos puede modificar o crear el archivo por sí mismo.

Por ejemplo, si un paquete entrega un archivo predeterminado, /etc/randomtable, y si éste no existe ya en el sistema de destino, la entrada del archivo prototype puede ser como la siguiente:


e build /etc/randomtable ? ? ?

El objeto del paquete, /etc/randomtable, puede tener el aspecto siguiente:


!install
# randomtable builder
if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then
		echo "/etc/randomtable is already in place.";
	    else
		echo "# /etc/randomtable" > $PKG_INSTALL_ROOT/etc/randomtable
		echo "1121554	# first random number" >> $PKG_INSTALL_ROOT/etc/randomtable
fi
 
!remove
# randomtable deconstructor
if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then
		# the file can be removed if it's unchanged
		if [ egrep "first random number" $PKG_INSTALL_ROOT/etc/randomtable ]; then
			rm $PKG_INSTALL_ROOT/etc/randomtable;
		fi
fi
 

Consulte el Capítulo 5Casos prácticos de creación de paquetes, si desea ver otro ejemplo mediante la clase build.

Secuencia de comandos de clase preserve

La clase preserve conserva un archivo de objeto del paquete al decidir si un archivo existente debe sobrescribirse cuando se instale el paquete. Al usar una secuencia de comandos de clase preserve puede haber dos situaciones:

El resultado de ambas situaciones se considera correcto por parte de la secuencia de comandos preserve. Sólo se produce un error en la segunda situación si el archivo no puede copiarse en el directorio de destino.

Desde Solaris 7 puede encontrarse la secuencia de comandos i.preserve y una copia suya, i.CONFIG.prsv, en el directorio /usr/sadm/install/scripts con las demás secuencias de comandos de acción de clase.

Modifique la secuencia de comandos para que incluya los nombres de archivos que desee conservar.

La secuencia de comandos de clase manifest

La clase manifest instala y desinstala automáticamente los servicios SMF (Utilidad de gestión de servicios) asociados a un manifiesto SMF. Si no está familiarizado con SMF, consulte el Capítulo 17, Managing Services (Overview) de System Administration Guide: Basic Administration para obtener información sobre cómo utilizar SMF para gestionar servicios.

Todos los manifiestos de servicios de los paquetes se deben identificar con la clase manifest. Las secuencias de comandos de acción de clase que instalan y suprimen manifiestos de servicios se incluyen en el subsistema de empaquetado. Cuando se invoca pkgadd(1M), se importa el manifiesto de servicios. Cuando se invoca pkgrm(1M), se suprimen las instancias del manifiesto de servicios que están inhabilitadas. Los servicios del manifiesto que no tienen instancias restantes también se suprimen. Si se suministra la opción -R a pkgadd(1M) o pkgrm(1M), estas acciones de manifiesto de servicios se efectuarán cuando el sistema se reinicie la próxima vez con esa ruta root alternativa.

La porción siguiente de código de un archivo de información del paquete muestra el uso de la clase manifest.

# packaging files
i pkginfo
i copyright
i depend
i preinstall
i postinstall
i i.manifest
i r.manifest
#
# source locations relative to the prototype file
#
d none var 0755 root sys
d none var/svc 0755 root sys
d none var/svc/manifest 0755 root sys
d none var/svc/manifest/network 0755 root sys
d none var/svc/manifest/network/rpc 0755 root sys
f manifest var/svc/manifest/network/rpc/smserver.xml 0444 root sys

ProcedureCómo escribir secuencias de comandos de acción de clase

  1. Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.

  2. Asigne a los objetos del paquete del archivo prototype los nombres de clase deseados.

    Por ejemplo, la asignación de objetos a las clases application y manpage tendría el aspecto siguiente:


    f manpage /usr/share/man/manl/myappl.1l
    f application /usr/bin/myappl
  3. Modifique el parámetro CLASSES del archivo pkginfo para que contenga los nombres de clase que desee usar en el paquete.

    Por ejemplo, las entradas para las clases application y manpage tendrían el aspecto siguiente:


    CLASSES=manpage application none

    Nota –

    La clase none siempre se instala en primer lugar y se suprime en último lugar, independientemente de dónde aparezca en la definición del parámetro CLASSES.


  4. Si crea una secuencia de comandos de acción de clase para un archivo que pertenezca a la clase sed, awk o build, convierta el directorio que contiene el objeto del paquete en el directorio de trabajo actual.

  5. Cree las secuencias de comandos de acción de clase o los objetos del paquete (para los archivos que pertenecen a la clase sed, awk, o build).

    Por ejemplo, una secuencia de comandos de instalación de una clase llamada application recibiría el nombre de i.application, y una secuencia de comandos de eliminación recibiría el nombre de r.application.

    Recuerde, si un archivo forma parte de una clase que cuenta con una secuencia de comandos de acción de clase, dicha secuencia debe instalar el archivo. El comando pkgadd no instala los archivos por los que existe una secuencia de comandos de acción de clase, aunque verifica la instalación. Si define una clase pero no entrega una secuencia de comandos de acción de clase, la única acción llevada a cabo para esa clase es copiar componentes del medio de instalación al sistema de destino (el comportamiento predeterminado de pkgadd).

  6. Complete una de las tareas siguientes:

  7. Construya su paquete.

    Consulte Cómo construir un paquete si fuera necesario.

Paso siguiente

Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4Verificación y transferencia de un paquete se explica cómo hacerlo y se ofrecen instrucciones paso a paso para transferir su paquete verificado a un medio de distribución.

Creación de paquetes firmados

El proceso de creación de paquetes firmados implica varios pasos y requiere cierta comprensión de los nuevos conceptos y la terminología. En esta sección se ofrece información sobre paquetes firmados, su terminología, así como información sobre administración de certificados. Esta sección también ofrece procedimientos detallados sobre cómo crear un paquete firmado.

Paquetes firmados

Un paquete firmado tiene formato de flujo normal que cuenta con una firma digital (firma digital PKCS7 con código PEM que se define a continuación) que verifica lo siguiente:

La firma es la única diferencia entre un paquete firmado y otro sin firmar. Un paquete firmado es compatible en el nivel binario con un paquete sin firmar. Por ello se puede usar un paquete firmado con versiones anteriores de las herramientas de creación de paquetes. Sin embargo, la firma se ignora en este caso.

La tecnología de creación de paquetes firmados presenta nueva terminología y abreviaturas que se describen en la tabla siguiente.

Término 

Definición 

ASN.1 

Notación de sintaxis abstracta 1: modo de expresar objetos abstractos. Por ejemplo, ASN.1 define un certificado de clave pública, todos los objetos que componen el certificado, y el orden en el que los objetos se recogen. Sin embargo, ASN.1 no especifica cómo los objetos se serializan para el almacenamiento o la transmisión.

X.509 

Recomendación ITU-T X.509: especifica la sintaxis del certificado de clave pública X.509 ampliamente adoptado.

DER 

Normas de codificación distinguidas: representación binaria de un objeto ASN.1 y define cómo un objeto ASN.1 se serializa para el almacenamiento o la transmisión en los entornos computacionales. 

PEM 

Mensaje de privacidad mejorada: forma de codificar un archivo (en DER u otro formato binario) mediante codificación base 64 y algunos encabezados optativos. PEM se utilizaba inicialmente para codificar mensajes de correo electrónico de tipo MIME. PEM también se usa ampliamente para codificar certificados y claves privadas en un archivo que existe en un sistema de archivos o en un mensaje de correo electrónico.

PKCS7 

Estándar de criptografía de clave pública n.º 7: este estándar describe una sintaxis general para datos a los que se ha aplicado criptografía, como firmas y sobres digitales. Un paquete firmado contiene una firma PKCS7 incorporada. Esta firma contiene como mínimo la recopilación cifrada del paquete, junto con el certificado de clave pública X.509 del firmante. El paquete firmado también puede contener certificados en cadena. Se pueden usar los certificados en cadena al formar una cadena de confianza del certificado del firmante a un certificado de confianza almacenado localmente. 

PKCS12 

Estándar de criptografía de clave pública n.º 12: este estándar describe una sintaxis para almacenar objetos criptográficos en el disco. El almacén de claves de paquetes se mantiene en este formato. 

Almacén de claves de paquetes 

Depósito de certificados y claves que las herramientas de paquetes pueden consultar. 

Administración de certificados

Antes de crear un paquete firmado, debe tener un almacén de claves de paquetes. Este almacén de claves de paquetes contiene certificados en forma de objetos. Hay dos tipos de objetos en un almacén de claves de paquetes:

Certificado de confianza

Un certificado de confianza contiene un único certificado de clave pública que pertenece a otra entidad. El certificado de confianza se nombra de este modo porque el propietario del almacén de claves confía en que la clave pública del certificado pertenece en realidad a la identidad indicada por el "sujeto" (propietario) del certificado. El emisor del certificado da fe de esta confianza al firmar el certificado.

Los certificados de confianza se usan al verificar firmas y al iniciar una conexión con un servidor (SSL) seguro.

Clave de usuario

Una clave de usuario contiene información de clave criptográfica sensible. Esta información se almacena con un formato protegido para impedir el acceso no autorizado. Una clave de usuario se compone de la clave privada del usuario y el certificado de clave pública que se corresponde con la clave privada.

Las claves de usuario se usan al crear un paquete firmado.

De forma predeterminada, el almacén de claves de paquetes se encuentra en el directorio /var/sadm/security. Cada uno de los usuarios también puede tener su propio almacén de claves guardado de forma predeterminada en el directorio $HOME/.pkg/security.

En el disco, un almacén de claves de paquetes puede estar en dos formatos: formato de varios archivos y formato de un único archivo. Un formato de varios archivos almacena sus objetos en varios archivos. Cada tipo de objeto se almacena en un archivo aparte. Todos estos archivos se deben cifrar mediante las mismas frases de contraseña. Un almacén de claves de un único archivo guarda todos sus objetos en un único archivo del sistema de archivos.

La utilidad principal que se usa para administrar los certificados y el almacén de claves de paquetes es el comando pkgadm. Las subsecciones siguientes describen las tareas más habituales utilizadas par administrar el almacén de claves de paquetes.

Adición de certificados de confianza al almacén de claves de paquetes

Se puede agregar un certificado de confianza al almacén de claves de paquetes mediante el comando pkgadm. El certificado puede tener formato PEM o DER. Por ejemplo:


$ pkgadm addcert -t /tmp/mytrustedcert.pem

En este ejemplo, el certificado con formato PEM llamado mytrustedcert.pem se agrega al almacén de claves de paquetes.

Adición de un certificado de usuario y de una clave privada al almacén de claves de paquetes

El comando pkgadm no genera certificados de usuarios o claves privadas. Los certificados de usuario y las claves privadas se obtienen normalmente de una autoridad de certificados, como Verisign. O bien, se generan localmente como certificado autofirmado. Tras obtener la clave y el certificado, se pueden importar al almacén de claves de paquetes mediante el comando pkgadm. Por ejemplo:


pkgadm addcert -n myname -e /tmp/myprivkey.pem /tmp/mypubcert.pem

En este ejemplo se usan las opciones siguientes:

-n mi_nombre

Identifica a la entidad (mi_nombre) en el almacén de claves de paquetes donde desea trabajar. La entidad myname se convierte en alias en el que se almacenan los objetos.

-e /tmp/mi_clave_privada.pem

Especifica el archivo que contiene la clave privada. En este caso, el archivo es myprivkey.pem y se encuentra en el directorio /tmp.

/tmp/mi_certificado_público.pem

Especifica el archivo de certificado con formato PEM llamado mi_certificado_público.pem.

Comprobación del contenido en el almacén de claves de paquetes

El comando pkgadm también se usa para ver el contenido del almacén de claves de paquetes. Por ejemplo:


$ pkgadm listcert

Este comando muestra los certificados de confianza y las claves privadas en el almacén de claves de paquetes.

Eliminación de certificados de confianza y claves privadas del almacén de claves de paquetes

El comando pkgadm se puede usar para suprimir certificados de confianza y claves privadas del almacén de claves de paquetes.

Cuando suprime certificados de usuarios, debe especificarse el alias del par certificado/clave. Por ejemplo:


$ pkgadm removecert -n myname

El alias del certificado es el nombre habitual del certificado que se puede identificar mediante el comando pkgadm listcert. Por ejemplo, este comando suprime un certificado de confianza de nombre Trusted CA Cert 1:


$ pkgadm removecert -n "Trusted CA Cert 1"

Nota –

Si tiene un certificado de confianza y un certificado de usuario almacenados con el mismo alias se suprimen cuando especifica la opción -n.


Creación de paquetes firmados

El proceso de crear paquetes firmados implica tres pasos básicos:

  1. Creación de un paquete con formato de directorio sin firmar.

  2. Importación del certificado de firma, certificados de AC y clave privada en el almacén de claves de paquetes.

  3. Firma del paquete del paso 1 con los certificados del paso 2.


Nota –

Las herramientas de creación de paquetes no crean certificados. Estos certificados se deben obtener de una autoridad de certificados, como Verisign o Thawte.


Cada uno de los pasos para crear paquetes firmados se describe en los procedimientos siguientes.

ProcedureCómo crear un paquete con formato de directorio sin firmar

El procedimiento para crear un paquete con formato de directorio sin firmar es el mismo que para crear un paquete normal, tal como se ha descrito previamente en este manual. El procedimiento siguiente describe el proceso de crear este paquete con formato de directorio sin firmar. Si necesita más información, consulte las secciones anteriores sobre la construcción de paquetes.

  1. Cree el archivo pkginfo.

    El archivo pkginfo debe tener el siguiente contenido básico:


    PKG=SUNWfoo
    BASEDIR=/
    NAME=My Test Package
    ARCH=sparc
    VERSION=1.0.0
    CATEGORY=application
  2. Cree el archivo prototype.

    El archivo prototype debe tener el siguiente contenido básico:


    $cat prototype
    i pkginfo
    d none usr 0755 root sys
    d none usr/bin 0755 root bin
    f none usr/bin/myapp=/tmp/myroot/usr/bin/myapp 0644 root bin
  3. Enumere el contenido del directorio de origen de objetos.

    Por ejemplo:


    $ ls -lR /tmp/myroot
    

    La salida tendría un aspecto similar al siguiente:


    /tmp/myroot:
    total 16
    drwxr-xr-x   3 abc      other        177 Jun  2 16:19 usr
    
    /tmp/myroot/usr:
    total 16
    drwxr-xr-x   2 abc      other        179 Jun  2 16:19 bin
    
    /tmp/myroot/usr/bin:
    total 16
    -rw-------   1 abc      other       1024 Jun  2 16:19 myapp
  4. Cree el paquete sin firma.


    pkgmk -d `pwd`
    

    La salida tendría un aspecto similar al siguiente:


    ## Building pkgmap from package prototype file.
    ## Processing pkginfo file.
    WARNING: parameter <PSTAMP> set to "syrinx20030605115507"
    WARNING: parameter <CLASSES> set to "none"
    ## Attempting to volumize 3 entries in pkgmap.
    part  1 -- 84 blocks, 7 entries
    ## Packaging one part.
    /tmp/SUNWfoo/pkgmap
    /tmp/SUNWfoo/pkginfo
    /tmp/SUNWfoo/reloc/usr/bin/myapp
    ## Validating control scripts.
    ## Packaging complete.

    El paquete existe en el directorio actual.

ProcedureCómo importar certificados al almacén de claves de paquetes

El certificado y la clave privada que se vayan a importar deben existir como certificado X.509 con codificación PEM o DER y clave privada. Asimismo, los certificados intermedios o de cadena que vinculen el certificado con firma al certificado de Autoridad de certificados se debe importar al almacén de claves de paquetes antes de que un paquete se pueda firmar.


Nota –

Cada autoridad de certificados puede emitir certificados en diversos formatos. Para extraer los certificados y la clave privada del archivo PKCS12 a un archivo X.509 con codificación PEM (adecuado para importar al almacén de claves de paquetes), use una utilidad de conversión de software gratuito como OpenSSL.


Si la clave privada se cifra (lo cual sería normal), se le pedirá la frase de contraseña. Asimismo, se le pedirá una contraseña para proteger el almacén de claves de paquetes resultante. Si lo desea puede evitar el uso de una contraseña, pero con ello obtendrá un almacén de claves de paquetes sin cifrar.

El procedimiento siguiente describe cómo importar los certificados mediante el comando pkgadm una vez que el certificado tenga el formato adecuado.

  1. Importe todos los certificados de Autoridad de certificados que se encuentren en el archivo de certificado X.509 con codificación PEM o DER.

    Por ejemplo, para importar todos los certificados de Autoridad de certificados que se encuentren en el archivo ca.pem, debería escribir lo siguiente:


    $ pkgadm addcert -k ~/mykeystore -ty ca.pem
    

    La salida tendría un aspecto similar al siguiente:


    Trusting certificate <VeriSign Class 1 CA Individual \
    Subscriber-Persona Not Validated>
    Trusting certificate </C=US/O=VeriSign, Inc./OU=Class 1 Public \
    Primary Certification Authority
    Type a Keystore protection Password.
    Press ENTER for no protection password (not recommended): 
    For Verification: Type a Keystore protection Password.
    Press ENTER for no protection password (not recommended): 
    Certificate(s) from <ca.pem> are now trusted

    Con el fin de importar la clave de firma al almacén de claves de paquetes, debe proporcionar un alias que se utilice posteriormente al firmar el paquete. Este alias también se puede usar si desea suprimir la clave del almacén de claves de paquetes.

    Por ejemplo, para importar la clave de firma del archivo sign.pem, debería escribir lo siguiente:


    $ pkgadm addcert -k ~/mykeystore -n mycert sign.pem
    

    La salida tendría un aspecto similar al siguiente:


    Enter PEM passphrase:
    Enter Keystore Password: 
    Successfully added Certificate <sign.pem> with alias <mycert>
  2. Compruebe que los certificados se encuentren en el almacén de claves de paquetes.

    Por ejemplo, para ver los certificados del almacén de claves creados en el paso anterior, debería escribir lo siguiente:


    $ pkgadm listcert -k ~/mykeystore
    

ProcedureCómo firmar el paquete

Cuando los certificados se importan al almacén de claves de paquetes puede firmar el paquete. La firma real del paquete se lleva a cabo mediante el comando pkgtrans.

  1. Firme el paquete mediante el comando pkgtrans. Indique la ubicación del paquete sin firmar y el alias de la clave para firmar el paquete.

    Por ejemplo, de acuerdo con los procedimientos anteriores, debería escribir lo siguiente para crear un paquete firmado llamado SUNWfoo.signed:


    $ pkgtrans -g -k ~/mykeystore -n mycert . ./SUNWfoo.signed SUNWfoo
    

    La salida de este comando tendría un aspecto similar al siguiente:


    Retrieving signing certificates from keystore </home/user/mykeystore>
    Enter keystore password:
    Generating digital signature for signer <Test User>
    Transferring <SUNWfoot> package instance

    El paquete firmado se crea en el archivo SUNWfoo.signed y se encuentra en el formato de flujo de paquete. Este paquete firmado es adecuado para copiarlo en un sitio web e instalarse mediante el comando pkgadd y un URL.