Este capítulo descreve o processo e as tarefas envolvidas na construção de um pacote. Algumas dessas tarefas são necessárias. Algumas dessas tarefas são opcionais. As tarefas necessárias são tratadas detalhadamente neste capítulo. Para obter mais informações sobre as tarefas opcionais, que permitem adicionar mais recursos ao pacote, consulte Capítulo 3Melhorando a funcionalidade de um pacote (Tarefas) e Capítulo 6Técnicas avançadas para a criação de pacotes.
A lista abaixo traz as informações encontradas neste capítulo.
Tabela 2–1 descreve um processo a ser seguido na construção de um pacote, especialmente se você não tiver experiência em construir pacotes. Embora não seja obrigatório realizar as primeiras quatro tarefas na ordem exata listada, a construção do pacote será mais fácil se a ordem for seguida. Depois que tiver adquirido experiência na criação de pacotes, você pode alterar a seqüência das tarefas de acordo com sua preferência.
Como um designer de pacotes com experiência, você pode automatizar o processo de construção de um pacote usando o comando make e os makefiles. Para obter mais informações, consulte a página do manual make(1S).
Tabela 2–1 Mapa de tarefas do processo de construção de um pacote
Tarefa |
Descrição |
Para instruções |
---|---|---|
1. Criar um arquivo pkginfo |
Crie o arquivo pkginfo para descrever as características do pacote. | |
2. Organizar o conteúdo do pacote |
Ordene os componentes do pacote em uma estrutura de diretórios hierárquica. | |
3. (Opcional) Criar arquivos de informação |
Defina as dependências do pacote, inclua uma mensagem de copyright e reserve espaço adicional no sistema de destino. |
Capítulo 3Melhorando a funcionalidade de um pacote (Tarefas) |
4. (Opcional) Criar scripts de instalação |
Personalize os processos de instalação e remoção do pacote. |
Capítulo 3Melhorando a funcionalidade de um pacote (Tarefas) |
5. Criar um arquivo prototype |
Descreva o objeto em seu pacote em um arquivo prototype. | |
6. Construir o pacote |
Construa um pacote usando o comando pkgmk. | |
7. Verificar e transferir o pacote |
Verifique a integridade do pacote antes de copiá-lo em um meio de distribuição. |
Você pode usar variáveis nos arquivos de informação necessários, pkginfo e prototype. Você também pode usar uma opção para o comando pkgmk, usada para construir um pacote. À medida que estes arquivos e comandos são tratados neste capítulo, mais informações sobre variáveis relacionadas ao contexto são proporcionadas. No entanto, antes de começar a construir o pacote, você deve conhecer os diferentes tipos de variáveis e como elas podem afetar a criação bem-sucedida de um pacote.
Há dois tipos de variáveis:
As variáveis de construção começam com uma letra minúscula e são avaliadas no tempo de construção, conforme o pacote está sendo construído com o comando pkgmk.
As variáveis de instalação começam com uma letra maiúscula e são avaliadas no tempo de instalação, conforme o pacote está sendo instalado com o comando pkgadd.
No arquivo pkginfo, a definição de uma variável tem a forma PARAM=value, na qual a primeira letra de PARAM é maiúscula. Estas vairáveis são avaliadas somente no momento da instalação. Se alguma dessas variáveis não puder ser avaliada, o comando pkgadd aborta com um erro.
No arquivo prototype, a definição de uma variável pode ter a forma !PARAM=value ou $variable. Tanto PARAM quanto variable podem começar com uma letra maiúscula ou minúscula. São avaliadas somente as variáveis cujos valores são conhecidos no momento da instalação. Se PARAM ou variable for uma variável de construção ou de instalação cujo valor não é conhecido no momento da construção, o comando pkgmk aborta com um erro.
É possível incluir a opção PARAM=value como uma opção do comando pkgmk. Esta opção funciona da mesma forma que no arquivo prototype, exceto que seu escopo é global e abrange todo o pacote. A definição de !PARAM=value em um arquivo prototype é local para tal arquivo e para a parte do pacote que ele define.
Se PARAM é uma variável de instalação e variable é uma variável de instalação ou de construção com um valor conhecido, o comando pkgmk insere a definição no arquivo pkginfo para que a definição esteja disponível no momento da instalação. No entanto, o comando pkgmk não avalia os PARAM que estão em quaisquer nomes de caminho especificados no arquivo prototype.
A tabela seguinte resume o local, o escopo e os formatos de especificação das variáveis.
Tabela 2–2 Resumo das variáveis de ambiente do pacote
Onde a variável está definida |
Formato de definição da variável |
Tipo de variável que está sendo definida |
Quando a variável é avaliada |
Onde a variável é avaliada |
Itens que podem substituir a variável |
---|---|---|---|---|---|
Arquivo pkginfo |
PARAM=value |
Construção |
Ignorado no tempo de construção |
N/D |
Nenhum |
Instalação |
Tempo de instalação |
No arquivo pkgmap |
owner, group, path ou destino de link |
|
|
Arquivo prototype |
!PARAM=value |
Construção |
Tempo de construção |
No arquivo prototype e nos arquivos incluídos |
mode, owner, group ou path |
Instalação |
Tempo de construção |
No arquivo prototype e nos arquivos incluídos |
Somente nos comandos !search e !command |
|
|
Linha de comando pkgmk |
PARAM=value |
Construção |
Tempo de construção |
No arquivo prototype |
mode, owner, group ou path |
Instalação |
Tempo de construção |
No arquivo prototype |
Somente no !search |
|
|
Tempo de instalação |
No arquivo pkgmap |
owner, group, path ou destino de link |
|
|
|
O arquivo pkginfo é um arquivo ASCII que descreve as características de um pacote juntamente com informações que ajudam a controlar o fluxo de instalação.
Cada entrada do arquivo pkginfo é uma linha que estabelece o valor de um parâmetro usando o formato PARAM=value. O PARAM pode ser qualquer um dos parâmetros padrão descritos na página do manual pkginfo(4). Não há uma ordem obrigatória na qual os parâmetros devem estar especificados.
Cada value pode estar entre aspas simples ou duplas (por exemplo, 'value' ou “ value”). Se value contiver caracteres considerados especiais para um ambiente shell, você deve usar aspas. Os exemplos e os estudos de caso deste livro não usam aspas. Consulte a página do manual pkginfo(4) para obter mais informações.
Você também pode criar seus próprios parâmetros de pacote atribuindo um valor a eles no arquivo pkginfo. Seus parâmetros devem começar com letra maiúscula seguida de letras maiúsculas ou minúsculas. Uma letra maiúscula indica que o parâmetro (variável) será avaliado no tempo de instalação (oposto ao tempo de construção). Para obter informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
O espaço em branco final depois do valor do parâmetro é ignorado.
Você deve definir estes cinco parâmetros em um arquivo pkginfo: PKG, NAME, ARCH, VERSION e CATEGORY. Os parâmetros PATH, PKGINST e INSTDATE são inseridos automaticamente pelo software quando o pacote é construído. Não modifique estes oito parâmetros. Para obter informações sobre os parâmetros restantes, consulte a página do manual pkginfo(4).
O mesmo pacote pode apresentar diferentes versões, ser compatível com diferentes arquiteturas, ou ambos . Cada variação de um pacote é conhecida como uma instância de pacote. Uma instância de pacote é determinada pela combinação das definições dos parâmetros PKG, ARCH e VERSION no arquivo pkginfo.
O comando pkgadd atribui um identificador de pacote para cada instância de pacote no momento da instalação. O identificador de pacote é a abreviatura do pacote com um sufixo numérico, por exemplo, SUNWadm.2. Este identificador distingue uma instância de pacote de qualquer outro pacote, incluindo as instâncias do mesmo pacote.
Uma abreviatura de pacote é um nome curto de um pacote definido pelo parâmetro PKG no arquivo pkginfo. A abreviatura de um pacote deve apresentar quatro características:
A abreviatura deve estar formada por caracteres alfanuméricos. O primeiro caractere não pode ser um número.
A abreviatura não pode ultrapassar 32 caracteres.
A abreviatura não pode ser nenhuma das abreviaturas reservadas seguintes: install, new ou all.
Os primeiros quatro caracteres devem ser exclusivos da sua empresa. Por exemplo, os pacotes construídos pela Sun MicrosystemsTM apresentam “SUNW” com os quatro primeiros caracteres na abreviatura dos pacotes.
Um exemplo de entrada de abreviatura de pacote em um arquivo pkginfo é PKG=SUNWcadap.
O parâmetro ARCH no arquivo pkginfo identifica quais arquiteturas estão associadas ao pacote. O nome da arquitetura apresenta um máximo de 16 caracteres alfanuméricos. Se um pacote estiver associado a mais de uma arquitetura, especifique as arquiteturas em uma lista separa por vírgulas.
Abaixo se encontra um exemplo de uma especificação de arquitetura de pacote em um arquivo pkginfo:
ARCH=sparc |
O parâmetro SUNW_ISA em um arquivo pkginfo identifica qual arquitetura de conjunto de instruções está associada a um pacote da Sun Microsystems. Os valores são os seguintes:
sparcv9, para um pacote que contém objetos de 64 bits
sparc, para um pacote que contém objetos de 32 bits
Por exemplo, o valor SUNW_ISA em um arquivo pkginfo para um pacote que contém objetos de 64 bit pode ser:
SUNW_ISA=sparcv9 |
Se SUNW_ISA não estiver definido, a arquitetura de conjunto de instruções padrão do pacote está definida com o valor do parâmetro ARCH.
O parâmetro VERSION no arquivo pkginfo identifica a versão do pacote. A versão tem um máximo de 256 caracteres ASCII e não pode começar com um parêntese esquerdo.
Abaixo se encontra um exemplo da versão de uma especificação em um arquivo pkginfo:
VERSION=release 1.0 |
Um nome de pacote é um nome completo do pacote, que é definido pelo parâmetro NAME no arquivo pkginfo.
É importante que os nomes de pacote sejam completos, claros e concisos porque os administradores de sistema usam geralmente os nomes de pacote para determinar se um pacote precisa ser instalado. Os nomes de pacote devem cumprir os seguintes critérios:
Determinar quando o pacote é necessário (por exemplo, para fornecer determinados comandos e funcionalidades ou determinar se o pacote é necessário para um hardware específico).
Determinar para que o pacote é usado (por exemplo, para o desenvolvimento de drivers de dispositivo).
Incluir uma descrição do mnemônico da abreviatura do pacote, usando palavras-chave que indiquem que a abreviatura é uma forma abreviada da descrição. Por exemplo, o nome do pacote da abreviatura de pacote SUNWbnuu é “Basic Networking UUCP Utilities, (Usr)”.
Nomear a partição na qual o pacote é instalado.
Usar termos coerentes com significado no setor ao qual pertence.
Aproveitar o limite de 256 caracteres.
Abaixo se encontra um exemplo de nome de pacote definido em um arquivo pkginfo:
NAME=Chip designers need CAD application software to design abc chips. Runs only on xyz hardware and is installed in the usr partition. |
O parâmetro CATEGORY no arquivo pkginfo especifica a que categorias pertence um pacote. Um pacote deve pertencer, como mínimo, à categoria system ou application. Os nomes da categoria estão formados por caracteres alfanuméricos. Os nomes da categoria têm um máximo de 16 caracteres e fazem distinção entre maiúsculas e minúsculas.
Se um pacote pertencer a mais de uma categoria, especifique as categorias em uma lista separada por vírgula.
Abaixo se encontra um exemplo da especificação CATEGORY em um arquivo pkginfo:
CATEGORY=system |
No seu editor de texto preferido, crie um arquivo nomeado pkginfo.
Você pode criar este arquivo em qualquer local do seu sistema.
Edite o arquivo e defina os cinco parâmetros necessários.
Os cinco parâmetros necessários são: PKG, NAME, ARCH, VERSION e CATEGORY. Para obter mais informações sobre esses parâmetros, consulte Criando um arquivo pkginfo.
Adicione quaisquer parâmetros opcionais ao arquivo.
Crie seus próprios parâmetros ou consulte a página do manual pkginfo(4) para obter informações sobre os parâmetros padrão.
Salve as alterações e saia do editor.
Este exemplo mostra o conteúdo de um arquivo pkginfo válido, com os cinco parâmetros necessários, bem como o parâmetro BASEDIR. O parâmetro BASEDIR é tratado mais detalhadamente em O campo path.
PKG=SUNWcadap NAME=Chip designers need CAD application software to design abc chips. Runs only on xyz hardware and is installed in the usr partition. ARCH=sparc VERSION=release 1.0 CATEGORY=system BASEDIR=/opt |
Consulte Como organizar o conteúdo de um pacote.
Organize os objetos do seu pacote em uma estrutura de diretório hierárquica que imita a estrutura que os objetos do pacote terão no sistema de destino após a instalação. Se realizar esta etapa antes de criar um arquivo prototype, você pode economizar tempo e energia ao criar tal arquivo.
Determine quantos pacotes você precisa criar e quais objetos de pacote devem ser colocados em cada pacote.
Para obter ajuda para realizar esta etapa, consulte Considerações antes de construir um pacote.
Crie um diretório para cada pacote que você precisa construir.
Você pode criar este diretório em qualquer local do sistema e nomeá-lo como quiser. Os exemplos deste capítulo pressupõem que o diretório de um pacote tem o mesmo nome da abreviatura do pacote.
$ cd /home/jane $ mkdir SUNWcadap |
Organize os objetos de cada pacote em uma estrutura de diretório abaixo do diretório do pacote correspondente. A estrutura de diretório deve imitar a estrutura que os objetos de pacote terão no sistema de destino.
Por exemplo, o pacote de aplicativo CAD, SUNWcadap, precisa da estrutura de diretório seguinte.
Decida onde os arquivos de informação serão mantidos. Se apropriado, crie um diretório para manter os arquivos em um local.
Este exemplo pressupõe que o arquivo pkginfo de Como criar um arquivo pkginfo foi criado no diretório de início da Jane.
$ cd /home/jane $ mkdir InfoFiles $ mv pkginfo InfoFiles |
Consulte Como criar um arquivo prototype usando o comando pkgproto.
O arquivo prototype é um arquivo ASCII usado para especificar informações sobre os objetos de um pacote. Cada entrada do arquivo prototype descreve um único objeto, tal como um arquivo de dados, diretório, arquivo de código-fonte ou objeto executável. As entradas de um arquivo prototype estão formadas por vários campos de informações separados por espaços em branco. Observe que os campos devem ser exibidos em uma ordem específica. As linhas de comentário começam com um símbolo de jogo da velha (#) e são ignoradas.
Você pode criar um arquivo prototype com o editor de texto ou usando o comando pkgproto. Quando você criar este arquivo pela primeira vez, é mais fácil fazê-lo com o comando pkgproto, porque ele cria o arquivo baseado na hierarquia do diretório criado anteriormente. Se seus arquivos não estiverem organizados conforme descrito em Organizando o conteúdo de um pacote, você tem a desagradável tarefa de criar o arquivo prototype do início com o editor de texto da sua preferência.
Abaixo se encontra o formato de cada linha no arquivo prototype:
partftypeclasspathmajorminormodeownergroup |
part |
É um campo numérico opcional que permite agrupar os objetos de pacote em partes. O valor padrão é 1 parte. |
ftype |
É um campo de um caractere que especifica o tipo do objeto. Consulte O campo ftype. |
classe |
É a classe de instalação à qual pertence o objeto. Consulte O campo class. |
path |
É o nome de caminho absoluto ou relativo que indica onde o objeto de pacote se localizará no sistema de destino. Consulte O campo path. |
major |
É o número principal de dispositivo dos dispositivos especiais de bloco ou de caracteres. |
minor |
É o número secundário de dispositivo dos dispositivos especiais de bloco ou de caracteres. |
mode |
É o modo octal do objeto (por exemplo, 0644). Consulte O campo mode. |
owner |
É o proprietário do objeto (por exemplo, bin ou root). Consulte O campo owner. |
group |
É o grupo ao qual pertence o objeto (por exemplo, bin ou sys). Consulte O campo group. |
Em geral, somente os campos ftype, class, path, mode, owner e group são definidos. Estes campos estão descritos nas próximas seções. Consulte a página do manual prototype(4) para obter informações adicionais sobre estes campos.
O campo ftype, ou file type, é um campo de um único caractere que especifica o tipo de arquivo de um objeto de pacote. Os tipos de arquivo válidos estão descritos na tabela abaixo
Tabela 2–3 Tipos de arquivo válidos no arquivo prototype
Valor do campo de tipo de arquivo |
Descrição do tipo de arquivo |
---|---|
f |
Arquivo executável ou de dados padrão |
e |
Arquivo a ser editado na instalação ou remoção (pode ser compartilhado por vários pacotes) |
v |
Arquivo volátil (cujo conteúdo se altera, tal como um arquivo log) |
d |
Diretório |
x |
Diretório exclusivo acessível somente por este pacote (pode conter informações de banco de dados e logs não registrados) |
l |
Arquivo vinculado |
p |
Pipe nomeado |
c |
Dispositivo especial de caracteres |
b |
Dispositivo especial de bloco |
i |
Arquivo de informação ou script de instalação |
s |
Link simbólico |
class nomeia a classe à qual pertence um objeto. O uso de classes é um recurso opcional de criação de pacote. Este recurso é tratado detalhadamente em Escrevendo scripts de ação de classe.
Se você não usar classes, o objeto pertence à classe none. Quando o comando pkgmk é executado para construir o pacote, ele insere o parâmetro CLASSES=none no arquivo pkginfo. Os arquivos com tipo de arquivo i devem ter um campo class em branco.
O campo path é usado para definir onde o objeto de pacote se localizará no sistema de destino. Você pode indicar o local tanto com um nome de caminho absoluto (por exemplo, /usr/bin/mail) quanto com um nome de caminho relativo (por exemplo, bin/mail). O uso de um nome de caminho absoluto significa que o local do objeto no sistema de destino é definido pelo pacote e não pode ser alterado. Os objetos de pacote com nomes de caminho relativo indicam que o objeto é relocável.
Um objeto relocável não precisa de um local de caminho absoluto no sistema de destino. Em vez disso, o local do objeto é determinado durante o processo de instalação.
Todos ou alguns objetos de pacote podem ser definidos como relocáveis. Antes de escrever os scripts de instalação ou criar o arquivo prototype, decida se os objetos de pacote terão locais fixos (tais como scripts de início em /etc) ou serão relocáveis.
Há dois tipos de objetos relocáveis, relocável coletivamente e relocável individualmente.
Os objetos relocáveis coletivamente são colocados em relação à base de instalação comum chamada diretório base. O diretório base é definido no arquivo pkginfo, usando o parâmetro BASEDIR. Por exemplo, um objeto relocável no arquivo prototype denominado tests/generic requer que o arquivo pkginfo defina o parâmetro padrão BASEDIR. Por exemplo:
BASEDIR=/opt |
Este exemplo significa que quando o objeto for instalado, ele será colocado no diretório /opt/tests/generic.
O diretório /opt é o único diretório para o qual o software que não faz parte do software Solaris base pode ser entregue.
Use objetos relocáveis coletivamente sempre que possível. Em geral, a parte principal de um pacote pode ser relocável com poucos arquivos (tais como os arquivos em /etc ou /var) especificados como absoluto. No entanto, se um pacote contém várias relocações, leve em consideração dividir o pacote em vários pacotes com valores BASEDIR diferentes nos seus arquivos pkginfo.
Os objetos relocáveis individualmente não estão limitados ao mesmo local de diretório que os objetos relocáveis coletivamente. Para definir um objeto relocável individualmente, você precisa especificar uma variável de instalação no campo path do arquivo prototype. Depois de especificar a variável de instalação, crie um script request para solicitar ao instalador o diretório base relocável, ou um script checkinstall para determinar o nome do caminho dos dados do sistema de arquivos. Para obter mais informações sobre scripts request, consulte Escrevendo um script request e sobre os scripts checkinstall, consulte Como coletar dados do sistema de arquivos.
Os objetos relocáveis indivualmente são difíceis de gerenciar. O uso de objetos relocáveis individualmente pode fazer com que os componentes de pacote fiquem muito dispersos e seja difícil isolá-los ao instalar várias versões ou arquiteturas do pacote. Use objetos relocáveis coletivamente sempre que possível.
Um nome de caminho paramétrico é um nome de caminho que inclui uma especificação de variável. Por exemplo, o filename /opt/$PKGINST/ é um nome de caminho paramétrico devido à especificação de variável $PKGINST. O valor padrão de uma especificação de variável deve ser definido no arquivo pkginfo. O valor pode, então, ser alterado por um script request ou um script checkinstall.
Uma especificação de variável em um caminho deve começar ou terminar o nome de caminho ou estar limitada por barras (/). Os nomes de caminho paramétrico apresentam a seguinte forma:
$PARAM/tests tests/$PARAM/generic /tests/$PARAM |
A especificação de variável, uma vez definida, pode fazer com que o caminho seja interpretado como absoluto ou relocável. No exemplo seguinte, o arquivo prototype contém esta entrada:
f none $DIRLOC/tests/generic |
O arquivo pkginfo contém esta entrada:
DIRLOC=/myopt |
O nome de caminho $DIRLOC/tests/generic é interpretado como o nome de caminho absoluto /myopt/tests/generic, apesar do parâmetro BASEDIR estar definido no arquivo pkginfo.
Neste exemplo, o arquivo prototype é igual ao do exemplo anterior e o arquivo pkginfo contém as seguintes entradas:
DIRLOC=firstcut BASEDIR=/opt |
O nome de caminho $DIRLOC/tests/generic será interpretado como o nome de caminho relocável /opt/firstcut/tests/generic.
Para obter mais informações sobre nomes de caminho paramétrico, consulte Usando diretórios base paramétricos.
O campo path no arquivo prototype define onde o objeto será colocado no sistema de destino. Especifique o local atual dos objetos de pacote no arquivo prototype se a estrutura de diretório não imitar a estrutura pretendida no sistema de destino. Consulte Organizando o conteúdo de um pacote para obter mais informações sobre a estruturação de objetos em um pacote.
Se a sua área de desenvolvimento não tiver a mesma estrutura que deseja que o seu pacote tenha, você pode usar o formato path1=path2 no arquivo path. Neste formato, path1 é o local que o objeto deve ter no sistema de destino e path2 é o local que o objeto tem no seu sistema.
Você também pode usar o formato de nome de caminho path1=path2 com path1 como nome de objeto relocável e path2 como um nome de caminho completo de tal objeto no seu sistema.
path1 não pode conter variáveis de construção não definidas, mas pode conter variáveis de instalação não definidas. path2 não pode conter nenhuma variável não definida, embora ambas variáveis de construção e instalação possam ser usadas. Para obter informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
Os links devem usar o formato path1= path2 porque são criados pelo comando pkgadd. Como regra geral, o path2 de um link nunca deve ser absoluto, mas, pelo contrário, deve ser relativo à parte do diretório de path1.
Uma opção para o uso do formato path1=path2 é usar o comando !search. Para obter mais informações, consulte Fornecendo um caminho de pesquisa para o comando pkgmk.
O campo mode pode conter um número octal, um ponto de interrogação (?) ou uma especificação de variável. O número octal especifica o modo do objeto quando este é instalado no sistema de destino. O ? significa que o modo não será alterado conforme o objeto é instalado, implicando que um objeto com o mesmo nome já existe no sistema de destino.
A especificação de variável da forma $mode, na qual a primeira letra da variável deve estar em minúscula, significa que este campo será definido conforme o pacote é construído. Observe que esta variável deve ser definida no tempo de construção no arquivo prototype ou como uma opção do comando pkgmk. Para obter informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
Os arquivos com tipo de arquivo i (arquivo de informação), l (link de disco rígido) e s (link simbólico) devem deixar este campo em branco.
O campo owner pode conter um nome de usuário, um ponto de interrogação (?) ou uma especificação de variável. Um nome de usuário possui no máximo 14 caracteres e deve ser um nome que já exista no sistema de destino (tal como bin ou root). O ? significa que o proprietário não será alterado conforme o objeto é instalado, implicando que um objeto com o mesmo nome já existe no sistema de destino.
Uma especificação de variável pode ter a forma $Owner ou $owner, na qual a primeira letra da variável é maiúscula ou minúscula. Se a variável começar com uma letra minúscula, ela deve ser definida conforme o pacote é construído, tanto no arquivo prototype quanto como uma opção do comando pkgmk. Se a variável começar com uma letra maiúscula, a especificação de variável será inserida no arquivo pkginfo como um valor padrão e pode ser redefinida no tempo de instalação por um script request. Para obter informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
Os arquivos com tipo de arquivo i (arquivo de informação) e l b (link de disco rígido) devem deixar este campo em branco.
O campo group pode conter um nome de grupo, um ponto de interrogação (?) ou uma especificação de variável. Um nome de grupo possui no máximo 14 caracteres e deve ser um nome que já exista no sistema de destino (tal como bin ou sys). O ? significa que o grupo não será alterado conforme o objeto é instalado, implicando que um objeto com o mesmo nome já existe no sistema de destino.
Uma especificação de variável pode ter a forma $Group ou $group, na qual a primeira letra da variável é maiúscula ou minúscula. Se a variável começar com uma letra minúscula, ela deve ser definida conforme o pacote é construído, tanto no arquivo prototype quanto como uma opção do comando pkgmk. Se a variável começar com uma letra maiúscula, a especificação de variável será inserida no arquivo pkginfo como um valor padrão e pode ser redefinida no tempo de instalação por um script request. Para obter informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
Os arquivos com tipo de arquivo i (arquivo de informação) e l (link de disco rígido) devem deixar este campo em branco.
Se quiser criar um arquivo prototype desde o início, você pode fazê-lo com o editor de texto da sua preferência, adicionando uma entrada por objeto de pacote. Consulte Formato do arquivo prototype e a página do manual prototype(4) para obter mais informações sobre o formato deste arquivo. No entanto, após definir cada objeto de pacote, você pode querer incluir alguns dos recursos descritos em Adicionando funcionalidade a um arquivo prototype.
Você pode usar o comando pkgproto para construir um arquivo prototype básico, contanto que tenha organizado a esturtura de diretório do pacote conforme descrito em Organizando o conteúdo de um pacote. Por exemplo, usando a estrutura de diretório de amostra e o arquivo pkginfo descrito nas seções anteriores, os comandos para a criação do arquivo prototype são:
$ cd /home/jane $ pkgproto ./SUNWcadap > InfoFiles/prototype |
O arquivo prototype é semelhante a:
d none SUNWcadap 0755 jane staff d none SUNWcadap/demo 0755 jane staff f none SUNWcadap/demo/file1 0555 jane staff d none SUNWcadap/srcfiles 0755 jane staff f none SUNWcadap/srcfiles/file5 0555 jane staff f none SUNWcadap/srcfiles/file6 0555 jane staff d none SUNWcadap/lib 0755 jane staff f none SUNWcadap/lib/file2 0644 jane staff d none SUNWcadap/man 0755 jane staff f none SUNWcadap/man/windex 0644 jane staff d none SUNWcadap/man/man1 0755 jane staff f none SUNWcadap/man/man1/file4.1 0444 jane staff f none SUNWcadap/man/man1/file3.1 0444 jane staff |
O proprietário e o grupo real da pessoa que está construindo o pacote são registrados pelo comando pkgproto. Uma boa técnica é usar os comandos chown -R e chgrp -R, definindo o proprietário e o grupo como desejado antes executando o comando pkgproto.
Este arquivo prototype de exemplo não está completo. Consulte a seção seguinte para obter informações sobre a conclusão deste arquivo.
Embora o comando pkgproto seja útil na criação de um arquivo prototype inicial, ele não cria entradas para cada objeto de pacote que precisa ser definido. Este comando não cria entradas completas. O comando pkgproto não realiza nenhuma das seguintes ações:
Criar entradas completas para objetos com tipos de arquivo v (arquivos voláteis), e (arquivos editáveis), x (diretórios exclusivos), ou i (arquivos de informação ou scripts de instalação)
Oferecer suporte a várias classes com uma única chamada
Por último, você precisa modificar o arquivo prototype para adicionar objetos com o tipo de arquivo i. Se você armazenou os arquivos de informação e os scripts de instalação no primeiro nível do diretório do seu pacote (por exemplo, /home/jane/SUNWcadap/pkginfo), a entrada de um arquivo prototype seria semelhante a:
i pkginfo |
Se não armazenou os arquivos de informação e scripts de instalação no primeiro nível do diretório do seu pacote, então você precisa especificar o local de origem destes. Por exemplo:
i pkginfo=/home/jane/InfoFiles/pkginfo |
Ou você pode usar o comando !search para especificar o local do comando pkgmk a ser pesquisado ao construir o pacote. Consulte Fornecendo um caminho de pesquisa para o comando pkgmk para obter mais informações.
Para adicionar entradas dos objetos com tipos de arquivo v, e e x, siga o formato descrito em Formato do arquivo prototype ou consulte a página do manual prototype(4).
Não se esqueça de atribuir sempre uma classe aos arquivos com um tipo de arquivo e (editável) e tenha um script de ação de classe associado a tal classe. Do contrário, os arquivos serão removidos durante a remoção do pacote, mesmo que o nome de caminho seja compartilhado com outros pacotes.
Se usar o comando pkgproto para criar o arquivo prototype básico, você pode atribuir todos os objetos de pacote à classe none ou a uma classe específica. Conforme mostrado no Exemplo — Criando um arquivo prototype com o comando pkgproto, o comando pkgproto básico atribui todos os objetos à classe none. Para atribuir todos os objetos a uma classe específica, você pode usar a opção -c. Por exemplo:
$ pkgproto -c classname /home/jane/SUNWcadap > /home/jane/InfoFiles/prototype |
Se usar várias classes, você pode precisar editar manualmente o arquivo prototype e modificar o campo class de cada objeto. Se usar classes, você também precisa definir o parâmetro CLASSES no arquivo pkginfo e scripts de ação de classe. O uso de classe é um recurso opcional e é tratado detalhadamente em Escrevendo scripts de ação de classe.
Dado o arquivo prototype criado pelo comando pkgproto em Exemplo — Criando um arquivo prototype com o comando pkgproto, várias modificações precisam ser feitas.
É necessária uma entrada para o arquivo pkginfo.
Os campos path precisam ser alterados para o formato path1=path2 porque o código-fonte do pacote está em /home/jane. Visto que o código-fonte do pacote está em um diretório hierárquico e que o comando !search não realiza pesquisa recursiva, pode ser mais fácil usar o formato path1=path2.
Os campos owner e group devem conter os nomes de usuários e grupos existentes no sistema de destino. Isto é, o proprietário jane causará um erro porque este proprietário não faz parte do sistema operacional SunOSTM.
O arquivo prototype modificado se assemelha a:
i pkginfo=/home/jane/InfoFiles/pkginfo d none SUNWcadap=/home/jane/SUNWcadap 0755 root sys d none SUNWcadap/demo=/home/jane/SUNWcadap/demo 0755 root bin f none SUNWcadap/demo/file1=/home/jane/SUNWcadap/demo/file1 0555 root bin d none SUNWcadap/srcfiles=/home/jane/SUNWcadap/srcfiles 0755 root bin f none SUNWcadap/srcfiles/file5=/home/jane/SUNWcadap/srcfiles/file5 0555 root bin f none SUNWcadap/srcfiles/file6=/home/jane/SUNWcadap/srcfiles/file6 0555 root bin d none SUNWcadap/lib=/home/jane/SUNWcadap/lib 0755 root bin f none SUNWcadap/lib/file2=/home/jane/SUNWcadap/lib/file2 0644 root bin d none SUNWcadap/man=/home/jane/SUNWcadap/man 0755 bin bin f none SUNWcadap/man/windex=/home/jane/SUNWcadap/man/windex 0644 root other d none SUNWcadap/man/man1=/home/jane/SUNWcadap/man/man1 0755 bin bin f none SUNWcadap/man/man1/file4.1=/home/jane/SUNWcadap/man/man1/file4.1 0444 bin bin f none SUNWcadap/man/man1/file3.1=/home/jane/SUNWcadap/man/man1/file3.1 0444 bin bin |
Além de definir cada objeto de pacote no arquivo prototype, você também pode:
Definir objetos adicionais a serem criados no tempo de instalação.
Criar links no tempo de instalação.
Distribuir pacotes em vários volumes.
Aninhar arquivos prototype.
Definir um valor padrão para os campos mode, owner e group.
Fornecer um caminho de pesquisa para o comando pkgmk.
Definir variáveis de ambiente.
Consulte as seções seguintes para obter informações sobre a realização destas alterações.
Você pode usar o arquivo prototype para definir objetos que ainda não foram entregues ao meio de instalação. Durante a instalação, usando o comando pkgadd, estes objetos são criados com os tipos de arquivo requeridos, se ainda não existirem no momento da instalação.
Para especificar que um objeto seja criado no sistema de destino, adicione uma entrada para tal objeto no arquivo prototype com o tipo de arquivo apropriado.
Por exemplo, se você quiser que um diretório seja criado no sistema de destino, mas não quiser que seja entregue no meio de instalação, adicione a seguinte entrada para o diretório no arquivo prototype:
d none /directory 0644 root other |
Se quiser criar um arquivo vazio no sistema de destino, a entrada do arquivo no arquivo prototype pode ser semelhante a:
f none filename=/dev/null 0644 bin bin |
Os únicos objetos que devem ser entregues no meio de instalação são os arquivos regulares e scripts de edição (tipos de arquivo e, v, f), e os diretórios necessários para contê-los. Todos os objetos adicionais são criados sem referência a objetos, diretórios, pipes nomeados, dispositivos, links de disco rígido e links simbólicos entregues.
Para criar links durante a instalação do pacote, defina o seguinte na entrada do arquivo prototype do objeto vinculado:
Seu tipo de arquivo como l (um link) ou s (um link simbólico).
O nome de caminho do objeto vinculado com o formato path1=path2, no qual path1 é o arquivo de destino e path2 é o arquivo de origem. Como regra geral, o path2 de um link nunca deve ser absoluto, mas, pelo contrário, deve ser relativo à parte do diretório de path1. Por exemplo, a entrada de um arquivo prototype que define um link simbólico poderia ser semelhante a:
s none etc/mount=../usr/etc/mount |
Os links relativos seriam especificados desta forma se o pacote estivesse instalado como absoluto ou relocável.
Ao construir o pacote com o comando pkgmk, este realiza os cálculos e as ações necessárias para organizar um pacote com vários volumes. Um pacote com vários volumes é chamado de pacote segmentado.
No entanto, você pode usar o campo part opcional no arquivo prototype para definir em que parte quer que o objeto seja colocado. Um número neste comando substitui o comando pkgmk e força a colocação do componente na parte dada no campo. Observe que há correspondência individual entre as partes e os volumes da mídia removível formatada como sistemas de arquivos. Se os volumes forem pré-atribuídos pelo desenvolvedor, o comando pkgmk publica um erro se não houver espaço suficiente em nenhum volume.
Você pode criar vários arquivos prototype e, em seguida, incluí-los usando o comando !include no arquivo prototype. Você pode querer aninhar os arquivos para facilitar a manutenção.
No exemplo seguinte há três arquivos prototype. O arquivo principal (prototype) está sendo editado. Os outros dois arquivos (proto2 e proto3) estão sendo incluídos.
!include /source-dir/proto2 !include /source-dir/proto3 |
Para definir valores padrão para os campos mode, owner e group de objetos específicos, você pode inserir o comando !default no arquivo prototype. Por exemplo:
!default 0644 root other |
O intervalo do comando !default começa onde ele foi inserido e vai até o final do arquivo. O intervalo do comando não se estende sobre os arquivos incluídos.
No entanto, nos diretórios (tipo de arquivo d) e arquivos editáveis (tipo de arquivo e) que você sabe que existem no sistema de destino (como /usr ou /etc/vfstab), certifique-se de que os campos mode, owner e group no arquivo prototype estejam definidos como pontos de interrogação (?). Desta forma você não destruirá as configurações existentes que podem ter sido modificadas por um administrador.
Se o local de origem dos objetos de pacote é diferente do local de destino e não quiser usar o formato path1=path2 descrito em Os locais de origem e de destino de um objeto em poucas palavras, você pode usar o comando !search no arquivo prototype.
Por exemplo, se você tiver criado um diretório, pkgfiles , no diretório de início, e ele contiver todos os arquivos de informação e scripts de instalação, você pode especificar que este diretório seja pesquisado quando o pacote for construído com o comando pkgmk.
O comando no arquivo prototype pode ser semelhante a:
!search /home-dir/pkgfiles |
As solicitações de pesquisa não se estendem aos arquivos incluídos. Além disso, a pesquisa se limita aos diretórios específicos listados e não realiza pesquisa recursiva.
Você também pode adicionar comandos ao arquivo prototype com a forma !PARAM=value. Os comandos com esta forma definem as variáveis no ambiente atual. Se você tem vários arquivos prototype, o escopo deste comando é o local do arquivo prototype no qual ele está definido.
A variável PARAM pode começar com letra minúscula ou maiúscula. Se o valor da variável PARAM não for conhecido no tempo de construção, o comando pkgmk aborta com um erro. Para obter mais informações sobre a diferença entre as variáveis de instalação e de construção, consulte Variáveis de ambiente do pacote.
É mais fácil criar arquivos de informação e scripts de instalação antes de criar o arquivo prototype. No entanto, não é necessário seguir esta ordem. O arquivo prototype pode ser editado sempre depois que o conteúdo do pacote for alterado. Para obter mais informações sobre arquivos de informação e scripts de instalação, consulte Capítulo 3Melhorando a funcionalidade de um pacote (Tarefas).
Determine quais objetos de pacote serão absolutos e quais serão relocáveis, se ainda não tiver determinado.
Para obter mais informações que o ajudem a concluir esta etapa, consulte O campo path.
Organize os objetos do seu pacote a fim de imitar o local destes no sistema de destino.
Se já tiver organizado seus pacotes conforme descrito em Organizando o conteúdo de um pacote, observe que pode ser necessário fazer algumas alterações baseadas nas decisões tomadas na Etapa 1. Se ainda não tiver organizado seu pacote, você deve fazê-lo agora. Se você não organizar seu pacote, não será possível usar o comando pkgproto para criar o arquivo prototype básico.
Se o seu pacote tiver objetos relocáveis coletivamente, edite o arquivo pkginfo para definir o parâmetro BASEDIR com o valor apropriado.
Por exemplo:
BASEDIR=/opt |
Para obter informações sobre objetos relocáveis coletivamente, consulte Objetos relocáveis coletivamente.
Se o seu pacote tiver objetos relocáveis individualmente, crie um script request para solicitar ao instalador o nome de caminho apropriado. Outra alternativa é criar um script checkinstall para determinar o nome de caminho apropriado dos dados do sistema de arquivos.
A lista seguinte oferece os números de páginas para consulta em relação às tarefas comuns:
Para criar um script request, consulte Como escrever um script request.
Para criar um script checkinstall, consulte Como coletar dados do sistema de arquivos.
Para obter mais informações sobre objetos relocáveis individualmente, consulte Objetos relocáveis individualmente.
Altere o proprietário e o grupo em todos os componentes do seu pacote que serão o proprietário e o grupo no sistema de destino.
Use os comandos chown -R e chgrp -R no diretório do seu pacote e no diretório de arquivos de informação.
Execute o comando pkgproto para criar um arquivo prototype básico.
O comando pkgproto escaneia os diretórios para criar um arquivo básico. Por exemplo:
$ cd package-directory $ pkgproto ./package-directory > prototype |
O arquivo prototype pode ser colocado em qualquer local do sistema. Simplifica o acesso e a manutenção manter os arquivos de informação e os scripts de instalação em um único local. Para obter informações adicionais sobre o comando pkgproto, consulte a página do manual pkgproto(1).
Edite o arquivo prototype usando o editor de texto da sua preferência e adicione entradas para os arquivos de tipo v, e, x e i.
Para obter informações sobre alterações específicas que talvez precisem ser feitas, consulte Ajustando um arquivo prototype criado com o comando pkgproto.
(Opcional) Se estiver usando várias classes, edite os arquivos prototype e pkginfo. Use o editor de texto de sua preferência para fazer as alterações necessárias e crie os scripts de ação de classe correspondentes.
Para obter informações sobre alterações específicas que talvez precisem ser feitas, consulte Ajustando um arquivo prototype criado com o comando pkgproto e Escrevendo scripts de ação de classe.
Edite o arquivo prototype usando o editor de texto de sua preferência para redefinir os nomes de caminho e alterar as configurações de outro campo.
Para obter mais informações, consulte Ajustando um arquivo prototype criado com o comando pkgproto.
(Opcional) Edite o arquivo prototype usando o editor de texto de sua preferência para adicionar funcionalidade ao seu arquivo prototype.
Para obter mais informações, consulte Adicionando funcionalidade a um arquivo prototype.
Salve as alterações e saia do editor.
Se você já estiver preparado para ir para a próxima tarefa, consulte Como construir um pacote.
Use o comando pkgmk para construir seu pacote. O comando pkgmk realiza as seguintes tarefas:
Coloca todos os objetos definidos do arquivo prototype no formato de diretório.
Cria um pacote instalável que é usado como entrada do comando pkgadd.
A forma mais simples deste comando é o comando pkgmk sem opções. Antes de usar o comando pkgmk sem opções, certifique-se de que o diretório de trabalho atual contém o arquivo prototype do pacote. A saída do comando, os arquivos e os diretórios estão gravados no diretório /var/spool/pkg.
Ao construir um pacote com o comando pkgmk, ele cria um arquivo pkgmap que substitui o arquivo prototype. O arquivo pkgmap do exemplo anterior apresenta o conteúdo seguinte:
$ more pkgmap : 1 3170 1 d none SUNWcadap 0755 root sys 1 d none SUNWcadap/demo 0755 root bin 1 f none SUNWcadap/demo/file1 0555 root bin 14868 45617 837527496 1 d none SUNWcadap/lib 0755 root bin 1 f none SUNWcadap/lib/file2 0644 root bin 1551792 62372 837527499 1 d none SUNWcadap/man 0755 bin bin 1 d none SUNWcadap/man/man1 0755 bin bin 1 f none SUNWcadap/man/man1/file3.1 0444 bin bin 3700 42989 837527500 1 f none SUNWcadap/man/man1/file4.1 0444 bin bin 1338 44010 837527499 1 f none SUNWcadap/man/windex 0644 root other 157 13275 837527499 1 d none SUNWcadap/srcfiles 0755 root bin 1 f none SUNWcadap/srcfiles/file5 0555 root bin 12208 20280 837527497 1 f none SUNWcadap/srcfiles/file6 0555 root bin 12256 63236 837527497 1 i pkginfo 140 10941 837531104 $ |
O formato deste arquivo é muito semelhante ao formato do arquivo prototype. No entanto, o arquivo pkgmap inclui a seguinte informação:
A primeira linha indica o número de volumes que o pacote abrange, e o tamanho aproximado que o pacote terá quando estiver instalado.
Por exemplo, : 1 3170 indica que o pacote abrange um volume e usará aproximadamente 3170 blocos de 512 bytes quando estiver instalado.
Há três campos adicionais que definem o tamanho, a soma de verificação e tempo de modificação de cada objeto de pacote.
Os objetos de pacote estão listados em ordem alfabética por classe e por nome de caminho para diminuir o tempo de instalação do pacote.
Crie um arquivo pkginfo, se ainda não tiver criado.
Para obter instruções detalhadas, consulte Como criar um arquivo pkginfo.
Crie um arquivo prototype, se ainda não tiver criado.
Para obter instruções detalhadas, consulte Como criar um arquivo prototype usando o comando pkgproto.
Torne o diretório de trabalho atual o mesmo diretório que contém o arquivo prototype do pacote.
Construa o pacote.
$ pkgmk [-o] [-a arch] [-b base-src-dir] [-d device] [-f filename] [-l limit] [-p pstamp] [-r rootpath] [-v version] [PARAM=value] [pkginst] |
Substitui a versão existente do pacote.
Ignora as informações da arquitetura do arquivo pkginfo.
Solicita que base-src-dir seja adicionado ao início dos caminhos de nome relocáveis quando o comando pkgmk estiver procurando objetos no sistema de desenvolvimento.
Especifica que o pacote deve ser copiado em device, que pode ser um nome de caminho de diretório absoluto, um disquete ou um disco removível.
Nomeia um arquivo, filename, que é usado como seu arquivo prototype. Os nomes padrão são prototype ou Prototype.
Especifica o tamanho máximo, em blocos de 512 bytes, do dispositivo de saída.
Ignora a definição do carimbo de produção no arquivo pkginfo.
Solicita que o diretório raiz rootpath seja usado para situar os objetos no sistema de destino.
Ignora as informações da versão do arquivo pkginfo.
Define as variáveis de ambiente globais. As variáveis que começam com letra minúscula são resolvidas no tempo de construção. As variáveis que começam com letra maiúscula são colocadas no arquivo pkginfo para serem usadas no tempo de instalação.
Especifica um pacote por sua abreviatura ou uma instância específica (por exemplo, SUNWcadap.4).
Para obter mais informações, consulte a página do manual pkgmk(1).
Verifique o conteúdo do pacote.
$ pkgchk -d device-name pkg-abbrev Checking uninstalled directory format package pkg-abbrev from device-name ## Checking control scripts. ## Checking package objects. ## Checking is complete. $ |
Especifique o local do pacote. Observe que device-name pode ser o nome completo do caminho de um diretório ou os identificadores de uma fita ou um disco removível.
É o nome de um ou mais pacotes (separado por espaços) que serão verificados. Se for omitido, o comando pkgchk verifica todos os pacotes disponíveis.
O comando pkgchk imprime que aspectos do pacote estão sendo verificados e exibe avisos e erros, conforme apropriado. Para obter mais informações sobre o comando pkgchk, consulte Verificando a integridade de um pacote.
Os erros devem ser considerados muito seriamente. Um erro pode significar que um script precisa ser corrigido. Verifique todos os erros e faça alterações se discordar da saída do comando pkgchk.
Este exemplo usa o arquivo prototype criado em Ajustando um arquivo prototype criado com o comando pkgproto.
$ cd /home/jane/InfoFiles $ pkgmk ## Building pkgmap from package prototype file. ## Processing pkginfo file. WARNING: parameter set to "system990708093144" WARNING: parameter set to "none" ## Attempting to volumize 13 entries in pkgmap. part 1 -- 3170 blocks, 17 entries ## Packaging one part. /var/spool/pkg/SUNWcadap/pkgmap /var/spool/pkg/SUNWcadap/pkginfo /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6 ## Validating control scripts. ## Packaging complete. $ |
Se o seu pacote contiver arquivos relocáveis, você pode usar a opção -b base-src-dir no comando pkgmk para especificar um nome de caminho a ser adicionado ao início dos nomes de caminho relocáveis durante a criação do pacote. Esta opção é útil se você não tiver usado o formato path1=path2 em arquivos relocáveis ou não tiver sido especificado um caminho de pesquisa com o comando !search no arquivo prototype.
O comando seguinte constrói um pacote com as seguintes características:
O pacote é construído usando o arquivo prototype de amostra criado pelo comando pkgproto. Consulte Exemplo — Criando um arquivo prototype com o comando pkgproto para obter mais informações.
O pacote é construído sem que os campos path sejam modificados.
O pacote adiciona uma entrada para o arquivo pkginfo.
$ cd /home/jane/InfoFiles $ pkgmk -o -b /home/jane ## Building pkgmap from package prototype file. ## Processing pkginfo file. WARNING: parameter set to "system960716102636" WARNING: parameter set to "none" ## Attempting to volumize 13 entries in pkgmap. part 1 -- 3170 blocks, 17 entries ## Packaging one part. /var/spool/pkg/SUNWcadap/pkgmap /var/spool/pkg/SUNWcadap/pkginfo /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/demo/file1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/lib/file2 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file3.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/man1/file4.1 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/man/windex /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file5 /var/spool/pkg/SUNWcadap/reloc/SUNWcadap/srcfiles/file6 ## Validating control scripts. ## Packaging complete. |
Nesse exemplo, o pacote é construído no diretório padrão, /var/spool/pkg , especificando a opção -o. Esta opção substitui o pacote criado no Exemplo 2–2.
Se colocar os arquivos de informação (como pkginfo e prototype) e os objetos de pacote em dois diretórios diferentes, você pode criar seu pacote usando as opções -b base-src-dir e - r rootpath no comando pkgmk. Se tiver os objetos de pacote em um diretório chamado /product/pkgbin e os arquivos de informação do pacote em um diretório chamado /product/pkgsrc, você pode usar o comando seguinte para colocar o pacote no diretório /var/spool/pkg:
$ pkgmk -b /product/pkgbin -r /product/pkgsrc -f /product/pkgsrc/prototype |
Opcionalmente, você pode usar estes comandos para atingir o mesmo resultado:
$ cd /product/pkgsrc $ pkgmk -o -b /product/pkgbin |
Nesse exemplo, o comando pkgmk usa o diretório de trabalho atual para encontrar as partes restantes do pacote (como os arquivos de informação prototype e pkginfo).
Se quiser adicionar arquivos de informação e scripts de instalação opcionais ao seu pacote, consulte Capítulo 3Melhorando a funcionalidade de um pacote (Tarefas). Do contrário, depois de construir o pacote, você deve verificar a sua integridade. O Capítulo 4Verificando e transferindo um pacote explica como fazê-lo e oferece instruções detalhadas sobre como transferir o pacote verificado a um meio de distribuição.