Este caso práctico crea un archivo de base de datos en el tiempo de la instalación y guarda una copia de la base de datos cuando el paquete se suprime.
Este caso práctico muestra las técnicas siguientes:
Uso de clases y secuencias de comandos de acción de clase para llevar a cabo acciones especiales en diferentes conjuntos de objetos
Para obtener más información, consulte Escritura de secuencias de comandos de acción de clase.
El uso del archivo space para informar al comando pkgadd que se necesita espacio extra para instalar este paquete adecuadamente
Para obtener más información sobre el archivo space, consulte Reserva del espacio adicional en un sistema de destino.
Uso del comando installf para instalar un archivo que no se ha definido en los archivos prototype y pkgmap.
Para crear un archivo de base de datos en la instalación y guardar una copia tras la eliminación de este caso práctico, debe completar las tareas siguientes:
Defina tres clases.
El paquete de este caso práctico precisa que las tres clases siguientes se definan en el parámetro CLASSES:
La clase estándar de none, que contiene un conjunto de procesos que pertenecen al subdirectorio bin.
La clase admin, que contiene un archivo ejecutable config y un directorio que contiene archivos de datos.
La clase cfgdata, que contiene un directorio.
Convierta al paquete en reubicable colectivamente.
Observe que en el archivo prototype ninguno de los nombres de ruta comienza por una barra inclinada o una variable de entorno. Esto indica que son reubicables colectivamente.
Calcule la cantidad de espacio que el archivo de base de datos necesita y cree un archivo space que entregar con el paquete. Este archivo avisa al comando pkgadd que el paquete necesita espacio extra y especifica cuánto.
Cree una secuencia de comandos de acción de clase para la clase admin (i.admin).
La secuencia de comandos de ejemplo inicializa una base de datos mediante archivos de datos que pertenecen a la clase admin. Para llevar a cabo esta tarea, hace lo siguiente:
Copia del archivo de datos de origen en el destino adecuado
Crea un archivo vacío con el nombre config.data y lo asigna a una clase de cfgdata
Ejecuta el comando bin/config (entregado con el paquete y ya instalado) para rellenar el archivo de base de datos config.data mediante los archivos de datos que pertenecen a la clase admin
Ejecuta el comando installf -f para terminar la instalación de config.data
No se precisa una acción especial para la clase admin en el tiempo de la eliminación por lo que no se crea una secuencia de comandos de acción de clase de eliminación. Esto significa que todos los archivos y directorios de la clase admin se suprimen del sistema.
Cree una secuencia de comandos de acción de clase de eliminación para la clase cfgdata (r.cfgdata).
La secuencia de comandos de eliminación hace una copia del archivo de la base de datos antes de que se suprima. No se precisa una acción especial para esta clase en el tiempo de la instalación, por lo que no se necesita una secuencia de comandos de acción de clase de instalación.
Recuerde que la entrada de información a una secuencia de comandos de eliminación es una lista de nombres de ruta que suprimir. Los nombres de ruta siempre aparecen en orden alfabético inverso. Esta secuencia de comandos de eliminación copia archivos en el directorio llamado $PKGSAV. Cuando todos los nombres de ruta se han procesado, la secuencia de comandos vuelve y suprime todos los directorios y archivos asociados a la clase cfgdata.
La salida de esta secuencia de comandos de eliminación es copiar config.data en $PKGSAV y después suprimir el archivo config.data y el directorio de datos.
PKG=krazy NAME=KrAzY Applications CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1 CLASSES=none cfgdata admin |
i pkginfo i request i i.admin i r.cfgdata d none bin 555 root sys f none bin/process1 555 root other f none bin/process2 555 root other f none bin/process3 555 root other f admin bin/config 500 root sys d admin cfg 555 root sys f admin cfg/datafile1 444 root sys f admin cfg/datafile2 444 root sys f admin cfg/datafile3 444 root sys f admin cfg/datafile4 444 root sys d cfgdata data 555 root sys |
# extra space required by config data which is # dynamically loaded onto the system data 500 1 |
# PKGINST parameter provided by installation service # BASEDIR parameter provided by installation service while read src dest do cp $src $dest || exit 2 done # if this is the last time this script will be executed # during the installation, do additional processing here. if [ "$1" = ENDOFCLASS ] then # our config process will create a data file based on any changes # made by installing files in this class; make sure the data file # is in class `cfgdata' so special rules can apply to it during # package removal. installf -c cfgdata $PKGINST $BASEDIR/data/config.data f 444 root sys || exit 2 $BASEDIR/bin/config > $BASEDIR/data/config.data || exit 2 installf -f -c cfgdata $PKGINST || exit 2 fi exit 0 |
Esto ilustra una instancia poco común en la que installf es adecuado en una secuencia de comandos de acción de clase. Debido a que se ha usado un archivo space para reservar espacio en un sistema de archivos específico, este nuevo archivo se puede agregar de forma segura aunque no se incluya en el archivo pkgmap.
# the product manager for this package has suggested that # the configuration data is so valuable that it should be # backed up to $PKGSAV before it is removed! while read path do # path names appear in reverse lexical order. mv $path $PKGSAV || exit 2 rm -f $path || exit 2 done exit 0 |