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

Capítulo 2 Construcción de un paquete

En este capítulo se describen el proceso y las tareas implicadas en la construcción de un paquete. Algunas de estas tareas son necesarias. Algunas de estas tareas son optativas. Las tareas necesarias se tratan de forma detallada en este capítulo. Para obtener más información sobre las tareas optativas que permiten agregar funciones al paquete, consulte el Capítulo 3Mejora de las funciones de un paquete (tareas), y el Capítulo 6Técnicas avanzadas para la creación de paquetes.

A continuación se indica la información contenida en este capítulo:

El proceso de construcción de un paquete (mapa de tareas)

Tabla 2–1 describe un proceso que puede seguir a la hora de construir paquetes, especialmente si no tiene experiencia en construirlos. Aunque no es obligatorio completar las cuatro primeras tareas en el orden exacto en que aparecen, la experiencia de construir paquetes será más sencilla si lo hace. Cuando sea un diseñador de paquetes experimentado, puede adaptar la secuencia de estas tareas a sus preferencias.

Como diseñador de paquetes experimentado, puede automatizar el proceso de construcción de paquetes mediante el uso del comando make y los makefiles. Para obtener más información, consulte la página de comando man make(1S).

Tabla 2–1 El proceso de construcción de un paquete (mapa de tareas)

Tarea 

Descripción 

Para obtener instrucciones 

1. Crear un archivo pkginfo

Cree el archivo pkginfo para describir las características del paquete.

Cómo crear un archivo pkginfo

2. Organizar el contenido del paquete 

Ordene los componentes del paquete en una estructura de directorios jerárquica. 

Organización del contenido de un paquete

3. (optativo) Crear archivos de información 

Defina dependencias de paquetes, incluido un mensaje de copyright y reserve espacio adicional en el sistema de destino. 

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

4. (optativo) Crear secuencias de comandos de instalación 

Personalice los procesos de instalación y eliminación del paquete. 

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

5. Crear un archivo prototype

Describa el objeto del paquete en un archivo prototype.

Creación de un archivo prototype

6. Construir el paquete 

Construya el paquete mediante el comando pkgmk.

Construcción de un paquete

7. Verificar y transferir el paquete 

Verifique la integridad del paquete antes de copiarlo en un medio de distribución. 

Capítulo 4Verificación y transferencia de un paquete

Variables de entorno de paquetes

Puede usar variables en los archivos de información necesarios, pkginfo y prototype. También puede usar una opción con el comando pkgmk, que se utiliza para construir un paquete. Todos estos archivos y comandos se tratan en este capítulo; se ofrece asimismo más información contextual sobre variables. Sin embargo, cuando comience a construir el paquete, debe comprender los diferentes tipos de variables y cómo pueden afectar a la creación satisfactoria de un paquete.

Hay dos tipos de variables:

Normas generales sobre el uso de variables de entorno

En el archivo pkginfo, una definición de variable toma el formato de PARAM=value, donde la primera letra de PARAM está en mayúsculas. Estas variables se evalúan sólo en el tiempo de la instalación. Si alguna de estas variables no se puede evaluar, el comando pkgadd se cancela con un error.

En el archivo prototype, una definición de variable puede tomar el formato !PARAM=value o $variable. Tanto PARAM como variable puede comenzar por mayúsculas o minúsculas. Sólo se evalúan las variables cuyos valores sean conocidos en el tiempo de la construcción. Si PARAM o variable es una variable de construcción o de instalación cuyo valor no sea conocido en el tiempo de la construcción, el comando pkgmk se cancela con un error.

También puede incluir PARAM=value como opción para el comando pkgmk. Esta opción trabaja del mismo modo que en el archivo prototype, excepto que su ámbito es global en todo el paquete. La definición !PARAM=value en un archivo prototype es local para ese archivo y la parte del paquete que define.

Si PARAM es una variable de instalación y variable es una variable de instalación o de construcción con un valor conocido, el comando pkgmk inserta la definición en el archivo pkginfo de forma que la definición estará disponible en el tiempo de la instalación. Sin embargo, el comando pkgmk no evalúa las PARAM que se encuentren en nombres de ruta especificados en el archivo prototype.

Resumen de variables de entorno de paquetes

La tabla siguiente resume la ubicación, el ámbito y los formatos de especificación de variables.

Tabla 2–2 Resumen de variables de entorno de paquetes

Donde se define la variable 

Formato de definición de variable 

Tipo de variable que se define 

Cuando la variable se evalúa 

Donde se evalúa la variable 

Elementos por los que se puede sustituir la variable 

Archivo pkginfo

PARAM=value

Construcción 

Ignorado en el tiempo de la construcción 

N/D 

Ninguna 

Instalación 

Tiempo de la instalación 

En el archivo pkgmap

propietario, grupo, ruta o destino de vínculo

 

 

Archivo prototype

!PARAM=value

Construcción 

Tiempo de construcción 

En el archivo prototype y cualquier archivo que se incluya

modo, propietario, grupo o ruta

Instalación 

Tiempo de construcción 

En el archivo prototype y cualquier archivo que se incluya

Comandos !search y !command solamente

 

 

Línea de comandos de pkgmk

PARAM=value

Construcción 

Tiempo de construcción 

En el archivo prototype

modo, propietario, grupo o ruta

Instalación 

Tiempo de construcción 

En el archivo prototype

Comando !search solamente

 

 

Tiempo de la instalación 

En el archivo pkgmap

propietario, grupo, ruta o destino de vínculo

 

 

 

Creación de un archivo pkginfo

pkginfo es un archivo ASCII que describe las características de un paquete, así como la información que ayuda a controlar el flujo de la instalación.

Cada entrada del archivo pkginfo es una línea que establece el valor de un parámetro mediante el formato PARAM=value. PARAM puede ser cualquiera de los parámetros estándar que se describen en la página de comando man pkginfo(4) No hay un orden preciso en el que los parámetros se deban especificar.


Nota –

