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