Procedimentos para Construção de Pacotes
Anterior |  | Próxima

# 12 Compilação de `Patches` Experimentais

Compilações de `patches` experimentais são executadas de tempos em tempos para novas funções ou correções de defeitos na infraestrutura do `ports` (isto é, `bsd.port.mk`), ou para testar atualizações em grande escala. A qualquer momento podem haver vários `patches` de `branchs` experimentais simultâneos, como o `8-exp` na arquitetura amd64.

Geralmente, a compilação de `patches` experimentais é executada da mesma forma que qualquer outra compilação, exceto que você deve primeiro atualizar a árvore de `ports` para a última versão e, em seguida, aplicar os seus `patches`. Para fazer o primeiro, você pode usar o seguinte:

    % cvs -R update -dP > update.out
    % date > cvsdone

Essa é a simulação mais próxima do que o `script` `dopackages` faz. (Embora o `cvsdone` seja meramente informativo, ele pode ser útil.)

Você precisará editar o `update.out` para procurar por linhas que comecem com `^M`, `^C`, ou `^?` para que possa corrigi-las.

É sempre uma boa idéia salvar cópias do original de todos os arquivos modificados, bem como uma lista do que você está modificando. Você pode consultar a lista ao fazer o `commit` final, para se certificar de que você está realizando o `commit` exatamente daquilo que testou.

Pelo fato da máquina ser compartilhada, alguém pode excluir suas alterações por engano, então mantenha cópias destas, por exemplo, no seu diretório `home` freefall `freefall`. Não use o `tmp/`; pois a `pointyhat` executa ele mesmo alguma versão do `-CURRENT`, você pode esperar por reinicializações (no mínimo para atualizações).

Para que você tenha uma compilação de controle com a qual possa comparar eventuais falhas, você deve primeiro executar a compilação de pacote no `branch` em que os `patches` experimentais foram baseados para a arquitetura i386™ (atualmente esta é o `8`). Quando estiver preparando a compilação dos `patches` experimentais, faça o `checkout` da árvore do `ports` e do `src` com a mesma data da que foi usada para a compilação de controle. Isso vai garantir uma comparação válida entre as compilações depois.

Uma vez terminada a compilação, compare as falhas da compilação de controle com as da compilação dos `patches` experimentais. Para facilitar, use os seguintes comandos (assumindo o `branch 8` como `branch` de controle, e o `8-exp` como `branch` experimental):

    % cd /var/portbuild/i386/8-exp/errors
    % find . -name \*.log\* | sort > /tmp/8-exp-errs
    % cd /var/portbuild/i386/8/errors
    % find . -name \*.log\* | sort > /tmp/8-errs

> Nota: Se já faz muito tempo desde que a última compilação foi finalizada, os `logs` podem ter sido compactados automaticamente com bzip2. Nesse caso você deve usar `sort | sed 's,\.bz2,,g'` em seu lugar.

    % comm -3 /tmp/8-errs /tmp/8-exp-errs | less

Este último comando vai gerar um relatório com duas colunas. A primeira coluna contém os `ports` que falharam na compilação de controle, mas não na compilação com `patches` experimentais; a segunda é o inverso As razões para o `port` estar na primeira coluna incluem:

- O `port` foi corrigido desde que a compilação de controle foi executada, ou foi atualizado para uma nova versão que também está quebrada (assim a nova versão também deve aparecer na segunda coluna)

- O `port` foi corrigido pelos `patches` experimentais na compilação experimental

- O `port` não foi compilado na compilação com `patches` experimentais devido a falha de uma dependência

Razões para o `port` aparecer na segunda coluna incluem:

- O `port` foi quebrado pelos `patches` experimentais [1]

- O `port` foi atualizado desde a compilação de controle e deixou de compilar [2]

- O `port` foi quebrado devido a um erro temporário (por exemplo, site FTP fora do ar, erro do pacote cliente, etc.)

Ambas as colunas devem ser investigadas e as razões para os erros entendidas antes do `commit` do conjunto de `patches` experimentais. Para diferenciar entre o [1] e o [2] acima, você pode recompilar os pacotes afetados sob o `branch` de controle:

    % cd /var/portbuild/i386/8/ports

> Nota: Certifique-se de atualizar esta árvore com o `cvs update` para a mesma data da árvore dos `patches` experimentais.

O seguinte comando vai configurar o `branch` de controle para a compilação parcial (antigo código base):

    % /var/portbuild/scripts/dopackages.8 -noportscvs -nobuild -nocvs -nofinish

As compilações devem ser executadas a partir do diretório `packages/All`. Este diretório deve estar vazio inicialmente, exceto pelo `link` simbólico do Makefile. Se este `link` simbólico não existir, ele deve ser criado:

    % cd /var/portbuild/i386/8/packages/All
    % ln -sf ../../Makefile .
    % make -k -j<#> <list of packages to build>

> Nota: O <#> é o número de compilações paralelas para tentar. Normalmente isso é a soma dos pesos listados em `/var/portbuild/i386/mlist`, a menos que você tenha uma razão para executar uma compilação mais pesada ou leve.

> A lista de pacotes para compilar deve ser uma lista do nome do pacote (incluindo as versões) como aparece no `INDEX`. O `PKGSUFFIX` (isto é, .tgz ou .tbz) é opcional.

Isto vai compilar apenas os pacotes listados, bem como todas as suas dependências.

Você pode verificar o progresso da compilação parcial da mesma forma que você faria com uma compilação normal.

Uma vez que todos os erros tenham sido resolvidos, você pode efetuar o `commit` do conjunto de pacotes. Após efetuar o `commit`, é de costume enviar um e-mail para ports@FreeBSD.org e com cópia para ports-developers@FreeBSD.org, informando as pessoas sobre as mudanças. Um resumo de todas as mudanças também deve registrado no arquivo `/usr/ports/CHANGES`.

Anterior | Principal | Próxima
Upload dos Pacotes |  | Como configurar um novo nó de compilação de pacotes

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.