Este estudo de caso cria um arquivo de banco de dados no tempo de instalação e salva um cópia do banco de dados quando o pacote é removido.
Este estudo de caso demonstra as seguintes técnicas:
Uso de classes e script de ação de classe para realizar ações especiais em diferentes conjuntos de objetos
Para obter informações, consulte Escrevendo scripts de ação de classe.
Uso do arquivo space para informar o comando pkgadd que é necessário espaço extra para instalar este pacote adequadamente
Para mais informações sobre o arquivo space, consulte Reservando espaço adicional em um sistema de destino.
Uso do comando installf para instalar um arquivo não definido nos arquivos prototype e pkgmap.
Para criar um arquivo de banco de dados na instalação e salvar uma cópia na remonação neste estudo de caso, você deve realizar as tarefas seguintes:
Definir três classes.
O pacote deste estudo de caso requer que as três classes seguintes sejam definidas no parâmetro CLASSES:
A classe none padrão, que contém um conjunto de processos pertencente ao subdiretório bin.
A classe admin, que contém um arquivo executável config e um diretório contendo arquivos de dados.
A classe cfgdata, que contém um diretório.
Tornar o pacote relocável coletivamente.
Observe que no arquivo prototype nenhum dos nomes de caminho começa com um barra ou uma variável de ambiente. Isso indica que são relocáveis coletivamente.
Calcular a quantidade de espaço que o arquivo de banco de dados necessita e criar um arquivo space para ser distribuído com o pacote. Este arquivo notifica o comando pkgadd que o pacote requer espaço extra e especifica quanto.
Criar um script de ação de classe para a classe admin (i.admin).
O script de amostra inicializa um banco de dados usando os arquivos de dados pertencentes à classe admin. Para realizar esta tarefa, ele adota o seguinte procedimento:
Copia o arquivo de dados de origem ao destino apropriado
Cria um arquivo vazio chamado config.data e o atribui a uma classe de cfgdata
Executa o comando bin/config (distribuido com o pacote e já instalado) para preencher o arquivo de banco de dados config.data usando os arquivos de dados pertencentes à classe admin
Executa o comando installf -f para finalizar a instalação de config.data
Não é necessário realizar nenhuma ação especial na classe admin no tempo de remoção já que nenhum script de ação de classe de remoção é criado. Isso significa que todos os arquivos e diretórios da classe admin são removidos do sistema.
Criar um script de ação de remoção para a classe cfgdata (r.cfgdata).
O script de remoção faz uma cópia do arquivo de banco de dados antes de excluí-lo. Não é necessário realizar nenhuma ação especial nesta classe no tempo de instalação, já que nenhum script de classe de instalação é necessário.
Lembre-se de que a entrada de um script de remoção é uma lista de nomes de caminho a serem removidos. Os nomes de caminho sempre aparecem na ordem alfabética inversa. Este script de remoção copia os arquivos em um diretório chamado $PKGSAV. Quando todos os nomes de caminho tiverem sido processados, o script volta e remove todos os diretórios e arquivos associados à classe cfgdata.
O resultado deste script de remoção é copiar config.data em $PKGSAV e, em seguida, remover o arquivo config.data e o diretório de dados.
PKG=krazy NAME=KrAzY Applications CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1 CLASSES=none cfgdata admin |
i pkginfo i request i i.admin i r.cfgdata d none bin 555 root sys f none bin/process1 555 root other f none bin/process2 555 root other f none bin/process3 555 root other f admin bin/config 500 root sys d admin cfg 555 root sys f admin cfg/datafile1 444 root sys f admin cfg/datafile2 444 root sys f admin cfg/datafile3 444 root sys f admin cfg/datafile4 444 root sys d cfgdata data 555 root sys |
# extra space required by config data which is # dynamically loaded onto the system data 500 1 |
# PKGINST parameter provided by installation service # BASEDIR parameter provided by installation service while read src dest do cp $src $dest || exit 2 done # if this is the last time this script will be executed # during the installation, do additional processing here. if [ "$1" = ENDOFCLASS ] then # our config process will create a data file based on any changes # made by installing files in this class; make sure the data file # is in class `cfgdata' so special rules can apply to it during # package removal. installf -c cfgdata $PKGINST $BASEDIR/data/config.data f 444 root sys || exit 2 $BASEDIR/bin/config > $BASEDIR/data/config.data || exit 2 installf -f -c cfgdata $PKGINST || exit 2 fi exit 0 |
Isso ilustra uma instância rara na qual installf é apropriada em um script de ação de classe. Pelo fato do arquivo space ser usado para reservar espaço em um sistema de arquivos específico, este novo arquivo pode ser adicionado seguramente, mesmo se não estiver incluído no arquivo pkgmap.
# the product manager for this package has suggested that # the configuration data is so valuable that it should be # backed up to $PKGSAV before it is removed! while read path do # path names appear in reverse lexical order. mv $path $PKGSAV || exit 2 rm -f $path || exit 2 done exit 0 |