---
title: Capítulo 9. pkg-*
prev: books/porters-handbook/plist
next: books/porters-handbook/testing
showBookMenu: true
weight: 9
path: "/books/porters-handbook/"
---
[[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.
....