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,
}

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>.