Tuesday, October 21, 2008

DBus por consola.

Después de hora y media de investigación he descubierto cómo cojones se usa d-bus desde línea de comandos. Horrible la documentación que hay.

El origen del tema es kdialog, una herramienta genial para proveer de manera "fácil" de una GUI a los scripts de bash. Todo es bonito y maravilloso hasta que se llega a la parte de progressbar, barra de progreso. Como el resto de llamadas son bloqueantes y esta lógicamente no puede serlo (no habría manera de seguir haciendo algo para hacer progresar la barra) el modo de funcionamiento cambia. Lo que devuelve kdialog es un "handler" de dbus, para enviarle mensajes. Todo lo que hay en Internet, incluida la documentación de KDE, es con dcop, la versión KDE3 de IPC, sustituida en KDE4 por dbus.

El control de DCOP por consola era una maravilla, pero con dbus la cosa es muy distinta. El comando dcop era autoexplicativo: si no se daba un comando valido, respondía con una lista de comandos válidos. Para saber que programas habia escuchando se hacía "dcop". Para saber que interfaces ofrecía amarok se hacia "dcop amarok". Para saber que funciones ofrecía la interfaz player de amarok, se hacia "dcop amarok player". Mágico.

Con dbus-send, la herramienta básica de dbus, si no se da un comando válido, dbus-send devuelve un bonito error nada explicativo y muere.
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-27831 /ProgressDialog org.kde.kdialog.ProgressDialog.value int32:1
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.kdialog-27831 was not provided by any .service files
n0rdik0@telstar ~ $

Ale, y tan pancho. La traduccion al cristiano (descubierta por otro lado) es que el puerto kdialog-27831 no existe, ya que le mandaba mensajes al kdialog que habia cerrado antes y el bueno era el 34981.

El caso es que tras mucho leer por la página de KDE y freedesktop.org llegué por fin a sacar algo en claro: cómo saber los servicios dbus ofrecidos por un programa. Es decir, la llamada "dcop kdialog ProgressBar" es sustitudia por "dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Introspectable.Introspect". Super intuitivo, ¿a que sí?

Para más inri, kdialog no ofrece ningún método para cambiar el progreso, así que hay que hacerlo cambiado el valor de la propiedad "value" en "org.kde.kdialog.ProgressDialog". ¿Cómo se hace esto?

n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.kde.kdialog.ProgressDialog.value
Error org.freedesktop.DBus.Error.UnknownMethod: No such method 'value' in interface 'org.kde.kdialog.ProgressDialog' at object path '/ProgressDialog' (signature '')
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.kde.kdialog.ProgressDialog.value int32:1
Error org.freedesktop.DBus.Error.UnknownMethod: No such method 'value' in interface 'org.kde.kdialog.ProgressDialog' at object path '/ProgressDialog' (signature 'i')
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.kde.kdialog.ProgressDialog.value=1
process 5324: arguments to dbus_message_new_method_call() were incorrect, assertion "_dbus_check_is_valid_member (method)" failed in file dbus-message.c line 1077.
This is normally a bug in some application using the D-Bus library.
D-Bus not built with -rdynamic so unable to print a backtrace
Aborted
n0rdik0@telstar ~ $

Lo primero es pensar: pues con "org.kde.kdialog.ProgressDialog.value 1". ¡Eeeeeck! Value no es un método. Pasarle in parámetro (hay que indicar el tipo int con "int32:") tampoco. Bien, pues con "org.kde.kdialog.ProgressDialog.value=1". ¡Ja, más quisieras! Así, aparte de no funcionar, da fallo de un assert.

Siguiendo la documentación, encuentro las funciones para manipular propiedades, con una ruta del servicio totalmente distinta a la anterior, dado que son funciones "genéricas", y son a quienes hay que decir la ruta a la propiedad deseada.

n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Properties.Get string:'org.kde.kdialog.ProgressDialog' string:'maximum'
method return sender=:1.15176 -> dest=:1.17121 reply_serial=2
variant int32 100
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Properties.Get string:'org.kde.kdialog.ProgressDialog' string:'value'
method return sender=:1.15176 -> dest=:1.17122 reply_serial=2
variant int32 5
n0rdik0@telstar ~ $

