Guia do Desenvolvedor de Empacotamento de Aplicativos

As classes de sistema especiais

O sistema fornece quatro classes especiais:

Se vários arquivos de um pacote precisarem de processamento especial que possa ser definido completamente através dos comandos sed, awk ou sh, a instalação é mais rápida usando as classes de sistema em vez de usar várias classes e os scripts de ação de classes correspondentes .

O script de classe sed

A classe sed oferece um método para modificar um objeto existente em um sistema de destino. O script de ação de classe sed é executado automaticamente na instalação se houver um arquivo que pertença à classe sed. O nome do script de ação de classe sed deve ser igual ao nome do arquivo no qual as instruções são executadas.

Um script de ação de classe sed entrega as instruções de sed no formato seguinte:

Dois comandos indicam quando as instruções devem ser executadas. As instruções de sed que vêm depois do comando !install são executadas durante a instalação do pacote. As instruções de sed que vêm depois do comando !remove são executadas durante a remoção do pacote. Não importa a ordem na qual estes comandos sejam usados no arquivo.

Para obter mais informações sobre as instruções de sed consulte a página do manual sed(1) Para obter exemplos dos scripts de ação de classe sed, consulte o Capítulo 5Estudos de caso de criação de pacote.

O script de classe awk

A classe awk oferece um método para modificar um objeto existente em um sistema de destino. As modificações são entregues como instruções awk em um script de ação de classe awk.

O script de ação de classe awk é executado automaticamente na instalação se houver um arquivo que pertença à classe awk. Tal arquivo contém instruções para o script de classe awk no seguinte formato:

Dois comandos indicam quando as instruções devem ser executadas. As instruções de awk que vêm depois do comando !install são executadas durante a instalação do pacote. As instruções que vêm após o comando !remove são executadas durante a remoção do pacote. Estes comandos podem ser usados em qualquer ordem.

O nome do script de ação de classe awk deve ser igual ao nome do arquivo no qual as instruções são executadas.

O arquivo que será modificado é usado como entrada no comando awk e a saída do script substitui o objeto original. As variáveis de ambiente talvez não sejam passadas para o comando awk com esta sintaxe.

Para obter mais informações sobre as instruções de awk consulte a página do manual awk(1).

O script de classe build

A classe build cria ou modifica um arquivo de objeto de pacote executando as instruções do shell Bourne. Estas instruções são entregues como o objeto de pacote. As instruções são executadas automaticamente na instalação se houver um arquivo que pertença á classe build.

O nome do script de ação de classe build deve ser igual ao nome do arquivo no qual as instruções são executadas. O nome também deve ser executável pelo comando sh. A saída do script se torna a nova versão do arquivo à medida que ele é construído e modificado. Se o script não produzir saída, o arquivo não é criado nem modificado. Portanto, o script pode modificar ou criar o arquivo por si mesmo.

Por exemplo, se um pacote entrega um arquivo padrão, /etc/randomtable, e se o arquivo ainda não existir no sistema de destino, a entrada do arquivo prototype pode ser a seguinte:


e build /etc/randomtable ? ? ?

O objeto de pacote, /etc/randomtable, pode ser semelhante ao seguinte:


!install
# randomtable builder
if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then
		echo "/etc/randomtable is already in place.";
	    else
		echo "# /etc/randomtable" > $PKG_INSTALL_ROOT/etc/randomtable
		echo "1121554	# first random number" >> $PKG_INSTALL_ROOT/etc/randomtable
fi
 
!remove
# randomtable deconstructor
if [ -f $PKG_INSTALL_ROOT/etc/randomtable ]; then
		# the file can be removed if it's unchanged
		if [ egrep "first random number" $PKG_INSTALL_ROOT/etc/randomtable ]; then
			rm $PKG_INSTALL_ROOT/etc/randomtable;
		fi
fi
 

Consulte o Capítulo 5Estudos de caso de criação de pacote para obter outros exemplos que usem a classe build.

O script de classe preserve

A classe preserve preserva um arquivo de objeto do pacote ao determinar se um arquivo existente deve ou não ser substituído quando o pacote é instalado. Duas situações possíveis que podem ocorrer ao usar um script de classe preserve são:

Ambos os resultados das situações são considerados satisfatórios pelo script preserve. Ocorre uma falha somente na segunda situação quando o arquivo não pode ser copiado no diretório de destino.

A partir do Solaris 7, o script i.preserve e uma cópia deste script, i.CONFIG.prsv, podem ser encontrados no diretório /usr/sadm/install/scripts com outros scripts de ação de classe.

Modifique o script para incluir o nome ou os nomes de arquivo que você gostaria de conservar.

O script de classe manifest

A classe manifest instala e desinstala automaticamente os serviços SMF (Service Management Facility) associados a um manifest SMF.. Se não estiver familiarizado com o SMF, consulte o Capítulo 17, Managing Services (Overview), no System Administration Guide: Basic Administration para obter informações sobre como usar o SMF para gerenciar os serviços.

Todos os manifests de serviço dentro dos pacotes devem ser identificados com a classe manifest. Os scripts de ação de classe que instalam e removem os manifests de serviço estão incluídos no subsistema de empacotamento. Quando pkgadd(1M) é chamado, o manifest de serviço é importado. Quando o pkgrm(1M) é chamado, as instâncias desativadas do manifest de serviço são excluídas. Os serviços no manifest que não têm instâncias restantes também são excluídos. Se a opção -R é fornecida a pkgadd(1M) ou pkgrm(1M), essas ações do manifest de serviço serão realizadas na próxima vez que os sistema for reinicializado com tal caminho de raiz alternativa.

A seguinte parte de código do arquivo de informações de um pacote mostra o uso da classe manifest.

# packaging files
i pkginfo
i copyright
i depend
i preinstall
i postinstall
i i.manifest
i r.manifest
#
# source locations relative to the prototype file
#
d none var 0755 root sys
d none var/svc 0755 root sys
d none var/svc/manifest 0755 root sys
d none var/svc/manifest/network 0755 root sys
d none var/svc/manifest/network/rpc 0755 root sys
f manifest var/svc/manifest/network/rpc/smserver.xml 0444 root sys