Cette étude de cas décrit l'installation d'un pilote à l'aide de la classe sed et de scripts de procédure. Elle diffère par ailleurs de l'étude de cas précédente (reportez-vous à Installation et suppression d'un pilote à l'aide de scripts de procédure) sur le fait que ce package est composé à la fois d'objets absolus et d'objets réadressables.
Cette étude de cas illustre les techniques suivantes :
Création d'un fichier prototype contenant des objets absolus et des objets réadressables.
Pour plus d'informations sur la création d'un fichier prototype, reportez-vous à Création d'un fichier prototype.
Utilisation d'un script postinstall
Pour plus d'informations sur ce script, reportez-vous à Rédaction de scripts de procédure.
Utilisation d'un script preremove
Pour plus d'informations sur ce script, reportez-vous à Rédaction de scripts de procédure.
Utilisation d'un fichier copyright
Pour plus d'informations sur ce fichier, reportez-vous à Rédaction d'un message de copyright.
Créez un fichier prototype contenant des objets de package absolus et des objets de package réadressables.
La procédure est abordée en détail à la rubrique Fichier prototype.
Ajoutez le script de la classe sed dans le fichier prototype.
Le nom du script doit être le nom du fichier à modifier. Dans l'exemple, le fichier à modifier est /etc/devlink.tab et le script sed est de ce fait nommé /etc/devlink.tab. Les champs mode, owner et groupe d'un script sed n'ont aucune spécification (ce qui est indiqué dans l'exemple prototype par des points d'interrogation). Le type de fichier du script sed doit être e (indiquant qu'il s'agit d'un fichier modifiable).
Incluez dans le paramètre CLASSES la classe sed.
Créez un script d'action de classe sed ( /etc/devlink.tab ).
Créez un script postinstall.
Le script postinstall doit exécuter la commande add_drv pour ajouter le pilote du périphérique sur le système.
Créez un script preremove.
Le script preremove doit exécuter la commande rem_drv pour supprimer le pilote du périphérique du système avant la suppression du package.
Créez un fichier copyright.
Un fichier copyright contient le texte ASCII d'un message de copyright. Le message illustré dans l'exemple de fichier s'affiche à l'écran lors de l'installation du package.
PKG=SUNWsst NAME=Simple SCSI Target Driver VERSION=1 CATEGORY=system ARCH=sparc VENDOR=Sun Microsystems BASEDIR=/opt CLASSES=sed |
Par exemple, cette étude de cas utilise la structure hiérarchique des objets de package illustrée ci-après.
Les objets du package sont installés dans les mêmes fichiers que sur l'illustration du répertoire pkg ci-dessus. Les modules du pilote ( sst et sst.conf) sont installés dans /usr/kernel/drv et le fichier include est installé dans /usr/include/sys/scsi/targets. Les fichiers sst, sst.conf et sst_def.h sont des objets absolus. Le programme test sstest.c et son répertoire SUNWsst sont tous deux réadressables ; leur emplacement d'installation est défini par le paramètre BASEDIR.
Les autres composants du package (tous les fichiers de contrôle) doivent être placés dans le répertoire supérieur du package sur la machine de développement, à l'exception du script de la classe sed . Celui-ci est appelé devlink.tab d'après le nom du fichier qu'il modifie et doit être placé dans etc, répertoire contenant le vrai fichier devlink.tab.
À partir du répertoire pkg, exécutez la commande pkgproto comme suit :
find usr SUNWsst -print | pkgproto > prototype |
Le résultat de la commande ci-dessus est comme suit :
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 |
Le fichier prototype n'est pas encore terminé. Pour terminer le fichier, vous devez lui apporter les modifications suivantes :
Insérez les entrées pour les fichiers de contrôle (type de fichier i) car ils utilisent un format différent des autres objets de package.
Supprimez les entrées correspondant aux répertoires qui se trouvent déjà sur le système cible.
Modifiez les droits d'accès et la propriété de chaque entrée.
Préfixez le nom des objets de package absolus d'une barre oblique.
Fichier 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 |
Les points d'interrogation de l'entrée correspondant au script sed indiquent que les droits d'accès et la propriété du fichier présent sur la machine d'installation ne doivent pas être modifiés.
Dans l'exemple de pilote, un script de classe sed est utilisé pour ajouter une entrée correspondant au pilote dans le fichier /etc/devlink.tab. Ce fichier est utilisé par la commande devlinks pour créer des liens symboliques de /dev à /devices. Script 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 |
La commande pkgrm n'exécute pas la partie du script correspondant à la suppression. Il s'avère parfois nécessaire d'ajouter une ligne au script preremove afin d'exécuter sed directement pour supprimer l'entrée du fichier /etc/devlink.tab.
Dans cet exemple, il suffit au script d'exécuter la commande 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 |
La commande add_drv utilise le paramètre BASEDIR ; le script doit pour cette raison annuler la valeur définie pour BASEDIR avant d'exécuter la commande et la rétablir après l'exécution.
Une des opérations effectuées par la commande add_drv est l'exécution de devlinks qui utilise l'entrée placée dans /etc/devlink.tab par le script de classe sed pour créer les entrées /dev correspondant au pilote.
Le code de sortie du script postinstall est significatif. Le code de sortie 20 indique à la commande pkgadd de demander à l'utilisateur de réinitialiser le système (opération nécessaire après l'installation d'un pilote) et le code de sortie 2 indique à la commande pkgadd d'informer l'utilisateur que l'installation a partiellement échoué.
Dans cet exemple de pilote, il supprime les liens figurant dans /dev et exécute la commande rem_drv sur le pilote.
# 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 |
Le script supprime lui-même les entrées /dev alors que les entrées /devices sont supprimées par la commande rem_drv.
Ce fichier est un simple fichier ASCII contenant le texte d'un avis de copyright. L'avis s'affiche au début de l'installation du package tel qu'il apparaît dans le fichier.
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. |