MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

PulseAudio parte II
Acabo de colgar tanto los paquetes deb de PulseAudio como las fuentes para que puedan ser compilados al modo debian en versiones distintas de unstable (aviso que faltan las dependencias de compilación pero creo que no deben ser muchas).

Instalar PulseAudio


Añadir al sources.list:

deb http://soleup.eup.uva.es/pulseaudio/ ./

Actualizar lista de paquetes:

# apt-get update (aptitude update tambien vale)

Instalar:

# apt-get install pulseaudio pulseaudio-modules

Con esto ya podemos arrancar el servidor de sonido (hay que parar otros servidores /aplicaciones que puedan estar bloqueando la tarjeta de sonido)

$ pulseaudio
(en mi portatil muestra esta salida)
alsa-util.c: device doesn't support 44100 Hz, changed to 16000 Hz.
alsa-util.c: device doesn't support 2 channels, changed to 1.
alsa-util.c: Cannot find mixer control "PCM".
alsa-util.c: Cannot find fallback mixer control "Master".
alsa-util.c: device doesn't support 44100 Hz, changed to 16000 Hz.
alsa-util.c: device doesn't support 2 channels, changed to 1.
alsa-util.c: Cannot find mixer control "Capture".
alsa-util.c: Cannot find fallback mixer control "Mic".

NOTA: hay más información de los módulos de arranque en el wiki de pulseaudio.

Visto que funciona (sino funciona es porque falta alguna librería, prueba instalando alguna de estas: libpulse0, libpulsedsp, libpulse-simple0, libpulse-mainloop-glib0, libpulse-browse0, libpulsecore2)

Ahora vamos a instalar las utilidades:

# apt-get install padevchooser paman paprefs pavumeter pavucontrol

y los plugins para gstreamer, libao, xmms, y beep-media-player (instala los que vayas a necesitar)

# apt-get install gstreamer0.10-pulse libao-pulse xmms-pulse beep-media-player-pulse

Abrimos por ejemplo beep-media-player o xmms y seleccionamos como plugin de salida "PulseAudio Sound Server".

Antes de dar a reproducir dejar una consola abierta con el comando pulseaudio ejecutado como usuario.

Una vez que damos a reproducir, si suena ya tenemos todo, ahora podemos ejecutar padevchooser y aparecerá en la barra de tareas un icono con un altavoz, al picar aparece un menu en el que podemos lanzar el resto de aplicaciones. Si ejecutamos PulseAudio Manager podremos ver información de canales, el tema que se está reproduciendo así como ver el volumen con los monitores o subirlo y bajarlo.

NOTA: Para que las aplicaciones que funcionan sobre gstreamer (muchas de gnome, amarok, etc...) usen pulseaudio hay que abrir la configuración (gstreamer-properties) y configurar el pipeline de salida con pulsesink y el de entrada como pulsesrc. Supongo que en el próximo gnome-media cambien polypaudio por pulseaudio que es el nuevo nombre.


Compilar PulseAudio al modo debian


Añadir al sources.list:

deb-src http://soleup.eup.uva.es/pulseaudio/ ./

Creamos un directorio y en él nos bajaremos las fuentes:

$ cd && mkdir tmp && cd tmp
$ apt-get source pulseaudio
$ cd pulseaudio-0.9.5/
$ dpkg-buildpackage -rfakeroot

Dentro de un rato, sino faltan dependencias, nos encontraremos en ../ los deb de pulseaudio, para las utilidades y los plugins el método es similar pero ejecutando apt-get source NOMBRE_PAQUETE.




Sistemas de sonido en red, futuro cercano
La implementación de esd en clientes ligeros es usada por PXES, LTSP y por mi proyecto TCOS, ayer en el wiki de ubuntu redescubrí un proyecto que ya había visto antes en el planet-gnome: PulseAudio.

PulseAudio (antes conocido como Polypadio) es un sistema de sonido en red impresionante y está llamado a ser el sustituto del betusto ESound Daemon en la versión 2.18 de Gnome. Supongo que además de ser el corazón musical del próximo gnome se usará para una multitud enorme de labores, por ejemplo, ¿qué tal tener enchufado al servidor de tu casa el equipo de música y en el portátil reproducir a través de los altavoces del equipo de música, previo paso por el servidor? ¿sistemas home-cinema?....

UPDATE: Se me olvidaba comentar que entre otras cosas que permite están, por ejemplo, reproducir en varias tarjetas de sonido a la vez (en distintos equipos=streaming), soporta zeroconf, gracias al demonio avahi (autodescubrimeinto de servicios, hardware, etc..), mezclar dos tarjetas de sonido, o incluso combinarlas para conseguir 4 salidas en vez de dos o compartir un microfono en una red (varios hablan y suena por el mismo sitio o por varios = audioconferencia). También funciona en WINDOWS !!!!

