Tutorial: de AUR a CCR, un ejemplo práctico

Con el cambio de mes en el calendario llega el momento de abandonar Fedora y dar paso a openSUSE. Lo de abandonar no es nuevo, Chakra se ha comido casi todo el tiempo que le dedico al ordenador dejando para la distro del mes de Febrero un uso prácticamente residual. Cuando quise enfocar el blog hacia el uso intensivo de una distro cada mes, lo que hemos venido en llamar «12 meses, 12 distros«, no era esta la idea que tenía en mente. Pero soy rebelde por naturaleza, y como a casi cualquier hijo de vecino no me gusta que me impongan lo que tengo que usar, cuestión fuera de toda duda y que aun se torna más absurda cuando la persona que impone es uno mismo. El resultado es que la cabra siempre tira al monte y he decidido aparcar, de momento, esta forma de revisión.

Imagen creada por Malcer

Ahora bien, lo anterior no sería justo con los lectores que han escogido openSUSE como distribución a probar durante este mes que se inicia. Intuyo que la gran mayoría ha votado pensando en la nueva versión, la 12.3, que debe ver la luz en unos días. Tan pronto como ello suceda, openSUSE tendrá su obligada revisión en este blog y no será un trabajo de unas cuantas horas, sino una probatura de varios días. Sé que no es lo mismo que todo un mes, pero algo es algo.

Entre tanto llega la remozada versión de la distro de Gecko, vamos a exponer hoy un tutorial destinado a aquellos usuarios de Chakra que a veces comentan en los foros de la distro solicitando un paquete que no está disponible ni en los repositorios oficiales ni en el repositorio comunitario (CCR). Cuando tengo algo de tiempo me limito a atender la petición, pero resulta mucho más satisfactorio para el usuario hacer el trabajo por sí mismo. Aquello de «no me des pescado, enséñame a pescar» encierra una gran sabiduría y es por esto que me he planteado este artículo. Veremos, ejemplo mediante, que subir tu propio paquete a CCR puede resultar, a veces, complicado, pero nos lega un mayor conocimiento sobre los paquetes y el repositorio comunitario en sí.

La estructura de repositorios de Chakra
Si bien es cierto que Chakra nace de Arch, a nadie escapa a estas alturas que ya únicamente comparten el uso del mismo gestor de paquetes, pacman, y en un futuro próximo ni eso. Pero es evidente que CCR nace como un reflejo de AUR (Arch User Repository, repositorio de usuarios de Arch), una versión mucho más reducida del extensísimo repositorio de la distro canadiense. Para dar cifras, mientras que en CCR existen hoy 3.145 paquetes, en AUR hay 40.829. Poco o nada más hay que añadir…

Es importante, antes que nada, saber diferenciar los repositorios oficiales de Chakra, que no contienen paquetes con dependencias gtk, de CCR, un repositorio no oficial y, como tal, no soportado por los desarrolladores. ¿Qué quiere esto decir? Simplemente que no podremos acudir a ellos en caso de que surjan dificultades, deberemos apañarnos solos o, como mucho, advertir al mantenedor del paquete en CCR de que existen errores en su compilación. CCR, como su nombre indica, es un proyecto comunitario y queda estrictamente en el ámbito de los usuarios.

Para saber más sobre los repositorios de Chakra, este tutorial publicado en su día profundiza en el tema.

Cómo buscar un paquete en Chakra
El programa ccr nos permite realizar una búsqueda de un determinado programa tanto en los repos oficiales (lo que haría pacman -Ss paquete) como en el comunitario. En nuestro ejemplo, supongamos que precisamos de la aplicación Airweibo:

ccr -Ss airweibo

El resultado, como vemos en la captura, es negativo. Podríamos suponer que el paquete tiene otro nombre, de modo que vamos a listar todos los paquetes que incluyen el término «airw»:

ccr -Ss airw

Aquí seguimos sin observar nada. Nótese que este proceso se puede hacer también vía web, directamente en la página de CCR, introduciendo los términos de búsqueda en la barra correspondiente.

Una vez que sabemos que no existe el paquete que necesitamos es el momento de pasar a la acción, crear dicho paquete y compartirlo con la comunidad.

