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).
Nota: 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.
Nota: 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.
Nota: 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.
Nota: Este problema também ocorre se você criar uma nova categoria com um Makefile sem entradas SUBDIRs nele. Isso é, provavelmente, um defeito.
Exemplo 6. Atualize a árvore i386-7 e faça uma compilação completa
dopackages.7 i386 -nosrc -norestr -nofinish
dopackages.wrapper i386 7 -nosrc -norestr -nofinish
Exemplo 7. Reinicie uma compilação para amd64-8 interrompida sem atualizar
dopackages.8 amd64 -nosrc -noports -norestr -continue -noindex -noduds -nofinish
dopackages.wrapper amd64 8 -nosrc -noports -norestr -continue -noindex -noduds -nofinish
Exemplo 8. Realize o pós-processamento de uma árvore sparc64-7 concluída
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!
Algumas vezes é necessário recompilar um único pacote a partir do conjunto de pacotes. Isso pode ser feito executando o seguinte comando:
path/qmanager/packagebuild amd64 7-exp 20080904212103 aclock-0.2.3_2.tbz
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>.