El paquete de este caso práctico tiene tres tipos de objetos. El administrador puede elegir cuál de los tres tipos se debe instalar y dónde ubicar los objetos en la máquina de instalación.
Este caso práctico muestra las técnicas siguientes:
El uso de nombres de ruta paramétricos (variables en nombres de ruta de objetos) que se usan para establecer varios directorios base
Para obtener información sobre nombres de ruta paramétricos, consulte Nombres de rutas paramétricos.
Uso de una secuencia de comandos request para solicitar entrada de información del administrador
Para obtener información sobre secuencias de comandos request, consulte Escritura de una secuencia de comandos request.
Configuración de valores condicionales para un parámetro de instalación.
Para configurar la instalación selectiva en este caso práctico, debe completar las tareas siguientes:
Defina una clase para cada tipo de objeto que se pueda instalar.
En este caso práctico, los tres tipos de objetos son paquetes ejecutables, páginas de comando man y ejecutables emacs. Cada tipo tiene su propia clase: bin, man y emacs, respectivamente. Observe que en el archivo prototype todos los archivos de objetos pertenecen a una de estas tres clases.
Inicialice el parámetro CLASSES en el archivo pkginfo con el valor de nulo.
Normalmente, cuando define una clase, debe enumerar esa clase del parámetro CLASSES en el archivo pkginfo. De lo contrario, no se instalan objetos en esa clase. Para este caso práctico, el parámetro se configura inicialmente con el valor nulo, lo cual significa que no se instalarán objetos. La secuencia de comandos request cambiará el parámetro CLASSES, de acuerdo con las opciones del administrador. De este modo, el parámetro CLASSES se configura sólo en estos tipos de objetos que el administrador desea instalar.
Por lo general, es una buena idea configurar los parámetros con un valor predeterminado. Si este paquete tuviese componentes comunes a los tres tipos de objetos, podría asignarlos a la clase none, y después configurar el parámetro CLASSES igual a none.
Inserte nombres de ruta paramétricos en el archivo prototype.
La secuencia de comandos request configura estas variables de entorno con el valor que el administrador proporciona. Posteriormente, el comando pkgadd resuelve estas variables de entorno en el tiempo de la instalación y sabe dónde instalar el paquete.
Las tres variables de entorno usadas en este ejemplo se configuran con el valor predeterminado en el archivo pkginfo y sirven a los fines siguientes:
$NCMPBIN define la ubicación de los ejecutables de objetos
$NCMPMAN define la ubicación de las páginas de comando man
$EMACS define la ubicación de los ejecutables emacs
El archivo prototype de ejemplo muestra cómo definir los nombres de ruta de objeto con variables.
Cree una secuencia de comandos request para preguntar al administrador qué partes del paquete se deben instalar y dónde se deben colocar.
La secuencia de comandos request para este paquete hace al administrador dos preguntas:
¿Se debe instalar esta parte del paquete?
Si la respuesta es sí, el nombre de clase adecuado se agrega al parámetro CLASSES. Por ejemplo, si el administrador elige instalar las páginas de comando man asociadas a este paquete, la clase man se agrega al parámetro CLASSES.
Si es así, ¿dónde se debe colocar esta parte del paquete?
La variable de entorno adecuada se configura con la respuesta a esta pregunta. En el ejemplo de la página de comando man, la variable $NCMPMAN se configura con el valor de la respuesta.
Estas dos preguntas se repiten para cada uno de los tres tipos de objetos.
Al final de la secuencia de comandos request, los parámetros quedan disponibles para el entorno de instalación para el comando pkgadd y otras secuencias de comandos de creación de paquetes. Para ello, la secuencia de comandos request escribe estas definiciones en el archivo proporcionado por la utilidad de llamadas. Para este caso práctico no se proporcionan otras secuencias de comandos.
Al consultar la secuencia de comandos request para este caso práctico, tenga en cuenta que las preguntas se generan mediante las herramientas de validación de datos ckyorn y ckpath. Para obtener más información sobre estas herramientas, consulte ckyorn(1) y ckpath(1).
PKG=ncmp NAME=NCMP Utilities CATEGORY=application, tools BASEDIR=/ ARCH=SPARC VERSION=RELEASE 1.0, Issue 1.0 CLASSES="" NCMPBIN=/bin NCMPMAN=/usr/man EMACS=/usr/emacs |
i pkginfo i request x bin $NCMPBIN 0755 root other f bin $NCMPBIN/dired=/usr/ncmp/bin/dired 0755 root other f bin $NCMPBIN/less=/usr/ncmp/bin/less 0755 root other f bin $NCMPBIN/ttype=/usr/ncmp/bin/ttype 0755 root other f emacs $NCMPBIN/emacs=/usr/ncmp/bin/emacs 0755 root other x emacs $EMACS 0755 root other f emacs $EMACS/ansii=/usr/ncmp/lib/emacs/macros/ansii 0644 root other f emacs $EMACS/box=/usr/ncmp/lib/emacs/macros/box 0644 root other f emacs $EMACS/crypt=/usr/ncmp/lib/emacs/macros/crypt 0644 root other f emacs $EMACS/draw=/usr/ncmp/lib/emacs/macros/draw 0644 root other f emacs $EMACS/mail=/usr/ncmp/lib/emacs/macros/mail 0644 root other f emacs $NCMPMAN/man1/emacs.1=/usr/ncmp/man/man1/emacs.1 0644 root other d man $NCMPMAN 0755 root other d man $NCMPMAN/man1 0755 root other f man $NCMPMAN/man1/dired.1=/usr/ncmp/man/man1/dired.1 0644 root other f man $NCMPMAN/man1/ttype.1=/usr/ncmp/man/man1/ttype.1 0644 root other f man $NCMPMAN/man1/less.1=/usr/ncmp/man/man1/less.1 0644 inixmr other |
trap 'exit 3' 15 # determine if and where general executables should be placed ans=`ckyorn -d y \ -p "Should executables included in this package be installed" ` || exit $? if [ "$ans" = y ] then CLASSES="$CLASSES bin" NCMPBIN=`ckpath -d /usr/ncmp/bin -aoy \ -p "Where should executables be installed" ` || exit $? fi # determine if emacs editor should be installed, and if it should # where should the associated macros be placed ans=`ckyorn -d y \ -p "Should emacs editor included in this package be installed" ` || exit $? if [ "$ans" = y ] then CLASSES="$CLASSES emacs" EMACS=`ckpath -d /usr/ncmp/lib/emacs -aoy \ -p "Where should emacs macros be installed" ` || exit $? fi |
Tenga en cuenta que una secuencia de comandos request puede salir sin dejar archivos en el sistema de archivos. En el caso de instalaciones en versiones de Solaris anteriores a 2.5 y versiones compatibles (donde no se pueda usar una secuencia de comandos checkinstall) la secuencia de comandos request es el lugar correcto para probar el sistema de archivos del modo necesario para asegurar que la instalación será satisfactoria. Cuando la secuencia de comandos request se termina con el código 1, la instalación se cerrará correctamente.
Estos archivos de ejemplo muestran el uso de rutas paramétricas para establecer varios directorios base. Sin embargo, el método preferido implica el uso del parámetro BASEDIR que se administra y se valida mediante el comando pkgadd. Siempre que se usen varios directorios base, tenga un cuidado especial en proporcionarlos para la instalación de varias versiones y arquitecturas de la misma plataforma.