Este estudo de caso modifica um arquivo existente durante a instalação do pacote usando classes padrão e scripts de ação de classe. Usa um dos três métodos de modificação. Os outros dois métodos estão descritos em Modificando um arquivo usando a classe sed e um script postinstall e Modificando um arquivo usando a classe build. O arquivo modificado é /etc/inittab .
Este estudo de caso demonstra como usar os scripts de ação de classe de instalação e de remoção. Para obter informações, consulte Escrevendo scripts de ação de classe.
Para modificar /etc/inittab durante a instalação usando classes e scripts de ação de classe, você deve realizar as tarefas seguintes:
Criar uma classe.
Crie uma classe chamada inittab . Você deve fornecer um script de ação de classe de instalação e um de remoção para esta classe. Defina a classe inittab no parâmetro CLASSES no arquivo pkginfo.
Criar um arquivo inittab.
Este arquivo contém a informação da entrada que você adicionará ao /etc/inittab . Observe que no arquivo prototype aparece que inittab é um membro da classe inittab e possui um tipo de arquivo de e para editável.
Criar um script de ação de classe de instalação (i.inittab).
Lembre-se que os scripts de ação de classe devem produzir os mesmos resultados sempre que forem executados. O script de ação de classe realiza os seguintes procedimentos:
Verifica se esta entrada tinha sido adicionada anteriormente
Se tiver sido, remove as versões anteriores da entrada
Edita o arquivo inittab e adiciona as linhas de comentário para que você saiba de onde é a entrada
Move o arquivo temporário de volta para /etc/inittab
Executa o comando init q quando recebe o indicador ENDOFCLASS
Observe que o comando init q pode ser realizado por este script de instalação. Um script postinstall de uma linha não é necessário nesta abordagem.
Criar um script de ação de classe de remoção (r.inittab).
O script de remoção é muito parecido ao script de instalação. A informação adicionada pelo script de instalação é removida e o comando init q é executado.
Este estudo de caso é mais complicado do que o estudo de caso a seguir, consulte Modificando um arquivo usando a classe sed e um script postinstall. Em vez de fornecer dois arquivos, são necessários três arquivos e o arquivo /etc/inittab integrado é, em realidade, apenas um espaço reservado contendo um fragmento da entrada que será inserida. Poderia ter sido colocado no arquivo i.inittab exceto que o comando pkgadd deve ter um arquivo para passar ao arquivo i.inittab. O procedimento de remoção também deve ser colocado em outro arquivo (r.inittab). Embora este método funcione bem, é melhor reservá-lo para os casos que envolvam instalações complicadas de vários arquivos. Consulte Modificando arquivos crontab durante a instalação.
O programa sed usado em Modificando um arquivo usando a classe sed e um script postinstall oferece suporte a várias instâncias de pacote desde que o comentário no final da entrada inittab esteja baseado em uma instância de pacote. O estudo de caso em Modificando um arquivo usando a classe build mostra uma abordagem mais dinâmica para editar /etc/inittab durante a instalação.
PKG=case5 NAME=Case Study #5 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=inittab |
i pkginfo i i.inittab i r.inittab e inittab /etc/inittab ? ? ? |
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 sed -e "s/$/#$PKGINST" $src >> /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done if [ "$1" = ENDOFCLASS ] then /sbin/init q || exit 2 fi exit 0 |
# PKGINST parameter provided by installation service while read src dest do # remove all entries from the table that # are associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest > /tmp/$$itab || exit 2 mv /tmp/$$itab $dest || exit 2 done /sbin/init q || exit 2 exit 0 |
rb:023456:wait:/usr/robot/bin/setup |