Cette étude de cas modifie un fichier présent sur la machine d'installation lors de l'installation du package. 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 classes standard et de scripts d'action de classe et Modification d'un fichier à l'aide de la classe build. Le fichier modifié est /etc/inittab.
Cette étude de cas illustre les techniques suivantes :
Utilisation de la classe sed
Pour plus d'informations sur la classe sed, reportez-vous à Script de classe sed.
Utilisation d'un script postinstall
Pour plus d'informations sur ce script, reportez-vous à Rédaction de scripts de procédure.
Pour modifier /etc/inittab lors de l'installation à l'aide de la classe sed, vous devez effectuer les opérations suivantes :
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/inittab et le script sed est de ce fait nommé /etc/inittab. 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.
Comme l'illustre l'exemple de fichier, sed est la seule classe à installer. Il pourrait cependant s'agir de bien d'autres classes.
Créer un script d'action de classe sed.
Votre package ne peut pas fournir de copie de /etc/inittab à l'apparence souhaitée, car /etc/inittab est un fichier dynamique ; il est donc impossible de prévoir son apparence à l'installation du package. Toutefois, l'utilisation d'un script sed vous permet de modifier le fichier /etc/inittab lors de l'installation du package.
Créez un script postinstall.
Vous devez exécuter la commande init q pour informer le système que le fichier /etc/inittab a été modifié. Dans l'exemple, cette opération ne peut être effectuée que dans un script postinstall. En examinant l'exemple du script postinstall, vous remarquerez que son seul objectif est d'exécuter la commande initq.
Cette démarche de modification du fichier /etc/inittab lors de l'installation présente un inconvénient ; elle nécessite un script complet (le script postinstall) pour la simple exécution de la commande init q.
PKG=case4 NAME=Case Study #4 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=sed |
i pkginfo i postinstall e sed /etc/inittab ? ? ? |
!remove # remove all entries from the table that are associated # with this package, though not necessarily just # with this package instance /^[^:]*:[^:]*:[^:]*:[^#]*#ROBOT$/d !install # remove any previous entry added to the table # for this particular change /^[^:]*:[^:]*:[^:]*:[^#]*#ROBOT$/d # add the needed entry at the end of the table; # sed(1) does not properly interpret the '$a' # construct if you previously deleted the last # line, so the command # $a\ # rb:023456:wait:/usr/robot/bin/setup #ROBOT # will not work here if the file already contained # the modification. Instead, you will settle for # inserting the entry before the last line! $i\ rb:023456:wait:/usr/robot/bin/setup #ROBOT |
# make init re-read inittab /sbin/init q || exit 2 exit 0 |