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

Instalación de un controlador mediante las secuencias de comandos de procedimientos y la clase sed

En este caso práctico se describe cómo instalar un controlador mediante las secuencias de comandos de procedimientos y la clase sed. También es diferente del caso práctico anterior (consulte Instalación y eliminación de un controlador con secuencias de comandos de procedimientos) porque este paquete se compone de objetos absolutos y reubicables.

Técnicas

Este caso práctico muestra las técnicas siguientes:

Aproximación

Archivos de casos prácticos

El archivo pkginfo

PKG=SUNWsst
NAME=Simple SCSI Target Driver
VERSION=1
CATEGORY=system
ARCH=sparc
VENDOR=Sun Microsystems
BASEDIR=/opt
CLASSES=sed

El archivo prototype

Por ejemplo, este caso práctico usa la distribucion jerárquica de los objetos de paquete que se muestran en la figura siguiente.

Figura 5–1 Estructura jerárquica de directorios de paquetes

El contexto describe el gráfico.

Los objetos el paquete se instalan en los mismos lugares que en el directorio pkg superior. Los módulos del controlador (sst y sst.conf) se instalan en /usr/kernel/drv y el archivo de inclusión se instala en /usr/include/sys/scsi/targets. Los archivos sst, sst.conf y sst_def.h son objetos absolutos. El programa de prueba, sstest.c, y su directorio SUNWsst, son reubicables; su ubicación de instalación se configura mediante el parámetro BASEDIR.

Los demás componentes del paquete (todos los archivos de control) se encuentran en el directorio superior del paquete en la máquina de desarrollo, excepto la secuencia de comandos de clase sed. Éste recibe el nombre de devlink.tab después del archivo al que modifica, y se sitúa en etc, el directorio que contiene el archivo devlink.tab real.

En el directorio pkg, ejecute el comando pkgproto del modo siguiente:


find usr SUNWsst -print | pkgproto > prototype

La salida del comando anterior tiene este aspecto:

d none usr 0775 pms mts
d none usr/include 0775 pms mts
d none usr/include/sys 0775 pms mts
d none usr/include/sys/scsi 0775 pms mts
d none usr/include/sys/scsi/targets 0775 pms mts
f none usr/include/sys/scsi/targets/sst_def.h 0444 pms mts
d none usr/kernel 0775 pms mts
d none usr/kernel/drv 0775 pms mts
f none usr/kernel/drv/sst 0664 pms mts
f none usr/kernel/drv/sst.conf 0444 pms mts
d none SUNWsst 0775 pms mts
f none SUNWsst/sstest.c 0664 pms mts

Este archivo prototype aún no está completo. Para completar este archivo, necesita hacer las modificaciones siguientes:

Éste es el archivo prototype final:

i pkginfo
i postinstall
i preremove
i copyright
e sed /etc/devlink.tab ? ? ?
f none /usr/include/sys/scsi/targets/sst_def.h 0644 bin bin
f none /usr/kernel/drv/sst 0755 root sys
f none /usr/kernel/drv/sst.conf 0644 root sys
d none SUNWsst 0775 root sys
f none SUNWsst/sstest.c 0664 root sys

Los signos de interrogación en la entrada para la secuencia de comandos sed indican que los permisos de acceso y la propiedad del archivo existente en la maquina de instalación no se deben cambiar.

La secuencia de comandos de acción de clase sed Class Action Script (/etc/devlink.tab)

En el ejemplo de controlador, se utiliza una secuencia de comandos de clase sed con el fin de agregar una entrada para el controlador en el archivo /etc/devlink.tab. El comando devlinks utiliza este archivo para crear vínculos simbólicos de /dev en /devices. Ésta es la secuencia de comandos sed:

# sed class script to modify /etc/devlink.tab
!install
/name=sst;/d
$i\
type=ddi_pseudo;name=sst;minor=character	rsst\\A1

!remove
/name=sst;/d

El comando pkgrm no ejecuta la parte de eliminación de la secuencia de comandos. Puede que necesite agregar una línea a la secuencia de comandos preremove para ejecutar directamente sed con el fin de suprimir la entrada del archivo /etc/devlink.tab.

La secuencia de comandos de instalación postinstall

En este ejemplo, todo lo que necesita hacer la secuencia de comandos es ejecutar el comando add_drv.

# Postinstallation script for SUNWsst
# This does not apply to a client.
if [$PKG_INSTALL_ROOT = "/" -o -z $PKG_INSTALL_ROOT]; then
   SAVEBASE=$BASEDIR
   BASEDIR=””; export BASEDIR
   /usr/sbin/add_drv sst
   STATUS=$?
   BASEDIR=$SAVEBASE; export BASEDIR
   if [ $STATUS -eq 0 ]
   then
	     exit 20
   else
	     exit 2
   fi
else
   echo "This cannot be installed onto a client."
   exit 2
fi

El comando add_drv usa el parámetro BASEDIR, de forma que la secuencia de comandos debe anular la configuración de BASEDIR antes de ejecutar el comando y restaurarla después.

Una de las acciones del comando add_drv es ejecutar devlinks que usa la entrada situada en /etc/devlink.tab por la secuencia de comandos de clase sed para crear las entradas /dev para el controlador.

El código de salida de la secuencia de comandos postinstall es importante. El código de salida 20 comunica al comando pkgadd que indique al usuario que debe reiniciar el sistema (necesario después de instalar un controlador); el código de salida 2 comunica al comando pkgadd que indique al usuario que la instalación ha fallado de manera parcial.

La secuencia de comandos de eliminación preremove

En el caso de este ejemplo de controlador, suprime los vínculos en /dev y ejecuta el comando rem_drv en el controlador.

# Pre removal script for the sst driver
echo “Removing /dev entries”
/usr/bin/rm -f /dev/rsst*

echo “Deinstalling driver from the kernel”
SAVEBASE=$BASEDIR
BASEDIR=””; export BASEDIR
/usr/sbin/rem_drv sst
BASEDIR=$SAVEBASE; export BASEDIR

exit 

La secuencia de comandos suprime por sí misma las entradas de /dev; el comando rem_drv suprime las entradas /devices.

El archivo copyright

Éste es un archivo ASCII simple que contiene el texto de un aviso de copyright. El aviso se muestra al comienzo de la instalación del paquete, exactamente como aparece en el archivo.


	Copyright (c) 1999 Drivers-R-Us, Inc.
	10 Device Drive, Thebus, IO 80586

All rights reserved. This product and related documentation is
protected by copyright and distributed under licenses 
restricting its use, copying, distribution and decompilation. 
No part of this product or related documentation may be 
reproduced in any form by any means without prior written 
authorization of Drivers-R-Us and its licensors, if any.