Omitir Vínculos de navegación | |
Salir de la Vista de impresión | |
Guía del desarrollador para la creación de paquetes de aplicaciones Oracle Solaris 10 1/13 Information Library (Español) |
3. Mejora de las funciones de un paquete (tareas)
Creación de secuencias de comandos de instalación y archivos de información (mapa de tareas)
Creación de archivos de información
Definición de dependencias de paquetes
Cómo definir las dependencias de los paquetes
Escritura de un mensaje de copyright
Cómo escribir un mensaje de copyright
Reserva del espacio adicional en un sistema de destino
Cómo reservar espacio adicional en un sistema de destino.
Creación de secuencias de comandos de instalación
Proceso de secuencias de comandos durante la instalación de paquetes
Proceso de secuencia de comandos durante la eliminación de paquetes
Variables de entorno de paquetes disponibles para las secuencias de comandos
Obtención de información del paquete para una secuencia de comandos
Códigos de salida para secuencias de comandos
Escritura de una secuencia de comandos request
Comportamientos de la secuencia de comandos request
Normativa de diseño para secuencias de comandos request
Cómo escribir una secuencia de comandos request
Reunión de datos del sistema de archivos con la secuencia de comandos checkinstall
Comportamientos de la secuencia de comandos checkinstall
Normativa de diseño para secuencias de comandos checkinstall
Cómo reunir datos del sistema de archivos
Escritura de secuencias de comandos de procedimientos
Comportamientos de secuencias de comandos de procedimientos
Normativa de diseño para secuencias de comandos de procedimientos
Cómo escribir secuencias de comandos de procedimientos
Escritura de secuencias de comandos de acción de clase
Definición de clases de objetos
Cómo se procesan las clases durante la instalación de los paquetes
Cómo se procesan las clases durante la eliminación de los paquetes
Secuencia de comandos de acción de clase
Comportamientos de las secuencias de comandos de acción de clase
Normativa de diseño para secuencias de comandos de acción de clase
Secuencia de comandos de clase sed
Secuencia de comandos de clase awk
Secuencia de comandos de clase build
Secuencia de comandos de clase preserve
Agregación de certificados de confianza al almacén de claves de paquetes
Agregación de un certificado de usuario y de una clave privada al almacén de claves de paquetes
Comprobación del contenido en el almacén de claves de paquetes
Eliminación de certificados de confianza y claves privadas del almacén de claves de paquetes
Cómo crear un paquete con formato de directorio sin firmar
Cómo importar certificados al almacén de claves de paquetes
4. Verificación y transferencia de un paquete
5. Casos prácticos de creación de paquetes
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.
Nota - 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).
Nota - 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.
|
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 4, Verificació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
|
Consulte el Capítulo 5, Casos prácticos de creación de paquetes si desea ver ejemplos de códigos de salida devueltos por las secuencias de comandos de la instalación.
Nota - Todas las secuencias de comandos de instalación distribuidas con su paquete deben contar con una entrada en el archivo prototype. El tipo de archivo debe ser i (para la secuencia de comandos de instalación del paquete).
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 noaccess 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.
Nota - 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.
Nota - Si los administradores que instalen el paquete pudieran utilizar JumpStart, 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).
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.
Consulte Cómo construir un paquete si fuera necesario.
Ejemplo 3-5 Escritura de una secuencia de comandos request
Cuando una secuencia de comandos request asigna valores a las variables de entorno, debe hacer que esos valores estén disponibles para el comando pkgadd. Este ejemplo muestra un segmento de secuencia de comandos request que ejecuta esta tarea para las cuatro variables de entorno: CLASSES, NCMPBIN, EMACS y NCMPMAN. Suponga que estas variables se definieron en una sesión interactiva con el administrador anteriormente, en la secuencia de comandos.
# make environment variables available to installation # service and any other packaging script we might have cat >$1 <<! CLASSES=$CLASSES NCMPBIN=$NCMPBIN EMACS=$EMACS NCMPMAN=$NCMPMAN !
Véase también
Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4, Verificació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 el usuario noaccess si dicho usuario existe. La secuencia de comandos checkinstall no tiene autoridad para cambiar los datos del sistema de archivos. Sin embargo, de acuerdo con la información que la secuencia de comandos reúne, puede crear o modificar variables de entorno, con el fin de controlar el curso de la instalación resultante. La secuencia de comandos también es capaz de detener correctamente el proceso de instalación.
La secuencia de comandos checkinstall tiene como finalidad ejecutar comprobaciones básicas en un sistema de archivos que no sería normal para el comando pkgadd. Por ejemplo, esta secuencia de comandos se puede usar para determinar si algunos archivos del paquete actual sobrescribirán los archivos existentes, o bien para administrar dependencias de software general. El archivo depend sólo administra dependencias de paquetes.
A diferencia de la secuencia de comandos request, checkinstall se ejecuta independientemente de si se ha proporcionado un archivo de respuesta. La presencia de la secuencia de comandos no marca el paquete como interactivo. La secuencia de comandos checkinstall se puede usar en situaciones en las que se ha prohibido una secuencia de comandos request, o bien una interacción administrativa no es práctica.
Nota - La secuencia de comandos checkinstall está disponible a partir de Solaris 2.5 y versiones compatibles.
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 el usuario sin privilegios noaccess 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.
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.
Consulte Cómo construir un paquete si fuera necesario.
Ejemplo 3-6 Escritura de una secuencia de comandos checkinstall
Esta secuencia de comandos de ejemplo checkinstall comprueba si el software de base de datos necesitado por el paquete SUNWcadap está instalado.
# checkinstall script for SUNWcadap # # This confirms the existence of the required specU database # First find which database package has been installed. pkginfo -q SUNWspcdA # try the older one if [ $? -ne 0 ]; then pkginfo -q SUNWspcdB # now the latest if [ $? -ne 0 ]; then # oops echo "No database package can be found. Please install the" echo "SpecU database package and try this installation again." exit 3 # Suspend else DBBASE="`pkgparam SUNWsbcdB BASEDIR`/db" # new DB software fi else DBBASE="`pkgparam SUNWspcdA BASEDIR`/db" # old DB software fi # Now look for the database file we will need for this installation if [ $DBBASE/specUlatte ]; then exit 0 # all OK else echo "No database file can be found. Please create the database" echo "using your installed specU software and try this" echo "installation again." exit 3 # Suspend fi
Véase también
Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4, Verificació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 5, Casos 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 5, Casos prácticos de creación de paquetes, para obtener más información y ejemplos.
Nota - 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.
Una secuencia de comandos de procedimientos debe tener uno de los nombres predefinidos: preinstall, postinstall, preremove o postremove.
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.
Consulte Cómo construir un paquete si fuera necesario.
Véase también
Después de construir el paquete, instálelo para confirmar que se instala correctamente y compruebe su integridad. En el Capítulo 4, Verificació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).
Nota - Los objetos definidos en el archivo pkgmap que pertenecen a una clase que no aparece en este parámetro del archivo pkginfo no se instalarán.
La lista CLASSES determina el orden de instalación. La clase none siempre se instala en primer lugar, en el caso de que exista, y se suprime en último lugar. Puesto que los directorios son la estructura de apoyo fundamental para los demás objetos del sistema de archivos, deben asignarse todos a la clase none. Se pueden hacer excepciones, pero como norma general, la clase none es la más segura. Esta estrategia asegura que los directorios se crean antes de los objetos que incluirán. Asimismo, no se efectúa ningún intento de suprimir un directorio antes de que se haya vaciado.
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.
Nota - Incluso si no existen archivos regulares de esta clase en el paquete, se llama a la secuencia de comandos de acción de clase al menos una vez con una lista vacía y el argumento ENDOFCLASS.
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.
Nota - Los archivos del tipo e (modificable) no se asignan a una clase ni a una secuencia de comandos de acción de clase asociada. Estos archivos se suprimen en este momento, incluso si el nombre de ruta se comparte con otros paquetes.
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 5, Casos 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:
|
Por ejemplo, el nombre de la secuencia de comandos de instalación de una clase llamada manpage sería i.manpage. La secuencia de comandos de eliminación se llamaría r.manpage.
Nota - Este formato de nombre de archivos no se utiliza con los archivos que pertenecen a las clases de sistema sed, awk o build. Para obtener más información sobre estas clases especiales, consulte Clases de sistema especiales.
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:
Proporciona un método para usar las instrucciones sed con el fin de editar archivos tras la instalación y eliminación de paquetes.
Proporciona un método para usar las instrucciones awk con el fin de editar archivos tras la instalación y eliminación de paquetes.
Proporciona un método para crear o modificar dinámicamente un archivo usando comandos del shell Bourne.
Ofrece un método para conservar archivos que no deben sobrescribirse en futuras instalaciones de paquetes.
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 5, Casos 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 5, Casos prácticos de creación de paquetes, si desea ver otro ejemplo mediante la clase build.
La clase preserve conserva un archivo de objeto de paquete determinando si un archivo existente debe sobrescribirse cuando se instala 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 la utilidad de gestión de servicios, consulte el Capítulo 18, Gestión de servicios (descripción general) de Administración de Oracle Solaris: administración básica para obtener información sobre cómo usar la utilidad de gestión de servicios con el fin de 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 desactivadas. 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 raíz 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 # # 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
Nota - No incluya los archivos i.manifest y r.manifest en los paquetes, dado que estas secuencias de comandos de acción de clase forman parte del sistema operativo Oracle Solaris y varían de una versión a otra. La inclusión de estos archivos hace que los paquetes sean menos portátiles entre diferentes versiones de Oracle Solaris.
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
Por ejemplo, las entradas para las clases application y manpage tendrían el aspecto siguiente:
CLASSES=manpage application none
Nota - La clase none siempre se instala en primer lugar y se suprime en último lugar, independientemente de dónde aparezca en la definición del parámetro CLASSES.
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).
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.
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 4, Verificació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.