From owner-svn-doc-head@FreeBSD.ORG Thu Nov 1 11:06:15 2012 Return-Path: Delivered-To: svn-doc-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 41E7B6EF; Thu, 1 Nov 2012 11:06:15 +0000 (UTC) (envelope-from ebrandi@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 274CF8FC0A; Thu, 1 Nov 2012 11:06:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id qA1B6FXR077329; Thu, 1 Nov 2012 11:06:15 GMT (envelope-from ebrandi@svn.freebsd.org) Received: (from ebrandi@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id qA1B6FVO077325; Thu, 1 Nov 2012 11:06:15 GMT (envelope-from ebrandi@svn.freebsd.org) Message-Id: <201211011106.qA1B6FVO077325@svn.freebsd.org> From: Edson Brandi Date: Thu, 1 Nov 2012 11:06:15 +0000 (UTC) To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r39892 - in head/pt_BR.ISO8859-1/articles: . portbuild X-SVN-Group: doc-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-doc-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the doc tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Nov 2012 11:06:15 -0000 Author: ebrandi Date: Thu Nov 1 11:06:14 2012 New Revision: 39892 URL: http://svn.freebsd.org/changeset/doc/39892 Log: - Add new Brazilian Portuguese translation of portbuild article Submitted by: Antonio Pessoa Obtained from: The FreeBSD Brazilian Portuguese Documentation Project (http://doc.fug.com.br) Approved by: gabor (mentor) Added: head/pt_BR.ISO8859-1/articles/portbuild/ head/pt_BR.ISO8859-1/articles/portbuild/Makefile (contents, props changed) head/pt_BR.ISO8859-1/articles/portbuild/article.xml (contents, props changed) Modified: head/pt_BR.ISO8859-1/articles/Makefile Modified: head/pt_BR.ISO8859-1/articles/Makefile ============================================================================== --- head/pt_BR.ISO8859-1/articles/Makefile Thu Nov 1 10:58:36 2012 (r39891) +++ head/pt_BR.ISO8859-1/articles/Makefile Thu Nov 1 11:06:14 2012 (r39892) @@ -18,6 +18,7 @@ SUBDIR+= freebsd-update-server SUBDIR+= hubs SUBDIR+= linux-users SUBDIR+= new-users +SUBDIR+= portbuild SUBDIR+= problem-reports DOC_PREFIX?= ${.CURDIR}/../.. Added: head/pt_BR.ISO8859-1/articles/portbuild/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/pt_BR.ISO8859-1/articles/portbuild/Makefile Thu Nov 1 11:06:14 2012 (r39892) @@ -0,0 +1,21 @@ +# The FreeBSD Documentation Project +# The FreeBSD Brazilian Portuguese Documentation Project +# +# Article: Portbuild Procedure +# Original revision: r39631 +# +# $FreeBSD$ +# + +DOC?= article + +FORMATS?= html html-split +WITH_ARTICLE_TOC?= YES + +INSTALL_COMPRESSED?= gz +INSTALL_ONLY_COMPRESSED?= + +SRCS= article.xml + +DOC_PREFIX?= ${.CURDIR}/../../.. +.include "${DOC_PREFIX}/share/mk/doc.project.mk" Added: head/pt_BR.ISO8859-1/articles/portbuild/article.xml ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/pt_BR.ISO8859-1/articles/portbuild/article.xml Thu Nov 1 11:06:14 2012 (r39892) @@ -0,0 +1,3235 @@ + + +%entities; +]> + + + +
+ + Procedimentos para Construção de Pacotes + + + Equipe de Gerenciamento da Coleção de Ports do + &os; + + + + 2003 + 2004 + 2005 + 2006 + 2007 + 2008 + 2009 + 2010 + 2011 + 2012 + Equipe de + Gerenciamento da Coleção de Ports do &os; + + + + &tm-attrib.freebsd; + &tm-attrib.intel; + &tm-attrib.sparc; + &tm-attrib.general; + + + $FreeBSD$ + + $FreeBSD$ + + + + Introdução + + Com o objetivo de disponibilizar binários pré-compilados de + aplicações de terceiros para o &os;, a Coleção de + Ports é regularmente compilada em um dos + Clusters de Compilação de + Pacotes. Atualmente o principal + cluster em uso é o . + + Este artigo documenta os trabalhos internos do + cluster + + + Muitos dos detalhes deste artigo serão do interesse apenas + dos membros da equipe que faz o Gerenciamento da Coleção de + Ports + + + + O código base + + A maior parte da mágica na compilação de pacotes ocorre sob + o diretório /var/portbuild. A menos que + seja especificado o contrário, todos os caminhos serão relativos + à este diretório. O ${arch} será usado + para determinar uma das arquiteturas de pacotes (amd64, &i386;, + ia64, powerpc, e &sparc64;), e + ${branch} será usado para determinar + o branch (ramo de desenvolvimento) de + compilação (7, 7-exp, 8, 8-exp, 9, 9-exp, 10, 10-exp). + + + Não são mais compilados pacotes para as versões 4, 5 ou 6, + e para a arquitetura alpha + + + Os scripts que controlam todo o processo + estão localizados em /var/portbuild/scripts/. Eles são + cópias obtidas do repositório Subversion + base/projects/portbuild/scripts/. + + Normalmente são feitas compilações incrementais que usam + pacotes anteriores como dependências; isso toma menos tempo, e + coloca menos carga nos sites espelho. Normalmente são feitas + compilações completas apenas quando: + + + logo depois de uma nova versão, para o ramo + -STABLE + + periodicamente, para testar mudanças realizadas + no -CURRENT + + para compilações experimentais + + + + + + Observações sobre o código base + + Até meados de 2010, os scripts + apontavam especificamente para pointyhat como + o nó principal (dispatch). Durante o verão de 2010, mudanças + significativas foram feitas a fim de aceitar outros + hosts como nós principais. Entre estas + mudanças estão: + + + remoção da string + pointyhat embutida no + código + + fatoração de todas as constantes de configuração + (que antes estavam espalhadas por todo o código) em + arquivos de configuração (veja abaixo) + + adicionar o hostname aos + diretórios especificados pelo buildid + (isto vai permitir que os diretórios sejam inequívocos + quando copiados entre máquinas.) + + tornar os scripts mais + robustos em termos de criação de diretórios e + links simbólicos + + se necessário, alterar a forma de execução dos + scripts para tornar os itens acima mais + fáceis. + + + + Este documento foi escrito originalmente antes destas + mudanças serem feitas. Nas partes em que algo foi modificado, + como nas invocações de scripts, elas estão + denotadas como novo código base: em + oposição à antigo código base:. + + + Como em dezembro de 2010, o pointyhat + ainda está rodando sobre o antigo código base, até que o + novo código base seja considerado estável. + + + + Também durante esse processo, o código base foi migrado + para o repositório + Subversion. Para referência, a versão + anterior ainda pode ser encontrada + no CVS. + + + + + + Gerenciamento dos Clientes de Compilação + + Os clientes &i386; localizados conjuntamente com o + pointyhat, efetuam o boot + via rede a partir dele (nós + conectados); todos os outros clientes + (nós desconectados) ou são + auto-hospedados ou efetuam boot via rede a + partir de outro host pxe. Em todos os casos + eles se auto configuram durante o boot + preparando-se para compilar pacotes. + + O cluster principal copia, através do + rsync, os dados necessários (a árvore de + ports e dos fontes, bindist + tarballs, scripts, etc.) para os + nós desconectados durante a fase de configuração dos nós. Em + seguida, o diretório portbuild desconectado é + montado como nullfs para compilações sob + chroot. + + O usuário + ports-${arch} + pode acessar os nós clientes através do &man.ssh.1; para + monitorá-los. Use o sudo e verifique o + portbuild.hostname.conf + para o usuário e detalhes do acesso. + + O script + scripts/allgohans pode ser usado para + executar um comando em todos os clientes + ${arch}. + + O script + scripts/checkmachines é usado para monitorar + a carga em todos os nós do cluster de + compilação, e agendar quais nós compilarão quais + ports. Este script não é + muito robusto e tem uma tendência a morrer. É melhor iniciar + este script no nó principal (por exemplo, + pointyhat) depois do boot + usando um loop com &man.while.1;. + + + + Configuração do Ambiente de Compilação sob + <literal>Chroot</literal> + + A compilação de pacotes é realizada em um ambiente + chroot, configurado pelo + script portbuild usando + o arquivo + ${arch}/${branch}/builds/${buildid}/bindist.tar. + + + O seguinte comando faz o build world + a partir da árvore de diretórios em + ${arch}/${branch}/builds/${buildid}/src/ + e o instala em ${worlddir}. A + árvore de diretórios será atualizada primeiro, a menos que a + opção -nocvs seja especificada. + + /var/portbuild&prompt.root; scripts/makeworld ${arch} ${branch} ${buildid} [-nocvs] + + O arquivo bindist.tar é criado a partir + do world, instalado previamente, pelo + script mkbindist. Este + deve ser executado como root com o + seguinte comando: + + /var/portbuild&prompt.root; scripts/mkbindist ${arch} ${branch} ${buildid} + + Os tarballs de cada máquina estão + localizados em + ${arch}/clients. + + O arquivo bindist.tar é extraído para + cada cliente durante a inicialização dos mesmos, e no início de + cada passagem do script + dopackages. + + + Novo Código Base + + Para ambos os comandos acima, se o + ${buildid} estiver definido como + latest, ele pode ser omitido. + + + + + Customizando Sua Compilação + + (O trecho a seguir aplica-se apenas ao novo código + base.) + + Você pode customizar sua compilação providenciando versões + locais do make.conf e/ou + src.conf, localizados em + ${arch}/${branch}/builds/${buildid}/make.conf.server + e + ${arch}/${branch}/builds/${buildid}/src.conf.server, + respectivamente. Estes serão usados, em vez dos arquivos + padrões que estão no lado do servidor. + + Da mesma forma, se você também quiser afetar o + make.conf no lado do + cliente, você pode usar o + ${arch}/${branch}/builds/${buildid}/make.conf.client. + + + + Devido ao fato de cada um dos clientes individuais poder + ter seu próprio make.conf, o conteúdo do + ${arch}/${branch}/builds/${buildid}/make.conf.client + vai ser adicionado ao + make.conf, e não substituí-lo, como é feito + com o + ${arch}/${branch}/builds/${buildid}/make.conf.server. + + + + + Não existe nenhuma funcionalidade semelhante para + ${arch}/${branch}/builds/${buildid}/src.conf.client + (e que efeito teria?). + + + + Exemplo de + <filename>make.conf.<replaceable>target</replaceable></filename> + para testar a nova versão padrão do + <application>ruby</application> + + (Neste caso, os conteúdos são idênticos para ambos, + servidor e cliente.) + + RUBY_DEFAULT_VER= 1.9 + + + + Exemplo de + <filename>make.conf.<replaceable>target</replaceable></filename> + para compilação do <application>clang</application> + + (Neste caso, os conteúdos também são idênticos para ambos, + servidor e cliente.) + + +.if !defined(CC) || ${CC} == "cc" +CC=clang +.endif +.if !defined(CXX) || ${CXX} == "c++" +CXX=clang++ +.endif +.if !defined(CPP) || ${CPP} == "cpp" +CPP=clang-cpp +.endif +# Don't die on warnings +NO_WERROR= +WERROR= + + + + + Exemplo de <filename>make.conf.server</filename> para + <application>pkgng</application> + + WITH_PKGNG=yes +PKG_BIN=/usr/local/sbin/pkg + + + + Exemplo de <filename>make.conf.client</filename> para + <application>pkgng</application> + + WITH_PKGNG=yes + + + + Exemplo de <filename>src.conf.server</filename> para + testar uma versão nova do código base do + <application>sort</application> + + WITH_BSD_SORT=yes + + + + + Iniciando a Compilação + + 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 <literal>Scripts</literal> + <command>dopackages</command> + + Os scripts + scripts/dopackages são usados para executar + as compilações. + + + Código base antigo + 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] + + + + + Novo código base + + Você pode usar o dopackages.wrapper + diretamente, ao invés dos links simbólicos. + Por exemplo: + + dopackages.wrapper ${arch} ${branch} ${buildid} [-options] + + + + + Para ambos os códigos base + + 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. + + + + 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 + + + + 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 + + + + 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). + + + + + O comando <command>build</command> + + 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! + + + + + + + + Compilando um único pacote + + 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 + + + + + Anatomia de uma compilação + + Uma compilação completa, sem qualquer opção + -no que desabilite as opções padrões, executa + as seguintes operações na ordem especificada: + + + + Atualiza a árvore de ports atual a + partir de um snapshot do ZFS [*] + + + + + Atualiza o branch usado na árvore + src a partir de um + snapshot do ZFS [*] + + + + + Verifica se ports não têm uma + entrada SUBDIR no + Makefile de suas respectivas categorias + [*] + + + + + Cria o arquivo duds, que é uma + lista de ports que não precisam ser + compilados [*] [+] + + + + + Cria um arquivo INDEX atualizado + [*] [+] + + + + + Define os nós que serão usados na compilação [*] [+] + + + + + Compila uma lista de ports restritos + [*] [+] + + + + Compila os pacotes (fase 1) [++] + + + + Executa outra configuração do nó [+] + + + + Compila os pacotes (fase 2) [++] + + + + [*] O status destes passos pode ser encontrado em + ${arch}/${branch}/build.log, + bem como no stderr do tty + onde o comando dopackages está + rodando. + + [+] Se qualquer destes passos falhar, a compilação será + encerrada. + + [++] O status destes passos pode ser encontrado em + ${arch}/${branch}/make + (antigo código base) ou + ${arch}/${branch}/journal + (novo código base). Ports individuais irão + escrever seus logs de compilação em + ${arch}/${branch}/logs + e os seus logs de erros em + ${arch}/${branch}/errors. + + + Anteriormente, a árvore docs também era + verificada, no entanto, isso se mostrou desnecessário. + + + + + Manutenção da Compilação + + Existem vários casos onde você precisará limpar manualmente + uma compilação: + + + + + Você a interrompeu manualmente. + + + + O pointyhat foi reiniciado enquanto uma *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***