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.
Este estudo de caso demonstra as seguintes técnicas:
Uso da classe sed
Para obter mais informações sobre a classe sed, consulte O script de classe sed.
Uso de um script postinstall
Para obter mais informações sobre este script, consulte Escrevendo scripts de procedimento.
Para modificar /etc/inittab no momento da instalação usando a classe sed, você deve realizar as tarefas seguintes:
Adicionar o script de classe sed ao arquivo prototype.
O nome de um script deve ser o nome do arquivo que será editado. Neste caso, o arquivo a ser editado é /etc/inittab e o script sed também é nomeado /etc/inittab. Não há requisitos de modo, proprietário e grupo de um script sed (representado no prototype de amostra por pontos de interrogação). O tipo de arquivo do script sed deve ser e (indicando que é editável).
Definir o parâmetro CLASSES para incluir a classe sed.
Conforme mostrado no arquivo de exemplo, sed é a única classe instalada. No entanto, poderia ser uma entre várias classes.
Criar um script de ação de classe sed.
Seu pacote não pode distribuir uma cópia de /etc/inittab que tenha a aparência que você precisa, já que /etc/inittab é um arquivo dinâmico e você não tem como saber como será sua aparência no momento da instalação do pacote. No entanto, o uso do script sed permitirá modificar o arquivo /etc/inittab durante a instalação do pacote.
Criar um script postinstall.
Você precisa executar o comando init q para informar o sistema que /etc/inittab foi modificado. O único lugar no qual você pode realizar esta ação neste exemplo é em um script postinstall. Ao observar o script postinstall de exemplo, você verá que o propósito dele é executar o comando init q.
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.
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 |