PKG=SUNWsst NAME=Simple SCSI Target Driver VERSION=1 CATEGORY=system ARCH=sparc VENDOR=Sun Microsystems BASEDIR=/opt CLASSES=sed |
Por ejemplo, este caso práctico usa la distribucion jerárquica de los objetos de paquete que se muestran en la figura siguiente.
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:
Inserte las entradas para los archivos de control (tipo de archivo i), ya que tienen un formato diferente de los demás objetos del paquete.
Suprima entradas de los directorios que ya existen en el sistema de destino.
Cambie el permiso de acceso y la propiedad de cada entrada.
Anteponga una barra oblicua a los objetos de paquetes absolutos.
É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.
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.
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.
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.
É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. |