Guia do Desenvolvedor de Empacotamento de Aplicativos

Modificando um arquivo usando a classe sed e um script postinstall

Este estudo de caso modifica um arquivo que existe na máquina de instalação durante a instalação do pacote. Usa um dos três métodos de modificação. Os outros dois métodos estão descritos em Modificando um arquivo usando classes padrão e scripts de ação de classe e Modificando um arquivo usando a classe build. O arquivo modificado é /etc/inittab.

Técnicas

Este estudo de caso demonstra as seguintes técnicas:

Abordagem

Para modificar /etc/inittab no momento da instalação usando a classe sed, você deve realizar as tarefas seguintes:

Esta abordagem de edição de /etc/inittab durante a instalação tem uma desvantagem. Você tem que distribuir um script completo (o script postinstall) simplesmente para realizar o comando init q.

Arquivos de estudo de caso

O arquivo pkginfo

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

O arquivo prototype

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

O script de ação 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

O script postinstall

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