7 Manutenção da Compilação

Existem vários casos onde você precisará limpar manualmente uma compilação:

  1. Você a interrompeu manualmente.

  2. O pointyhat foi reiniciado enquanto uma compilação estava executando.

  3. O qmanager falhou e reiniciado

7.1 Interrompendo uma Compilação

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.

7.2 Limpando uma Compilação

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 directory

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

7.3 Manutenção de compilações com o comando build

Aqui está o resto das opções para o comando build:

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