Antes de construir um pacote, você precisa saber que arquivos precisam ser criados e que comandos precisam ser executados. Também é necessário levar em consideração os requisitos do software de aplicativos e as necessidades dos seus clientes. Seus clientes são os administradores que instalarão seu pacote. Este capítulo trata dos arquivos, comandos e critérios que você deveria conhecer e considerar antes de construir um pacote.
A lista abaixo traz as informações encontradas neste capítulo.
Use estes mapas de tarefas para obter as instruções detalhadas de construção e verificação de pacotes.
O software de aplicativos é distribuído em unidades denominadas pacotes. Um pacote é um conjunto de arquivos e diretórios necessários para um produto de software. Um pacote é geralmente criado e construído por um desenvolvedor de aplicativos depois de terminar de desenvolver o código do aplicativo. Um produto de software precisa ser construído em um ou mais pacotes para que possa ser facilmente transferido para um meio de distribuição. Depois, o produto de software pode ser produzido em massa e instalado por administradores.
Um pacote é um conjunto de arquivos e diretórios em um formato definido. Este formato adapta-se à ABI (Application Binary Interface), que é um suplemento de System V Interface Definition.
Os componentes de um pacote se dividem em duas categorias.
Os objetos do pacote são arquivos de aplicativo que serão instalados.
Os arquivos de controle controlam como, onde e se o pacote está instalado.
Os arquivos de controle também estão divididos em duas categorias: arquivos de informação e scripts de instalação. Alguns arquivos de controle são obrigatórios. Alguns arquivos de controle são opcionais.
Para empacotar seus aplicativos, você deve primeiro criar os componentes obrigatórios e os componentes opcionais que farão parte do seu pacote. Você pode, então, construir o pacote usando o comando pkgmk.
Para construir um pacote, você deve fornecer:
Objetos de pacote (arquivos e diretórios do software de aplicativo)
Dois arquivos de informação (os arquivos pkginfo e prototype)
Arquivos de informação opcionais
Scripts de instalação opcionais
A ilustração seguinte descreve o conteúdo de um pacote.
Você deve criar os seguintes componentes antes de construir o pacote:
Objetos de pacote
Estes componentes fazem parte do aplicativo. Podem ser os seguintes itens:
Arquivos (arquivos executáveis ou arquivos de dados)
Diretórios
Pipes nomeados
Links
Dispositivos
O arquivo pkginfo
O pkginfo é um arquivo de informação do pacote necessário que define os valores de parâmetro. Os valores de parâmetro são a abreviação, o nome completo e a arquitetura do pacote. Para obter mais informações, consulte Criando um arquivo pkginfo e a página do manual pkginfo(4).
Há duas páginas do manual pkginfo(1) A primeira página do manual descreve um comando da seção 1 que exibe informações sobre os pacotes instalados. A segunda página do manual descreve um arquivo da seção 4 que descreve as características de um pacote. Ao acessar as páginas do manual, certifique-se de especificar a seção de página do manual aplicável. Por exemplo: man -s 4 pkginfo.
O arquivo prototype
O arquivo prototype é um arquivo de informação do pacote necessário que lista os componentes do pacote. Existe uma entrada para cada objeto de pacote, arquivo de informação e script de instalação. Uma entrada consiste em vários campos de informação que descrevem cada componente, incluindo o local, os atributos e o tipo de arquivo. Para obter mais informações, consulte Criando um arquivo prototype e a página do manual prototype(4).
Você pode incluir quatro arquivos de informação de pacote opcionais no seu pacote:
Define as versões anteriores do pacote compatíveis com esta versão do pacote.
Indica outros pacotes que possuem relação especial com o seu pacote.
Define os requisitos de espaço em disco do ambiente de destino, além do que é necessário pelos objetos definidos no arquivo prototype. Por exemplo, poderia ser necessário espaço adicional para os arquivos criados dinamicamente no momento da instalação.
Define o texto da mensagem de copyright exibida no momento da instalação do pacote.
Cada arquivo de informação do pacote deve ter uma entrada no arquivo prototype. Consulte Criando arquivos de informação para obter mais informações sobre a criação desses arquivos.
Os scripts de instalação não são necessários. No entanto, você pode fornecer scripts que realizem ações personalizadas durante a instalação do seu pacote. Um script de instalação tem as seguintes características:
O script está composto por comandos do shell Bourne.
As permissões do arquivo do script devem estar definidas como 0644.
O script não precisa conter o identificador do shell ( #! /bin/sh).
Os quatro tipos de script são os seguintes:
O script request
O script request solicita a entrada do administrador que estiver instalando o pacote.
O script checkinstall
O script checkinstall realiza verificação especial do sistema de arquivos.
O script checkinstall está disponível somente no SolarisTM 2.5 e em versões compatíveis.
Os scripts de procedimento definem as ações que ocorrem em determinados pontos durante a instalação e remoção do pacote. Você pode criar quatro scripts de procedimento com esses nomes predefinidos: preinstall, postinstall, preremove e postremove.
Os scripts de ação de classe definem um conjunto de ações que será realizado em um grupo de objetos.
Consulte Criando scripts de instalação para obter mais informações sobre os scripts de instalação.
Antes de construir um pacote, é preciso decidir se o produto terá um ou mais pacotes. Observe que muitos pacotes pequenos demoram mais para serem instalados que um pacote grande. Embora criar um único pacote seja uma boa idéia, às vezes nem sempre é possível. Se decidir construir mais de um pacote, é preciso determinar como segmentar o código do aplicativo. Esta seção oferece uma lista de critérios para serem usados quando se está planejando construir um pacote.
Muitos dos critérios de empacotamento apresentam equiparações entre eles. Satisfazer todos os requisitos igualmente é muitas vezes difícil. Estes critérios são apresentados em ordem de importância. No entanto, esta seqüência serve apenas como um guia flexível dependendo das circunstâncias. Embora cada critério seja importante, depende de você otimizar estes requisitos para produzir um bom conjunto de pacotes.
Para obter mais idéias de criação, consulte o Capítulo 6Técnicas avançadas para a criação de pacotes.
Todos os pacotes devem poder ser instalados remotamente. Ser remotamente instalável significa que o administrador que está instalando seu pacote pode instalá-lo em um sistema cliente, não necessariamente no sistema de arquivos raiz (/) onde o comando pkgadd está sendo executado.
Leve em consideração os vários tipos de configurações de software do sistema (por exemplo, servidor e sistema independentes) ao dispor os pacotes. Um bom design de empacotamento divide os arquivos afetados para otimizar a instalação de cada tipo de configuração. Por exemplo, o conteúdo dos sistemas de arquivos raiz (/) e /usr deve ser segmentado para que as configurações do servidor possam ser facilmente suportadas.
Os pacotes devem ser independentes e identificados claramente com um conjunto de funcionalidades. Por exemplo, um pacote que contém UFS deve conter todos os utilitários UFS e estar limitado somente a binários UFS.
Os pacotes devem estar organizados do ponto de vista do cliente dentro de unidades funcionais.
Use códigos que necessitam pagamentos de royalty devido a acordos contratuais em um pacote dedicado ou grupo de pacotes. Não disperse o código em mais pacotes do que o necessário.
Mantenha os binários dependentes de sistemas em pacotes dedicados. Por exemplo, o código do kernel deve estar em um pacote dedicado, com cada arquitetura de implementação formada por uma instância diferente de pacote. Esta regra também se aplica a binários de arquiteturas diferentes. Por exemplo, os binários de um sistema SPARC devem estar em um pacote e os binários de um sistema x86 devem estar em outro pacote.
Ao construir pacotes, elimine os arquivos duplicados sempre que possível. A duplicação desnecessária de arquivos causa dificuldades de suporte e versão. Se o seu produto tiver vários pacotes, compare repetidamente o conteúdo desses pacotes para procurar arquivos duplicados.
Itens específicos de localização devem estar em um pacote próprio. Um modelo de empacotamento ideal deve ter as localizações de um produto distribuídas como um pacote por localidade. Infelizmente, em alguns casos os limites organizacionais entram em conflito com os critérios de limites funcionais e de produto.
Os padrões internacionais também podem ser distribuídos em um pacote. Este design isola os arquivos necessários nas alterações de localizações e padroniza o formato de distribuição dos pacotes de localização.
Este documento trata dos pacotes SVR4. Para a distribuição no sistema operacional OpenSolaris, considere a possibilidade de usar os pacotes do Image Packaging System (IPS). O sistema operacional OpenSolaris oferece suporte a pacotes SVR4 e IPS. O software IPS interage com os repositórios de rede e usa o sistema de arquivos ZFS. No sistema operacional OpenSolaris, você pode publicar pacotes SVR4 em um repositório IPS com o comando pkgsend(1).
A tabela a seguir apresenta uma comparação dos comandos dos sistemas de empacotamento SVR4 e IPS. Para obter informações detalhadas sobre o IPS, consulte Getting Started With the Image Packaging System.
Tabela 1–1 Tarefas de empacotamento: IPS e SVR4
Tarefa |
Comando IPS |
Comando SVR4 |
---|---|---|
Instalar um novo pacote |
pkg install |
pkgadd -a |
Exibir informações sobre o estado de um pacote |
pkg list |
pkginfo |
Verificar a instalação correta de um pacote |
pkg verify |
pkgchk -v |
Exibir informações sobre um pacote |
pkg info |
pkginfo -l |
Listando o conteúdo de um pacote |
pkg contents |
pkgchk -l |
Desinstalando um pacote |
pkg uninstall |
pkgrm |
Esta seção descreve os comandos, arquivos e scripts que devem ser usados ao manipular pacotes. Eles são descritos nas páginas do manual e detalhadamente neste livro, de acordo com as tarefas específicas que eles realizam.
A tabela seguinte mostra os comandos que ajudam a construir, verificar, instalar e obter informações de um pacote.
Tabela 1–2 Comandos de pacotes
Tarefa |
Comando/ página do manual |
Descrição |
Para obter mais informações |
---|---|---|---|
Criar pacotes |
Gera um arquivo prototype para entrada do comando pkgmk |
Exemplo — Criando um arquivo prototype com o comando pkgproto |
|
Cria um pacote instalável |
|
||
Instalar, remover e transferir pacotes |
Instala um pacote de software em um sistema | ||
Armazena as respostas de um script request |
|
||
Copia pacotes em meio de distribuição |
|
||
Remove um pacote de um sistema |
|
||
Obter informações sobre pacotes |
Verifica a integridade de um pacote de software | ||
Exibe as informações de um pacote de software |
|
||
Exibe os valores de parâmetro do pacote |
|
||
Modificar os pacotes instalados |
Incorpora um novo objeto de pacote em um pacote instalado |
Regras de criação dos scripts de procedimento e Capítulo 5Estudos de caso de criação de pacote |
|
Remove um objeto de pacote de um pacote que já está instalado |
|
A tabela seguinte mostra os arquivos de informação que ajudam a construir um pacote.
Tabela 1–3 Arquivos de informação do pacote
Arquivo |
Descrição |
Para obter mais informações |
---|---|---|
Arquivo de padrões de instalação de pacote | ||
Arquivo de compatibilidade do pacote | ||
Arquivo de informação de copyright do pacote | ||
Arquivo de dependências do pacote | ||
Arquivo das características do pacote | ||
Arquivo de descrição do conteúdo do pacote | ||
Arquivo de informações do pacote | ||
Arquivo de requisitos de espaço em disco do pacote |
A tabela seguinte descreve os scripts de instalação opcionais que você pode escrever e que afetam se e como um pacote é instalado.
Tabela 1–4 Scripts de instalação do pacote
Script |
Descrição |
Para obter mais informações |
---|---|---|
request |
Solicita informações do instalador | |
checkinstall |
Coleta dados do sistema de arquivos |
Coletando dados do sistema de arquivos com o script checkinstall |
preinstall |
Realiza qualquer requisito de instalação personalizada antes da instalação da classe | |
postinstall |
Realiza qualquer requisito de instalação personalizada depois que todos os volumes tiverem sido instalados | |
preremove |
Realiza qualquer requisito de remoção personalizada antes da remoção da classe | |
postremove |
Realiza qualquer requisito de remoção personalizada depois que todas as classes tiverem sido removidas | |
Ação de classe |
Realiza uma série de ações em um grupo de objetos específico |