Gentoo Logo

Aviso : Este documento não é válido e não é mais mantido.


O guia de ebuilds avulsas do KDE

Conteúdo:

1.  As ebuilds avulsas do KDE

O que elas são

Até janeiro de 2005, as únicas ebuilds de KDE no Portage eram 'monolíticas'. Isto é dizer, eram só 15 ebuilds, e cada uma instalava muitas aplicações que, de fato, não dependiam uma da outra. Isto era claramente uma situação sub-otimizada, e não muito do estilo do Gentoo, mas foi tolerada por muito tempo.

As novas ebuilds 'avulsas' consertaram a situação oferecendo ebuilds separadas para todas aplicações do KDE. Isto nos deu um novo total de cerca de 230 novas ebuilds na categoria kde-base.

Nós ainda providenciamos ebuilds monolíticas para o KDE 3.4 e elas são limpamente inter-operáveis com as avulsas. Todavia, as ebuilds avulsas são o novo padrão, e não haverá ebuilds monolíticas para o KDE 4.0.

Finalmente, deve ser mencionado que há ebuilds avulsas para Koffice também. Elas fornecem kword, kugar, etc... como pacotes separados.

Como instalar as ebuilds avulsas

O último pré-lançamento do KDE 3.4.0, na época desta escrita, é 3.4.0_beta1. Ebuilds mascaradas avulsas (e monolíticas) estão presentes no Portage. O último lançamento do KDE, na época desta escrita, é 3.4.1, recentemente marcado como estável. Tanto ebuilds avulsas como monolíticas estão disponíveis no Portage.

  • Para fazer emerge de um pacote particular, como kmail, simplesmente faça emerge kmail.
  • Para fazer emerge do ambiente básico de KDE permitindo que você faça log-in em uma sessão de KDE minimalística, faça emerge kdebase-startkde.
  • Finalmente, para o equivalente exato de um dos pacotes monolíticos - por exemplo, para ter todas aplicações inclusas no kdebase usando ebuilds avulsas - você pode fazer emerge kdebase-meta (ou kdepim-meta, etc.) Para obter todas ebuilds avulsas do KDE, faça emerge kde-meta.

Como atualizar de ebuilds monolíticas para avulsas

Se você tem o KDE 3.3.x instalado, você pode simplesmente rodar emerge kde-meta para instalar as ebuilds avulsas de 3.4.x sem perturbar sua instalação existente.

Se você tiver ebuilds monolíticas de KDE 3.4.x instaladas, você precisa desinstalá-las antes de instalar as ebuilds avulsas. No entanto, este processo pode ser feito para cada ebuild monolítica. Você não precisa desinstalar o KDE inteiro de uma vez.

Se você estiver em dúvida, lembre-se que há dependências de bloqueio entre cada ebuild monolítica e ebuilds avulsas derivadas delas. O Portage não irá permitir que um estado ilegal seja criado, portanto qualquer instalação ou desinstalação que ele permitir não terá problemas.

Vantagens das ebuilds avulsas

Aqui está uma breve lista do que nós ganhamos trocando para ebuilds avulsas:

  • A maior parte dos pacotes de KDE não muda nada entre pequenos lançamentos do KDE. Por exemplo, a atualização do 3.3.1 para o 3.3.2 mudou menos que 100 pacotes de 320. Pacotes avulsos permitem que nós criemos ebuilds só para os pacotes que realmente mudaram, salvando (neste exemplo) mais de dois terços de tempo de compilação em uma atualização.
  • Patches normalmente afetam um pacotes específico. Com ebuilds avulsas, eles podem ser testados, aprovados e contribuídos mais rapidamente, e os desenvolvedores tem menos a fazer; e, como acima, o usuário irá gastar menos tempo atualizando. Isto é especificamente importante para atualizações de segurança.
  • Usuários de outros desktops e WMs diferentes podem fazer emerge de poucas aplicações de KDE de que gostam sem a (grande) carga do resto de, digamos, kdebase ou kdepim.
  • Usuários podem ajustar cuidadosamente que pacotes têm instalados. Razões para querer isto incluem:
    • Você se importa com tempo de compilação. emerge kdebase kdepim kdenetwork leva muito tempo quando só o que você precisa é o konqueror, kmail e kopete. Aliás, tempo de processador é dinheiro... em algum lugar.
    • Você se importa com uso de disco. Cada pacote não usado significa muitos megabytes bloqueando os poros entre os setores de seu disco. Um disco com mais espaço livre respira livremente; é um disco rápido e feliz.
    • Você se importa com a segurança do sistema. Todo software instalado é uma fonte potencial de vulnerabilidades, e não há desculpa para software não-usado ficar por aí.
    • Você adere fielmente ao Modo do Gentoo, e não pode tolerar que pacotes sejam colocamos juntamente e forçados ao usuário. (Nós também não.)
  • Finalmente, as ebuilds avulsas também permitem maior flexibilidade na hora da compilação com as variáveis de USE.

