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.
Este caso práctico muestra las técnicas siguientes:
Uso de la clase sed
Para obtener más información sobre la clase sed, consulte Secuencia de comandos de clase sed.
Uso de una secuencia de comandos postinstall
Para obtener más información sobre esta secuencia de comandos, consulte Escritura de secuencias de comandos de procedimientos.
Para modificar /etc/inittab en el tiempo de la instalación mediante la clase sed, debe completar las tareas siguientes:
Agregue la secuencia de comandos de clase sed al archivo prototype.
El nombre de una secuencia de comandos debe ser el mismo que el del archivo que se modificará. En este caso, el archivo que se debe modificar es /etc/inittab y por lo tanto la secuencia de comandos sed debe recibir el nombre de /etc/inittab. No hay requisitos para el modo, propietario y grupo de una secuencia de comandos sed (se representa en el ejemplo de prototype mediante signos de interrogación). El tipo de archivo de la secuencia de comandos sed debe ser e (para indicar que es modificable).
Configure el parámetro CLASSES para que incluya la clase sed.
Tal como se muestra en el archivo de ejemplo, sed es la única clase que se instala. Sin embargo, puede ser cualquier número de clases.
Crear una secuencia de comandos de acción de clase sed.
El paquete no puede entregar una copia de /etc/inittab que tenga el aspecto que necesite, ya que /etc/inittab es un archivo dinámico y no tiene forma de saber el aspecto que tendrá en el tiempo de la instalación del paquete. Sin embargo, el uso de una secuencia de comandos sed permite modificar el archivo /etc/inittab durante la instalación del paquete.
Crear una secuencia de comandos postinstall.
Debe ejecutar el comando init q para informar al sistema de que /etc/inittab se ha modificado. El único lugar en que puede ejecutar dicha acción en este ejemplo es en una secuencia de comandos postinstall. Si mira a la secuencia de comandos postinstall de ejemplo, verá que su única finalidad es ejecutar el comando init q.
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.
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 |