¡Bien, funciona! Ahora el Set:
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Properties.Set string:'org.kde.kdialog.ProgressDialog' string:'value' int32:6
Error org.freedesktop.DBus.Error.UnknownMethod: No such method 'Set' in interface 'org.freedesktop.DBus.Properties' at object path '/ProgressDialog' (signature 'ssi')
n0rdik0@telstar ~ $

¡Ups! ¿Cómo que no está? Pufffff... Después de un rato vi que el "(signature 'ssi')" es la calve, el prolema es que recibe 2 string y un int y espera 2 srtings y 1 "v", es decir "VARIANT". Perfecto:
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Properties.Set string:'org.kde.kdialog.ProgressDialog' string:'value' variant:6
dbus-send: Data item "6" is badly formed
n0rdik0@telstar ~ $

¡Toma ya! Item "6" mal formado. Eso sí que es un error útil y explicativo. Google, nada. Documentación, nada. Pues nada, prueba y error.

Tras un rato, la Solución:
n0rdik0@telstar ~ $ dbus-send --print-reply --dest=org.kde.kdialog-31498 /ProgressDialog org.freedesktop.DBus.Properties.Set string:'org.kde.kdialog.ProgressDialog' string:'value' variant:'int32:6'
method return sender=:1.15176 -> dest=:1.17164 reply_serial=2
n0rdik0@telstar ~ $