Inter-operabilidade de ebuilds avulsas e monolíticas

Ebuilds avulsas e monolíticas podem ser misturadas livremente. A única restrição é que uma ebuild monolítica não pode ser instalada junto com uma ebuild avulsa que deriva dela. Existem dependências de bloqueio nas ebuilds que garantem isso, então você pode fazer qualquer coisa que o emerge permitir.

Ordinariamente, no entanto, não há motivo para usar uma configuração mista. Na verdade, fora casos especiais como máquinas que compilam muito lentamente (mips), você deve usar ebuilds avulsas para todas suas necessidades.

As ebuilds avulsas também são as ebuilds padrão. Isto significa que quando alguma outra ebuild depender de uma aplicação de KDE, ela irá instalar a ebuild avulsa. Todavia, a ebuild monolítica correspondente também irá satisfazer a dependência, então você pode fazer emerge da ebuild monolítica manualmente e então fazer emerge da ebuild que dependia dela.

2.  Problemas de performance

Por que ebuilds avulsas são lentas

Já foi dito antes que ebuilds avulsas iriam levar muito mais tempo para fazer emerge que as monolíticas, devido à carga de desempacotar e rodar configure para cada pacote. Um emerge kde-meta pode levar de 20-30% a mais de tempo que um emerge kde clássico, algo inaceitável em uma compilação já muito longa.

Adicionalmente, atualmente as ebuilds avulsas sempre rodam make -f admin/Makefile.cvs (isto significa rodar autoconf, automake, etc. e vários scripts relacionados especificamente ao kde). Isto adiciona uma lentidão de aproximadamente a mesma ordem que rodar configure.

Em face disto, a análise parece ser desoladora. No entanto, vários fatores que cobrem esta lentidão serão detalhados nas seção a seguir.

Vale reiterar aqui que com as ebuilds avulsas o tempo de compilação de uma atualização do KDE pode ser cortado pela metade - e em alguns casos por um fator de dez ou mais - ao só atualizar os pacotes que realmente mudaram. O benefício de uma atualização simples de uma atualização normalmente cobre a carga adicional tomada durante a instalação original.

Finalmente, instalar tudo do KDE faz sentido se você quiser explorar todos pacotes disponíveis ou estiver configurando um ambiente multi-usuário; porém, a maior parte das pessoas usa só algumas das mais de 300 aplicações de KDE disponíveis. Qualquer pessoa que se importa com tempo de compilação, como proprietários de máquinas antigas, podem ganhar mais tempo ao instalar pacotes seletivamente que perdem pela carga adicional incorrida.

Como as ebuilds avulsas serão agilizadas

A melhoria mais óbvia seria distribuir tarballs separadas para as ebuilds avulsas, ao invés de desempacotar pedaços das tarballs monolíticas (kdebase etc...) distribuídas pelos desenvolvedores. Isto eliminaria dois dos três fatores de carga que tornam as ebuilds avulsas lentas: extração repetitiva das grandes tarballs e regeração de makefile (a fase make -f admin/Makefile.cvs mencionada acima).

Isto nos deixa com o problema de rodar o configure repetidamente. A solução adequada para isto é o confcache: um cache de configure compartilhado entre as vezes que o emerge é rodado. Uma implementação já existe no ramo de desenvolvimento do portage (a ferramenta, não a árvore de pacotes); um lançamento estável com confcache é esperado dentro de meio ano.

Outros fatores que superam a lentidão das ebuilds avulsas

