--- 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 <> pode ser escrita como: [.programlisting] .... [ { type: install message: < 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 <> 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. ....