De AUR a CCR en «sencillos» pasos
Ya hemos visto antes que existen, aproximadamente, 13 veces más paquetes en AUR que en CCR, de lo que se deduce que es muy posible que lo que buscamos sí esté en el repositorio comunitario de Arch. Hasta hace poco, en concreto hasta que CCR fue «hackeado», teníamos una herramienta llamada aur2ccr que facilitaba el trabajo, aunque nunca me ha convencido del todo. Prefiero controlar yo mismo todo el proceso y prescindir de dicho script que, hoy por hoy, no ha vuelto a ser subido a CCR y, por tanto, no está disponible.

Lo primero es lo primero, buscamos el paquete en AUR usando la web:

Como vemos en la imagen, el paquete que nos interesa es «airweibo». Si hacemos clic sobre el nombre, pasamos a la pantalla siguiente:

En ella vamos a fijarnos, en primer lugar, en las dependencias que maneja el paquete. Puesto que cuando alguien solicita un paquete a CCR, con el comando ccr -S paquete, el script se encarga de buscar las dependencias asociadas, tenemos que asegurarnos de que las va a encontrar, es decir, que dichos paquetes listados como dependencias van a estar, bien en los repos oficiales de Chakra, bien en CCR. De nada sirve que estén en AUR, porque ccr no las busca allí. Así que anotamos las dependencias, que en nuestro caso son cuatro paquetes: adobe-air, curl, libxt y libxtst. A buscar se ha dicho:

ccr -Ss adobe-air

ccr -Ss curl

ccr -Ss libxt

ccr -Ss libxtst

Hemos tenido suerte, todos están disponibles, en el caso de mi sistema los tres últimos ya están instalados y solamente tendría que ocuparme de adobe-air, paquete que existe en CCR. Si alguna de las búsquedas fuera negativa, tendríamos que encargarnos de subir a CCR el paquete faltante, usando el mismo procedimiento que estamos describiendo aquí. Como se puede observar, el acto de subir un paquete puede ser sencillo o convertirse en un «infierno de dependencias», motivo por el cual no pude usar Shotwell en Chakra. Será particularmente complicado si el paquete que queremos maneja muchas dependencias gtk, por razones obvias.

Pero, volviendo a nuestro caso, como sabemos que todas las dependencias van a estar satisfechas, podemos continuar. En la página del paquete airweibo en AUR, descargaremos el «tarball» correspondiente, que se obtiene en el enlace de arriba a la derecha (Package Actions –> Download tarball).

El archivo comprimido que obtenemos debemos extraerlo (clic derecho en Dolphin –> Extraer archivo comprimido aquí). Dentro de la carpeta que se crea, de nombre «airweibo», vamos a encontrar, entre otros, el archivo PKGBUILD.

Abrimos este archivo, con Kate o nuestro editor favorito:

Al hacerlo, veremos que en la primera línea figura el nombre (en ocasiones, también el correo electrónico) del mantenedor del paquete en AUR. Como sabemos, CCR es una cosa y AUR otra, de manera que a partir del momento de subir el paquete el responsable del mismo seré yo. Esto no quita que demos el merecido reconocimiento a quien tanto nos ha facilitado la labor, esto es, el mantenedor en AUR, conservando su nombre bajo el epígrafe de «Contribuyente» (Contributor). Quedaría de este modo:

Otra cosa, muy importante que observamos en el PKGBUILD es que las dependencias de este paquete son distintas según la arquitectura del sistema. Sabemos que Chakra solamente existe en su versión para 64 bits, por lo que las dependencias a satisfacer no son exactamente las que hemos buscado, sino los equivalentes lib32: lib32-curl, lib32-libxt, lib32-libxtst. Afortunadamente, Chakra dispone del repositorio [lib32], y comprobamos que existen dichos paquetes:

Bien, tras guardar el PKGBUILD modificado con nuestro nombre, vamos a usar la consola para tratar de compilar el paquete en cuestión. Abrimos el terminal y nos situamos en el directorio donde está el citado archivo PKGBUILD:

cd /rutahastaelarchivo

Y una vez allí, escribimos la instrucción makepkg -s, como nuestro usuario normal, no es preciso hacerlo como root:

makepkg -s

Lo primero, como vemos en la captura, es pedirnos la contraseña de root para instalar las dependencias que antes mencionábamos:

Y nos encontramos con el error, motivado por la no existencia de adobe-air en los repos oficiales, sino en CCR. Lo instalamos, pues:

ccr -S adobe-air

Tras instalarse todas las dependencias necesarias, el paquete adobe-air queda listo en nuestro sistema:

De nuevo, hacemos:

makepkg -s