Cada valor se puede incluir entre comillas simples o dobles (por ejemplo, 'valor' o “ valor”). Si valor contiene caracteres que se consideren especiales para un entorno de shell, debe usar comillas. Los ejemplos y los casos prácticos de este manual no utilizan comillas. Consulte la página de comando man pkginfo(4) para ver algún ejemplo que utilice comillas dobles.


También puede asignar un valor a sus propios parámetros del paquete para crearlos en el archivo pkginfo. Los parámetros deben comenzar por una letra en mayúsculas seguida de letras en mayúsculas o minúsculas. Una letra en mayúsculas indica que el parámetro (variable) se evaluará en el tiempo de la instalación (en contraposición al tiempo de la construcción). Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.


Nota –

Los espacios en blanco que haya tras el valor de un parámetro se ignoran.


Debe definir estos cinco parámetros en un archivo pkginfo: PKG, NAME, ARCH, VERSION y CATEGORY. El software inserta automáticamente los parámetros PATH, PKGINST y INSTDATE cuando se construye el paquete. No modifique estos ocho parámetros. Para obtener información sobre los parámetros restantes, consulte la página de comando man pkginfo(4).

Definición de la instancia de un paquete

El mismo paquete puede tener versiones diferentes, ser compatible con arquitecturas diferentes o ambas. Cada variación de un paquete se conoce como instancia de paquete. Una instancia de paquete está determinada por la combinación de las definiciones de los parámetros PKG, ARCH y VERSION en el archivo pkginfo.

El comando pkgadd asigna un identificador de paquete a cada instancia de paquete en el tiempo de la instalación. El identificador es la abreviatura del paquete con un sufijo numérico, por ejemplo SUNWadm.2. Este identificador distingue una instancia de cualquier otro paquete, incluidas las instancias del mismo paquete.

Definición de la abreviatura de un paquete (PKG)

Una abreviatura de paquete es un nombre más corto de un paquete definido por el parámetro PKG en el archivo pkginfo. La abreviatura de un paquete debe tener estas características:

Especificación de una arquitectura de paquetes (ARCH)

El parámetro ARCH en el archivo pkginfo identifica qué arquitecturas se asocian al paquete. El nombre de la arquitectura tiene un máximo de 16 caracteres alfanuméricos. Si un paquete se ha asociado a más de una arquitectura, especifíquelas en una lista separadas por comas.

Éste es un ejemplo de una especificación de arquitectura de paquetes en un archivo pkginfo:


ARCH=sparc

Especificación de una arquitectura de conjunto de instrucciones de paquetes (SUNW_ISA)

El parámetro SUNW_ISA del archivo pkginfo identifica qué arquitectura de conjunto de instrucciones está asociada a un paquete de Sun Microsystems. Los valores son los siguientes:

Por ejemplo, el valor SUNW_ISA de un archivo pkginfo para un paquete que contiene objetos de 64 bits tendría este aspecto:


SUNW_ISA=sparcv9

Si no se ha configurado SUNW_ISA, la arquitectura predeterminada del conjunto de instrucciones se configura con el valor del parámetro ARCH.

Especificación de la versión de un paquete (VERSION)

El parámetro VERSION del archivo pkginfo identifica la versión del paquete. La versión tiene un máximo de 256 caracteres ASCII y no puede comenzar con un paréntesis izquierdo.

Ésta es una versión de ejemplo de una especificación en un archivo pkginfo:


VERSION=release 1.0

Definición del nombre de un paquete (NAME)

Un nombre de paquete es el nombre completo del paquete, definido por el parámetro NAME en el archivo pkginfo.

Debido a que los administradores del sistema usan con frecuencia nombres de paquetes para determinar si un paquete debe instalarse, es importante escribir nombres de paquetes claros, concisos y completos. Los nombres de paquetes deben satisfacer estos criterios:

A continuación puede ver un nombre de paquete de ejemplo definido en un archivo pkginfo:


NAME=Chip designers need CAD application software to design
abc chips.  Runs only on xyz hardware and is installed in the
usr partition.

Definición de una categoría de paquetes (CATEGORY)

El parámetro CATEGORY del archivo pkginfo especifica a qué categorías pertenece un catálogo. Como mínimo, un paquete debe pertenecer a la categoría system o application. Los nombres de las categorías se componen de caracteres alfanuméricos. Los nombres de categorías tienen una longitud máxima de 16 caracteres y distinguen entre mayúsculas y minúsculas.

Si un paquete pertenece a más de una categoría, especifíquelas en una lista, separadas por comas.

A continuación puede ver una especificación CATEGORY de ejemplo en un archivo pkginfo:


CATEGORY=system

ProcedureCómo crear un archivo pkginfo

  1. Cree un archivo llamado pkginfo con su editor de texto preferido.

    Puede crear este archivo en cualquier ubicación del sistema.

  2. Edite el archivo y defina los cinco parámetros necesarios.

    Los cinco parámetros necesarios son: PKG, NAME, ARCH, VERSION y CATEGORY. Para obtener más información sobre estos parámetros, consulte Creación de un archivo pkginfo.

  3. Agregue parámetros optativos al archivo.

    Cree sus propios parámetros o consulte la página de comando man pkginfo(4) para obtener información sobre los parámetros estándar.

  4. Guarde los cambios y salga del editor.


Ejemplo 2–1 Creación de un archivo pkginfo

Este ejemplo muestra el contenido de un archivo pkginfo válido, con los cinco parámetros necesarios definidos, así como el parámetro BASEDIR. El parámetro BASEDIR se trata más detalladamente en El campo ruta.


PKG=SUNWcadap
NAME=Chip designers need CAD application software to design abc chips.  
Runs only on xyz hardware and is installed in the usr partition.
ARCH=sparc
VERSION=release 1.0
CATEGORY=system
BASEDIR=/opt

Véase también

Consulte Cómo organizar el contenido de un paquete.

Organización del contenido de un paquete

Organice los objetos del paquete en una estructura jerárquica de directorios que refleje la estructura que los objetos del paquete tendrán en el sistema de destino después de la instalación. Si lleva a cabo este paso antes de crear un archivo prototype, puede ahorrar algo de tiempo y esfuerzo a la hora de crear ese archivo.

