Ignorar Links de Navegao | |
Sair do Modo de Exibio de Impresso | |
![]() |
Guia do desenvolvedor de empacotamento de aplicativos Oracle Solaris 10 1/13 Information Library (Português (Brasil)) |
3. Melhorando a funcionalidade de um pacote (Tarefas)
4. Verificando e transferindo um pacote
5. Estudos de caso de criação de pacote
Solicitando entrada do administrador
Criando um arquivo na instalação e salvando-o durante a remoção
O script de ação de classe i.admin
Definindo compatibilidades e dependências de pacotes
Modificando um arquivo usando classes padrão e scripts de ação de classe
O script de ação de classe de instalação i.inittab
O script de ação de classe de remoção r.inittab
Modificando um arquivo usando a classe sed e um script postinstall
Modificando um arquivo usando a classe build
Modificando arquivos crontab durante a instalação
O script de ação de classe de instalação i.cron
O script de ação de classe de remoção r.cron
Instalando e removendo um driver com scripts de procedimento
Instalando um driver usando a classe sed e scripts de procedimento
O script de ação de classe sed (/etc/devlink.tab)
O script de instalação 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.
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