Guide du développeur pour l'empaquetage d'applications

Fichiers de l'étude de cas

Fichier pkginfo

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

Fichier prototype

Par exemple, cette étude de cas utilise la structure hiérarchique des objets de package illustrée ci-après.

Figure 5–1 Structure du répertoire d'un package hiérarchique

Le contexte suivant décrit le graphique.

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 :

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.

Script d'action de classe sed (/etc/devlink.tab)

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.

Script d'installation postinstall

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é.

Script de suppression preremove

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.

Fichier copyright

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.