El resultado ahora es bien distinto, pues el resto de paquetes que necesita descargar sí están disponibles en los repositorios de Chakra:

Cuando ha terminado de hacer el paquete, como vemos, sin errores, es el momento de instalarlo en nuestro sistema para probarlo, lo que hacemos con:

sudo pacman -U airweibo-2.3.1-1-x86_64.pkg.tar.xz

Nótese que, al tratarse de una instalación de un paquete local, hay que especificar el nombre completo del mismo. Obtenemos:

Y ahora ya tenemos Airweibo entre los programas de nuestro menú:

Lo ejecutamos para comprobar que funciona y listo… o no. No va a ser tan sencillo, después de todo. El lanzador se queda «botando» un rato pero sin arrancar. El único modo de averiguar qué falla es ejecutando el programa desde la terminal:

airweibo

Veremos que el problema está en que el programa busca en un directorio que no existe, llamado «weiboair»:

A decir verdad, ignoro por qué ocurre esto, pero el origen del problema está en el PKGBUILD. En aras de un futuro buen funcionamiento me limito a corregirlo:

Cambiando el directorio a crear por /opt/weiboair, que parece ser el que busca el programa. Luego desinstalo:

sudo pacman -R airweibo

Y repetimos operación, ya con el nuevo PKGBUILD:

makepkg -s -f (con -f fuerzo la sobre escritura del paquete)

sudo pacman -U airweibo-2.3.1-1-x86_64.pkg.tar.xz

De nuevo, ejecutamos el programa y cruzamos los dedos:

airweibo

Pero sigue sin funcionar. En este caso, corregido lo anterior, tenemos un error muy distinto:

Hace referencia a libgtk-x11, una librería incluida en el paquete lib32-gtk2… que no estaba listada como dependencia. Toca volver a abrir el PKGBUILD y añadir dicho paquete:

Volvemos a lo de antes:

sudo pacman -R airweibo

makepkg -s -f

Y en esta oportunidad, al haber añadido nosotros una nueva dependencia, comprobamos como dicha operación acarrea la instalación de más librerías:

Luego, de nuevo instalamos:

sudo pacman -U airweibo-2.3.1-1-x86_64.pkg.tar.xz

Y ejecutamos, para obtener… ¡un bonito programa en chino! Si sabemos chino (o coreano, o japonés, no sé cual de ellos es) podríamos comprobar el funcionamiento del programa. De ser correcto, solo nos queda crear el archivo fuente:

makepkg –source

Finalmente, subimos el archivo resultante a CCR, empleando para ello la interfaz web. Antes de poder subir nada tendremos que registrarnos:

Tras pulsar en «Enviar», en el menú de arriba a la derecha, solo queda elegir la categoría. Suelo emplear la misma en la que estaba alojado el paquete en AUR, en este caso, la categoría «network». Elegimos el archivo que creamos antes, con formato src.tar.gz y lo enviamos. ¡Voilá! La comunidad asiática nos lo agradecerá, supongo. He preferido no subir realmente el paquete, pues mi desconocimiento del idioma en que se encuentra hace imposible que sepa qué hace el programa o si lo hace bien, amen de que no deseo mantener una aplicación sin saber nada sobre ella.

Conclusiones
Sobra decir, a estas alturas de la película, que no he estado muy afortunado al escoger el paquete que ha servido como ejemplo. Podría haber optado por subir una simple fuente tipográfica, pero no habríamos topado con los problemas con los que hemos tenido que lidiar, mirándolo desde un punto de vista positivo. Este ha sido solamente un ejemplo, hay veces en que el proceso es tremendamente directo y otras, como comentaba con Shotwell, en que es del todo imposible si uno no quiere volverse loco.

Existen más posibilidades de instalación de paquetes: desde un repositorio oficial de Arch, compilando las fuentes… Pero, estoy seguro de que, viendo las complicaciones potenciales del «en teoría» más sencillo de los métodos (el que aquí hemos visto), se os pueden quitar las ganas de repasar dichas opciones. A mí, de hecho, se me han quitado durante la ardua tarea de redactar esta especie de «tutorial en vivo». En cualquier caso, existe una entrada en la wiki de Chakra que trata el asunto. Por cierto, si algún usuario de la distro realiza todo este proceso a modo de ejercicio de aprendizaje, una vez finalizado puede librarse de todas las inútiles dependencias instaladas fácilmente:

sudo pacman -Rnsd airweibo adobe-air

Un saludo a todos.