Cette étude de cas modifie un fichier existant lors de l'installation d'un package à l'aide de classes standard et de scripts d'action de classe. Elle utilise une des trois méthodes de modification disponibles. Les deux autres méthodes sont décrites dans les rubriques Modification d'un fichier à l'aide de la classe sed et d'un script postinstall et Modification d'un fichier à l'aide de la classe build. Le fichier modifié est /etc/inittab .
Cette étude de cas illustre la façon d'utiliser les scripts d'action de classe d'installation et de suppression. Pour plus d'informations, reportez-vous à Rédaction de scripts d'action de classe.
Pour modifier /etc/inittab au cours de l'installation à l'aide de classes et de scripts d'action de classe, vous devez effectuer les opérations suivantes :
Créer une classe.
Créez une classe appelée inittab . Vous devez fournir un script d'action de classe d'installation et de suppression pour cette classe. Définissez la classe inittab dans le paramètre CLASSES du fichier pkginfo.
Créer un fichier inittab.
Ce fichier contient les informations de l'entrée à ajouter dans /etc/inittab . Remarquez dans le fichier prototype que inittab appartient à la classe inittab et que son type de fichier est e (modifiable).
Créer un script d'action de classe d'installation (i.inittab).
N'oubliez pas que les scripts d'action de classe doivent produire les mêmes résultats chaque fois qu'ils sont exécutés. Le script d'action de classe effectue les procédures suivantes :
Il regarde si cette entrée a déjà été ajoutée.
Si elle a déjà été ajoutée, il supprime toutes les versions de l'entrée qu'il trouve.
Il modifie le fichier inittab et ajoute des lignes de commentaires indiquant d'où provient l'entrée.
Il replace le fichier temporaire dans /etc/inittab.
Il exécute la commande init q lorsqu'il reçoit l'indicateur ENDOFCLASS.
Notez que la commande init q peut être effectuée par ce script d'installation. Cette démarche ne requiert pas de script postinstall d'une ligne.
Créer un script d'action de classe de suppression (r.inittab).
Le script de suppression est très similaire au script d'installation. Les informations ajoutées par les scripts d'installation sont supprimées et la commande init q est exécutée.
Cette étude de cas est plus complexe que la suivante ; reportez-vous à Modification d'un fichier à l'aide de la classe sed et d'un script postinstall. Au lieu de fournir deux fichiers, trois sont nécessaires et le fichier /etc/inittab fourni n'est qu'un substituant contenant un segment de l'entrée à insérer. Ce segment aurait pu être placé dans le fichier i.inittab mais la commande pkgadd doit avoir un fichier à transmettre au fichier i.inittab. En outre, la procédure de suppression doit être placée dans un fichier distinct (r.inittab ). Bien que cette méthode fonctionne bien, il est recommandé de la réserver aux situations impliquant l'installation complexe de plusieurs fichiers. Reportez-vous à Modification de fichiers crontab au cours de l'installation.
Le programme sed utilisé dans Modification d'un fichier à l'aide de la classe sed et d'un script postinstall prend en charge plusieurs instances d'un package puisque le commentaire situé à la fin de l'entrée inittab se base sur l'instance d'un package. L'étude de cas de la rubrique Modification d'un fichier à l'aide de la classe build illustre une démarche plus rationalisée de modification du fichier /etc/inittab pendant l'installation.
PKG=case5 NAME=Case Study #5 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=inittab |
i pkginfo i i.inittab i r.inittab e inittab /etc/inittab ? ? ? |
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 sed -e "s/$/#$PKGINST" $src >> /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done if [ "$1" = ENDOFCLASS ] then /sbin/init q || exit 2 fi exit 0 |
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # are associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done /sbin/init q || exit 2 exit 0 |
rb:023456:wait:/usr/robot/bin/setup |