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

Modification d'un fichier à l'aide de la classe sed et d'un script postinstall

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.

Techniques

Cette étude de cas illustre les techniques suivantes :

Démarche

Pour modifier /etc/inittab lors de l'installation à l'aide de la classe sed, vous devez effectuer les opérations suivantes :

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.

Fichiers de l'étude de cas

Fichier pkginfo

PKG=case4
NAME=Case Study #4
CATEGORY=applications
BASEDIR=/opt
ARCH=SPARC
VERSION=Version 1d05
CLASSES=sed

Fichier prototype

i pkginfo
i postinstall
e sed /etc/inittab ? ? ?

Script d'action de classe 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

Script postinstall

# make init re-read inittab
/sbin/init q ||
exit 2
exit 0