4.6. Compilando Pacotes com o Poudriere
Anterior | Capítulo 4. Instalando Aplicativos: Pacotes e Ports | Próxima

## 4.6. Compilando Pacotes com o Poudriere

O Poudriere é um utilitário licenciado sob a licença BSD para criar e testar pacotes do FreeBSD. Ele usa as jails do FreeBSD para configurar ambientes de compilação isolados. Essas jails podem ser usadas para compilar pacotes para versões do FreeBSD que são diferentes do sistema no qual ele está instalado, e também para construir pacotes para o i386 se o host for um sistema amd64. Uma vez que os pacotes são compilados, eles estão em um layout idêntico aos espelhos oficiais. Esses pacotes podem ser usados pelo pkg(8) e por outras ferramentas de gerenciamento de pacotes.

O Poudriere é instalado usando o pacote ou port ports-mgmt/poudriere. A instalação inclui um arquivo de configuração de exemplo, `/usr/local/etc/poudriere.conf.sample`. Copie este arquivo para `/usr/local/etc/poudriere.conf`. Edite o arquivo copiado de acordo com a configuração local.

Embora o ZFS não seja necessário no sistema que executa o poudriere, o seu uso é benéfico. Quando o ZFS é usado, o `ZPOOL` deve ser especificado em `/usr/local/etc/poudriere.conf` e o `FREEBSD_HOST` deve ser definido para um espelho próximo. A definição de `CCACHE_DIR` permite o uso de devel/ccache para armazenar em cache a compilação e reduzir os tempos de compilação para o código compilado com freqüência. Pode ser conveniente colocar os conjuntos de dados do poudriere em uma árvore isolada montada em `/poudriere`. Os valores padrões para as outras variáveis de configuração são adequados.

O número de núcleos do processador detectados é usado para definir quantas compilações serão executadas em paralelo. Forneça memória virtual suficiente, seja por meio de RAM ou espaço de swap. Se a memória virtual se esgotar, as jails de compilação serão interrompidas e desativadas, resultando em mensagens de erro estranhas.

### 4.6.1. Inicializar Jails e o Port Trees

Após a configuração, inicialize o poudriere para que ele instale uma jail com a árvore do FreeBSD requerida e uma árvore de ports. Especifique um nome para a jail usando `-j` e a versão do FreeBSD com `-v`. Em sistemas que executam o FreeBSD/amd64, a arquitetura pode ser definida com `-a` para `i386` ou `amd64`. O padrão é a arquitetura mostrada pelo `uname`.

    # poudriere jail -c -j 11amd64 -v 11.4-RELEASE
    [00:00:00] Creating 11amd64 fs at /poudriere/jails/11amd64... done
    [00:00:00] Using pre-distributed MANIFEST for FreeBSD 11.4-RELEASE amd64
    [00:00:00] Fetching base for FreeBSD 11.4-RELEASE amd64
    /poudriere/jails/11amd64/fromftp/base.txz              125 MB 4110 kBps    31s
    [00:00:33] Extracting base... done
    [00:00:54] Fetching src for FreeBSD 11.4-RELEASE amd64
    /poudriere/jails/11amd64/fromftp/src.txz               154 MB 4178 kBps    38s
    [00:01:33] Extracting src... done
    [00:02:31] Fetching lib32 for FreeBSD 11.4-RELEASE amd64
    /poudriere/jails/11amd64/fromftp/lib32.txz              24 MB 3969 kBps    06s
    [00:02:38] Extracting lib32... done
    [00:02:42] Cleaning up... done
    [00:02:42] Recording filesystem state for clean... done
    [00:02:42] Upgrading using ftp
    /etc/resolv.conf -> /poudriere/jails/11amd64/etc/resolv.conf
    Looking up update.FreeBSD.org mirrors... 3 mirrors found.
    Fetching public key from update4.freebsd.org... done.
    Fetching metadata signature for 11.4-RELEASE from update4.freebsd.org... done.
    Fetching metadata index... done.
    Fetching 2 metadata files... done.
    Inspecting system... done.
    Preparing to download files... done.
    Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done.
    Applying patches... done.
    Fetching 6 files... done.
    The following files will be added as part of updating to
    11.4-RELEASE-p1:
    /usr/src/contrib/unbound/.github
    /usr/src/contrib/unbound/.github/FUNDING.yml
    /usr/src/contrib/unbound/contrib/drop2rpz
    /usr/src/contrib/unbound/contrib/unbound_portable.service.in
    /usr/src/contrib/unbound/services/rpz.c
    /usr/src/contrib/unbound/services/rpz.h
    /usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
    The following files will be updated as part of updating to
    11.4-RELEASE-p1:
    […]
    Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
    Scanning //usr/share/certs/trusted for certificates...
     done.
    11.4-RELEASE-p1
    [00:04:06] Recording filesystem state for clean... done
    [00:04:07] Jail 11amd64 11.4-RELEASE-p1 amd64 is ready to be used

    # poudriere ports -c -p local -m svn+https
    [00:00:00] Creating local fs at /poudriere/ports/local... done
    [00:00:00] Checking out the ports tree... done