ProcedureCómo organizar el contenido de un paquete

  1. Determine cuántos paquetes necesita crear y qué objetos se incluirán en cada paquete.

    Para obtener ayuda sobre la ejecución de este paso, consulte Consideraciones antes de construir un paquete.

  2. Cree un directorio para cada paquete que necesite construir.

    Puede crear este directorio en cualquier lugar del sistema y nombrarlo como desee. Los ejemplos de este capítulo asumen que un directorio del paquete tiene el mismo nombre que la abreviatura del paquete.


    $ cd /home/jane
    $ mkdir SUNWcadap
    
  3. Organice los objetos de cada paquete en una estructura de directorios bajo su correspondiente directorio de paquetes. La estructura de directorios debe reflejar la estructura que los objetos del paquete tendrán en el sistema de destino.

    Por ejemplo, el paquete de la aplicación CAD, SUNWcadap, necesita la siguiente estructura de directorios.

    El diagrama muestra la estructura del directorio de paquetes SUNWcadap.
  4. Decida dónde conservará los archivos de información. Si procede, cree un directorio para conservar los archivos en una ubicación.

    En este caso se asume que el archivo pkginfo de ejemplo de Cómo crear un archivo pkginfo se creó en el directorio de inicio de Jane.


    $ cd /home/jane
    $ mkdir InfoFiles
    $ mv pkginfo InfoFiles
    
Véase también

Consulte Cómo crear un archivo prototype mediante el comando pkgproto.

Creación de un archivo prototype