El problema que me he encontrado es que nadie lo ha empaquetado para debian (alguien empezó y se cansó) ubuntu tampoco. Así que al ver que la versión 0.9.4 no compilaba descargue la rama SVN.

PulseAudio es el paquete que más tiempo me ha llevado empaquetar de los muchos que tengo en mi mirror personal ya que lo he dividido en varios y he empaquetado además las utilidades (que son bastantes):
  • pulseaudio_0.9.4-2_i386.deb los binarios
  • pulseaudio-modules_0.9.4-2_i386.deb los módulos
  • libpulseaudio0_0.9.4-2_i386.deb las librerías
  • libpulseaudio0-dev_0.9.4-2_i386.deb las cabeceras .h y la parte .la y .a de las librerías
Me faltan sacar las dependencias correctamente ya que los plugins no son escaneados por dh_shlibdeps. Cuando lo tenga un poco más pulido lo colgaré de algún sitio. A todo esto, idefix.eup.uva.es está apagado POR OBRAS.

Las utilidades son:
  • paman_0.9.2-1_i386.deb Centro de control de PulseAudio (más adelante hay capturas)
  • pavucontrol_0.9.3-1_i386.deb Controla los volumenes de los sinks y sources
  • pavumeter_0.9.2-1_i386.deb Monitor de volumen
  • padevchooser_0.9.2-1_i386.deb Mini aplicación para la barra de tareas que permite seleccionar el servidor y lanza los anteriores.
y los siguientes plugins:
  • gstreamer0.10-pulse_0.9.3-1_i386.deb plugin para gstreamer
  • libao-pulse_0.9.3-1_i386.deb plugin para libao
  • xmms-pulse_0.9.3-1_i386.deb plugin de salida para xmms
  • beep-media-player-pulse_0.9.3-1_i386.deb plugin de salida para beep-media-player

Básicamente lo que hace es arrancar un servicio, se cargan una serie de módulos (definidos en un guión de arranque) y si así se pide publica una cookie en la sesión X11 lanzada (para temas de autenticación).

He metido algun binario dentro de la imagen TCos (ocupa 2,7 Mb a mayores) y ya tengo PulseAudio funcionando con Tcos.

La conexión es por medio de una variable de entorno PULSE_SERVER="tcp:192.168.0.11:4713".

Esto es una captura del terminal, corriendo sobre vmplayer y reproduciendo en beep-media-player un temilla (dark la eme):



Este es el aspecto de paman (PulseAudio Manager) ejecutado fuera de Tcos, desde mi sesión:



he compilado el plugin de salida PulseAudio para xmms y para beep-media-player, pulseaudio publica la información del stream. La latencia es un poco más de medio segundo, que para sonido en red esta muy bien.



Monitor de volumen, se mueve y todo:



Información de la fuente (el volumen se puede subir o bajar de 100%)



Este es el control de volumen. ESound no permite modificar el volumen de un servidor de sonido en modo remoto, PulseAudio si. Incluso pulse audio permite GRABAR y controlar el volumen del micro.






Cosas que estan por venir en ubuntu.
Parece ser que el equipo LTSP de ubuntu se va a poner las pilas.

http://people.ubuntu.com/~ogra/LTSPManager/

TcosConfig es bastante más cutre pero la idea es la misma.

LTSP Edubuntu Edgy ideas


PD.- Ya se que no es normal que escriba tanto.




Atención para poseedores de una placa VIA o un portatil Acer Aspire 1355LM
Resulta que me he visto obligado a usar un kernel desactualizado y con algún fallo debido a que en la transición entre el 2.6.16-1-k7 y el 2.6.16-2-k7 se aplicó la revisión 2.6.16.17 que contenía un parche con el que dejaba de funcionar el modo USB 2.0 en mi portatil.

Mi lscpi:

# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8378 [KM400/A] Chipset Host Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8235 PCI Bridge
00:07.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 02)
00:08.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 50)
00:11.6 Communication controller: VIA Technologies, Inc. AC'97 Modem Controller (rev 80)
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
01:00.0 VGA compatible controller: VIA Technologies, Inc. VT8378 [S3 UniChrome] Integrated Video (rev 01)

Al usar un disco duro externo usb para casi todo, no podía permitirme usar un kernel más nuevo que el 2.6.16-1-k7 que ya no está en los repositorios.

He estado buscando diferencias entre los parches que aplica debian a los kernel 2.6.16-1 y 2.6.16-2 y en el Changelog encontré esto:

