O Portage reconstrói pacotes completos ao atualizar?

4

Quando eu atualizo um sistema Gentoo, o Portage busca novas fontes, extrai-as e recompila tudo do zero, ou extrai-as para fontes existentes e compila apenas arquivos alterados?

    
por Gala 18.06.2016 / 18:34

2 respostas

2

Embora o make(1) e muitos sistemas de compilação, como o autotools, suportem compilação incremental, o Gentoo com o Portage padrão não aproveita isso. Depois que um pacote é compilado e instalado, o diretório de trabalho é descartado.

A dificuldade real de usar compilação incremental seria fazer com que os pacotes fossem construídos de maneira confiável dessa maneira. É muito mais fácil ter certeza de que uma compilação será bem-sucedida, correta e reproduzível se você sempre fizer uma compilação limpa. Muitos sistemas de compilação quebrariam sutilmente se o Gentoo tentasse dar suporte à reconstrução incrementalmente. E, em muitos casos, seria necessário executar novamente ./configure (ou seu equivalente), o que provavelmente criaria um novo config.h ou atualizar variáveis de ambiente, como CFLAGS e CPPFLAGS no Makefile s gerado (ou equivalentes se outros sistemas de compilação forem usados). Tocar config.h exigiria que a maioria das fontes fosse recriada. E se PACKAGE_VERSION for alterado, o que pode ser passado por Makefile via CPPFLAGS se o pacote não usar config.h , todas as fontes devem ser reconstruídas para ver os novos valores - a menos que você pode de alguma forma descobrir que certos arquivos de origem não precisariam ser recompilados porque eles não fazem referência a uma macro de pré-processador em particular.

Então, no final, mesmo que o Gentoo dedicasse todo o trabalho para tentar dar suporte à compilação incremental entre as atualizações da versão do pacote, muitos pacotes precisariam ser totalmente recompilados ou make(1) seria acabará recompilando-os totalmente de qualquer maneira (por exemplo, se o timestamp de config.h for alterado). Então, isso seria um esforço de alto custo para um ganho muito marginal - e até mesmo provavelmente introduziria um lote de bugs sutis , no meu melhor entendimento. Assim, não espero que tal recurso seja introduzido.

A minha resposta refere-se principalmente a pacotes autotools / simples Makefile -tipo, mas nem tudo é compilado desta forma, pelo que os motivos exatos provavelmente seriam diferentes dependendo do pacote exato em questão.

    
por 20.06.2016 / 05:56
2

O Portage compila todas as fontes do novo pacote como entregue pelo desenvolvedor (às vezes a equipe do gentoo corrige a fonte, mas isso é outra história).

Os binários do pacote antigo geralmente são removidos, embora algumas bibliotecas antigas permaneçam se a exclusão delas prejudicasse outros pacotes. Para remover fontes antigas, você precisa executar eclean -d distfiles .

    
por 18.06.2016 / 20:28