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 o jails do FreeBSD para configurar ambientes de compilação isolados. Esses jails podem ser usados ​​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 o Jails e o Port Trees

Após a configuração, inicialize o poudriere para que ele instale um jail com a árvore do FreeBSD requerida e uma árvore de ports. Especifique um nome para o 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 10amd64 -v 10.0-RELEASE
    ====>> Creating 10amd64 fs... done
    ====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
    /poudriere/jails/10amd64/fromftp/base.txz      100% of   59 MB 1470 kBps 00m42s
    ====>> Extracting base.txz... done
    ====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
    /poudriere/jails/10amd64/fromftp/src.txz       100% of  107 MB 1476 kBps 01m14s
    ====>> Extracting src.txz... done
    ====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
    /poudriere/jails/10amd64/fromftp/games.txz     100% of  865 kB  734 kBps 00m01s
    ====>> Extracting games.txz... done
    ====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
    /poudriere/jails/10amd64/fromftp/lib32.txz     100% of   14 MB 1316 kBps 00m12s
    ====>> Extracting lib32.txz... done
    ====>> Cleaning up... done
    ====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used

    # poudriere ports -c -p local
    ====>> Creating local fs... done
    ====>> Extracting portstree "local"...
    Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
    Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
    Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
    Fetching snapshot metadata... done.
    Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
    94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of   69 MB 1246 kBps 00m57s
    Extracting snapshot... done.
    Verifying snapshot integrity... done.
    Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
    Fetching snapshot metadata... done.
    Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
    Fetching 4 metadata patches... done.
    Applying metadata patches... done.
    Fetching 0 metadata files... done.
    Fetching 48 patches.
    (48/48) 100.00%  done.
    done.
    Applying patches...
    done.
    Fetching 1 new ports or files... done.
    /poudriere/ports/tester/CHANGES
    /poudriere/ports/tester/COPYRIGHT

    [...]

    Building new INDEX files... done.

Em um único computador, o poudriere pode construir ports com várias configurações, em vários 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 um único 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 do jail, o nome do port e o nome do set: ``10amd64-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 ``10amd64-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 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

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

    # poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-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 servir um repositório poudriere para as máquinas clientes via HTTP. Configure um servidor da web para servir o diretório de pacotes, por exemplo: `/usr/local/poudriere/data/packages/`10amd64``, onde ``10amd64`` é o nome da compilação.

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

    custom: {
    	url: "http://pkg.example.com/10amd64",
    	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>.