A seção anterior listou métodos de melhorar a performance das ebuilds avulsas especificamente. A seguir nós iremos mencionar brevemente algumas melhorias futuras que são igualmente aplicáveis a ebuilds monolíticas. Tais melhorias ajudam a tornam ebuilds avulsas 'rápidas o suficiente', a parte de comparações com soluções de menos funções como as ebuilds monolíticas.

  • KDE 4.0 deve ser capaz de usar unsermake ao invés de automake, que melhora o tempo de compilação em alguns cenários; nossas ebuilds de KDE 3.4 podem acabar usando unsermake também.
  • As ebuilds avulsas suportam a opção de USE kdexdeltas, que permite baixar diffs binários entre as tarballs de lançamento para economizar uso de banda.
  • Todas outras ferramentas envolvidas na construção também geralmente ficam mais rápidas com o tempo, ou ativam melhorias na compilação relacionada ao KDE. As novas funções visibility=hidden (GCC 3.4) e cabeçalhos pré-compilados (GCC 4.0) são dois exemplos recentes. Eles não são resultados da troca para ebuilds separadas; só significam que podemos fazer compilações mais intensas nos processadores agora.

3.  Perguntas freqüentemente feitas das ebuilds avulsas

Nós já não podemos fazer isto com DO_NOT_COMPILE?

DO_NOT_COMPILE é uma variável de ambiente interna ao sistema de construção do KDE. Ela permite desativar subdiretórios seletivamente durante a compilação. Algumas pessoas usavam-na para compilar subconjuntos de ebuilds monolíticas do KDE. Por exemplo, rodar DO_NOT_COMPILE=konqueror emerge kdebase iria instalar um kdebase sem a aplicação konqueror.

No entanto, DO_NOT_COMPILE nunca teve a intenção de interferir com a operação das construções automáticas de um gerenciador de pacotes. Não funciona, pode quebrar seu sistema, e nunca foi suportado. Nós pedimos a todos que não usem DO_NOT_COMPILE.

Aqui está uma lista parcial de problemas com DO_NOT_COMPILE:

  • Quebra o rastreamento de dependências do portage. O portage não sabe sobre o DO_NOT_COMPILE, e acha que um pacote monolítico inteiro foi instalado e pode satisfazer as dependências de outros pacotes. Isto pode fazer com que outros pacotes não instalem ou rodem.
  • Força o usuário a conhecer os nomes e significados de todos subdiretórios diferentes existentes dos módulos do KDE. Muitos poucos usuários sabem, a menos que sejam desenvolvedores do KDE, então não podem usar DO_NOT_COMPILE adequadamente.
  • Subdiretórios de módulos do KDE podem ter interdependências entre si, precisar de uma ordem de construção particular, precisar que outro diretório esteja presente mesmo se não for instalado, e assim em diante. Nós trabalhamos muito nas ebuilds avulsas para que funcionem bem neste aspecto. DO_NOT_COMPILE não é uma ferramenta fina o suficiente para obter os mesmos resultados, mesmo que o usuário tenha conhecimento suficiente. A única coisa que você pode fazer com ela é desativar a compilação de algumas aplicações. É praticamente impossível usá-la para instalar apenas algumas aplicações seletas de módulos como kdebase ou kdepim.
  • Se eu instalei o kmail ontem e quero adicionar o korn hoje, usando DO_NOT_COMPILE, significa recompilar o kmail também. Isto quer dizer que DO_NOT_COMPILE é sempre mais lento que ebuilds avulsas.
  • DO_NOT_COMPILE não pode ser usado para fazer pacotes pré-compilados (como o GRP) contendo aplicações de KDE individuais.

Você não está colocando uma grande carga nos mantenedores do KDE do Gentoo?

Surpreendentemente, esta questão é muito comum. Fico feliz que os usuários tem tanta consideração de nós mantenedores. Deixe-me tomar esta oportunidade para garantir que nós estamos tomando as ebuilds avulsas por conta própria; que acreditamos que poderemos continuar mantendo-as bem; e que não há chance de convencer-nos do contrário :-)

Para ser completo, devo mencionar que mantenedores de outras arquiteturas reclamaram sobre a carga de trabalho de testar e marcar tantas ebuilds separadas. Estamos tentando resolver o problema é um grande motivo pelo qual ebuilds monolíticas ainda estão disponíveis para o KDE 3.4.

Você irá remover as ebuilds de estilo antigo (monolíticas)?

