Guia do Desenvolvedor de Empacotamento de Aplicativos

Criando pacotes de arquivo de classe

Um pacote de arquivo de classe, que é um aperfeiçoamento da ABI (Application Binary Interface), é aquele no qual certos conjuntos de arquivos são combinados em arquivos simples, ou arquivos de dados, e são opcionalmente compactados ou criptografados. Os formatos de arquivo de classe aumentam a velocidade da instalação inicial em até 30% e melhoram a confiabilidade durante a instalação de pacotes e patches em sistemas de arquivos potencialmente ativos.

As seções seguintes oferecem informações sobre a estrutura do diretório, as palavras-chave e o utilitário faspac do pacote de arquivo.

Estrutura do diretório do pacote de arquivo

A entrada do pacote mostrada na ilustração abaixo representa o diretório que contém os arquivos de pacote. Este diretório deve ser o mesmo do pacote.

Figura 6–1 Estrutura do diretório do pacote

O diagrama mostra cinco subdiretórios abaixo do diretório do pacote: pkginfo, pkgmap, reloc, root e install. Também mostra seus subdiretórios.

O quadro abaixo lista as funções dos arquivos e diretórios contidos no diretório do pacote.

Item 

Descrição 

pkginfo

Arquivo que descreve o pacote como um todo incluindo as variáveis de ambiente especiais e as diretivas de instalação 

pkgmap

Arquivo que descreve cada objeto que será instalado , como um arquivo, diretório ou pipe 

reloc

Diretório opcional que contém os arquivos a serem instalados em relação ao diretório base (os objetos relocáveis) 

root

Diretório opcional que contém os arquivos a serem instalados em relação ao diretório root (os objetos-raiz)

install

Diretório opcional que contém os scripts e outros arquivos auxiliares (exceto para pkginfo e pkgmap, todos os arquivos ftype i até aqui)

O formato de arquivo de classe permite que o construtor do pacote combine arquivos dos diretórios reloc e root em arquivos de dados que podem ser compactados, criptografados ou, senão, processados de outra maneira a fim de aumentar a velocidade da instalação, diminuir o tamanho do pacote ou aumentar a segurança deste.

A ABI permite que os arquivos dentro de um pacote sejam atribuídos a uma classe. Todos os arquivos de uma classe específica podem ser instalados no disco usando um método personalizado definido por um script de ação de classe. Este método personalizado pode usar programas disponíveis no sistema de destino ou programas entregues com o pacote. A formato resultante se parece muito ao formato padrão da ABI. Como mostrado na ilustração seguinte, outro diretório é adicionado. Qualquer tipo de arquivos destinado ao arquivo de dados é simplesmente combinado em um arquivo único e colocado no diretório archive. Todos os arquivos arquivados são removidos dos diretórios reloc e root e um script de ação de classe de instalação é colocado no diretório install.

Figura 6–2 Estrutura do diretório do pacote de arquivo

O diagrama mostra a mesma estrutura do diretório do pacote da Figura 6-1 com a adição do subdiretório archive.

Palavras-chave para oferecer suporte aos pacotes de arquivo de classe

Para oferecer suporte a este novo formato de arquivo de classe, três novas interfaces em forma de palavras-chave têm especial significado no arquivo pkginfo. Estas palavras-chave são usadas para designar as classes que requerem tratamento especial. A instrução do formato de cada palavra-chave é: keyword=class1[class2 class3 ...]. Cada valor da palavra-chave está definido na tabela seguinte.

Palavra-chave 

Descrição 

PKG_SRC_NOVERIFY

Esta palavra-chave diz a pkgadd para não verificar a existência e as propriedades dos arquivos nos diretórios reloc ou root do pacote entregue se eles pertencerem à classe nomeada. É requerido por todas as classes arquivadas, porque tais arquivos não estão mais em um diretório reloc ou root. São um arquivo de formato privado do diretório archive.

PKG_DST_QKVERIFY

