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.
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. | |
Escribir un mensaje de copyright Un archivo de copyright ofrece protección legal a su aplicación de software. | ||
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. | ||
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. | |
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. | ||
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. | ||
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. |
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.
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:
Un paquete de prerrequisitos: su paquete depende de la existencia de otro paquete
Una dependencia inversa: otro paquete depende de la existencia de su paquete
Use el tipo de dependencia inversa sólo si un paquete que no puede entregar un archivo depend depende de su paquete.
Un paquete incompatible: su paquete es incompatible con el paquete nombrado
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.
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.
Convierta el directorio que contenga sus archivos de información en el directorio actual de trabajo.
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.
Guarde los cambios y salga del editor.
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 . . . |
Define el tipo de dependencia. Debe ser uno de los caracteres siguientes: P (paquete de prerrequisito), I (paquete incompatible), o bien R (dependencia inversa).
Especifica la abreviatura del paquete, como SUNWcadap.
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.
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.
Optativo. Especifica el valor asignado al parámetro VERSION en el archivo pkginfo.
Para obtener más información, consulte depend(4).
Guarde los cambios y salga del editor.
Complete una de las tareas siguientes:
Si desea crear secuencias de comandos de instalación y archivos de información adicionales, vaya a la tarea siguiente, Cómo escribir un mensaje de copyright.
Si no ha creado su archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 7.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para cada archivo que acabe de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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.
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) |
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.
Es necesario decidir si su paquete debe mostrar un mensaje de copyright mientras se está instalando. Si es así, cree el archivo copyright.
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.
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).
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
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.
Guarde los cambios y salga del editor.
Complete una de las tareas siguientes:
Si desea crear secuencias de comandos de instalación y archivos de información adicionales, vaya a la tarea siguiente, Cómo reservar espacio adicional en un sistema de destino..
Si no ha creado su archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 5.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para el archivo de información que acaba de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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. |
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.
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.
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).
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
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 |
Especifica un nombre de directorio que puede ser, aunque no necesariamente, el punto de montaje de un sistema de archivos.
Especifica el número de bloques de 512 bytes que desea reservar.
Especifica el número de inodos necesarios.
Para obtener más información, consulte la página de comando man space(4).
Guarde los cambios y salga del editor.
Complete una de las tareas siguientes.
Si desea crear secuencias de comandos de instalación, vaya a la tarea siguiente, Cómo escribir una secuencia de comandos request.
Si no ha creado su archivo prototype, complete el procedimiento que se indica en Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 5.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para el archivo de información que acaba de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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 |
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.
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:
Debe ser ejecutable por parte del shell Bourne (sh)
Debe contener comandos shell Bourne y texto
No es necesario que incluya el identificador de shell#!/bin/sh
No es necesario que sea un archivo ejecutable
Hay cuatro tipos de secuencias de comandos de instalación con los que puede llevar a cabo acciones personalizadas:
La secuencia de comandos request
La secuencia de comandos request solicita datos del administrador que instala un paquete para asignar o redefinir variables de entornos.
La secuencia de comandos checkinstall
La secuencia de comandos checkinstall busca en el sistema de destino los datos necesarios, puede establecer o modificar variables de entorno de paquetes y determina si continúa la instalación.
La secuencia de comandos checkinstall está disponible a partir de Solaris 2.5 y versiones compatibles.
Secuencias de comandos de procedimientos
Las secuencias de comandos de procedimientos identifican la invocación de un procedimiento antes o después de la instalación o eliminación de un paquete. Las cuatro secuencias de comandos de procedimientos son preinstall, postinstall, preremove y postremove.
Secuencias de comandos de acción de clase
Las secuencias de comandos de acción de clase definen una acción o conjunto de acciones que se deben aplicar a una clase de archivos durante la instalación o eliminación. Puede definir sus propias clases. Si lo desea, también puede usar una de las cuatro clases estándar (sed, awk, build y preserve).
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:
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.
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.
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.
Crea vínculos simbólicos, dispositivos, conducciones con nombre y los directorios necesarios.
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.
Crea todos los vínculos físicos.
Cuando se suprime un paquete, el comando pkgrm ejecuta estos pasos:
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.
Suprime los vínculos físicos.
Suprime los archivos regulares.
Suprime los vínculos simbólicos, los dispositivos y las conducciones con nombre.
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.
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.
La secuencia de comandos request o checkinstall puede establecer o modificar cualquiera de los parámetros estándar del archivo pkginfo, excepto en el caso de los parámetros necesarios. Los parámetros estándar de instalación se describen detalladamente en la página de comando man pkginfo(4).
El parámetro BASEDIR sólo se puede modificar a partir de la versión Solaris 2.5 y versiones compatibles.
Puede definir sus propias variables de entorno de instalación si les asigna valores en el archivo pkginfo. Estas variables de entorno deben ser alfanuméricas con las iniciales en mayúsculas. Cualquiera de las variables de entorno se puede modificar mediante una secuencia de comandos request o checkinstall.
Las secuencias de comandos request y checkinstall pueden definir nuevas variables de entorno si se les asignan valores y se colocan en el entorno de instalación.
En la tabla siguiente se muestran variables de entorno que están disponibles para todas las secuencias de comandos de instalación a través del entorno. Una secuencia de comandos no puede modificar ninguna de estas variables de entorno.
Variable de entorno |
Descripción |
---|---|
CLIENT_BASEDIR |
Directorio base respecto al sistema de destino. Mientras BASEDIR es la variable que usar si hace referencia a un objeto de paquete específico desde el sistema de instalación (muy probablemente un servidor), CLIENT_BASEDIR es la ruta que incluir en los archivos situados en el sistema cliente. CLIENT_BASEDIR existe si BASEDIR también existe y es idéntico a BASEDIR si no existe PKG_INSTALL_ROOT. |
INST_DATADIR |
Directorio donde se encuentra en paquete que se está leyendo. Si se está leyendo el paquete de una cinta, esta variable será la ubicación de un directorio temporal donde el paquete se haya transferido al formato de directorio. En otras palabras: si se supone que no hay una extensión para el nombre del paquete (por ejemplo, SUNWstuff.d), la secuencia de comandos request del paquete actual se encontraría en $INST_DATADIR/$PKG/install. |
PATH |
Lista de búsqueda utilizada por sh para buscar comandos en la invocación de la secuencia de comandos. PATH se establece normalmente en /sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin. |
PKGINST |
Identificador de instancias del paquete que se está instalando. Si no hay instalada otra instancia del paquete, el valor será la abreviatura del paquete (por ejemplo, SUNWcadap). De lo contrario, el valor es la abreviatura del paquete seguida de un sufijo, como SUNWcadap.4. |
PKGSAV |
Directorio donde se pueden guardar los archivos para que los utilicen las secuencias de comandos de eliminación o donde se pueden encontrar archivos guardados anteriormente. Disponible solamente en Solaris 2.5 y versiones compatibles. |
PKG_CLIENT_OS |
Sistema operativo del cliente donde se está instalando el paquete. El valor de esta variable Solaris. |
PKG_CLIENT_VERSION |
Versión de Solaris con formato x.y. |
PKG_CLIENT_REVISION |
Revisión de la generación de Solaris. |
PKG_INSTALL_ROOT |
El sistema de archivos raíz del sistema de destino donde el paquete se está instalando. Esta variable sólo existe si los comandos pkgadd y pkgrm se han invocado con la opción -R. Esta existencia condicional facilita su uso en las secuencias de comandos de procedimientos con el formato ${PKG_INSTALL_ROOT}/alguna_ruta. |
PKG_NO_UNIFIED |
Variable de entorno que se establece si los comandos pkgadd y pkgrm se invocaron con las opciones -M y -R. Esta variable de entorno pasa a algún comando de paquetes o secuencia de comandos de instalación de paquetes que sea parte del entorno de paquetes. |
UPDATE |
Esta variable de entorno no existe en la mayoría de los entornos de instalación. Si esta variable existe (con el valor yes), puede tener dos significados: o bien ya se ha instalado en el sistema un paquete con el mismo nombre, versión y arquitectura, o bien este paquete sobrescribe uno ya instalado con el mismo nombre en la dirección del administrador. En estos casos, siempre se usa el directorio base original. |
Se pueden usar dos comandos de secuencias de comandos para solicitar información sobre un paquete:
El comando pkginfo devuelve información sobre paquetes de software, como el identificador de instancias y el nombre del paquete.
El comando pkgparam devuelve valores para las variables de entorno solicitadas.
Consulte las páginas de comando man pkginfo(1) y pkgparam(1), así como el Capítulo 4Verificación y transferencia de un paquete, si desea más información.
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 |
---|---|
0 |
Finalización satisfactoria de la secuencia de comandos. |
1 |
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.
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).
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.
La secuencia de comandos request no puede modificar archivos. Esta secuencia de comandos sólo interactúa con administradores que instalen el paquete y crea una lista de asignaciones de variables de entorno basadas en esa interacción. La secuencia de comandos request se ejecuta como el usuario sin privilegios install si existe dicho usuario. De lo contrario, la secuencia de comandos se ejecuta como root.
El comando pkgadd llama a la secuencia de comandos request con un argumento que nombra el archivo de respuesta de la secuencia de comandos. El archivo de respuesta almacena las respuestas el administrador.
La secuencia de comandos request no se ejecuta durante la eliminación de paquetes. Sin embargo, las variables de entorno asignadas por la secuencia de comandos se guardan y están disponibles durante la eliminación de paquetes.
Sólo puede haber una secuencia de comandos request por paquete. La secuencia de comandos debe llevar el nombre de request.
Las asignaciones de variables de entorno se deben agregar al entorno de instalación para que las use el comando pkgadd y otras secuencias de comandos de creación de paquetes; para ello, escríbalas en el archivo de respuesta (conocido para la secuencia de comandos como $1).
Las variables de entorno del sistema y las variables de entorno de instalación estándar, excepto en el caso de los parámetros CLASSES y BASEDIR, no las puede modificar una secuencia de comandos request. Puede cambiar cualquiera de las demás variables de entorno que haya creado.
Una secuencia de comandos request sólo puede modificar el parámetro BASEDIR a partir de Solaris 2.5 y versiones compatibles.
A cada variable de entorno que la secuencia de comandos request pueda manipular se debe asignar un valor predeterminado en el archivo pkginfo.
El formato de la lista de salida debe ser PARAM=value. Por ejemplo:
CLASSES=none class1 |
El terminal del administrador debe definirse como entrada estándar a la secuencia de comandos request.
No lleve a cabo análisis especiales del sistema de destino en una secuencia de comandos request. Es arriesgado buscar en el sistema la presencia de determinados binarios o comportamientos, así como establecer las variables de entorno de acuerdo con ese análisis. No hay garantías de que la secuencia de comandos request se ejecutará realmente en el tiempo de la instalación. El administrador que instale el paquete puede proporcionar un archivo de respuesta que insertará las variables de entorno sin llamar nunca a la secuencia de comandos request. Si la secuencia de comandos request también evalúa el sistema de archivos de destino, puede que dicha evaluación no tenga lugar. Es mejor dejar el análisis del sistema de destino para que reciba un tratamiento especial a la secuencia de comandos checkinstall.
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).
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
Cree un archivo llamado request con su editor de textos preferido.
Guarde los cambios y salga del editor cuando haya acabado.
Complete una de las tareas siguientes.
Si desea crear secuencias de comandos de instalación adicionales, vaya a la tarea siguiente, Cómo reunir datos del sistema de archivos.
Si no ha creado su archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 5.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para la secuencia de comandos de instalación que acabe de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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 ! |
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.
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.
La secuencia de comandos checkinstall está disponible a partir de Solaris 2.5 y versiones compatibles.
La secuencia de comandos checkinstall no puede modificar archivos. Esta secuencia de comandos sólo analiza el estado del sistema y crea una lista de asignaciones de variables de entorno basada en esta interacción. Para reforzar esta restricción, la secuencia de comandos checkinstall se ejecuta como usuario sin privilegios install, si dicho usuario existe. De lo contrario, la secuencia de comandos se ejecuta como usuario sin privilegios nobody. La secuencia de comandos checkinstall no tiene autoridad de superusuario.
El comando pkgadd llama a la secuencia de comandos checkinstall con un argumento que nombra el archivo de respuesta de la secuencia de comandos. El archivo de respuesta de la secuencia de comandos es el archivo que guarda las respuestas del administrador.
La secuencia de comandos checkinstall no se ejecuta durante la eliminación de paquetes. Sin embargo, las variables de entorno asignadas por la secuencia de comandos se guardan y están disponibles durante la eliminación de paquetes.
Sólo puede haber una secuencia de comandos checkinstall por paquete. La secuencia de comandos debe llevar el nombre de checkinstall.
Las asignaciones de variables de entorno se deben agregar al entorno de instalación para que las use el comando pkgadd y otras secuencias de comandos de creación de paquetes; para ello, escríbalas en el archivo de respuesta (conocido para la secuencia de comandos como $1).
Las variables de entorno del sistema y las variables de entorno de instalación estándar, excepto en el caso de los parámetros CLASSES y BASEDIR, no las puede modificar una secuencia de comandos checkinstall. Puede cambiar cualquiera de las demás variables de entorno que haya creado.
A cada variable de entorno que la secuencia de comandos checkinstall pueda manipular se debe asignar un valor predeterminado en el archivo pkginfo.
El formato de la lista de salida debe ser PARAM=value. Por ejemplo:
CLASSES=none class1 |
No se permite la interacción con el administrador durante la ejecución de una secuencia de comandos checkinstall. Toda la interacción con el administrador se restringe a la secuencia de comandos request.
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
Cree un archivo llamado checkinstall con su editor de textos preferido.
Guarde los cambios y salga del editor cuando haya acabado.
Complete una de las tareas siguientes.
Si desea crear secuencias de comandos de instalación adicionales, vaya a la tarea siguiente, Cómo escribir secuencias de comandos de procedimientos.
Si no ha creado su archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 5.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para la secuencia de comandos de instalación que acabe de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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 |
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.
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.
La secuencia de comandos preinstall
se ejecuta antes de que comience la instalación de la clase. Esta secuencia de comandos no debe instalar archivos.
La secuencia de comandos postinstall
se ejecuta después de que se hayan instalado todos los volúmenes.
La secuencia de comandos preremove
se ejecuta antes de que comience la eliminación de la clase. Esta secuencia de comandos no debe suprimir archivos.
La secuencia de comandos postremove
se ejecuta después de todas las clases se hayan suprimido.
Las secuencias de comandos de procedimientos se ejecutan como uid=root y gid=other.
Cada secuencia de comandos debe poder ejecutarse más de una vez porque se ejecuta una vez para cada volumen de un paquete. Esto significa que la ejecución de una secuencia de comandos un determinado número de veces con la misma entrada produce los mismos resultados que la ejecución de la secuencia de comandos sólo una vez.
Cada secuencia de comandos de procedimiento que instale un objeto de paquete que no se encuentre en el archivo pkgmap debe usar el comando installf para avisar a la base de datos del paquete que agrega o modifica el nombre de una ruta. Cuando se completen todas las adiciones o modificaciones, este comando debe invocarse con la opción -f. Sólo las secuencias de comandos postinstall y postremove pueden instalar objetos de paquetes de este modo. Consulte la página de comando man installf(1M) y el Capítulo 5Casos prácticos de creación de paquetes, si desea obtener más información.
No se permite la interacción con el administrador durante la ejecución de una secuencia de comandos de procedimiento. Toda la interacción con el administrador se restringe a la secuencia de comandos request.
Cada secuencia de comandos de procedimientos que suprime archivos no instalados del archivo pkgmap debe usar el comando removef para avisar a la base de datos del paquete que está suprimiendo un nombre de ruta. Cuando la supresión se haya completado, este comando debe invocarse con la opción -f. Consulte la página de comando man removef(1M) y el Capítulo 5Casos prácticos de creación de paquetes, para obtener más información y ejemplos.
Los comandos installf y removef se deben usar porque las secuencias de comandos de procedimientos no se asocian automáticamente con los nombres de rutas que aparecen en el archivo pkgmap.
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
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.
Guarde los cambios y salga del editor.
Complete una de las tareas siguientes.
Si desea crear secuencias de comandos de acción de clase, vaya a la tarea siguiente, Cómo escribir secuencias de comandos de acción de clase.
Si no ha creado su archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto. Vaya al Paso 5.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para cada secuencia de comandos de instalación que acabe de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
Las secuencias de comandos de acción de clase se ejecutan como uid=root y gid=other.
Se ejecuta una secuencia de comandos para todos los archivos de la clase determinada en el volumen actual.
Los comandos pkgadd y pkgrm crean una lista de todos los objetos que aparecen en el archivo pkgmap que pertenezcan a la clase. Como resultado, una secuencia de comandos de acción de clase sólo puede actuar cuando se hayan definido nombres de rutas en el archivo pkgmap que pertenezcan a una clase determinada.
Si una secuencia de comandos de acción de clase se ejecuta por última vez (es decir, no hay más archivos que pertenezcan a esa clase), lo hace con el argumento de palabra clave ENDOFCLASS.
No se permite la interacción con el administrador durante la ejecución de una secuencia de comandos de procedimiento.
Si un paquete abarca más de un volumen, la secuencia de comandos de acción de clase se ejecuta una vez para cada volumen que contenga al menos un archivo que pertenezca a una clase. En consecuencia, cada secuencia de comandos debe poder ejecutarse más de una vez. Esto significa que la ejecución de una secuencia de comandos un determinado número de veces con la misma entrada debe producir los mismos resultados que la ejecución de la secuencia de comandos sólo una vez.
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.
Una secuencia de comandos de acción de clase nunca debe agregar, suprimir ni modificar un nombre de ruta o atributo de sistema que no aparezca en la lista generada por el comando pkgadd. Para obtener más información sobre esta lista, consulte el elemento 1 en Cómo se procesan las clases durante la instalación de los paquetes.
Cuando la secuencia de comandos vea el argumento ENDOFCLASS, coloque las acciones de posproceso como la limpieza en la secuencia de comandos.
Toda la interacción con el administrador se restringe a la secuencia de comandos request. No intente obtener información del administrador mediante una secuencia de comandos de acción de clase.
El sistema ofrece cuatro clases especiales:
Ofrece un método para usar las instrucciones sed con el fin de editar archivos tras la instalación y eliminación de paquetes.
Ofrece un método para usar las instrucciones awk con el fin de editar archivos tras la instalación y eliminación de paquetes.
Ofrece un método para construir o modificar dinámicamente un archivo mediante el uso de los comandos del shell Bourne.
Ofrece un método para conservar archivos que las instalaciones futuras de paquetes no deben sobrescribir.
Ofrece desinstalación e instalación automatizadas de los servicios SMF (Utilidad de gestión de servicios) asociados a un manifiesto. La clase manifest se debe utilizar para todos los manifiestos SMF de un paquete.
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.
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.
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).
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.
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:
Si el archivo que se va a instalar no existe ya en el directorio de destino, se instalará normalmente.
Si el archivo que se va a instalar existe en el directorio de destino, aparece un mensaje para informar de que el archivo existe, por lo que no se instala.
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 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
Convierta el directorio que contiene sus archivos de información en el directorio de trabajo actual.
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 |
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 |
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.
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.
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).
Complete una de las tareas siguientes:
Si no ha creado el archivo prototype, complete el procedimiento Cómo crear un archivo prototype mediante el comando pkgproto y vaya al Paso 7.
Si ya ha creado su archivo prototype, edítelo y agregue una entrada para cada secuencia de comandos de instalación que acabe de crear.
Construya su paquete.
Consulte Cómo construir un paquete si fuera necesario.
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.
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.
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:
El paquete procede de la entidad que lo firmó
La entidad la firmó
El paquete no se ha modificado desde que la entidad lo firmó
La entidad que lo firmó es una entidad de confianza
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.
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:
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.
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.
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.
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. |
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.
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" |
Si tiene un certificado de confianza y un certificado de usuario almacenados con el mismo alias se suprimen cuando especifica la opción -n.
El proceso de crear paquetes firmados implica tres pasos básicos:
Creación de un paquete con formato de directorio sin firmar.
Importación del certificado de firma, certificados de AC y clave privada en el almacén de claves de paquetes.
Firma del paquete del paso 1 con los certificados del paso 2.
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.
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.
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 |
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 |
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 |
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.
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.
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.
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> |
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 |
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.
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.