commit dc0f369552b491d1578e8a8c6f6512e17246241c
Author: Chris Wedgwood
Date: Mon May 15 09:43:55 2006 -0700

[PATCH] VIA quirk fixup, additional PCI IDs

An earlier commit (75cf7456dd87335f574dcd53c4ae616a2ad71a11) changed an
overly-zealous PCI quirk to only poke those VIA devices that need it.
However, some PCI devices were not included in what I hope is now the full
list. Consequently we're failing to run the quirk on all machines which need
it, causing IRQ routing failures.

This should I hope correct this.

Thanks to Masoud Sharbiani for pointing this out
and testing the fix.

Signed-off-by: Chris Wedgwood
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
Signed-off-by: Greg Kroah-Hartman
Signed-off-by: Chris Wright

El parche tiene esta pinta:

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index dda6099..381f36b 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -631,6 +631,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_V
* non-x86 architectures (yes Via exists on PPC among other places),
* we must mask the PCI_INTERRUPT_LINE value versus 0xf to get
* interrupts delivered properly.
+ *
+ * Some of the on-chip devices are actually '586 devices' so they are
+ * listed here.
*/
static void quirk_via_irq(struct pci_dev *dev)
{
@@ -639,13 +642,19 @@ static void quirk_via_irq(struct pci_dev
new_irq = dev->irq & 0xf;
pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
if (new_irq != irq) {
- printk(KERN_INFO "PCI: Via IRQ fixup for %s, from %d to %dn",
+ printk(KERN_INFO "PCI: VIA IRQ fixup for %s, from %d to %dn",
pci_name(dev), irq, new_irq);
udelay(15); /* unknown if delay really needed */
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, new_irq);
}
}
-DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq);
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq);

/*
* VIA VT82C598 has its device ID settable and many BIOSes

Así que he creado un "antiparche", he compilado el kernel 2.6.17 con la configuración del 2.6.17-2-k7 y voilá !!! el usb 2.0 vuelve a funcionar.

Mi antiparche:

--- drivers/pci/quirks.c 2006-08-23 12:35:02.000000000 +0200
+++ drivers/pci/quirks.c.orig 2006-08-23 12:34:51.000000000 +0200
@@ -652,6 +652,9 @@
}
}

+/* mariodebian unpatch 2.6.16.17 */
+DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_ANY_ID, quirk_via_irq);
+/*
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2, quirk_via_irq);
@@ -659,6 +662,7 @@
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_via_irq);
DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irq);
+*/