Temos a intenção de fazer um dia. No entanto, haverá tanto ebuilds monolíticas como avulsas para todos lançamentos do KDE 3.4.

Se você preferir ebuilds monolíticas a avulsas, por favor conte-nos seus motivos.

Existem muitas ebuilds! Como irei encontrar a que preciso?

Bem, primeiro de tudo, se você sabe que o pacote que você está procurando veio com o kdebase, você ainda poder fazer emerge kdebase-meta, com resultados muito parecidos a fazer um emerge do kdebase monolítico. Então as coisas não ficaram na verdade piores por causa das ebuilds avulsas.

Claro, todas formas normais de localizar um pacote aplicam-se. Como você encontraria sua ebuild se fosse uma aplicação de Gnome? No mínimo, você tem que saber o nome da aplicação que está procurando.

A situação pode, talvez, ser melhorada introduzindo algumas mais ebuilds -meta. Elas são meramente listas de dependências, então não custam nada para nós. Isto ainda não foi decidido. Também, seria bom ter conjuntos de funcionalidade do Portage antes de fazermos isto extensivamente.

Como posso desinstalar um KDE antigo?

Suponha que saia o KDE 4.0 e você quer desinstalar todas ebuilds avulsas para KDE 3.4. Já que pertencem a slots separados, o emerge não fará isto para você, então outro método é necessário.

Uma solução adequada para este problema precisa de modificações no portage. Uma solução é descrita na GLEP 21. Até implementada, no entanto, precisamos usar scripts como o abaixo.

Felizmente, todas ebuilds de KDE pertencem ao diretório kde-base (e todas ebuilds na categoria kde-base vem do kde.org). Então o seguinte código funciona:

Listagem de código 3.1: Removendo KDE 3.4 do sistema

# for x in `ls /usr/portage/kde-base`; do
> if [ "$x" != "CVS" ]; then
> echo -n "=kde-base/$x-3.4* "
> fi
> done |xargs emerge -Cp

O código acima parece meio um hack, mas no final das contas não é um porque tudo que realmente precisamos é uma lista de ebuilds do kde-base. Isto é uma tarefa muito simples e sempre haverá formas fáceis de consegui-la.

Como posso listar/desinstalar todas ebuilds avulsas derivadas de um dado pacote?

O objetivo aqui é listar todas ebuilds avulsas do kde derivadas de, digamos, a ebuild monolítica kdebase. Novamente, a implementação adequada (como GLEP 21) tornaria isto trivial. Hoje, no entanto, você deve envolver-se com os detalhes d a implementação de eclasses do KDE até um certo grau. Então, se você usar qualquer um dos seugintes métodos em um script que não é de uso privado, por favor conte-nos sobre ele.

kde-functions.eclass define funções chamadas get-parent-package() e get-child-packages() que fazem a tradução para você. Estas duas funções são o jeito correto de conseguir esta tarefa de uma ebuild ou script de bash externo. Aqui está um exemplo:

Listagem de código 3.2: Exemplo de uso das funções de kde-functions

$ function die() { echo $@; } # chamada para relatar erros
$ source /usr/portage/eclass/kde-functions.eclass
$ get-parent-package konqueror # não funciona, você deve especificar nome inteiro
Package konqueror not found in KDE_DERIVATION_MAP, please report bug # erro impresso
$ get-parent-package kde-base/konqueror # nome de pacote inteiro
kde-base/kdebase # resultado impresso
$ get-child-packages kde-base/kdebase
 # (longa lista de pacotes impressa aqui)

Se seu script não for em bash, você pode fazer grep kde-functions.eclass para extrair a definição (multi-linhas) da variável KDE_DERIVATION_MAP, que as funções mencionadas usam. A variável contém uma lista de palavras separadas por espaços brancos, e cada duas palavras consecutivas mapeiam um pacote pai a uma ebuild avulsa filha.



Imprimir

Atualizado 2 de julho de 2005

A versão original desta tradução não é mais mantida

Resumo: Com o KDE 3.4, as 'ebuilds avulsas' foram introduzidas no Portage. Esta página documenta as razões por trás da transição, as funções disponibilizadas por ela e o como atualizar das antigas ebuilds 'monolíticas'.

Dan Armak
Autor

Marcelo Góes
Tradutor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.