Hora y media para eso. Con 2 minutos de documentación hubiera estado de sobra, pero no :(

Por suerte hay aplicaciones mucho mas amigables como qdbus o con GUI: qbusviewer. Con qdbus el funcionamiento es igual que dcop, aunque las propiedades siguen sin poder cambiarse de manera "intuitiva" y hace falta recurrir al "Get/Set" genérico para ello. Vaya estipicio. Hay que joderse con las regresiones parece que todo funciona peor segun pasa el tiempo. A este ritmo echaremos de menos lo buenos tiempos de Windows95.

Wednesday, October 15, 2008

Arch Linux, primeras impresiones

Como ya comenté hace un par de días, tenía ganas de probar Arch, ya dado que es la única de la lista que no está ahora mismo en versión beta o RC , la he instalado. De hecho, igual que Gentoo, Arch tiene un sistema de actualización continua, por lo que las releases son simplemente congelaciones puntuales del arbol de paquetes.

La gente la comparaba a una cosa intermedia entre Debian y Gentoo y por ahí anda la cosa. Realmente es como un Gentoo pero binario. Tiene cosas buenas y otras no tanto, voy a contar las principales, centrándome en las diferencias con Gentoo, puesto que el resto es muy muy parecido: actualización continua, sistema base super reducido, configuración manual 100% de todos los aspectos del sistema, documentación para dar y tomar...

Lo primero el gestor de paquetes. Pacman es mucho más rápido que emerge, no sólo por que usa binarios sino porque está hecho en C y no en bash. La búsqueda es tan rápida como eix y la actualización de repositorios es casi instantánea:
[root@telstar ~]# time pacman -Sy
:: Sincronizando las bases de datos de paquetes...
core 31,8K 141,0K/s 00:00:00 [##################################################################] 100%
extra 410,3K 585,3K/s 00:00:01 [##################################################################] 100%
community está actualizado

real 0m2.385s
user 0m0.147s
sys 0m0.407s
[root@telstar ~]#

Nada que ver con los minutos de Gentoo en un eix-sync o al menos emerge --sync, o los de SuSE 10.x. De hecho es el gestor más rápido que he visto, superando incluso al apt-get de Debian. A veces hasta asusta:
[root@telstar ~]# time echo s | pacman -S wine
resolviendo dependencias...
verificando conflictos...

Objetivos (1): wine-1.1.6-1

Tamaño total de descarga: 0,00 MB
Tamaño total instalado: 73,62 MB

¿Continuar con la instalación? [S/n] Verificando la integridad de los paquetes...
(1/1) verificando conflictos entre archivos [##################################################################] 100%
(1/1) instalando wine [##################################################################] 100%
Dependencias Opcionales para wine
cups: printing support
sane: scanners support
libgphoto2: digital cameras support
alsa-lib: sound support
giflib: GIF images support
libjpeg: JPEG images support
libpng: PNG images support

real 0m1.378s
user 0m1.117s
sys 0m0.227s
[root@telstar ~]#

Instalación de wine en segundo y pico, no está nada mal.
Lo que ya no me gusta tanto es el aspecto. Sobre todo al hacer búsquedas, al no usar colores, es muy difícil de leer lo que encuentra si hay mas de 4 o 5 resultados. Hay proyectos por ahí de colorear la salida, pero son scripts de post-proceso, lo que contradice la filosofía de pacman.
Y otra cosa que echo mucho de menos de Gentoo es tener varias versiones de un mismo paquete, y clasificadas como estables y testings. En Arch hay una y punto, lo cual hace muy difícil volver a una versión anterior si una da problemas. Si se ha tenido antes y no se ha borrado la caché, se puede instalar desde el paquete en caché, si no se ha tenido ese paquete antes, hay que buscar por Internet un repositorio desactualizado, yo he usado http://ftp.tu-chemnitz.de/pub/linux/sunsite.unc-mirror/distributions/archlinux/$repo/os/i686. Se sustituye en /etc/pacman.d/mirrorlist, se sincroniza (pacman -Sy) y se instala el paquete que se quiera. También se puede bajar a mano e instalar con "pacman -U". Todo esto hace que no me de mucha confianza para un sistema crítico, aunque sólo es una opinión personal. Por último, tiene una GUI en QT4, shaman que es bastante normalita: cumple su función, no estopea mucho a pacman pero tampoco lo mejora. Como synaptic con apt-get.

En cuanto a la administración, esta más centralizada que en Gentoo, pero no hay scripts auxiliares, aunque tampoco hacen falta debido a lo simple que es. Casi cualquier aspecto del sistema se configura tocando el archivo /etc/rc.conf. Evidentemente, apache sigue teniendo su httpd.conf, etc, pero la información referente al sistema en sí (localización, hardware, red, demonios) está en un sólo archivo de texto.
Una idea genial que tiene es la de arrancar demonios en background, los cual acelera muchísimo el proceso de arranque. ¿Para que esperar a que arranquen apache y mysql si pueden ir arrancando mientras tecleo la contraseña? Lo mismo con otros más obvios como dhcp, ntpd, etc. Gentoo simplemente tenía un switch de asincronismo, pero Arch permite definir cada demonio por separado.
El siguiente paso sería definir hilos de demonios. Me explico con un ejemplo: si ntpd tiene que esperar a que dhcp adquiera una dirección, no haya que detener todo el arranque mientras dhcp termina. Se define que ntpd depende de dhcp (gentoo lo hace con funciones bash en cada script, pero un xml o yml valdría par el caso) y se arrancan ambos de manera asíncrona, así dbus puede ir arrancando mientras dhcp adquiere una dirección y ntpd espera a dhcp. Aún más, se puede definir otro hilo con dbus-hal-otros y arrancar los hilos de dbus y dhcp y mientras ir iniciando kdm. Si tengo un rato lo propondré en el bugzilla de Arch, si no lo ha propuesto alguien ya. En la documentación al menos no viene.

En cuanto al escritorio no hay mucho que decir: los fallos de KDE4 con nVidia estropean un poco el tema y por desgracia, no hay KDE3 en los repositorios oficiales. Las teclas multimedia funcionan de pascuas a ramos y sólo algunas, etc.


Para terminar hoy, destacar que existe un mecanismo parecido a los overlays de Gentoo: ABS y también un repositorio actualizado por los usuarios, una especie de "wiki de paquetes", AUR, pero aún no los he investigado. Con estos mecanismos sí que es posible instalar KDE3 y otras cosillas, pero lo dejo para más adelante.

De momento usaré Arch, al menos hasta que salgan las nuevas "distribuciones fáciles". Para el futuro, a largo plazo me gusta más Gentoo, pero al menos tendré una opción formada sobre Arch. Por el momento, recomiendo a cualquiera que le guste trastear con linux que la pruebe, aunque yo, sobre todo por el tema de varias versiones de un paquete, me quedo con Gentoo. Eso sí, el logo es más bonito el de Arch :D

Sunday, October 12, 2008

Windows... ¿qué?

Se dice, se comenta, que windows 7 puede tener ya nombre (comercial, en clave tipo longhorn, quien sabe): Windows STRATA.
No haré muchos comentarios, sólo dejaré un link que habla por si mismo.

Mandriva y cía

Una de las cosas positivas de Mandriva que ví al principio es la autocrítica, reflejada en la erratas en la wiki oficial. Incluye algunas cosas que había visto pero no había, comentado y otras que sí habia mencionado ya antes:
Otros muchos aún no están en las erratas, aunque el la página en inglés hay alguno más, como que las aplicaciones GTK aparecen con fallos gráficos en el panel, pero faltan otras muchas. Sin ir más lejos, la wifi falla al conectarse a puntos de acceso con WPA (y sin caracteres raros en la contraseña, a no ser que [0-9]+ sean caracteres raros), de manera increíble no hay ninguna aplicación para grabar discos en la instalación por defecto (instalar k3b requiere medio KDE3: 150 y pico megas), conky en desktop + compiz matan a las X, y así podría seguir un rato. Que conste que intenté instalar Mandriva 3 veces (más que nada porque las dos primeras me quedé sin wifi gracias a que el instalador borró el firmware), así que no creo que sea fallo mío. Vamos, que no le hubiera venido nada pero que nada mal otras dos semanitas de desarrollo, porque el resultado tiene una pinta de Beta que ni GMail ;)

Dispuesto a probar otros, intenté instalar openSUSE 11.0, por ver si la anterior vez fue fallo mío. Resultado: EPIC FAIL. Si siquiera llegó a arrancar el LiveCD, quedandose en una consola que decía: Arrancando X... Probé en inglés, con otra resoución y lo mismo. Probé arrancar en modo failsafe y llegó al escritorio, donde el touchpad funcionaba indescriptiblemente mal: cualquier toque bloqueaba el click y cuanquier movimiento accionaba la "rueda" del touchpad. Inusable. Aparte, las aplicaciones de systray (iconitos al lado del reloj) aparecían como programas minimizados en la barra de tareas, por supuesto sin posibilidad de hacerlos aparecer y por tanto sin poder usar la wifi (por ejemplo). Funcionaba tan mal que verifiqué el disco al arrancar de nuevo: MD5 OK. Suse KO.

Por último he probado Sabayon (filosofia ubuntu aplicada a gentoo en lugar de debian). La versión que me bajé fue "Sabayon-Linux-x86-3.5-Pod.iso", que resulta ser un LiveCD instalable como todos, pero con XFCE en lugar de KDE/GNOME y sin el firmware de la wifi. Lo peor es que en la web no explican que lleva, simplemente dejan links a los mirrors. Yo lo siento, pero teniendo un CD-RW no pienso gastar un DVD en probar la distro, y menos si no explican cómo va la cosa. Si encuentro un DVD+-RW lo intentaré.

Futuro: Dado que el portatil donde estoy probando estas distros lo va a heredar dentro de poco alguien no-geek, sigo buscando una distribución facilita. Kubuntu tuvo 2 oportunidades, así que le daré otra a openSUSE, versión 11.1 y si da tiempo, a Mandriva 2009.1. Aparte, intentaré sacar tiempo para probar Fedora10 y MEPIS8 y ya opcionalmente quizá Mint, PCLinuxOS... Quien sabe, incluso hasta PC-BSD o Desktop-BSD, aunque para un portátil no creo que den el pego.

Y yo volveré a los orígenes, Debian o Gentoo, dependiendo del procesador que tenga el portatil que me compre, aunque antes tengo ganas de probar Arch.

UPDATE: Parece ser que no soy el único al que Mandriva 2009 se le ha roto. Y de paso me he enterado de que PCLinuxOS en su versión actual no sirve de sistema para portatil, tocará esperar a una nueva versión.

Saturday, October 11, 2008

De FAIL en FAIL y... ¿tiro porque me toca?

Pues ya está Mandriva 2009 instalado de cero. Y desde luego no es gracias al instalador automático.
  • Incluye una herramienta para eliminar idiomas y drivers que no hacen falta para ahorrar espacio en disco y tiempo de arranque. Bien. La herramienta borra todos los drivers, incluidos los de la tarjeta de red: MAL.
  • Una vez terminada la instalación, el sistema pide reiniciar: Bien. El proceso de reinicio se para al 90% y ahí se queda indefinidamente: MAL.
  • Una vez resetado el PC pide crear usuarios: Bien. Crea el usuario con ID 500 y la mitad de sus archivos en el home con ID 1000, de modo que KDE no arranca: MAL.
  • Detectar automáticamente los botones multimedia: Bien. No asignarlos a ninguna acción y por tanto hacer que de entrada no funcionen: MAL.
  • Incluir un paquete LAMP para acelerar la instalación de un servidor: Bien. No incluir MySQL, que es la M de LAMP: MAL. Hacerlo en dos versiones seguidas: FATAL.
Resumiendo: lo poco que fallaba en la versión 2008.1 sigue fallando (el reloj se ha arreglado, creo q es lo único, apache sigue con el "listen 0.0.0.0:80") y un montón de cosas que funcionaban han dejado de funcionar. Justo como me temía, igual que openSUSE con la versión 11. Qué decepción.

Se que hacer un sistema operativo que sea fácil para el usuario es algo complicado, pero ¿tan difícil es no cagarla cuando ya casi lo tienes?

En fin, habra que probar Fedora10 y Mepis8. Quizá, sólo quizá, suse 11.1 y Mandriva 2009.1.

Friday, October 10, 2008

Amarok: Update FAIL (si, otro, pero este es Beta)

Si Mandriva falló estrepitosamente en el proceso de actualización, Amarok por el contrario, es el resultado el que deja mucho que desear.
La manía de simplificar se extiende y ahora ya no se puede por ejemplo, añadir un podcast que se tenga en el iPod. De hecho el iPod en sí aparece como otra colección, y los podcast no se distinguen de las canciones normales.
¿Está de moda que las cosas dejen de funcionar con las nuevas versiones?
Otra cosa discutible es incluir versiones Beta de programas como sustitutos de versiones estables. Con firefox3 la idea funcionó bien, pero no debería ser una costumbre...

Mandriva: Update FAIL

Ha salido Mandriva 2009! Voy a instalarla de 0, ya que la actualización ha sido un F-R-A-C-A-S-O. Hace 6 dias el applet actualizador me avisó muy amablemente: "hay disponible una nueva versión estable, ¿desea actualizar?" Lo que ocurrió después fue un CAOS, todo KDE se rompió y tuve que hacer un "urpme kde -a" (desinstalar TODO lo relacionado con KDE) y volver a instalar. Espero que aquello fuera un error de alguien al marcarlo como estable y justo pillara a mi applet consultando, porque la distro no ha salido hasta hoy. ¡Y con razón!

Una vez reinstalado, la mitad de los paquetes eran 2008.1 y la otra mitad 2009. Cambié a cooker (la versión "testing" o más bien "unstable", pero "unstable" tipo plutonio o nitroglicerina) y aunque ya todos los paquetes eran 2009 la cosa no mejoró mucho. KDE3 estaba medio abandonado, no habia yakuake para el 3, cosa que necesito como nada y decidi pasarme a KDE4.

Dos cositas sobre KDE4. Primera: tiene muuuuy buena pinta, la 4.2 puede ser REALMENTE buena, por ahora tiene bastantes cosillas muy liosas y otros detalles por pulir, aunque al menos ya es estable. Segunda: el dependency hell persigue a rpm, y se vuelve a manifestar con KDE4. Si ya conté que el paquete LAMP no trae MySQL, ahora es task-kde4 que no trae libQtWebkit4, con lo que KDE4 muere nada mas meter la contraseña, y hay que ser adivino, saber que el log de error está en ~/.xsession-errors e instalarlo a manita.

Un desastre en todos los sentidos. Esperemos que la versión estable sea mejor. Después de la mala experiecia con Kubuntu y la enorme regresión de openSUSE de 10.3 a 11, mis esperanzas de "un linux fácil" estaban puestas en Mandriva. Ojalá haya sido un fallo puntual de alguien, por que si no, no me quedan distros "grandes" que probar. ¿Quizá Fedora? Y por no hablar de Windows Vista. ¿Hay algún sistema operativo "user friendly" ahí afuera?

Está claro que en mi próximo portátil irá Gentoo, que al menos avisa de que hay que arremangarse la camisa y configurar a mano hasta lo más simple.