Em um único computador, o poudriere pode construir ports com várias configurações, em várias jails e de diferentes árvores de ports. Configurações customizadas para estas combinações são chamadas de sets. Veja a seção CUSTOMIZAÇÃO do poudriere(8) para detalhes depois que o ports-mgmt/poudriere ou o ports-mgmt/poudriere-devel estiver instalado.

A configuração básica mostrada aqui coloca uma única jail-, port-, e um set específico `make.conf` em `/usr/local/etc/poudriere.d`. O nome do arquivo neste exemplo é criado combinando o nome da jail, o nome do port e o nome do set: ``11amd64-local-workstation`-make.conf`. O sistema `make.conf` e este novo arquivo são combinados em tempo de compilação para criar o `make.conf` usado pela jail de compilação.

Os pacotes a serem criados são inseridos em ``11amd64-local-workstation`-pkglist`:

    editors/emacs
    devel/git
    ports-mgmt/pkg
    ...

Opções e dependências para os ports especificados são configuradas:

    # poudriere options -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist

Finalmente, os pacotes são compilados e um repositório de pacotes é criado:

    # poudriere bulk -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist

Durante a execução, pressionar Ctrl+t exibe o estado atual da compilação. O Poudriere também cria arquivos em `/poudriere/logs/bulk/`jailname`` que podem ser usados com um servidor da Web para exibir informações de compilação.

Após a conclusão, os novos pacotes estão agora disponíveis para instalação a partir do repositório poudriere.

Para obter maiores informações sobre o uso do poudriere, consulte poudriere(8) e o site principal, https://github.com/freebsd/poudriere/wiki.

### 4.6.2. Configurando Clientes do pkg para usar um repositório de Poudriere

Embora seja possível usar um repositório personalizado ao lado do repositório oficial, às vezes é útil desativar o repositório oficial. Isso é feito criando um arquivo de configuração que substitui e desativa o arquivo de configuração oficial. Crie o `/usr/local/etc/pkg/repos/FreeBSD.conf` que deverá conter o seguinte:

    FreeBSD: {
    	enabled: no
    }

Geralmente é mais fácil disponibilizar um repositório poudriere para as máquinas clientes via HTTP. Configure um servidor web para disponibilizar o diretório de pacotes, por exemplo: `/usr/local/poudriere/data/packages/`11amd64``, onde ``11amd64`` é o nome da compilação.

Se a URL para o repositório de pacotes for: `http://pkg.example.com/11amd64`, o arquivo de configuração do repositório em `/usr/local/etc/pkg/repos/custom.conf` ficaria assim:

    custom: {
    	url: "http://pkg.example.com/11amd64",
    	enabled: yes,
    }

Anterior | Acima | Próxima
4.5. Usando a Coleção de Ports | Principal | 4.7. Considerações pós-instalação

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.