---
title: Capítulo 9. pkg-*
prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 9
params:
  path: "/books/porters-handbook/pkg-files/"
---

[[pkg-files]]
= [.filename]#pkg-*#
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 9
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

Existem alguns truques que ainda não foram mencionamos sobre os arquivos [.filename]#pkg-*# que são úteis às vezes.

[[porting-message]]
== [.filename]#pkg-message#

Para exibir uma mensagem quando o pacote é instalado, coloque a mensagem no [.filename]#pkg-message#. Esse recurso é geralmente útil para exibir etapas adicionais de instalação a serem executadas após o `pkg install` ou `pkg upgrade`.

[IMPORTANT]
====
* [.filename]#pkg-message# deve conter apenas informações _vitais_ de setup e operação no FreeBSD, e isso é único para o port em questão.
* As informações de configuração devem ser mostradas apenas na instalação inicial. As instruções de atualização devem ser exibidas apenas ao atualizar a versão relevante.
* Não coloque as mensagens entre espaços em branco ou linhas de símbolos (como `----------`, `**********`, ou `==========`). Deixe a formatação com o man:pkg[8].
* Os committers têm aprovação implícita para restringir as mensagens existentes na hora da instalação ou em intervalos de atualização, usando as especificações do formato UCL.
====

pkg-message suporta dois formatos:

raw::
Um arquivo de texto simples comum. Sua mensagem é exibida apenas na instalação.

UCL::
Se o arquivo começar com "`[`" será considerado como um arquivo UCL. O formato UCL é descrito na https://github.com/vstakhov/libucl[página libucl no GitHub].

[NOTE]
====
Não adicione uma entrada para o [.filename]#pkg-message# ao [.filename]#pkg-plist#.
====

[[porting-message-ucl]]
=== UCL no [.filename]#pkg-message#

O formato é o seguinte. Deve ser uma matriz de objetos. Os objetos em si podem ter essas palavras-chave:

`message`::
A mensagem atual a ser exibida. Esta palavra-chave é obrigatória.

`type`::
Quando a mensagem deve ser exibida.

`maximum_version`::
Somente se `type` for `upgrade`. Exibe se estiver atualizando de uma versão inferior que a versão especificada.

`minimum_version`::
Somente se `type` for `upgrade`. Exibe se estiver atualizando de uma versão maior que a versão especificada.

As palavras-chave `maximum_version` e `minimum_version` podem ser combinadas.

A palavra-chave `type` pode ter três valores:

`install`::
A mensagem só deve ser exibida quando o pacote é instalado.

`remove`::
A mensagem só deve ser exibida quando o pacote é removido.

`upgrade`::
a mensagem só deve ser exibida durante uma atualização do pacote.

[IMPORTANT]
====
Para preservar a compatibilidade com arquivos [.filename]#pkg-message# não UCL, a primeira linha de um arquivo [.filename]#pkg-message# UCL DEVE ter um simples "`[`", e a última linha DEVE ter um simples "`]`".
====

[[porting-message-ucl-short-ex]]
.Strings Curtas UCL
[example]
====
A mensagem é delimitada por aspas duplas `"`, isto é utilizado em strings simples de linha única:

[.programlisting]
....
[
{ type: install
  message: "Simple message"
}
]
....

====

[[porting-message-ucl-multiline-ex]]
.Strings de Múltiplas Linhas UCL
[example]
====
Strings de múltiplas linhas utiliza o padrão here de documento de notação. O delimitador de múltiplas linhas _deve_ iniciar logo após os símbolos `<<` sem espaço em branco, e ele _deve_ ser apenas em letras maiúsculas. Para finalizar uma sequência de múltiplas linhas, adicione o delimitador em uma linha única, sem nenhum espaço em branco. A mensagem de <<porting-message-ucl-short-ex>> pode ser escrita como:

[.programlisting]
....
[
{ type: install
  message: <<EOM
Simple message
EOM
}
]
....

====

[[porting-message-ucl-ex2]]
.Exibir uma Mensagem na Instalação/Desinstalação
[example]
====
Quando uma mensagem precisa ser exibida apenas na instalação ou na desinstalação, defina o tipo:

[.programlisting]
....
[
{
  type: remove
  message: "package being removed."
}
{ type: install, message: "package being installed."}
]
....

====

[[porting-message-ucl-ex3]]
.Exibir uma Mensagem na Atualização
[example]
====
Quando um port é atualizado, a mensagem exibida pode ser ainda mais adaptada às necessidades do port.

[.programlisting]
....
[
{
  type: upgrade
  message: "Package is being upgraded."
}
{
  type: upgrade
  maximum_version: "1.0"
  message: "Upgrading from before 1.0 need to do this."
}
{
  type: upgrade
  minimum_version: "1.0"
  message: "Upgrading from after 1.0 should do that."
}
{
  type: upgrade
  maximum_version: "3.0"
  minimum_version: "1.0"
  message: "Upgrading from > 1.0 and < 3.0 remove that file."
}
]
....

