Estoy organizado un code jam en Córdoba y Lisandro está organizando una en Bahía Blanca. La idea es que nos juntemos a laburar un poco en KDE, aprendiendo y haciendo o features o cerrando bugs o lo que sea. En función de eso estaría piola que cada uno ya lleve un kde trunk compiladito, al menos la parte que les interese. Este post apunta a explicar cómo hacerlo. Casi toda la info la saqué en su momento de techbase y/o preguntando en IRC, listas de correo y hasta en DebConf.
Veamos cómo se organiza el código de KDE. Éste reside en un repositorio subversion que tiene dos formas de acceso: uno autenticado por ssh para los desarrolladores que tienen cuenta y uno anónimo que es de sólo lectura. Los que ya tienen cuenta ya deberían saber usarlo y hasta cómo compilar, así que para ellos este post no sirve. Cuando mencioné a trunk en el párrafo anterior me refería a la rama principal de este repo.
A su vez el código está diseminado en distintos módulos: kdesupport, kdelibs, kdepimlibs, kdebase, etc. Estos módulos y otras porciones de código que andan dando vueltas están en un árbol:
anonsvn.kde.org/home/kde/
+ branches
| + ...
+ tags
| + ...
+ trunk
+ extragear
| + ...
+ kdereview
| + ...
+ playground
| + ...
+ kdesupport
| + ...
+ qt-copy
+ KDE
+ kdebase
+ kdegraphics
+ kdelibs
+ kdemultimedia
+ kdenetwork
+ kdepim
+ kdepimlibs
+ ...
Pueden ver este mismo árbol por web. La rama
KDE es la que tiene el código de los distintos módulos de KDE.
kdesupport contiene un montón de software que no es de KDE, pero que
es necesario para correrlo. Allí van a encontrar las versiones adecuadas
de los mismos, y por lo general es muy aconsejable compilarlo. qt-copy
es una copia del código de Qt a su última versión, con el agregado de
varios parches. kdereview son proyectos que están siendo considerados
para la inclusión en KDE. playground está llenos de proyectos a medias
o casi completos, pero que no tienen pinta de estar listos para
revisión. Los nuevos proyectos normalmente nacen y/o crecen allí. Sin
embargo, mucho de lo que hay ahí funciona. Por último, extragear
contiene aplicaciones KDE que no se ajustan al ciclo de desarrollo de
KDE (actualemnte, un release menor cada 6 meses). En este directorio
podemos encontrar aplicaciones grosas como el amarok, el k3b o el
digikam.
Una instalación mínima de KDE consta de los módulos qt-copy,
kdesupport, kdelibs, kdepimlibs y kdebase. Compilarlos uno por
uno es un garrón, por lo que vamos a usar
kdesvn-build, un script que lo
automatiza todo. Pero antes, las dependencias.
Por un lado necesitamos las herramientas de configuración y de
compiloación. Éstas son cmake y g++ (en realidad es cualquier
compilador de C++, pero para hacerla fácil me voy a limitar a g++.
También me voy a limitar a distros basadas en Debian, como *buntu, sólo
porque es lo que más conozco.). El cmake de Debian Sid es el 2.6.0 y
desde hace un rato KDE necesita el 2.6.2 [ Update: 2.6.2 acaba de
entrar en Sid ], así que capaz haya que bajar y compilar ése también.
Si lo hacen, les aconsejo que corran el configure con la opción
--prefix=/usr/local o mejor, apuntando a algún lado de su propio home.
En mi caso, instalé todo en ~/local/soft/kde4.
Luego están las dependencias de cada módulo per se. La siguiente es una tabla que he ido creando con el tiempo y que trata de ser tan completa como pude, pero seguro se me ha escapado más de un paquete. Los nombres corresponden a los de los paquetes en Debian Sid, y que deben ser muy similares a los de los *buntu. En cada módulo encontramos dos grupos de dependencias: las estrictamente necesarias, sin las cuales el módulo no compila, seguido de una línea en blanco, seguida por otra lista con las dependencias opcionales. Estas dependencias hacen que el módulo ofrezca más funcionalidad. Yo puse las que me interesan; después veremos cómo ver qué otras son posibles.
cmake:
~~~~~~
libncurses5-dev
qt-copy:
~~~~~~~~
libssl-dev
libpng12-dev
zlib1g-dev
libsqlite3-dev
libxinerama-dev
libdbus-1-dev
libjpeg62-dev
libsm-dev
kdesupport:
~~~~~~~~~~~
cmake
mysql
libclucene-dev
doxygen
dotty
librdf0-dev
libbz2-dev
libxml2-dev
libexiv2-dev
libgstreamer0.10-dev
libgstreamer-plugins-base0.10-dev
libgl1-mesa-dev
libgamin-dev
sun-java6-jdk
kdelibs:
~~~~~~~~
libsm-dev
libpcre3-dev
libgif-dev
libxrender-dev
libglu1-mesa-dev
libopenexr-dev
libenchant-dev
libgamin-dev
kdepimlibs
~~~~~~~~~~
libical-dev
libgpg-error-dev
libgpgme11-dev
libboost-dev
libsasl2-dev
kdebase
~~~~~~~
libfontconfig1-dev
libxt-dev
libsensors4-dev
libxklavier12-dev
libusb-1.0-0-dev
libxcomposite-dev
libxdamage-dev
libxtst-dev
libusb++-dev
libasound2-dev
libxss-dev
libxft-dev
libxkbfile-dev
kdemultimedia
~~~~~~~~~~~~~
libvorbis-dev
libcdparanoia0-dev
libxine-dev
kdegraphics
~~~~~~~~~~~
liblcms1-dev
libgphoto2-2-dev
libxxf86vm-dev
libimlib2-dev
kdepim
~~~~~~
libopensync0-dev
libpisock-dev
extragear
~~~~~~~~~
libjasper-dev
kdenetwork
~~~~~~~~~~
libavahi-compat-libdnssd-dev
Muchas, eh? Y éstos son sólo algunos de los módulos.
Ah! Antes de que nos mandemos a compilar, tenemos que preparar tres
cosas: un directorio donde van a ir las fuentes, otro donde vamos a
compilar y otro donde lo vamos a instalar. Yo personalmente prefiero
mantener todo a nivel de usuario, por lo que las fuentes las pongo en
~/src/system/kde4, compilo en build dentro de ese directorio y lo
instalo en ~/local/soft/kde4. El primero en realidad puede ser
cualquier directorio, realmente no es relevante, salvo por el espacio
que ocupa. Las fuentes de cada módulo (en MiB):
316 extragear[*]
549 kdebase
42 kdegraphics
185 kdelibs
18 kdemultimedia
106 kdenetwork
156 kdepim
41 kdepimlibs
10 kdereview
160 kdesupport
81 playground[*]
570 qt-copy
Los marcados con [*] no están completos, sino que elegí algunas cosas que me interesaban. Los directorios donde compilamos, también en MiB:
2146 build/extragear
1152 build/kdebase
253 build/kdegraphics
971 build/kdelibs
99 build/kdemultimedia
570 build/kdenetwork
1045 build/kdepim
194 build/kdepimlibs
33 build/kdereview
623 build/kdesupport
264 build/playground
1441 build/qt-copy
El último directorio sí me parece relevante; si no les gusta instalarlo
en su home, les aconsejo que lo hagan en /opt o al menos en
/usr/local, de forma de no destruir lo que haya instalado sus
sistemas.
Ok, suficiente introducción, vamos a los bifes. Bajamos kdesvn-build
en el directorio de compilación, lo descomprimimos y lo configuramos. La
configuración pasa por darle algunos detalles de qué, cómo y dónde
compilar e instalar. Pueden tomar del kdesvn-buildrc-sample que viene
incluido o tomar del que estoy usando
yo.
Revísenlo bien; la mayoría del trabajo es configurar la sección
global, que es la que está al principio del archivo; está bastante
comentada. Vean en particular source-dir, build-dir, kdedir
(donde va a ser instalado), qtdir (donde vamos a instalar
qt-copy; yo lo puse en el mismo directorio que todo kde4),
svn-server (ojo que mi copia apunta al servicio autenticado, pero
tiene el anónimo comentado), cmake-options, y lo que mas o menos les
pinte. Ponemos este archivo en ~/.kdesvn-buildrc y ya casi estamos.
Otra cosa que hay que hacer es poner todo un conjunto de variables de
entorno a tono. Yo robé mucho de un script en
techbase.
A diferencia de todos los tutoriales en techbase, en vez de crear todo
un usuario para hacer toda la bola, yo simplemente puse todas esas
variables en un
script que
podía cargar a piaccere. Allí tambié puse que el directorio donde KDE4
va a guardar la configuración es .kde4-dev, así no me pisa la
configuración de KDE3. también péguenle una revisada así pega con lo que
tienen puesto en otros lados.
Bueno, ya estamos listos. Levantamos las variables de entorno y lanzamos el script de compilación:
$ source environ.sh
$ ./kdesvn-build-1.7.1/kdesvn-build --reconfigure --verbose --color
¡Eso es todo! El script saca los módulos unos a uno de svn; a medida que los tiene bajado los va compilando e instalando en paralelo. La primera vez tarda muchisimo, sobre todo si configuraron muchos módulos. Recomiendo compilar primero lo mínimo indispensable, dejarlo compilado de noche, y luego ir compilando de a pedacitos.
El script va dejando en log/latest logs de la compilación de cada
módulo. Allí podemos encontrar la salida del proceso de configuración,
donde veremos qué dependencias encontró y cuáles faltan. Si hay errores
deja un error.log con la falla.
Para ejecutar la bestia, la cosa no se complica mucho mas. Yo no sé bien cómo hacer para que me lo tome el DM de turno (KDM, GDM, el que sea), por lo que lo lanzo a mano desde una terminal de texto:
$ source ~/src/system/kde4/environ.sh
$ xinit /home/mdione/local/soft/kde4/bin/startkde
También podemos lanzarlo en un Xephir, que es como un X dentro de X. Eso
sí, no le pidan OpenGL (necdesario para los efectos de escritorio).
Abrimos un konsole o la terminal que prefieran y:
$ Xephyr :1 -screen 1280x800 -ac -extension GLX
$ export DISPLAY=:1
$ ~/local/soft/kde4/bin/startkde
Una forma truchísima mal es entrar en una sesión failsafe (*buntu le
llama 'Terminal a prueba de fallos' últimamente). Esto nos da un X
pelado con una xterm y ni siquiera un Window Manager. En la terminal
entramos levantamos el entorno y lanzamos KDE4:
$ source ~/src/system/kde4/environ.sh
$ ~/local/soft/kde4/bin/startkde
Voilá. Sólo asegúrensé no cerrar nunca esa xterm, sino se les cierra todo sin preguntar nada.
Un detalle es que el sistema queda solamente en inglés. Ya me voy a sentar a ver cómo meter los módulos de traducción al español.
Ok, ya estoy cansadísimo y esto es larguísimo. Cualquier duda la seguimos en el thread en kde-ar y lo vamos puliendo.