Os arquivos nessas classes são verificados após a instalação usando um algoritmo rápido com pouca ou nenhuma saída de texto. A verificação rápida primeiro define os atributos de cada arquivo corretamente e, então, realiza a verificação para comprovar se a operação foi bem-sucedida. Em seguida, há um teste do tamanho do arquivo e do tempo de modificação em comparação ao pkgmap. Não é realizada nenhuma verificação com checksum e a recuperação de erros é bem pior comparada com a oferecida pelo mecanismo padrão. No caso de blecaute ou de falha do disco durante a instalação, o arquivo do conteúdo pode ficar incompatível com os arquivos instalados. Esta incompatibilidade pode ser resolvida sempre com um comando pkgrm.

PKG_CAS_PASSRELATIVE

Normalmente o script de ação de classe recebe do stdin uma lista de pares de origem e destino constando quais arquivos instalar. As classes atribuídas a PKG_CAS_PASSRELATIVE não obtêm os pares de origem e destino. Em vez disso, elas recebem uma única lista, na qual a primeira entrada é a localização do pacote de origem e o restante são os caminhos de destino. Isso serve especificamente para simplificar a extração de um arquivo de dados. Da localização do pacote de origem, você pode encontrar o arquivo de dados no diretório archive. Os caminhos de destino são, então, passados para a função responsável pela extração do conteúdo do arquivo de dados. Cada caminho de destino fornecido é absoluto ou relativo do diretório base dependendo se o caminho estiver localizado originalmente em root ou reloc. Se esta opção for escolhida, pode ser difícil combinar caminhos absoluto e relativo em uma única classe.

Para cada classe arquivada é necessário um script de ação de classe. É um arquivo que contém comandos do shell Bourne que é executado por pkgadd para realmente instalar os arquivos a partir do arquivo de dados. Se o script de ação de classe for encontrado no diretório install do pacote, o pkgadd passa toda a responsabilidade da instalação para este script. O script de ação de classe é executado com permissões de raiz e pode colocar seus arquivos em quase todos os locais do sistema de destino.


Observação –

A única palavra-chave que é absolutamente necessária para implementar um pacote de arquivo de classe é PKG_SRC_NOVERIFY. As outras podem ser usadas para melhorar a velocidade da instalação ou conservar o código.


O utilitário faspac

O utilitário faspac converte um pacote de ABI padrão em um formato de arquivo de classe usado em pacotes incorporados. Este utilitário arquiva usando cpio e compacta usando compress. O pacote resultante tem um diretório adicional na parte superior do diretório denominada archive. Neste diretório todos os arquivos de dados terão o nome de classe. O diretório install conterá os scripts de ação de classe necessários para desempacotar cada arquivo de dados. Os caminhos absolutos não são arquivados.

O utilitário faspac tem o seguinte formato:


faspac [-m Archive Method] -a -s -q [-d Base Directory] /
[-x Exclude List] [List of Packages]

Cada opção do comando faspac está descrita na tabela seguinte.

Opção 

Descrição 

-m Archive Method

 

Indica um método para arquivar ou compactar. bzip2 é o utilitário de compactação padrão usado. Para passar para o método zip ou unzip use -m zip ou para cpio ou compress use - m cpio.

-a

Fixa atributos (deve ser raiz para fazê-lo). 

-s

Indica a tradução do pacote do tipo ABI padrão. Esta opção toma o cpio ou o pacote compactado e o transforma em um formato de pacote compatível com a ABI padrão. 

-q

Indica o modo silencioso. 

-d Base Directory

Indica o diretório no qual todos os pacotes presentes agirão de acordo com o requerido pela linha de comando. É mutuamente exclusivo em relação à entrada List of Packages.

-x Exclude List

Indica uma lista de pacotes separados por vírgulas, espaços ou entre aspas que serão excluídos do processo. 

List of Packages

Indica a lista de pacotes que serão processados.