Existem vários casos onde você precisará limpar manualmente uma compilação:
Você a interrompeu manualmente.
O pointyhat foi reiniciado enquanto uma compilação estava executando.
O qmanager falhou e reiniciado
O processo para interromper de forma manual uma compilação é um tanto quanto confuso. Primeiro você precisa identificar o tty em que ela está sendo executada rodando (ou lembrando-se da saída do tty(1) quando você iniciou a compilação, ou usando ps x para identificá-lo). Você precisa certificar-se de que não existe mais nada importante rodando neste tty, você pode verificar isto executando o comando ps, por exemplo, ps -t p1 lista os processos em execução no tty 1. Se não existir mais nada importante, você pode encerrar o terminal facilmente com pkill -t pts/1; ou pode utilizar o kill -HUP, por exemplo, ps -t pts/1 -o pid= | xargs kill -HUP. Você deve Substitur o p1 pelo tty utilizado na compilação.
A compilação de pacote enviada pelo make para as máquinas clientes irá se auto limpar após alguns minutos (verifique com ps x até que todos finalizem).
Se você não encerrar o make(1), ele irá iniciar novas tarefas de compilação. Se você não encerrar o dopackages ele irá reiniciar toda a compilação. Se você não encerrar os processos pdispatch, eles irão continuar (ou reaparecer) até concluir a compilação do pacote.
Para liberar recursos, você precisa limpar as máquinas clientes executando o comando build cleanup. Por exemplo:
% /var/portbuild/scripts/build cleanup i386 8-exp 20080714120411 -full
Se você esquecer de fazer isso, então os chroots da compilação antiga não serão limpos nas próximas 24 horas, e nenhum novo trabalho será iniciado no seu lugar enquanto o pointyhat achar que esta máquina ainda está ocupada.
Para verificar, utilize o comando cat ~/loads/* para mostrar o status das máquinas clientes; a primeira coluna é o número de trabalhos que ela pensa estar executando, e isso pode estar bem próximo da carga média. O loads é atualizado a cada 2 minutos. Se você executar um ps x | grep pdispatch e ele listar menos trabalhos do que os que o loads pensa estarem em uso, você está em apuros.
Você pode ter problemas com instâncias do comando umount ficando congeladas. Se isto ocorrer, você terá que usar o script allgohans para executar um comando ssh(1) em todos os clientes deste ambiente de compilação. Por exemplo:
ssh -l root gohan24 df
Vai lhe dar um df, e
allgohans "umount -f pointyhat.freebsd.org:/var/portbuild/i386/8-exp/ports" allgohans "umount -f pointyhat.freebsd.org:/var/portbuild/i386/8-exp/src"
Supostamente irá resolver o problema dos mounts que não foram desconectados pelo umount. Você terá que continuar executando-os pois podem existir diversas montagens.
Nota: Ignore o seguinte:
umount: pointyhat.freebsd.org:/var/portbuild/i386/8-exp/ports: statfs: No such file or directory umount: pointyhat.freebsd.org:/var/portbuild/i386/8-exp/ports: unknown file system umount: Cleanup of /x/tmp/8-exp/chroot/53837/compat/linux/proc failed! /x/tmp/8-exp/chroot/53837/compat/linux/proc: not a file system root directoryOs dois primeiros significam que o cliente não tinha o sistema de arquivos montado; os dois últimos são um defeito.
Você também poderá ver mensagens sobre o procfs.
Após concluir tudo que foi exposto acima, remova o arquivo ${arch}/lock antes de tentar reiniciar a compilação. Se você não o fizer, o dopackages simplesmente será encerrado.
Se você atualizou a árvore de ports antes de reiniciar, você pode precisar reconstruir o duds, o INDEX, ou ambos os arquivos.
Aqui está o resto das opções para o comando build:
build destroy arch branch - Destrói o id da compilação.
build list arch branch - Mostra o conjunto atual de ids de compilações.
build upload arch branch - ainda não implementado.
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>.