2008/8/18 Renato Botelho <[EMAIL PROTECTED]>: > 2008/8/16 Joao Rocha Braga Filho <[EMAIL PROTECTED]>: >> Eu estou fazendo uma atualização maciça na minha estação de trabalho, >> e cometi alguns erros e acertos. Acho que aprendi com os dois. Ela ainda >> está em andamento, mas resolvi escrever algumas dicas aqui. >> >> Não vou ensinar a compilar kernel, atualizar ports e os fontes do sistema, >> etc, mas vou dar uma sequência para paralelizar muitas das tarefas para >> que a atualização maciça seja executada o mais rápido possível. >> >> O roteiro envolve atualização do sistema, compilando na máquina, e dos >> pacotes. Eu estou fazendo isto para passar do FreeBSD 6.3-RELENG pro >> 7.0-RELENG, para o KDE 4.1 e ainda para o XOrg 7.3, e mais muitas outras >> atualizações. >> >> Muitas tarefas podem ser paralelizadas, por exemplo, downloads ocupam >> mais banda e um pouco de CPU e acesso à disco, e as compilações usam >> muita CPU, memória e acesso à disco, mas nada de download. Atualizar o >> sistema compilando na máquina faz as duas coisas alternadamente. E por >> que não paralelizar? >> >> Começando: >> >> 1 ) Pode-se fazer cvsup atualizando os fontes e os ports ao mesmo tempo. >> Isto consumirá um pouco CPU, mas muito acesso à Internet e acesso à disco. >> Estas duas tarefas podem ser paralelizadas sem problemas. >> >> 2.a ) Depois de atualizar os fontes, pode-se começar a compilar o sistema >> e o kernel. Eles podem ser em paralelo, creio eu, mas isto pode degradar a >> máquina. Usando o comando "nice +20" antes do make pode-se atenuar a >> degradação do sistema. Exemplo: >> >> nice +20 make buildworld >> >> 2.b) Uma vez que o ports tree esteja atualizado, pode-se começar a fazer os >> downloads, mas não se pode compilar ainda, pois a compilação será feita com >> o sistema que está instalado na máquina, e não o novo que será instalado. >> >> Neste ponto tem uma decisão séria a ser tomada relativa ao espaço em disco >> do sistema de arquivos. Se no /usr/ports/distfiles tiver muitos >> arquivos, se eles >> forem antigos e desatualizados, e tiver pouco espaço no sistema de arquivos, >> é >> conveniente esvaziar no /usr/ports/distfiles. Mas se a maioria estiver >> atualizada, >> é desaconselhável esvaziá-lo. É uma decisão entre o que serve dali e o espaço >> em disco disponível. >> >> Para fazer o download dos fontes de um programa dos ports, e de todas as suas >> dependências, use: >> >> make fetch-recursive >> >> Isto nem sequer descompactará os arquivos, Só fará o download deles. >> >> Pra melhor eficiência, faça de algo grande que você use. Por exemplo, se você >> usa o KDE, vá para o diretório do KDE nos ports e faça este comando acima. Se >> vai instalar o Firefox, faça no diretório do firefox. >> >> Tem programas que não são instalados pelas depenências de grandes programas, >> e até não tem as mesmas dependências, como o portaudit e o screen, portanto >> podem ser feitos "make fetch-recursive" deles em paralelo. >> >> 2.c) Note: A máquina continuará usável neste tempo, mas ela ficará meio >> ocupada. >> >> 3 ) Uma vez que o kernel e o sistema compilaram, pode-se fazer a atualização >> do >> sistema em si. Neste ponto cabe outra decisão. Espera o "make >> fetch-recursive" >> dos ports terminarem, ou para ele para continuar depois, e fazer a >> instalação do >> sistema agora. Eu voto pela interrução, no início de um arquivo que esteja >> sendo >> baixado, para minimizar os prejuízos. Este arquivo interrompido deverá >> ser removido >> do /usr/ports/distfiles. >> >> Este é o último ponto de usabiilidade do sistema antes da atualização >> estar quase >> pronta. >> >> Instale o kernel atualizado (Durante este tempo o download pode continuar.). >> >> 4 ) Entre e mono-usuário e faça o "make installworld" e o "mergemaster". >> Depois >> de reboot. >> >> Ao final desta etapa, o sistema estará atualizado, mas os ports nele >> instalados >> não estarão. >> >> 5.a ) Pode-se retomar o "make fetch-recursive" >> >> 5.b ) Fazer a remoção de todos os ports instalados com "pkg_delete >> -a". Isto pode >> demorar um pouco, e vai fazer acessos ao disco intensamente. >> >> 5.c ) Se julgar que o espaço em disco possa ser insuficiente, pode esvaziar o >> diretório /usr/obj, que são os arquivos do sistema compilados para >> serem instalados. >> Neste ponto não necessita mais deles. A presença deles pode diminuir o tempo >> de compilação duma nova atualização do sistema, mas consome um bom espaço >> em disco. Esta tarefa pode ser adiada tranquilamente, e a decisão de >> fazê-la ou não >> ficar dependendo do consumo do espaço em disco. >> >> 6.a e b ) Comece a compilar os ports, e continuar com o download. A condição >> é que o download esteja adiantado em relação à compilação. >> >> Para impedir um disco cheio, pode fazer um make clean depois de cada final de >> compilação dos ports. >> >> De vez em quando olhe como anda a compilação, pois é comum pedidos de >> intervenção do operador, para decisões. Por exemplo, o XOrg pergunta quais >> drivers de vídeo devem ser compilados. >> >> Compilações podem ser feitas em paralelo, desde que não conflitem, i.e., >> não tentem compilar a mesma dependência ao mesmo tempo. Eu passei >> por isto. A sugestão é compilar algo pequeno em paralelo com algo grande, >> ou que garantidamente não interfiram, como apache e mysql. Depois de >> um tempo, boa parte das dependências estarão compiladas e instaladas, >> e as coisas pequenas e médias não conflitarão tanto. >> >> >> Observações finais: >> >> É comum na compilação de um port a alternância entre download e >> compilação. Nesta receita acima não ocorrem estas pausas para download, >> pois eles foram feitos antecipadamente. Mas também pode-se antecipar >> as descompactações com "make patch" e "make extract". Pena que não >> exista um "make extract-recursive" ou um "make patch-recursive". >> >> Parece que existe um modo do processo não parar a cada pedido de >> intervenção do usuário e configuração: "make config-recursive". >> >> Se o espaço em disco for pequeno, pode-se usar "make distclean" depois de >> cada port pronto, para remover os arquivos não mais necessários que estão >> no /usr/ports/distfiles e os temporários da compilação. >> >> >> Isto virou quase que um artigo. Se alguém quiser colocar em um site, coloque >> colocando o meu nome, e me passe o link, e se tiver contribuições, coloque >> os nomes de quem contribuiu após o meu. > > Legal as dicas, atualizações entre major version (6.x -> 7.x) são sempre > traumáticas por conta dos ports. > > Pra que usa portupgrade, o que pode-se fazer após terminar de atualizar o > sistema para 7.0 e reiniciar o equipamento é usar um: > > portupgrade --batch -f -k -a > > Isso irá recompilar *todos* os ports, apenas cuidado com o openoffice :), > você pode removê-lo da lista usando o parâmetro -x, ficaria assim > > portupgrade --batch -f -k -a -x '*openoffice*'
Boa idéia. Eu não pensei nisto. Mas as minha dica do make fetch-recursive deve se encaixar perfeitamente com isto. > > Fiz isso na minh última migração de 7.0-STABLE pra 8.0-CURRENT e correu > tudo perfeitamente. Eu vou ficar no 7.0 por enquanto. :^) Aliás, o KDE mudou muito, mas está MUITO rápido. Agora não sei se foi o XOrg novo, o KDE4 e/ou FreeBSD 7.0. Podem ser todos. João Rocha. > > Meus 2 cents. > -- > Renato Botelho > ------------------------- > Histórico: http://www.fug.com.br/historico/html/freebsd/ > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd > -- "Sempre se apanha mais com as menores besteiras. Experiência própria." [EMAIL PROTECTED] ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd