Gentoo Logo

El COMO de los Ebuilds separados de KDE

Contenido:

1.  Los ebuilds separados de KDE

¿Qué son?

Hasta enero del 2005, los únicos ebuilds de KDE en Portage eran los 'monolíticos'. Eso significa que solamente existían 15 ebuilds (kdebase, kdenetwork, ...), y cada uno de ellos instalaba muchas aplicaciones que, de hecho, no dependían uno del otro. Esto era claramente una situación no muy óptima que digamos, y no sigue la filosofía Gentoo; pero fue tolerado por un largo tiempo.

Los nuevos ebuilds 'separados' (para konqueror, kmail, ...) han rectificado esta situación proporcionando ebuilds separados para todas las aplicaciones de KDE. Esto nos da un gran total de unos 330 nuevos ebuilds en la categoría kde-base.

Todavía proporcionamos ebuilds 'monolíticos' para KDE 3.5 (hasta la versión 3.5.9) que interoperan limpiamente con los 'separados'. Sin embargo, los ebuilds separados son la nueva forma por defecto y no habrá más ebuilds monolíticos después de KDE 3.5.9.

También se encuentran los ebuilds separados para el Koffice. Estos nos proveen de kword, kugar, etc. como paquetes separados.

¿Cómo usarlos?

En el momento de edición de este documento, la última versión de KDE es la 3.5.9. La última versión inestable (~arch) es la 3.5.10. En Portage se encuentran los correspondientes ebuilds separados y monolíticos para ambas versiones. La última versión 4.1.x también está en el árbol.

  • Para realizar un emerge de un paquete particular, como kmail, simplemente debe ejecutar emerge kmail.
  • Para realizar un emerge del entorno básico del KDE en donde puedas realizar un login del una sesión minimalística del KDE, tienes que ejecutar emerge kdebase-startkde
  • Finalmente, para obtener el equivalente exacto a lo realizado por un ebuild monolítico (por ejemplo, para instalar todas las aplicaciones incluidas en kdebase) con ebuilds separados, debe ejecutar emerge kdebase-meta (o kdepim-meta, etc.). Para instalar absolutamente todo el paquete KDE ejecute emerge kde-meta

¿Cómo actualizar ebuilds de monolíticos a separados?

Si tiene instalados los ebuilds monolíticos de KDE 3.4.x ó 3.5.x, debe desinstalarlos antes de proceder con los ebuilds separados. No obstante, este proceso puede ser hecho por partes, es decir, puede desinstalar los ebuilds monolíticos uno a uno sin tener que desinstalar todo KDE de una vez.

Si tiene dudas, recuerde que hay dependencias bloqueantes entre cada ebuild monolítico y los ebuilds separados que derivan del primero. Portage no permitirá que se cree un estado ilegal, así que cualquier emerge o unmerge que permita estará correcto.

Ventajas de utilizar los ebuilds separados

Aquí se encuentra una breve lista de los beneficios obtenidos al pasarnos a los ebuilds separados:

  • La mayoría de los paquetes no cambian entre versiones menores de KDE. Por ejemplo, al realizar una actualización del 3.3.1 al 3.3.2, apenas cambian alrededor de 100 de los 320 paquetes. Los paquetes separados nos permiten crear nuevos ebuilds solamente para aquellos paquetes que realmente cambian, ahorrándonos (en este ejemplo) más de dos tercios del tiempo en compilación en la actualización.
  • Los parches usualmente afectan a un paquete en particular. Con los ebuilds separados, pueden ser probados y realizar un commit de ellos más rápido, y los desarrolladores tienen menos cosas para hacer; y como en el ítem anterior, el usuario se ahorraría tiempo en compilación al actualizar el KDE. En particular, esto es muy importante para las actualizaciones de seguridad.
  • Los usuarios de otros entornos de escritorios y administradores de ventanas más sencillos, pueden instalar vía emerge las aplicaciones que quieran sin necesidad de instalar todas las demás aplicaciones de, por ejemplo, kdebase o kdepim.
  • Los usuarios tienen un control más detallado con respecto a los paquetes que tienen instalados. Las razones por las cuales querrá esto son:
    • Le importa el tiempo de compilación. emerge kdebase kdepim kdenetwork tarda demasiado tiempo cuando lo único que necesita es konqueror, kmail y kopete, aparte la consideración que el tiempo es dinero ... en alguna parte.
    • Le importa el uso del espacio en el disco. Cada paquete no usado, malgasta muchos megabytes, "tapando los poros" del disco. Un disco con más espacio libre puede "respirar mejor"; es un disco rígido feliz :).
    • Le importa la seguridad de su sistema. Todo el software instalado es una fuente potencial de vulnerabilidades, y no existe excusa alguna para andar teniendo software por ahí en su sistema sin ser usado.
    • Es fiel adherente de la Filosofía Gentoo y no soporta el hecho que muchos programas estén en un enorme paquete forzado sobre los usuarios. Nosotros tampoco lo soportamos.
  • Finalmente, los ebuilds separados también nos permiten más flexibilidad con respecto al tiempo de compilación y el uso de los parámetros USE.

Interoperabilidad entre los ebuilds separados y monolíticos

Los ebuilds monolíticos y separados pueden ser mezclados libremente. La única restricción es que un ebuild monolítico no puede ser instalado al mismo tiempo que un ebuild separado derivado de este. Existen dependencias bloqueantes en los ebuilds que hagan esto, así que sólo podrá hacer cualquier cosa que emerge le permita.

Sin embargo, por lo general, no existe razón alguna para utilizar una configuración mixta. De hecho, excepto en casos especiales, como que la compilación tarde demasiado (CPUs mips), debería utilizar los ebuilds separados.

Los ebuilds separados son los ebuilds por defecto. Esto significa que cuando otro ebuild dependa de una aplicación de KDE, querrá instalar un ebuild separado. Sin embargo, el ebuild monolítico equivalente también cumpliría con la dependencia, de manera que puede realizar un emerge del ebuild monolítico manualmente y luego realizar el emerge del ebuild que depende del mismo.

2.  Inconvenientes de rendimiento

¿Por qué los ebuilds separados son lentos?

Se ha dicho que debido a la sobrecarga de descomprimir y ejecutar 'configure' por cada paquete los ebuilds separados tomarán mucho más tiempo en realizar un emerge que los monolíticos. Un emerge kde-meta podría tomar un 20-30% más que el clásico emerge kde, lo cual es inaceptable debido al ya largo tiempo de compilación.

Además, en este momento los ebuilds separados siempre ejecutan make -f admin/Makefile.cvs (esto significa ejecutar autoconf, automake, etc. y demás guiones relacionados a KDE). Esto añade una tardanza adicional aproximadamente del mismo orden que demora al ejecutarse 'configure'.

Finalmente, un ebuild separado necesita extraer archivos específicos desde un archivo tar grande. Esto es más lento que realizar la extracción desde un archivo tar pequeño y dedicado. No obstante, crear archivos tar pequeños para el sistema de construcción basado en autotools del KDE 3.X es difícil.

Vale la pena reiterar que con los ebuilds separados, el tiempo de actualización de KDE puede ser considerablemente reducido con el simple hecho de realizar una actualización de los paquetes que realmente cambian. El beneficio de una actualización única por lo general hace que valga la pena pasar por la sobrecarga inicial de la instalación.

Finalmente, instalar todo el KDE tiene sentido si quiere explorar los paquetes disponibles o si está configurando un entorno multi-usuario; sin embargo, la mayoría de las personas utilizan sólo algunas de las más de 300 aplicaciones disponibles de KDE. Cualquier persona a quien le importe el tiempo de compilación, como los usuarios que poseen máquinas viejas, pueden ganar mas tiempo seleccionando solamente los paquetes que quieran.

¿Que se hará para acelerar los ebuilds separados?

La mayor parte o incluso todos los problemas de rendimiento de los ebuilds separados se relacionan a autotools - autoconf, automake y otras herramientas que gestionan el sistema de construcción ./configure;make;make install usado en KDE 3.x.

KDE 4 ha adoptado un sistema completamente nuevo de construcción, cmake, el cuál entre otras cosas reduce de gran manera el tiempo, y es equivalente a realizar un make -f admin/Makefile.common; ./configure

3.  PFU (FAQ) de los ebuilds separados

¿Por qué hay algunos paquetes separados que les faltan las versiones de ebuilds más nuevas?

Como explicamos arriba, no todas las aplicaciones son verdaderamente actualizadas entre versiones menores de KDE, así no todas las aplicaciones tienen nuevas versiones de ebuild. Por ejemplo, libkdenetwork no fue actualizado en 3.5.0_beta2, de forma que el último ebuild disponible con aquella versión fue 3.5_beta1.

Este se hace meramente para reducir el tiempo de compilación durante una actualización. Si hubiéramos hecho un ebuild libkdenetwork-3.5.0_beta2, este habría instalado precisamente los mismos archivos que el ebuild 3.5_beta1. Las varias dependencias son actualizadas para funcionar correctamente (es decir, no habrá ebuild alguno que dependa de libkdenetwork-3.5.0_beta2).

Note que a causa de ésto, si desea instalar versiones enmascardas de KDE, podría también necesitar desenmascarar paquetes de versiones anteriores de KDE, si es que están enmascaradas. Puede que le sea de utilidad leer éste bug para mayor información.

Actualmente, ¿no se puede hacer esto con DO_NOT_COMPILE?

DO_NOT_COMPILE es una variable de entorno interna que usa el sistema de construcción de KDE. Permite seleccionar los subdirectorios que no queremos que se compilen. Algunas personas lo usaban para compilar un subconjunto de los ebuilds monolíticos del KDE. Por ejemplo, si ejecutamos DO_NOT_COMPILE=konqueror emerge kdebase, entonces instalaríamos kdebase sin la aplicación konqueror.

Sin embargo, DO_NOT_COMPILE nunca fue diseñado para interferir con la operación alguna con el sistema de administración de paquetes, en particular, Portage. No funciona, puede romper su sistema y jamás fue soportado. Les pedimos a todos que desistan de su uso.

Aquí se detalla una lista parcial de los problemas que ocasiona DO_NOT_COMPILE:

  • Rompe completamente con el sistema de localización de dependencias de Portage. Portage no sabe nada acerca de DO_NOT_COMPILE, y piensa que el paquete monolítico entero fue instalado y puede satisfacer una dependencia de otro paquete. Esto puede causar que otros paquetes no puedan ser instalados o que no puedan ejecutarse.
  • Obliga al usuario a saber acerca de los nombres y significados de todos los subdirectorios de los módulos del KDE. Muy pocos usuarios saben acerca de esto, y a menos que sean desarrolladores de KDE, no saben utilizar DO_NOT_COMPILE apropiadamente.
  • Los módulos de KDE pueden tener interdependencias entre ellos y requieren de un orden en particular para poder ser construidos, también requieren que otro subdirectorio se encuentre presente incluso si no es necesario instalarlo. En este aspecto, hemos puesto mucho trabajo en los ebuilds separados, de manera que funcionen correctamente. DO_NOT_COMPILE no se acerca ni un poquito para poder ser una herramienta que consiga los mismos resultados que los ebuilds separados, incluso si se le diera suficiente información al usuario para poder usarlo. La única cosa que hace es deshabilitar la compilación de un par de aplicaciones. Es prácticamente imposible que sea utilizado para seleccionar la instalación de determinadas aplicaciones de los módulos como kdebase o kdepim.
  • Si ayer instalé kmail y hoy quisiera agregar korn, utilizando DO_NOT_COMPILE, nos llevaría a compilar a kmail nuevamente. Esto significa que DO_NOT_COMPILE siempre será mas lento que los ebuilds separados.
  • DO_NOT_COMPILE no puede ser usado para realizar paquetes precompilados (como el GRP) conteniendo aplicaciones individuales del KDE.

¿No estarán colocándole demasiada carga a los mantenedores de Gentoo KDE?

Sorpresivamente, ésta es una pregunta que siempre hacen. Estamos halagados que los usuarios sean tan considerados con nosotros los mantenedores. Pero permítanos aprovechar esta oportunidad para decirles que nosotros estamos haciendo esto por nuestra propia voluntad; que creemos que podremos continuar manteniendo los ebuilds con una buena calidad; y que nadie nos podrá convencer que dejemos de hacerlo.

Por completitud, mencionamos que los mantenedores de otras arquitecturas se han quejado por el gran aumento de trabajo que les toma realizar verificaciones y modificaciones a tantos ebuilds separados. Estamos trabajando para resolver esto y cabe aclarar que esto fue una de las grandes razones por las cuales existen todavía ebuilds monolíticos para el KDE 3.5.

¿Van a borrar los ebuilds monolíticos?

Tenemos la idea de, eventualmente, borrarlos. Sin embargo, existen ebuilds monolíticos y separados para las todas versiones de KDE 3 hasta la 3.5.9. Para KDE 3.5.10 y posteriores y para KDE4 ya no proporcionamos ebuilds monolíticos.

Si prefiere utilizar los ebuilds monolíticos por sobre los separados, por favor, cuéntenos sus razones.

¡Hay tantos ebuilds!, ¿Cómo se supone que voy a encontrar los que necesito?

Bueno, primero que nada, si sabe que el paquete que está buscando se encuentra en kdebase, entonces puede, todavía, ejecutar emerge kdebase-meta, con casi los mismos resultados que si hubiese realizado un emerge del ebuild monolítico kdebase. Así que, en realidad, las cosas no han empeorado para nada debido a la introducción de los ebuilds separados.

Obviamente, siguen vigentes todas las maneras de localizar un paquete. ¿Cómo encontraría su ebuild si fuese una aplicación de Gnome?. Mínimamente debería de saber, por lo menos, el nombre de la aplicación que estas buscando.

Tal vez, la situación podría ser mejorada con la introducción de varios paquetes -meta. Solamente son listas de dependencias, así que no nos costaría nada. Esto todavía no ha sido decidido. Sin embargo sería bueno tener la funcionalidad de conjuntos en Portage antes de hacer esto en extenso.

¿Cómo puedo listar y/o realizar un unmerge de todos los ebuilds separados derivados de un paquete dado?

El objetivo aquí es el de listar todos los ebuilds de KDE derivados de, por ejemplo, el ebuild monolítico kde-base. Una vez más, una implementación apropiada (como GLEP 21) haría de esto algo trivial. Sin embargo, hoy, tiene que entender en cierto grado la implementación de las eclasses de KDE. Así que, si usa alguno de estos métodos en un guión que no sea para uso personal, por favor cuéntenos.

kde-functions.eclass define las funciones llamadas get-parent-package() y get-child-packages() que llevan a cabo la "traducción". Estas dos funciones son la manera correcta de completar satisfactoriamente este trabajo a partir de un ebuild o de un guión de bash externo. Aquí le mostramos un ejemplo:

Listado de Código 3.1: Ejemplo de uso de las funciones de kde-functions

$ function die() { echo $@; } # se llama para reportar errores
$ source /usr/portage/eclass/kde-functions.eclass
$ get-parent-package konqueror # no va a funcionar, tiene que especificar el
nombre completo
Package konqueror not found in KDE_DERIVATION_MAP, please report bug # el error es mostrado en la salida
$ get-parent-package kde-base/konqueror # nombre completo del paquete
kde-base/kdebase # el resultado es mostrado por pantalla
$ get-child-packages kde-base/kdebase
 # (una enorme lista de paquetes mostrado aquí)

Si su guión no está escrito en bash, puede realizar un grep del kde-functions.eclass para extraer la definición (multilínea) de la variable KDE_DERIVATION_MAP, que las funciones mencionadas usan. Esta variable contiene una lista de palabras separadas por un espacio en blanco; y cada par de palabras consecutivas realizan un mapeo entre un paquete "padre" a un hijo ebuild separado.



Imprimir

Actualizado 22 de noviembre, 2008

Sumario: Con el lanzamiento de KDE 3.4, se incorporaron a Portage los 'ebuilds separados'. Esta página documenta las razones detrás de esta transición, las nuevas funcionalidades brindadas por la misma y la forma de actualizar del viejo estilo de los ebuilds 'monolíticos'.

Dan Armak
Autor

Gregorio Guidi
Editor

Wulf C. Krueger
Editor

John Christian Stoddart
Traductor

Nicolás Miyasato
Traductor

Andrés Pereira
Traductor

Manuel Peral
Traductor

Sergio D. Rodríguez Inclan
Traductor

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.