Várias compilações separadas para cada arquitetura - a
combinação de branchs é suportada. Todos os
dados privados para uma compilação (árvore de
ports, árvore do src,
pacotes, distfiles, arquivos de
log, bindist,
Makefile, etc) estão localizados sob
${arch}/${branch}/builds/${buildid}.
Alternativamente, a última compilação pode ser referenciada sob
o buildid latest, e a
anterior a esta é chamada previous.
Novas compilações são clonadas a partir da
latest, o que é rápido, uma vez que ele usa
ZFS.
Os scripts
scripts/dopackages são usados para executar
as compilações.
Para o código base antigo, os mais úteis são:
dopackages.7 - Executa a compilação
para a série 7.X
dopackages.7-exp - Executa a
compilação para a série 7.X com patches
experimentais (branch 7-exp)
dopackages.8 - Executa a
compilação para a série 8.X.
dopackages.8-exp - Executa a
compilação para a série 8.X com patches
experimentais (branch 8-exp)
dopackages.9 - Executa a
compilação para a série 9.X.
dopackages.9-exp - Executa a
compilação para a série 9.X com patches
experimentais (branch 9-exp)
dopackages.10 - Executa a
compilação para a série 10.X.
dopackages.10-exp - Executa a
compilação para a série 10.X com patches
experimentais (branch 10-exp)
Esses são wrappers para o
dopackages e todos são
links simbólicos para
dopackages.wrapper.
Wrappers de scripts para
um novo branch podem ser criados com
links simbólicos
dopackages.${branch} para
dopackages.wrapper. Esses
scripts tem uma série de argumentos. Por
exemplo:
dopackages.7 ${arch} ${buildid} [-options]Você pode usar o dopackages.wrapper
diretamente, ao invés dos links simbólicos.
Por exemplo:
dopackages.wrapper ${arch} ${branch} ${buildid} [-options]Frequentemente você usará latest como
valor para o buildid.
[-options] pode ser nulo, uma ou mais,
das opções seguintes:
-keep - Não remove esta compilação no
futuro, quando normalmente seria removido como parte do
ciclo latest -
previous. Não se esqueça de efetuar a
limpeza manualmente quando ele não for mais
necessário.
-nofinish - Não executa o
pós-processamento após finalizar a compilação.
Isto é útil se você espera que a compilação precise ser
reiniciada depois de concluída. Se você usar esta opção,
não se esqueça de limpar os clientes quando você não
precisar mais da compilação.
-finish - Executa apenas o
pós-processamento.
-nocleanup - Por padrão, quando o
estágio -finish da compilação é
completado, os dados da compilação serão removidos dos
clientes. Esta opção vai evitar a remoção dos
dados.
-restart - Reinicia uma compilação
interrompida (ou não finalizada) a partir do começo. Os
Ports que falharam na compilação
anterior serão recompilados.
-continue - Reinicia uma compilação
interrompida (ou não finalizada). Os
Ports que falharam na compilação anterior
não serão recompilados.
-incremental - Compara os campos
importantes do novo INDEX com a versão
anterior, remove pacotes e arquivos de
log dos ports antigos
que foram alterados, e recompila o resto. Isso reduz o
tempo de compilação substancialmente, pois os
ports inalterados não serão recompilados
todas as vezes.
-cdrom - O empacotamento desta
compilação será usado em um CD-ROM, então os pacotes
marcados como NO_CDROM e os
disfiles deverão ser removidos no
pós-processamento.
-nobuild - executa todas as etapas do
pré-processamento, mas não a compilação dos pacotes.
-noindex - Não reconstrói o
INDEX durante o pré-processamento.
-noduds - Não reconstrói o arquivo
duds (ports que
nunca são compilados, como por exemplo, aqueles marcados com
IGNORE, NO_PACKAGE,
etc.) durante o pré-processamento.
-nochecksubdirs - Não verifica o
SUBDIRS para os ports
que não estão ligados à compilação. (Apenas para o novo
código base).
-trybroken - Tenta compilar
ports marcados como
BROKEN (desativado por padrão, pois os
clusters amd64/i386™ agora são
suficientemente rápidos e quando fazem compilações
incrementais eles gastam muito mais tempo do que o
necessário para compilar tudo. Por outro lado,
os outros clusters são bastante lentos,
e seria um desperdício de tempo tentar compilar
ports marcados como
BROKEN).
Com -trybroken, provavelmente você
também vai querer usar -fetch-original
(e, no novo código base,
-unlimited-errors).
-nosrc - Não atualiza a árvore do
src a partir do
snapshot do ZFS, mantendo a árvore da
compilação anterior.
-srccvs - Não atualiza a árvore do
src a partir do
snapshot do ZFS, em vez disso ela é
atualizada com o cvs update.
-noports - Não atualiza a árvore de
ports a partir do
snapshot do ZFS, mantendo a árvore da
compilação anterior.
-portscvs - Não atualiza a árvore de
ports a partir do
snapshot do ZFS, em vez disso ela é
atualizada com o cvs update.
-norestr - Não tenta compilar
ports marcados como
RESTRICTED.
-noplistcheck - Não considera como
erro ports deixarem arquivos para trás
ao serem removidos.
-nodistfiles - Não coleta os
distfiles que passarem no make
checksum para depois fazer o
upload para o
ftp-master.
-fetch-original - Baixa o
distfile a partir do
MASTER_SITES original, em vez do
ftp-master.
-unlimited-errors (apenas no novo
código base) - anula a verificação de limites do qmanager
para compilações descontroladas. Você pode querer isso
principalmente quando usar -restart em
uma compilação que provavelmente vai falhar, ou talvez
quando executar -trybroken. A
A limitação é realizada por padrão.
A menos que você especifique -restart,
-continue, ou -finish, os
links simbólicos para as compilações
existentes serão rotacionados. Isto é, o
link simbólico para
previous será removido; a compilação mais
recente terá seu link modificado para
previous/; e a nova compilação será criada
e referenciada com um link em
latest/.
Se a última compilação finalizou de forma limpa, você
não precisa remover nada. Se ela foi interrompida, ou você usou
a opção -nocleanup, você precisa limpar os
clientes executando:
build cleanup ${arch} ${branch} ${buildid} -full
Os diretórios errors/,
logs/, packages/, e
assim por diante, são limpos pelos scripts.
Se você está com pouco espaço, também pode limpar o
ports/distfiles/. Não altere o diretório
latest/; ele é um link simbólico para o
servidor web.
O dosetupnodes supostamente é executado
pelo script dopackages
no caso de -restart, mas pode ser uma boa
idéia executá-lo manualmente e depois verificar se todos os
clientes tem a carga de trabalho esperada. Algumas vezes
dosetupnode não pode limpar uma compilação
e você precisará fazer isso manualmente. (Isto é um
defeito.)
Verifique se a compilação de pacotes para a arquitetura
${arch} está executando como
usuário ports-${arch} ou ele
apresentará um grande número de erros.
Atualmente, a própria compilação de pacotes ocorre em duas fases idênticas. A razão para isso é que, algumas vezes, problemas temporários (por exemplo, falhas do NFS, sites FTP inalcançáveis, etc.) podem quebrar a compilação. Realizar o processo em duas fases é uma solução alternativa para esse tipo de problema.
Seja cuidadoso com ports/Makefile para
não especificar qualquer diretório vazio. Isso é especialmente
importante se você está realizando uma compilação com
patches experimentais (-exp). Se o processo
de compilação encontrar um diretório vazio, ambas as fases de
compilação irão parar rapidamente, e um erro similar ao seguinte
será adicionado para
${arch}/${branch}/make.[0|1]:
don't know how to make dns-all(continuing)Para corrigir este problema, simplesmente comente ou remova
as entradas SUBDIR que apontam para
subdiretórios vazios. Depois de feito isso, você pode
reiniciar a compilação executando o comando
dopackages adequado com a opção
-restart.
Este problema também ocorre se você criar uma nova
categoria com um Makefile sem entradas
SUBDIRs nele. Isso é, provavelmente, um
defeito.
dopackages.7 i386 -nosrc -norestr -nofinish
dopackages.wrapper i386 7 -nosrc -norestr -nofinish
dopackages.8 amd64 -nosrc -noports -norestr -continue -noindex -noduds -nofinish
dopackages.wrapper amd64 8 -nosrc -noports -norestr -continue -noindex -noduds -nofinish
dopackages.7 sparc64 -finish
dopackages.wrapper sparc64 7 -finish
Dica: geralmente é melhor executar o comando
dopackages dentro do
screen(1).
Você pode precisar manipular os dados da compilação antes
de inicia-la, especialmente para compilações experimentais.
Isto é feito com o comando build. Aqui
estão algumas opções úteis para criação:
build create arch
branch
[newid] - Cria um
newid (ou um
datestamp, se não for especificado).
Só é necessário quando da criação de um novo
branch ou uma nova arquitetura. (TODO:
documentar se newid deve ser
especificado como latest no novo código
base.)
build clone arch
branch
oldid
[newid] - Cria um
clone do oldid para o
newid (ou um
datestamp, se não for especificado).
build srcupdate
arch
branch
buildid - Substitui
a árvore src com um novo
snapshot do ZFS. Não se esqueça de
usar a opção -nosrc quando executar o
dopackages mais tarde!
build portsupdate
arch
branch
buildid - Substitui a
árvore de ports com um novo
snapshot do ZFS. Não se esqueça de
usar a opção -noports quando executar
dopackages mais tarde!
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>.