[IMPORTANT]
======
Ao exibir uma mensagem na atualização, é importante limitar até quando ela será mostrada ao usuário. Na maioria das vezes, é usado o `maximum_version` para limitar seu uso a atualizações anteriores a uma certa versão, quando algo específico precisa ser feito.
======

====

[[pkg-install]]
== [.filename]#pkg-install#

Se o port precisa executar comandos quando o pacote binário é instalado com o `pkg add` ou com o `pkg install`, use o [.filename]#pkg-install#. Este script será automaticamente adicionado ao pacote. Será executado duas vezes pelo `pkg`, a primeira vez como `${SH} pkg-install ${PKGNAME} PRE-INSTALL` antes que o pacote seja instalado e uma segunda vez como `${SH} pkg-install ${PKGNAME} POST-INSTALL` depois dele ter sido instalado. O valor de `$2` pode ser testado para determinar em que modo o script está sendo executado. A variável de ambiente `PKG_PREFIX` será definida para o diretório de instalação do pacote.

[IMPORTANT]
====
Este script está aqui para ajudá-lo a configurar o pacote para que ele esteja tão pronto quanto possível para ser usado. Ele _não deve_ ser abusado para iniciar serviços, interromper serviços ou executar quaisquer outros comandos que modificarão o sistema em execução no momento.
====

[[pkg-deinstall]]
== [.filename]#pkg-deinstall#

Este script é executado quando um pacote é removido.

Este script será executado duas vezes pelo `pkg delete`. A primeira vez como `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` antes que o port seja desinstalado e a segunda vez como `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` após o port ter sido desinstalado. O valor de `$2` pode ser testado para determinar em que modo o script está sendo executado. A variável de ambiente `PKG_PREFIX` será definida para o diretório de instalação do pacote

[IMPORTANT]
====
Este script está aqui para ajudá-lo a configurar o pacote para que ele esteja tão pronto quanto possível para ser usado. Ele _não deve_ ser abusado para iniciar serviços, interromper serviços ou executar quaisquer outros comandos que modificarão o sistema em execução no momento.
====

[[pkg-names]]
== Mudando os nomes dos [.filename]#pkg-*#

Todos os nomes de [.filename]#pkg-*# são definidos usando variáveis ​​que podem ser alteradas no [.filename]#Makefile# se necessário. Isso é especialmente útil ao compartilhar os mesmos arquivos [.filename]#pkg-*# entre vários ports ou quando é necessário gravar em um desses arquivos. Veja <<porting-wrkdir,escrevendo em lugares que não o `WRKDIR`>> para entender por que é uma má ideia escrever diretamente no diretório que contém os arquivos [.filename]#pkg-*#.

Aqui está uma lista de nomes de variáveis e seus valores padrão. (O valor padrão do `PKGDIR` é `${MASTERDIR}`.)

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Variável
| Valor padrão

|`DESCR`
|`${PKGDIR}/pkg-descr`

|`PLIST`
|`${PKGDIR}/pkg-plist`

|`PKGINSTALL`
|`${PKGDIR}/pkg-install`

|`PKGDEINSTALL`
|`${PKGDIR}/pkg-deinstall`

|`PKGMESSAGE`
|`${PKGDIR}/pkg-message`
|===

[[using-sub-files]]
== Fazendo uso de `SUB_FILES` e `SUB_LIST`

O `SUB_FILES` e o `SUB_LIST` são úteis para valores dinâmicos em arquivos do port, como o `PREFIX` de instalação dentro do [.filename]#pkg-message#.

A `SUB_FILES` especifica uma lista de arquivos a serem modificados automaticamente. Cada [.filename]#arquivo# na lista `SUB_FILES` deve ter um [.filename]#arquivo.in correspondente# presente no `FILESDIR`. Uma versão modificada será criada como [.filename]#${WRKDIR}/arquivo#. Os arquivos definidos como um valor de `USE_RC_SUBR` são automaticamente adicionados ao `SUB_FILES`. Para os arquivos [.filename]#pkg-message#, [.filename]#pkg-install# e [.filename]#pkg-deinstall#, a variável Makefile correspondente é automaticamente definida para apontar para a versão processada.

A `SUB_LIST` é uma lista de pares `VAR=VALUE`. Para cada par, `%%VAR%%` será substituído por `VALUE` em cada arquivo listado em `SUB_FILES`. Vários pares comuns são definidos automaticamente: `PREFIX`, `LOCALBASE`, `DATADIR`, `DOCSDIR`, `EXEMPLESDIR`, `WWWDIR` e `ETCDIR`. Qualquer linha que comece com `@Comment` seguido por um espaço, será excluído dos arquivos resultantes após uma substituição de variável.

Este exemplo substitui `%%ARCH%%` com a arquitetura do sistema em um [.filename]#pkg-message#:

[.programlisting]
....
SUB_FILES=	pkg-message
SUB_LIST=	ARCH=${ARCH}
....

Note que para este exemplo, o [.filename]#pkg-message.in# deve existir no `FILESDIR`.

Exemplo de um bom [.filename]#pkg-message.in#:

[.programlisting]
....
Now it is time to configure this package.
Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory
as .putsy.conf and edit it.
....