/*
Tan sencillo como comentar todos los defines y volver a poner el original.

Os presento a mi nuevo kernel:

# cat /proc/version
Linux version 2.6.17-3-k7 (2.6.17-7) (root@mariodebian)
(gcc versión 4.1.2 20060814 (prerelease) (Debian 4.1.1-11))
#1 SMP Wed Aug 23 11:07:58 CEST 2006
Como no me suelo cansar cuando me dan largas, he vuelto a enviar información al bug #376652 de debian que en su día encontré con lo que pasaba.

Lo que más me fastidia es que si no se soluciona me veo compilando uno por uno todos los kernel que vayan saliendo para aplicar un parche de una mísera línea. Me alegra saber que por lo menos se donde está el fallo aunque no sepa que coño hace el parche.





Revisiones de tcosmonitor e initramfs-tools-tcos
Estos días he estado revisando tcosmonitor e initramfs-tools-tcos y he corregido multitud de pequeños fallos en ámbas.

Me había fijado que desde hace un tiempo no funcionaba el sonido, cosa que achacaba a estar ejecutándolo dentro de vmplayer, pero investigando me he dado cuenta que uno de los scripts de initramfs-tools provee una función para copiar modulos manual_add_modules que no copiaba los módulos que yo le indicaba, he reportado un bug a debian #384043, pero parace ser que, o bien no me han entendido, o bien estan flipando por meter las xorg dentro de un initramfs o bien pasan de que alguien que no tiene mucha idea les diga que tienen un bug. Supongo que como ellos no meten los módulos del sonido nunca les ha pasado. Total que como no lo van a arreglar uso un añadido propio para estar seguro que se copian todos y cada uno de los módulos que necesito sin confiar demasiado en initramfs-tools.

Acabo de publicar la versión 0.0.11.pre1 de tcosmonitor y la versión 0.53.pre1 de initramfs-tools-tcos. Ámbas están en el mirror:

deb http://soleup.eup.uva.es/tcos/debian/unstable main

Siguiendo el consejo de Javier Santana[ver comentario#1], he reescrito el método de autentificación para la parte xmlrpc. Básicamente ahora cada acción que resulte "peligrosa", es decir, que vaya a reiniciar las X, o el terminal, o que modifique algo irá acompañada de la pareja de argumentos usuario+contraseña.

El método de autenticación de tcosxmlrpc es más o menos:

1.- Ver si existe /etc/tcospasswd, si existe validar usuario y la contraseña (encriptada con la función crypt (man crypt).

2.- Si no existe probar /etc/shadow, y hacer lo mismo

3.- Si no existen los dos anteriores probar /etc/passwd mientras el password sea distinto de "x" (esta condición denota que el password habría que buscarlo en shadow)

4.- Una vez ejecutada la autenticación si el acceso es correcto se ejecuta la acción, sino se devuelve una cadena de texto con la descripción del error.

Mucha gente me daba alternativas a tcosxmlrpc cuendo comencé a programarlo, pero ninguna de ellas (SSH, SNMP) permiten una interacción tan rápida cliente<->servidor como esta ya que en la misma petición se incluye la respuesta, además he programado de nuevo en C para no dejarlo en el olvido...

En cuanto al entorno gráfico los cambios están en las mismas tripas del código python, habiendo adaptado las clases que necesitan contraseña y habiendo "hilado" algún que otro método para dar un poco más de fluided gráfica. Como única novedad hay un nuevo elemento en el menú para que el cliente (solo para TCOS, pxes o ltsp no pueden) se descargue un archivo comprimido con __TODOS__ los módulos disponibles y los monte para así saber que módulos realmente necesita el terminal.

UPDATE1: Se me olvidaba que hay un nuevo paquete llamado tcos-usplash que no es más que el arranque gráfico al estilo ubuntu (ahora también debian).

UPDATE2: Ayer hablando con un profesor de Matemáticas de México (Eduardo Estrepo) se ma ha ocurrido un gran idea sobre las complicaciones que están surgiendole. Resulta que reciclan equipos para instalar aulas de terminales y la instalación/configuración del servidor es lo que más tiempo lleva, existen multitud de herramientas para clonar un linux a otra máquina pero sería un gran proyecto algo como METAMETADISTROS, es decir, un livecd con las herramientas de metadistros un particionador y un escritorio con un asistente que cree una iso (cd/dvd) a partir del sistema instalado lo que se convierte en un clonador de ese mismo servidor con la ventaja de que no es necesario que el hardware sea el mismo ya que la metadistro hace la función de autodetección.... lo preguntaré en la lista de metadistros-dev...




Un mes en off
Muchos de los habituales lectores que suelen visitar este humilde blog se habrán dado cuenta que hace un mes que no escribo, y de hecho es así, he estado un mes de "vacaciones" en el pueblo de mis padres donde no hay conexión a internet, tampoco la ha necesitado ya que ni siquiera he encendido el portatil que me llevé. Lo de las vacaciones es un decir porque siempre hay que hacer cosas (albañil, pintor, carpintero, electricista....)

Este mes que he pasado sin más tecnología que la televisión ha sido de lo más inproductivo. Aún así me ha servido para cargar las pilas de nuevo y empezar el curso con más ganas de lo que lo dejé.

TCOS está abandonado pero volveré con ello, ya he estado jugando con el nuevo paquete usplash que ha entrado en debian este verano, (no se porqué extraña razón no coje los temas y sale el splash para testear, algo parecido a una carta de ajuste), espero que una vez solventados algunos puntos poder incluir usplash por defecto en el arranque de tcos con los paquetes debian y el tema que ya tenía hecho.

He sido invitado a las 3as. Jornadas Tecnológicas de Software Libre a las cuales presente un pequeño taller sobre TCOS y clientes ligeros a medida, pero que al no haber hecho nada este verano he tenido que renunciar por no tener nada preparado y muchas cosas aún en pañales. Algo me dice que un producto hay que presentarlo cuando se sabe que falla y qué funciona (y si no mirad que le pasa a Microsoft cada vez que saca una actualización o la misma Xbox360...) Es una verdadera pena no acudir a Málaga ya que después de las jornadas se realizarán algunos cursos y me apetecía bastante conocer a Juanje, desarrollador de Guadalinex y Metadistros entre otras muchas cosas o al mismísimo Ramón, "hacedor" de que la cultura de software libre sea poco más libre en toda España, organizador del e-verano.org también...

El programa de las 3jtasl es impresionante, con ponentes como Juan Tomás, David Gascón, Marcelo Branco, Jorge Cortell, y con temas, como diseño gráfico, VoIp, programación web, gestión de sitios, redes P2P, programación con ruby o python, clustering..... en fin, se que me voy a arrepentir y espero que este curso que empieza traiga mejores notas para estar libre el proximo e-verano.