Guía del desarrollador para la creación de paquetes de aplicaciones

Modificación de un archivo mediante la clase sed y una secuencia de comandos postinstall

Este caso práctico modifica un archivo que existe en la máquina de instalación durante la instalación del paquete. Usa uno de los tres métodos de modificación. Los otros dos métodos se describen en Modificación de un archivo mediante secuencias de comandos de acción de clase y clases estándar y Modificación de un archivo mediante la clase build. El archivo modificado es /etc/inittab.

Técnicas

Este caso práctico muestra las técnicas siguientes:

Aproximación

Para modificar /etc/inittab en el tiempo de la instalación mediante la clase sed, debe completar las tareas siguientes:

Esta aproximación a la modificación de /etc/inittab durante la instalación tiene un inconveniente: debe entregar una secuencia de comandos completa (la secuencia de comandos postinstall) simplemente para ejecutar el comando init q.

Archivos de casos prácticos

El archivo pkginfo

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

El archivo prototype

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

La secuencia de comandos de acción de clase sed Class Action Script (/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

La secuencia de comandos postinstall

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