prototype es un archivo ASCII utilizado para especificar información sobre los objetos de un paquete. Cada entrada del archivo prototype describe un único objeto, como un archivo de datos, un directorio, un archivo de origen o un objeto ejecutable. Las entradas de un archivo prototype constan de varios campos de información, separados por espacios en blanco. Observe que los campos deben aparecer en un orden concreto. Las líneas de comentarios comienzan por el signo de almohadilla (#) y se ignoran.

Puede crear un archivo prototype con un editor de texto o mediante el comando pkgproto. Cuando cree este archivo por primera vez, es probablemente más fácil hacerlo con el comando pkgproto, porque lo crea basándose en la jerarquía de directorios que haya creado anteriormente. Si no ha organizado los archivos tal como se describe en Organización del contenido de un paquete, tiene la pesada tarea de crear el archivo prototype a partir de cero con el editor de textos que desee.

Formato del archivo prototype

A continuación puede ver el formato de cada línea en el archivo prototype:


partftypeclasspathmajorminormodeownergroup

parte

Es un campo numérico optativo que le permite agrupar objetos de paquetes en partes. El valor predeterminado es parte 1. 

tipoa

Es un campo de un carácter que especifica el tipo de objeto. Consulte El campo tipoa.

clase

Es la clase de instalación a la que pertenece el objeto. Consulte El campo clase.

ruta

Es un nombre de ruta absoluta o relativa que indica dónde se ubicará el objeto del paquete en el sistema de destino. Consulte El campo ruta.

principal

Es el número de dispositivo principal para dispositivos especiales de caracteres o bloques. 

secundario

Es el número de dispositivo secundario para dispositivos especiales de caracteres o bloques. 

modo

Es el modo octal del objeto (por ejemplo, 0644). Consulte El campo modo.

propietario

Es el propietario del objeto (por ejemplo, bin o root). Consulte El campo propietario.

group

Es el grupo al que pertenecen los objetos (por ejemplo, bin o sys). Consulte El campo grupo.

Por lo general, sólo se definen los campos tipoa, clase, ruta, modo, propietario y grupo. Estos campos se describen en las secciones siguientes. Consulte la página de comando man prototype(4) para obtener información adicional sobre estos campos.

El campo tipoa

tipoa, o tipo de archivo, es un campo de un carácter que especifica el tipo de objeto de un paquete. Los tipos de archivos válidos se describen en la tabla siguiente

Tabla 2–3 Tipos de archivos válidos en el archivo prototype

Valor de campo de tipo de archivo 

Descripción del tipo de archivo 

f

Archivo ejecutable estándar o archivo de datos 

e

Archivo que se debe editar tras la instalación o la eliminación (lo pueden compartir varios paquetes) 

v

Archivo volátil (cuyo contenido se espera que cambie, como un archivo de registro) 

d

Directory 

x

Directorio exclusivo accesible sólo por este paquete (puede contener información de la base de datos o registros sin registrar) 

l

Archivo vinculado 

p

Conducción con nombre 

c

Dispositivo especial de caracteres 

b

Dispositivo especial de bloques 

i

Archivo de información o secuencia de comandos de instalación 

s

Vínculo simbólico 

El campo clase

Los nombres del campo clase muestran la clase a la que pertenece un objeto. El uso de clases es una función optativa de diseño de paquetes. Esta función se trata detalladamente en Escritura de secuencias de comandos de acción de clase.

Si no usa clases, un objeto pertenece a la clase none. Si ejecuta el comando pkgmk para construir el paquete, el comando inserta el parámetro CLASSES=none en el archivo pkginfo. Los archivos del tipo i deben tener un campo clase en blanco.

El campo ruta

El campo ruta se utiliza para definir dónde residirá el objeto de paquete en el sistema de destino. Puede indicar la ubicación con un nombre de ruta absoluta (por ejemplo, /usr/bin/mail) o un nombre de ruta relativa (por ejemplo, bin/mail). El uso de un nombre de ruta absoluta significa que la ubicación del objeto en el sistema de destino la define el paquete y no se puede cambiar. Los objetos del paquete con nombres de ruta relativa indican que el objeto es reubicable.

Un objeto reubicable no necesita una ubicación de ruta absoluta en el sistema de destino. Por el contrario, la ubicación del objeto se determina durante el proceso de instalación.

Todos o algunos de los objetos de un paquete se pueden definir como reubicables. Antes de escribir secuencias de comandos de instalación o crear el archivo prototype, decida si los objetos del paquete tendrán una ubicación fija (como secuencias de comandos de inicio en /etc) o si serán reubicables.

Hay dos tipos de objetos reubicables: reubicables colectivamente y reubicables individualmente.

Objetos reubicables colectivamente

Los objetos reubicables colectivamente se sitúan en relación a una base de instalación común llamada directorio base. Un directorio base se define en el archivo pkginfo, mediante el parámetro BASEDIR. Por ejemplo, un objeto reubicable del archivo prototype con el nombre tests/generic necesita que el archivo pkginfo defina el parámetro BASEDIR predeterminado. Por ejemplo:


BASEDIR=/opt

Este ejemplo significa que cuando se instala el objeto, se ubicará en el directorio /opt/tests/generic.


Nota –

El directorio /opt es el único al que se puede entregar software que no sea parte del software base de Solaris.


Use objetos reubicables colectivamente siempre que sea posible. En general, la parte principal de un paquete se puede reubicar con unos cuantos archivos (como los archivos en /etc o /var) especificados como absolutos. Sin embargo, si un paquete contiene muchas reubicaciones diferentes, considere la opción de dividir el paquete en diversos paquetes con diferentes valores BASEDIR en sus archivos pkginfo.

Objetos reubicables individualmente

Los objetos reubicables individualmente no se restringen a la misma ubicación del directorio como objetos reubicables colectivamente. Para definir un objeto reubicable individualmente, debe especificar una variable de instalación en el campo ruta del archivo prototype. Después de especificar la variable de instalación, cree una secuencia de comandos request para solicitar al instalador el directorio base reubicable, o bien una secuencia de comandos checkinstall para determinar el nombre de ruta a partir de los datos del sistema de archivos. Para obtener más información sobre las secuencias de comandos request, consulte Escritura de una secuencia de comandos request; para obtener más información sobre las secuencias de comandos checkinstall, consulte Cómo reunir datos del sistema de archivos.


Precaución – Precaución –

Los objetos reubicables individualmente son difíciles de administrar. El uso de objetos reubicables individualmente puede provocar que haya componentes de paquetes muy dispersos que sean difíciles de aislar al instalar varias versiones o arquitecturas del paquete. Use objetos reubicables colectivamente siempre que sea posible.


Nombres de rutas paramétricos

Un nombre de ruta paramétrico es un nombre de ruta que contiene la especificación de una variable. Por ejemplo, /opt/$PKGINST/nombre_archivo es un nombre de ruta paramétrico debido a la especificación de la variable $PKGINST. Se debe definir un valor predeterminado para especificar la variable en el archivo pkginfo. Posteriormente se puede cambiar el valor mediante una secuencia de comandos request o checkinstall.

La especificación de una variable en una ruta debe comenzar o terminar el nombre de la ruta, o bien estar marcado por barras oblicuas (/). Los nombres paramétricos válidos de rutas adoptan el formato siguiente:


$PARAM/tests
tests/$PARAM/generic
/tests/$PARAM

La especificación de la variable, una vez definida, puede provocar que la ruta se evalúe como absoluta o reubicable. En el ejemplo siguiente, el archivo prototype contiene esta entrada:


f none $DIRLOC/tests/generic

El archivo pkginfo contiene esta entrada:


DIRLOC=/myopt

El nombre de ruta $DIRLOC/tests/generic evalúa al nombre de ruta absoluta /myopt/tests/generic, independientemente de si el parámetro BASEDIR está configurado en el archivo pkginfo.

En este ejemplo, el archivo prototype es idéntico al del ejemplo anterior y el archivo pkginfo contiene las entradas siguientes:


DIRLOC=firstcut
BASEDIR=/opt

El nombre de ruta $DIRLOC/tests/generic evaluará al nombre de ruta reubicable /opt/firstcut/tests/generic.

Para obtener más información sobre nombres de rutas paramétricos, consulte Uso de directorios base paramétricos.

Unas palabras sobre las ubicaciones de origen y de destino del objeto

El campo ruta del archivo prototype define dónde se ubicará el objeto en el sistema de destino. Especifique la ubicación actual de los objetos del paquete en el archivo prototype si su estructura de directorios no refleja la estructura que se desea en el sistema de destino. Consulte Organización del contenido de un paquete para obtener más información sobre la estructuración de objetos en un paquete.

Si el área de desarrollo no está estructurada del mismo modo que desea para el paquete, puede usar el formato path1=path2 en el campo ruta. En este formato, ruta1 es la ubicación que el objeto debe tener en el sistema de destino y ruta2 es la ubicación que el objeto tiene en su sistema.

También puede usar el formato de nombre de ruta ruta1=ruta2 con ruta1 como nombre de objeto reubicable y ruta2 como nombre de ruta completo al objeto del sistema.


Nota –

Es posible que ruta1 no contenga variables de construcción sin definir, sino que contenga variables de instalación sin definir. Es posible que ruta2 no contenga variables sin definir, aunque se pueden usar las variables de construcción y de instalación. Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.


Los vínculos deben usar el formato ruta1= ruta2 porque los crea el comando pkgadd. Como norma general, la ruta2 de un vínculo no debe ser nunca absoluta, sino que debe ser relativa a la parte del directorio de ruta1.

Una alternativa al uso del formato ruta1=ruta2 es usar el comando !search. Para obtener más información, consulte Cómo proporcionar una ruta de búsqueda para el comando pkgmk.

El campo modo

El campo modo puede contener un número octal, un signo de interrogación (?) o una especificación de variable. Un número octal especifica el modo del objeto cuando se instala en el sistema de destino. Un signo ? significa que no se cambiará el modo cuando se instale el objeto, lo cual implica que el objeto del mismo nombre ya existe en el sistema de destino.

Una especificación de variable con el formato $modo, donde la primera letra de la variable debe estar en minúscula, significa que este campo se configurará cuando se construya el paquete. Tenga en cuenta que esta variable se debe definir en el tiempo de la construcción en el archivo prototype o como opción del comando pkgmk. Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.

Los archivos de los tipos i (archivo de información), l (vínculo físico) y s (vínculo simbólico) deben dejar este campo en blanco.

El campo propietario

El campo propietario puede contener un nombre de usuario, un signo de interrogación (?) o una especificación de variable. Un nombre de usuario tiene un máximo de 14 caracteres y debe ser un nombre que ya exista en el sistema de destino (como bin o root). Un signo ? significa que no se cambiará el propietario cuando se instale el objeto, lo cual implica que el objeto del mismo nombre ya existe en el sistema de destino.

Una especificación de variable puede tener el formato $Propietario o $propietario, donde la primera letra de la variable está en mayúsculas o minúsculas. Si la variable comienza por minúsculas, se debe definir cuando se ha construido el paquete, en el archivo prototype o como opción para el comando pkgmk. Si la variable comienza por una mayúscula, la especificación de la variable se insertará en el archivo pkginfo como valor predeterminado, y puede volver a definirse en el tiempo de la instalación mediante una secuencia de comandos request. Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.

Los archivos de los tipos i (archivo de información) y lb (vínculo físico) deben dejar este campo en blanco.

El campo grupo

El campo grupo puede contener un nombre de grupo, un signo de interrogación (?) o una especificación de variable. Un nombre de grupo tiene un máximo de 14 caracteres y debe ser un nombre que ya exista en el sistema de destino (como bin o sys). Un signo ? significa que no se cambiará el grupo cuando se instale el objeto, lo cual implica que el objeto del mismo nombre ya existe en el sistema de destino.

Una especificación de variable puede tener el formato $Grupo o $grupo, donde la primera letra de la variable está en mayúsculas o minúsculas. Si la variable comienza por minúsculas, se debe definir cuando se ha construido el paquete, en el archivo prototype o como opción para el comando pkgmk. Si la variable comienza por una mayúscula, la especificación de la variable se insertará en el archivo pkginfo como valor predeterminado, y puede volver a definirse en el tiempo de la instalación mediante una secuencia de comandos request. Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.

Los archivos de los tipos i (archivo de información) y l (vínculo físico) deben dejar este campo en blanco.

Creación de un archivo prototype desde cero

Si desea crear un archivo prototype desde cero, puede hacerlo con su editor de textos preferido, y agregarle una entrada por objeto de paquete. Consulte Formato del archivo prototype y la página de comando man prototype(4) para obtener más información sobre el formato de este archivo. Sin embargo, después de haber definido cada objeto de paquete, puede que desee incluir algunas de las funciones que se describen en Adición de funciones a un archivo prototype.

Ejemplo: creación de un archivo prototype con el comando pkgproto

Puede usar el comando pkgproto para construir un archivo prototype básico, siempre que haya organizado la estructura de directorios de paquetes tal como se describe en Organización del contenido de un paquete. Por ejemplo, mediante la estructura de directorios de muestra y el archivo pkginfo que se han descrito en las secciones anteriores, los comandos para crear el archivo prototype son los siguientes:


$ cd /home/jane
$ pkgproto ./SUNWcadap > InfoFiles/prototype

El archivo prototype será, más o menos, así:

d none SUNWcadap 0755 jane staff
d none SUNWcadap/demo 0755 jane staff
f none SUNWcadap/demo/file1 0555 jane staff
d none SUNWcadap/srcfiles 0755 jane staff
f none SUNWcadap/srcfiles/file5 0555 jane staff
f none SUNWcadap/srcfiles/file6 0555 jane staff
d none SUNWcadap/lib 0755 jane staff
f none SUNWcadap/lib/file2 0644 jane staff
d none SUNWcadap/man 0755 jane staff
f none SUNWcadap/man/windex 0644 jane staff
d none SUNWcadap/man/man1 0755 jane staff
f none SUNWcadap/man/man1/file4.1 0444 jane staff
f none SUNWcadap/man/man1/file3.1 0444 jane staff

Nota –

El grupo y el propietario reales de la persona que construye el paquete se registran mediante el comando pkgproto. Una buena técnica es usar los comandos chown -R y chgrp -R, para configurar el propietario y el grupo como se pretendía antes de ejecutar el comando pkgproto.


Este archivo prototype de ejemplo no está completo. Consulte la sección siguiente para obtener información sobre la finalización de este archivo.

Ajuste de un archivo prototype creado con el comando pkgproto

Aunque el comando pkgproto es útil para crear un archivo prototype inicial, no crea entradas para cada objeto de paquete que se deba definir. Este comando no hace entradas completas. El comando pkgproto no hace ninguna de las acciones siguientes:

Creación de entradas de objetos con tipos de archivos v, e, x y i

Como mínimo, es necesario modificar el archivo prototype para agregar objetos con el tipo de archivo i. Si ha guardado los archivos de información y las secuencias de comandos de instalación en el primer nivel del directorio de paquetes (por ejemplo /home/jane/SUNWcadap/pkginfo), una entrada del archivo prototype tendría el aspecto siguiente:


i pkginfo

Si no almacenó los archivos de información ni las secuencias de comandos de instalación en el primer nivel del directorio de paquetes, debe especificar la ubicación de origen. Por ejemplo:


i pkginfo=/home/jane/InfoFiles/pkginfo

O bien, puede usar el comando !search para especificar la ubicación del comando pkgmk que se debe comprobar al construir el paquete. Consulte Cómo proporcionar una ruta de búsqueda para el comando pkgmk para obtener más información.

Para agregar entradas a objetos con los tipos de archivos v, e y x, siga el formato que se describe en Formato del archivo prototype, o bien consulte la página de comando man prototype(4).


Nota –

Recuerde asignar siempre una clase a los archivos con un tipo de archivo e (modificable) y tenga una secuencia de comandos de acción de clase asociada a esa clase. De lo contrario, los archivos se suprimirán durante la eliminación de los paquetes, aunque el nombre de la ruta se guarde con otros paquetes.


Uso de varias definiciones de clases

Si usa el comando pkgproto para crear el archivo prototype básico, puede asignar todos los objetos de paquetes a la clase none o a una clase específica. Tal como se muestra en Ejemplo: creación de un archivo prototype con el comando pkgproto, el comando pkgproto básico asigna todos los objetos a la clase none. Para asignar todos los objetos a una clase específica, puede usar la opción -c. Por ejemplo:


$ pkgproto -c classname /home/jane/SUNWcadap > /home/jane/InfoFiles/prototype

Si usa varias clases, puede que necesite modificar manualmente el archivo prototype y modificar el campo clase para cada objeto. Si usa clases, también debe definir el parámetro CLASSES en el archivo pkginfo y escribir las secuencias de comandos de acción de clase. El uso de clases es una característica optativa que se trata en detalle en Escritura de secuencias de comandos de acción de clase.

Ejemplo: ajuste de un archivo prototype creado mediante el comando pkgproto

Dado el archivo prototype creado por el comando pkgproto en Ejemplo: creación de un archivo prototype con el comando pkgproto, es necesario llevar a cabo varias modificaciones.

Adición de funciones a un archivo prototype

Además de definir cada objeto de paquete en el archivo prototype, también puede hacer lo siguiente:

Consulte las secciones siguientes para obtener información sobre cómo efectuar estos cambios.

Definición de objetos adicionales que se deben crear en el tiempo de la instalación

Puede usar el archivo prototype para definir objetos que no se ofrezcan en el medio de instalación. Durante la instalación, mediante el comando pkgadd, estos objetos se crean con los tipos de archivos necesarios, si no existen ya en el tiempo de la instalación.

Para especificar la creación de un objeto en el sistema de destino, agréguele una entrada en el archivo prototype con el tipo de archivo adecuado.

Por ejemplo, si desea que se cree un directorio en el sistema de destino, pero no desea ofrecerlo en el medio de instalación, agregue la entrada siguiente para el directorio en el archivo prototype:


d none /directory 0644 root other

Si desea crear un archivo vacío en el sistema de destino, una entrada para el archivo en el archivo prototype podría tener el aspecto siguiente:


f none filename=/dev/null 0644 bin bin

Los únicos objetos que deben entregarse en el medio de instalación son archivos regulares y secuencias de comandos de edición (tipos de archivos e, v, f) y los directorios necesarios para incluirlos. Los objetos adicionales se crean sin hacer referencia a los vínculos simbólicos, vínculos físicos, dispositivos, conducciones con nombre, directorios y objetos entregados.

Creación de vínculos en el tiempo de la instalación

Parar crear vínculos durante la instalación de los paquetes, defina lo siguiente en la entrada del archivo prototype para el objeto vinculado:

Los vínculos relativos se especificarían de este modo si el paquete está instalado como reubicable o absoluto.

Distribución de paquetes en varios volúmenes

Cuando construye el paquete con el comando pkgmk, éste lleva a cabo los cálculos y las acciones necesarias para organizar un paquete de varios volúmenes. Un paquete de varios volúmenes recibe el nombre de paquete segmentado.

Sin embargo, puede usar el campo parte optativo en el archivo prototype para definir en qué parte desea ubicar un objeto. Un número de este campo anula el comando pkgmk y fuerza la colocación del componente en la parte concreta del campo. Observe que hay una correspondencia de igual a igual entre las partes y los volúmenes para los medios extraíbles formateados como sistemas de archivos. Si el desarrollador asigna previamente los volúmenes, el comando pkgmk emite un error si no hay suficiente espacio en un volumen.

Anidado de archivos prototype

Puede crear varios archivos prototype y después incluirlos mediante el comando !include en el archivo prototype. Anidar archivos puede ser una opción para facilitar el mantenimiento.

En el ejemplo siguiente hay tres archivos prototype. Se está modificando el archivo principal (prototype). Los otros dos archivos (proto2 y proto3) se están incluyendo.


!include /source-dir/proto2
!include /source-dir/proto3

Configuración de valores predeterminados para los campos modo, propietario y grupo

Con el fin de configurar valores predeterminados para los campos modo, propietario y grupo para objetos de paquetes específicos, puede insertar el comando !default en el archivo prototype. Por ejemplo:


!default 0644 root other

Nota –

El intervalo del comando !default comienza donde se insertó y se extiende hasta el fin del archivo. El intervalo del comando no abarca los archivos incluidos.


Sin embargo, en el caso de directorios (tipo de archivo d) y archivos modificables (tipo de archivo e) que sabe que existe en los sistemas de destino (como /usr o /etc/vfstab), compruebe que los campos modo, propietario y grupo del archivo prototype se establecen como signos de interrogación (?). De este modo no destruirá los valores que un administrador del sitio puede haber modificado.

Cómo proporcionar una ruta de búsqueda para el comando pkgmk

Si la ubicación de origen de los objetos del paquete es diferente de su ubicación de destino y no desea usar el formato ruta1=ruta2 tal como se describe en Unas palabras sobre las ubicaciones de origen y de destino del objeto, entonces puede usar el comando !search en el archivo prototype.

Por ejemplo, si ha creado un directorio, pkgfiles, en el directorio de inicio, y contiene todos los archivos de información y las secuencias de comandos de instalación, puede determinar que se busque en este directorio cuando el paquete se construya con el comando pkgmk.

El comando del archivo prototype tendría este aspecto:


!search /home-dir/pkgfiles

Nota –

Las solicitudes de búsqueda no abarcan los archivos incluidos. Además, la búsqueda se limita a los directorios específicos enumerados y no se lleva a cabo de forma recursiva.


Configuración de las variables de entorno

También puede agregar comandos al archivo prototype con el formato !PARAM=valor. Los comandos con este formato definen variables en el entorno actual. Si tiene varios archivos prototype, el ámbito de este comando es local para el archivo prototype donde se ha definido.

La variable PARAM puede comenzar por una letra en minúscula o en mayúscula. Si el valor de la variable PARAM no se conoce en el tiempo de la construcción, el comando pkgmk se cancela de forma incorrecta. Para obtener más información sobre la diferencia entre las variables de instalación y de construcción, consulte Variables de entorno de paquetes.

ProcedureCómo crear un archivo prototype mediante el comando pkgproto


Nota –

Es más sencillo crear archivos de información y secuencias de comandos de instalación antes de crear un archivo prototype. Sin embargo, este orden no es obligatorio. Siempre puede editar el archivo prototype después de cambiar el contenido del paquete. Para obtener más detalles sobre los archivos de información y las secuencias de comandos de instalación, consulte Capítulo 3Mejora de las funciones de un paquete (tareas).


  1. Determine qué objetos del paquete serán absolutos y cuáles serán reubicables, si no lo ha hecho ya.

    Para obtener información que le ayude a completar este paso, consulte El campo ruta.

  2. Organice los objetos del paquete para que reflejen su ubicación en el sistema de destino.

    Si ya ha organizado los paquetes tal como se describe en Organización del contenido de un paquete, tenga en cuenta que posiblemente necesite hacer algunos cambios basados en sus decisiones en el Paso 1. Si no ha organizado aún el paquete, debería hacerlo ahora. Si no organiza el paquete, no puede usar el comando pkgproto para crear un archivo prototype básico.

  3. Si el paquete tiene objetos reubicables colectivamente, modifique el archivo pkginfo para configurar el parámetro BASEDIR con el valor adecuado.

    Por ejemplo:


    BASEDIR=/opt

    Para obtener información sobre objetos reubicables colectivamente, consulte Objetos reubicables colectivamente.

  4. Si el paquete tiene objetos reubicables individualmente, cree una secuencia de comandos request para solicitar al instalador el nombre de ruta adecuado. Si lo desea, también puede crear una secuencia de comandos checkinstall para determinar la ruta adecuada desde los datos del sistema de archivos.

    La lista siguiente ofrece números de páginas para su referencia respecto a tareas comunes:

  5. Cambie el propietario y el grupo de todos los componentes del paquete destinados a ser el propietario y el grupo en los sistemas de destino.

    Use los comandos chown -R y chgrp -R en el directorio de paquetes y el directorio de archivos de información.

  6. Ejecute el comando pkgproto para crear un archivo prototype básico.

    El comando pkgproto escanea los directorios para crear un archivo básico. Por ejemplo:


    $ cd package-directory
    $ pkgproto ./package-directory > prototype
    

    El archivo prototype se puede ubicar en cualquier lugar del sistema. El mantenimiento de los archivos de información y las secuencias de comandos de instalación en un lugar simplifica el acceso y el mantenimiento. Para obtener información adicional sobre el comando pkgproto, consulte la página de comando man pkgproto(1).

  7. Modifique el archivo prototype con su editor de textos preferido y agregue entradas para los tipos de archivo v, e, x y i.

    Para obtener información sobre los cambios específicos que deba llevar a cabo, consulte Ajuste de un archivo prototype creado con el comando pkgproto.

  8. (Optativo) Si usa varias clases, modifique los archivos prototype y pkginfo. Use su editor de textos preferido para hacer los cambios necesarios y cree las secuencias de comandos de clase correspondientes.

    Para obtener información sobre los cambios específicos que puede necesitar, consulte Ajuste de un archivo prototype creado con el comando pkgproto y Escritura de secuencias de comandos de acción de clase.

  9. Modifique el archivo prototype mediante el editor de textos preferido para redefinir los nombres de ruta y cambiar otros valores del campo.

    Para obtener más información, consulte Ajuste de un archivo prototype creado con el comando pkgproto.

  10. (Optativo) Modifique el archivo prototype mediante el editor de textos preferido para agregar funciones al archivo prototype.

    Para obtener más información, consulte Adición de funciones a un archivo prototype.

  11. Guarde los cambios y salga del editor.

Véase también

Si está listo para la tarea siguiente, consulte Cómo construir un paquete.

Construcción de un paquete

Use el comando pkgmk para construir el paquete. El comando pkgmk ejecuta las tareas siguientes:

Uso del comando pkgmk más sencillo

La forma más sencilla de este comando es pkgmk sin opción alguna. Antes de usar el comando pkgmk sin opciones, compruebe que el directorio de trabajo actual contenga el archivo prototype del paquete. La salida del comando, archivos y directorios, se escribe en el directorio /var/spool/pkg.

El archivo pkgmap

Si construye un paquete con el comando pkgmk, crea un archivo pkgmap que sustituye al archivo prototype. El archivo pkgmap del ejemplo anterior muestra el contenido siguiente:


$ more pkgmap
: 1 3170
1 d none SUNWcadap 0755 root sys
1 d none SUNWcadap/demo 0755 root bin
1 f none SUNWcadap/demo/file1 0555 root bin 14868 45617 837527496
1 d none SUNWcadap/lib 0755 root bin
1 f none SUNWcadap/lib/file2 0644 root bin 1551792 62372 837527499
1 d none SUNWcadap/man 0755 bin bin
1 d none SUNWcadap/man/man1 0755 bin bin
1 f none SUNWcadap/man/man1/file3.1 0444 bin bin 3700 42989 837527500
1 f none SUNWcadap/man/man1/file4.1 0444 bin bin 1338 44010 837527499
1 f none SUNWcadap/man/windex 0644 root other 157 13275 837527499
1 d none SUNWcadap/srcfiles 0755 root bin
1 f none SUNWcadap/srcfiles/file5 0555 root bin 12208 20280 837527497
1 f none SUNWcadap/srcfiles/file6 0555 root bin 12256 63236 837527497
1 i pkginfo 140 10941 837531104
$

El formato de este archivo es muy similar al del archivo prototype. Sin embargo, el archivo pkgmap incluye la información siguiente:

ProcedureCómo construir un paquete

  1. Cree un archivo pkginfo, si no lo ha hecho ya.

    Para conocer las instrucciones detalladas, consulte Cómo crear un archivo pkginfo.

  2. Cree un archivo prototype, si no lo ha hecho ya.

    Para obtener instrucciones detalladas, consulte Cómo crear un archivo prototype mediante el comando pkgproto.

  3. Haga los cambios necesarios para que el directorio de trabajo actual sea el mismo que contiene el archivo prototype del paquete.

  4. Construya su paquete.


    $ pkgmk [-o] [-a arch] [-b base-src-dir] [-d device]
       [-f filename] [-l limit] [-p pstamp] [-r rootpath]
       [-v version] [PARAM=value] [pkginst]
    -o

    Sobrescribe la versión actual del paquete.

    -a arq

    Anula la información de arquitectura del archivo pkginfo.

    -b dir_ori_base

    Solicita que dir_ori_base se agregue al comienzo de nombres de ruta reubicables cuando el comando pkgmk busque objetos en el sistema de desarrollo.

    -d dispositivo

    Especifica que el paquete debe copiarse en dispositivo que puede ser un nombre de ruta absoluta de directorio, un disquete o un disco extraíble.

    -f nombre_archivo

    Nombra un archivo, nombre_archivo, que se usa como archivo prototype. Los nombres predeterminados son prototype o Prototype.

    -l límite

    Especifica el tamaño máximo, en bloques de 512 bytes, del dispositivo de salida.

    -p indicación_p

    Anula la definición de indicación de producción en el archivo pkginfo.

    -r ruta_raíz

    Solicita que el directorio raíz ruta_raíz se use para encontrar los objetos en el sistema de desarrollo.

    -v versión

    Anula la información de la versión del archivo pkginfo.

    PARAM=valor

    Configura las variables de entorno globales. Las variables que comienzan por minúscula se resuelven en el tiempo de la construcción. Las que comienzan por mayúscula se sitúan en el archivo pkginfo para usarlo en el tiempo de la instalación.

    pkginst

    Especifica un paquete por su abreviatura o instancia específica (por ejemplo, SUNWcadap.4).

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

  5. Compruebe el contenido del paquete.


    $ pkgchk -d device-name pkg-abbrev
    Checking uninstalled directory format package pkg-abbrev
    from device-name
    ## Checking control scripts.
    ## Checking package objects.
    ## Checking is complete.
    $
    -d nombre_dispositivo

    Especifica la ubicación del paquete. Tenga en cuenta que nombre_dispositivo puede ser un nombre de ruta de directorio completo o los identificadores de una cinta o disco extraíble.

    abreviatura_paquete

    Es el nombre de uno o más paquetes (separados por espacios) que se deben comprobar. Si se omite, el comando pkgchk comprueba todos los paquetes disponibles.

    El comando pkgchk imprime qué aspectos del paquete se comprueban y muestra advertencias o errores, según sea el caso. Para obtener más información sobre el comando pkgchk, consulte Verificación de la integridad de un paquete.


    Precaución – Precaución –

    Los errores se deben tener en cuenta especialmente. Un error puede significar que una secuencia de comandos debe corregirse. Compruebe todos los errores y continúe si no está de acuerdo con la salida del comando pkgchk.



Ejemplo 2–2 Construcción de un paquete

Este ejemplo usa el archivo prototype creado en Ajuste de un archivo prototype creado con el comando pkgproto.


$ cd /home/jane/InfoFiles
$ pkgmk
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: parameter  set to "system990708093144"
WARNING: parameter  set to "none"
## Attempting to volumize 13 entries in pkgmap.
part  1 -- 3170 blocks, 17 entries
## Packaging one part.
/var/spool/pkg/SUNWcadap/pkgmap
/var/spool/pkg/SUNWcadap/pkginfo
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6
## Validating control scripts.
## Packaging complete.
$


Ejemplo 2–3 Especificación de un directorio de origen para los archivos reubicables

Si el paquete contiene archivos reubicables, puede usar la opción -b dir_ori_base en el comando pkgmk para especificar un nombre de ruta que agregar al comienzo de los nombres de ruta reubicables mientras el paquete se está creando. Esta opción es útil si no ha usado el formato ruta1=ruta2 para los archivos reubicables ni especificado una ruta de búsqueda con el comando !search en el archivo prototype.

El comando siguiente construye un paquete con las características siguientes:


$ cd /home/jane/InfoFiles
$ pkgmk -o -b /home/jane
## Building pkgmap from package prototype file.
## Processing pkginfo file.
WARNING: parameter  set to "system960716102636"
WARNING: parameter  set to "none"
## Attempting to volumize 13 entries in pkgmap.
part  1 -- 3170 blocks, 17 entries
## Packaging one part.
/var/spool/pkg/SUNWcadap/pkgmap
/var/spool/pkg/SUNWcadap/pkginfo
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5
/var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6
## Validating control scripts.
## Packaging complete.

En este ejemplo, el paquete se construye en el directorio predeterminado /var/spool/pkg, mediante la especificación de la opción -o. Esta opción sobrescribe el paquete que se creó en el Ejemplo 2–2.



Ejemplo 2–4 Especificación de diversos directorios de origen para los archivos de información y los objetos de los paquetes

Si coloca archivos de información de paquetes (como pkginfo y prototype) y objetos de paquetes en dos directorios diferentes, puede crear el paquete si usa las opciones -b dir_ori_base y -r ruta_raíz en el comando pkgmk. Si tiene objetos de paquetes en un directorio llamado /product/pkgbin y los demás archivos de información de paquetes en un directorio llamado /product/pkgsrc, podría usar el comando siguiente para situar el paquete en el directorio /var/spool/pkg:


$ pkgmk -b /product/pkgbin -r /product/pkgsrc -f /product/pkgsrc/prototype

De forma optativa, puede usar estos comandos para conseguir el mismo resultado:


$ cd /product/pkgsrc
$ pkgmk -o -b /product/pkgbin

En este ejemplo, el comando pkgmk usa el directorio de trabajo actual para buscar las partes restantes del paquete (como los archivos de información prototype y pkginfo).


Véase también

Si desea agregar secuencias de comandos de instalación y archivos de información optativos al paquete, consulte Capítulo 3Mejora de las funciones de un paquete (tareas). De lo contrario, después de construir el paquete, debe verificar su integridad. Capítulo 4Verificación y transferencia de un paquete explica cómo hacerlo y ofrece instrucciones detalladas sobre cómo transferir el paquete verificado a un medio de distribución.