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