Cette étude de cas crée un fichier de base de données lors de la phase d'installation et enregistre une copie de la base de données à la suppression du package.
Cette étude de cas illustre les techniques suivantes :
Utilisation de classes et de scripts d'action de classe pour effectuer des opérations particulières sur différents groupes d'objets
Pour plus d'informations, reportez-vous à Rédaction de scripts d'action de classe.
Utilisation du fichier space pour informer la commande pkgadd que de l'espace supplémentaire est nécessaire au bon déroulement de l'installation de ce package
Pour plus d'informations sur le fichier space, reportez-vous à Réservation d'espace supplémentaire sur un système cible.
Utilisation de la commande installf pour installer un fichier non défini dans les fichiers prototype et pkgmap.
Pour créer un fichier de base de données lors de l'installation et enregistrer une copie lors de la suppression, vous devez pour cette étude de cas effectuer les opérations suivantes :
Définir trois classes.
Les trois classes suivantes doivent être définies dans le paramètre CLASSES pour le package de cette étude de cas :
La classe standard none qui contient un groupe de processus appartenant au sous-répertoire bin ;
La classe admin qui contient un fichier exécutable config et un répertoire contenant des fichiers de données ;
La classe cfgdata qui contient un répertoire.
Faire du package un package réadressable collectivement.
Remarquez dans le fichier prototype qu'aucun des noms de chemin ne commence par une barre oblique ni par une variable d'environnement. Ceci indique qu'ils sont réadressables collectivement.
Calculer la quantité d'espace requise par le fichier de la base de données et créer un fichier space à fournir avec le package. Ce fichier informe la commande pkgadd que le package nécessite de l'espace supplémentaire et indique la quantité requise.
Créer un script d'action de classe pour la classe admin (i.admin).
L'exemple de script initialise une base de données à l'aide des fichiers de données appartenant à la classe admin. Pour effectuer cette opération, il procède comme suit :
Il copie le fichier de données source à l'emplacement de destination approprié.
Il crée un fichier vide nommé config.data et l'attribue à une classe cfgdata.
Il exécute la commande bin/config, qui est fournie avec le package et est déjà installée, pour renseigner le fichier de base de données config.data à l'aide des fichiers de données appartenant à la classe admin.
Il exécute la commande installf -f pour terminer l'installation de config.data.
Aucune opération particulière n'est nécessaire vis à vis de la classe admin lors de la phase de suppression et pour cette raison, aucun script d'action de classe de suppression n'est créé. Tous les fichiers et répertoires de la classe admin sont donc supprimés du système.
Créer un script d'action de classe pour la classe cfgdata (r.cfgdata).
Le script de suppression crée une copie du fichier de la base de données avant sa suppression. Aucune opération particulière n'est nécessaire vis à vis de cette classe lors de la phase d'installation et pour cette raison, aucun script d'action de classe d'installation n'est nécessaire.
N'oubliez pas que les valeurs à indiquer dans un script de suppression correspondent à la liste des noms de chemin à supprimer. Les noms de chemin s'affichent toujours par ordre alphabétique inverse. Ce script de suppression copie les fichiers dans le répertoire nommé $PKGSAV. Une fois tous les noms de chemin traités, le script supprime tous les répertoires et fichiers associés à la classe cfgdata.
Le résultat de cette suppression est la copie de config.data dans $PKGSAV, suivie de la suppression du fichier config.data et du répertoire de données.
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 |
Cet exemple illustre une situation rare dans laquelle installf est approprié dans un script d'action de classe. Le fichier space ayant été utilisé pour réserver de l'espace sur un système de fichiers spécifique, ce nouveau fichier peut être ajouté sans problèmes bien qu'il ne soit pas inclus dans le fichier 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 |