MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

¿Por qué se retrasará la salida de debian etch?
  • Puede ser por los problemas con Mozilla...

  • o bien, puede ser porque todavía hay muchos RC (release critical) bugs....

NO!!!!!!!!!

Corren rumores de que uno de los motivos de retraso del lanzamiento de Debian etch sea debido a..... (explicación en este blog)


Continua de verdad (no de broma)

 (Más)



Flash 9-beta para linux (no alegrarse demasiado)
Esta mañana depues de ver que había salido la beta me la he descargado y la he probado junto a pulseaudio. ¡No funciona!

En un principio, el plugin es un archivo bastante gordo:

$ ls -lh firefox/plugins/libflashplayer.so
-rw-r--r-- 1 mario mario 6,5M 2006-10-18 20:15 firefox/plugins/libflashplayer.so

y eso que si que le han pasado el strip!!!! (cosa que no han hecho con gflashplayer, el reproductor de flash sin navegador)

$ file firefox/plugins/libflashplayer.so
firefox/plugins/libflashplayer.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped

Está enlazado con muchísimas cosas (ldd firefox/plugins/libflashplayer.so) , me parece que para lo que es un simple plugin de navegador no necesitaba ni la mitad.

La prueba de fuego ha sido ejecutar el navegador entrar en algún sitio con flash y audio y ver que pasaba en la consola, muchos errores del tipo:

*** PULSEAUDIO: Unable to connect: Connection terminated

y en el panel de control (pavucontrol) muchísimas conexiones de Macromedia Flash a través del plugin alsa-pulseaudio, a partir de 64 se ha cansado y ha empezado a denegarlas:

sink-input.c: Failed to create sink input: too many inputs per sink.
protocol-native.c: Warning! Too many connections (64), dropping incoming connection.

Resumiendo, no soy un programador experto, no he hecho ingeniería inversa al plugin (ldd, strings, o file no son herramientas de hacker) pero he descubierto que se va a llevar muy mal con ALSA (y eso que antes no se llevaba demasiado bien con OSS) ya que crea muchas conexiones al dispositivo de sonido, quizás por esto sea que algún usuario dice que se le cuelga a mitad de los videos de youtube...


En fin que todos sabemos por qué el software privativo es malo, estos pequeños comentarios vienen a demostrarlo un poco más.

NOTA: paso de hacer un reporte de bug a gente que no desarrolla software libre.




Jigdo no funciona en ubuntu dapper.
Llevo unos días muy malos con mi proveedor de internet, resulta que de los 4 Mb que tengo de bajada por las mañanas apenas llega a 1 y por las tardes los test de conexión me dicen que mi velocidad es similar a RDSI....

Quería seguir probando TCOS en ubuntu (aún no me he rendido del todo) pero en vez de hacerlo por el camino dificil (editar el live) me he decidido a usar ubuntu dapper instalado (sobre vmware-server). Estando como está el adsl cualquiera se pone a descargar el cd de ubuntu a 10Kb por lo que me acordé de aquella vez que use jigdo para, usando mi mirror local, construir el dvd de debian sarge para regalarselo a un amigo sin internet....

Total empiezo a buscar archivos jigdo en los mirror de ubuntu...

* No hay archivo jigdo del desktop-cd (es de esperar ya que lleva un squashfs con el sistema instalado, no paquetes deb a granel con el debian installer)

* Me bajo el archivo jigdo de ubuntu-6.06.1-alternate que es la iso de ubuntu pero instalable sin modo live ni nada, problema el archivo jigdo tiene ya tiempo y los "listos" que llevan los mirror de ubuntu han quitado varios paquetes (supongo que por vulnerabilidades, uno es el kernel del instalador) pero no han actualizado el archivo jigdo por lo que hay 60 archivos no descargables....

* Aquí es donde me caliento un montón porque si fueran paquetes no muy importantes no pasa nada pero es el mismo kernel que hace la instalación (2.6.15-26.46), y luego paquetes varios (firefox, driver nvidia, xserver-xorg-core y una lib de mysql) ¿qué les cuesta dejar esos archivos en los mirrors? ¿por qué no actualizan el jigdo?

* Entro en idefix por ssh y me descargo desde alli el alternate-cd en cosa de 3 minutos (es lo que tiene la conexión de la universidad a estas horas), lo monto y voy buscando uno por uno todos los archivos que faltan para meterlos en un tar.gz y descargarlos a mi casa dapper-jigdo-lost-files.tar.gz (62 megas es bastante menos que un cd)

* Por último le digo a jigdo-lite que escanee los paquetes .deb y .udeb que acabo de descargarme y descomprimir.

Parece ser que acabo de constuir la imagen de arranque correctamente:

$ jigdo-lite

Jigsaw Download "lite"
Copyright (C) 2001-2005 | jigdo@
Richard Atterer | atterer.net
Loading settings from `/home/mario/.jigdo-lite'

-----------------------------------------------------------------
To resume a half-finished download, enter name of .jigdo file.
To start a new download, enter URL of .jigdo file.
You can also enter several URLs/filenames, separated with spaces,
or enumerate in {}, e.g. `http://server/cd-{1_NONUS,2,3}.jigdo'
jigdo [./ubuntu-6.06.1-alternate-i386.jigdo]:

-----------------------------------------------------------------
Images offered by `./ubuntu-6.06.1-alternate-i386.jigdo':
1: 'Ubuntu 6.06.1 "Dapper Drake" - Release i386' (ubuntu-6.06.1-alternate-i386.iso)

Further information about `ubuntu-6.06.1-alternate-i386.iso':
Generated on Mon, 07 Aug 2006 18:08:00 +0100

-----------------------------------------------------------------
If you already have a previous version of the CD you are
downloading, jigdo can re-use files on the old CD that are also
present in the new image, and you do not need to download them
again. Mount the old CD ROM and enter the path it is mounted under
(e.g. `/mnt/cdrom').
Alternatively, just press enter if you want to start downloading
the remaining files.

You can also enter a single digit from the list below to
select the respective entry for scanning:
1: ./lost-files
2: /home/mario/Desktop/dapper
3: /mirror/ubuntu/pool
Files to scan: ./lost-files

Not downloading .template file - `ubuntu-6.06.1-alternate-i386.template' already present
Found 60 of the 60 files required by the template
Successfully created `ubuntu-6.06.1-alternate-i386.iso'

-----------------------------------------------------------------
Finished!
The fact that you got this far is a strong indication that `ubuntu-6.06.1-alternate-i386.iso'
was generated correctly. I will perform an additional, final check,
which you can interrupt safely with Ctrl-C if you do not want to wait.

OK: Checksums match, image is good!

Bueno que me voy a poner a instalarlo...




Artículo sobre clientes ligeros y TCOS
Aprovechando la liberación de tcos (0.56.1) y de TcosMonitor (0.15) he escrito un pequeño artículo sobre TCOS, su base teórica, y algunas de las capturas que he venido usando durante estos meses.

Artículo sobre clientes ligeros y TCOS



Python, threads, perros guardianes y acceso simultáneo al interfaz (pygtk)
Con pyhton el tema de programación multihilo es bastante delicado, sobre todo cuando estamos programando interfaces (pygtk, pyqt) ya que si tenemos varios hilos en ejecución y dos de ellos o más acceden al interfaz para cambiar algo podemos tener errores aleatorios (errores de X11 async, o incluso violaciones de segmento)

Para TcosMonitor necesitaba de alguna manera algo que bloquease el lanzamiento de nuevos hilos en determinadas circunstancias, por ejemplo, al descargar información de un equipo, si se seleccionaba otro antes de acabar el primero, se obtienían errores bastante raros....

He estado reescribiendo algunas partes multihilo, y ahora todas ( o casi todas ) usan una clase que había programado casi al principio pero que no usaba porque no funcionaba bien. La clase se llama Workers y tiene un perro guardian que si se activa, lanza otro hilo esperando que acabe la función que hemos ejecutado para así hacer de bloqueo en nuevas peticiones. En los threads de python existen los bloqueos y los semáforos pero creo que no es necesario complicarse tanto ya que el perro guardián hace la misma función y es desactivable desde la llamada. Pequeño ejemplo (se puede descargar del svn: prueba.py):

# -*- coding: UTF-8 -*-

from time import sleep

from threading import Thread


class Workers:
def __init__(self, main, target, args, dog=True):
self.dog=dog
self.main=main
self.target=target
self.args=args
if self.main.worker_running == True:
print "worker() other work pending"
else:
print "worker() no other jobs"
self.th=Thread(target=self.target, args=(self.args) )
self.__stop=True

def start_watch_dog(self, dog_thread):
if not self.dog:
print "start_watch_dog() dog DISABLED"
return
print "start_watch_dog() starting watch dog"
watch_dog=Thread(target=self.watch_dog, args=([dog_thread]) )
watch_dog.start()

def watch_dog(self, dog_thread):
print "watch_dog() __init__ "
dog_thread.join()
self.set_finished()
print "watch_dog() FINISHED"

def start(self):
if not self.dog:
self.th.start()
else:

if self.main.worker_running == False:
self.th.start() # start thread
self.set_started() # config var as started
self.start_watch_dog(self.th) # start watch_dog
else:
print "worker() other work pending... not starting"

def set_finished(self):
self.__finished = True
self.__stop=False
self.main.worker_running=False

def set_started(self):
self.__finished=False
self.__stop=False
self.main.worker_running=True


class Prueba:
def __init__(self):
self.worker_running=False

def con_perro(self):
# ejecución con perro guardian
self.worker=Workers(self, target=self.hacer_algo, args=(["soy el proc 1"]) )
self.worker.start()

# lanzamos un nuevo proceso despues de 2 seg
sleep(2)
self.worker=Workers(self, target=self.hacer_algo, args=(["soy el proc 2"]) )
self.worker.start()

def sin_perro(self):
# ejecución con perro guardian
self.worker=Workers(self, target=self.hacer_algo, args=(["soy el proc 1"]), dog=False)
self.worker.start()

# lanzamos un nuevo proceso despues de 2 seg
sleep(2)
self.worker=Workers(self, target=self.hacer_algo, args=(["soy el proc 2"]), dog=False)
self.worker.start()

def hacer_algo(self, arg1):
print "::::::::::::::haciendo algo....arg1="%s"" %(arg1)
sleep(4)
print "::::::::::::::hemos acabado arg1="%s"" %(arg1)
# avisamos a worker que hemos acabado (por si no tenemos perro)
self.worker.set_finished()

if __name__ == "__main__":
print "CON PERROS"
Prueba().con_perro()
sleep(10)
print "nnAHORA SIN PERROS"
Prueba().sin_perro()
sleep(10)


Lo que vamos a hacer es ejecutar una función ociosa que por ejemplo tarda 4 segundos en ejecutarse.

Nos pueden ocurrir dos casos, primero, que no permitamos que una segunda llamadase ejecute si la primera no ha terminado o que .
Prueba().con_perro() no permite que la segunda llamada a la función se ejecute ya que sólo han pasado 2 segundos desde que comenzó la primera (que necesita 4), en Prueba().sin_perro() tenemos deshabilitado el perro guardián y dejamos que se ejecuten ámbas. Esta es la salida de consola:

$ python prueba.py
CON PERROS
worker() no other jobs
start_watch_dog() starting watch dog
::::::::::::::haciendo algo....arg1="soy el proc 1"
watch_dog() __init__
worker() other work pending
worker() other work pending... not starting
::::::::::::::hemos acabado arg1="soy el proc 1"
watch_dog() FINISHED


AHORA SIN PERROS
worker() no other jobs
::::::::::::::haciendo algo....arg1="soy el proc 1"
worker() no other jobs
::::::::::::::haciendo algo....arg1="soy el proc 2"
::::::::::::::hemos acabado arg1="soy el proc 1"
::::::::::::::hemos acabado arg1="soy el proc 2"

Como puede verse en la primera parte se detecta que ya hay algo funcionando y no se deja arrancar lo siguiente. Este tipo de clase rechaza las llamadas consecutivas, se podría haber hecho una cola FIFO para no perder esas llamadas pero creo que para TcosMonitor complica las cosas más que mejorarlas.




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.




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.





Flash para máquinas de 64 bits
Muchos de los equipos que se llevan vendiendo durante más de un año han sido de arquitectura de 64 bits, esto en vez de una ventaja en mejora de rendimiento ha sido (sobre todo en pxs de escritorio) un inconveninete, falta de drivers, falta de aplicaciones y falta de flash o plugins de video.

Hasta ahora la gente lo solucionaba con una jaula «chroot» de 32 bits, pero hoy leo en linux.com, que hay disponible un plugin para firefox que actúa de capa intermedia entre firefox (de 64 bits) y flash (de 32 bits) y otros plugins.

El plugin se llama NSpluginwrapper y por lo que aparece en la captura es capaz de hacer funcionar flash en el firefox de ubuntu de 64 bits.

Entre los plugins soportados se encuentran:

  • Acrobat Reader (5.0.9 and 7.0.1)
  • DejaVu Libre (3.5.14)
  • Flash Player (7.0)
  • Linux JPEG 2000 (0.0.2)
  • Mplayerplug-in (2.80)
  • Real Player (10.0.5)

Buenas noticias para los 64 bits !!!!





El mundial de futbol por consola (software libre 100%)
Mucha gente se queja que el sopcast (versión de linux) ha dejado de funcionar o no se ve en determinados canales....

Esta mañana mientras leía el planet debian he descubierto algo bastante gracioso y que me ha recordado a La Guerra de las Galaxias en ASCII.

Ver los partidos del mundial por telnet:

Tan sencillo como:

$ telnet ascii-wm.net 2006

En estos momentos está saturado, hay dos mirror más:

$ telnet diego.ascii-wm.net 2006 
$ telnet pinguin.eikon2.fs.ei.tum.de 2006
Más info en la web oficial ASCII-WM 2006. Captura de pantalla. Por lo visto trasnsmiten con 10 minutos de retraso...




De Windows, sus updates, antivirus y ¿donde leches está mi GRUB?
Resulta que ayer recordé que he cambiado de proveedor de internet ( al final me decidí por ya.com ) y supongo que en unos días wanadoo cortará el grifo por lo que necesitaba darle un repaso al Windows de mi portatil porque es la única forma de conectarme por modem convencional.

Total que arranco el innombrable entro en la página de actualizaciones de windows y después de más de 60 Mb (si que hace que no entraba) cambio y actualizo el antivirus (la demo de avast de 60 días) y el firefox a la última versión. En uno de los 4 reinicios de este proceso me doy cuenta que ya no está GRUB !!! ¿Quién cojones me ha borrado el GRUB? ¿Ahora como arranco mi Debian?

En otro equipo esto no hubiera sido un problema pero en mi portatil sí. Desde el año pasado en las I Jornadas de Software Libre donde rodó (literalmente) por las escaleras por romperse el asa de la bolsa el lector/grabador de cds/dvd funciona a un 5%. Cualquier cd no lo reconoce y con algunos llega a volverse loco y ponerlos a 10.000 rpm teniendo que dar un botonazo no vaya a ser que se reviente el cd dentro del lector, hace poco cuando reinstale debian por temas de redimensionado de particiones tuve suerte que el debian-netinstall es de los pocos que se que funcionan...

Da la casualidad que mis 3 copias de reserva del netinstall están en SOLEUP dado que necesitaba algún cd extra para instalarlo en el curso de GNU/linux que estamos a punto de acabar (Lunes).

Total que me estoy liando mucho. Tengo un portatil que no lee cds (he probado knoppix, ubuntu, y 6 o 7 más de los que tengo en casa) mi portatil no tiene disquetera y para colmo el MP3-usb en el que antes tenía un SOLEUPIX-usb de emergencia lo he formateado para escuchar música. Para reinstalar GRUB me quedan tres opciones:

1.- Me bajo un netinstall, lo grabo y hago el chroot... (no es seguro que vuelva a funcionar)

2.- Me bajo el SOLEUPIX-usb, lo instalo de nuevo en el pendrive (y otra vez a formatearlo para escuchar música)

3.- Intento arancar por red.... (ummm TCOS rules!!!)

Así que empiezo a pensar en cómo funciona TCOS y que mi hermano tiene su ordenador con Ubuntu conectado al router donde me conecto yo.

Me bajo de SOLEUP algunas cosillas que necesito:

/tftpboot/tcos/vmlinuz
/tftpboot/tcos/initramfs
/tftpboot/tcos/usr.squashfs
/tftpboot/tcos/pxelinux.cfg/default
/tftpboot/tcos/logo.lss

Configuro el servidor atftpd en ubuntu y el servidor dhcp3 para incluir mi MAC.

Mi portatil tiene una tarjeta de red via-rhine con soporte PXE así que en unos segundos ya estaba en la consola busybox de TCOS, montando la partición de mi debian, y remontando /dev, /proc y /sys dentro de lo que sería la jaula:

# mkdir /target
# mount -t ext3 /dev/hda2 /target
# mount -o bind /dev /target/dev
# mount -o bind /proc /target/proc
# mount -o bind /sys /target/sys
# chroot /target

Aquí ya estoy de nuevo en mi debian, lo único que falta es volver a copiar GRUB al MBR:

# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit

Con esto ya está reinstalado, salgo de la jaula chroot, desmonto todo lo montado y reinicio. He recuperado GRUB !!!!!!!!!

¿Quién narices ha borrado GRUB del MBR? ¿Algún update de windows? ¿Desinstalar el antivirus viejo (AVG)? ¿Instalar el nuevo (avast)? ¿La actualización de firefox :P?

Es una de las dudas que tendré un tiempo pero por lo menos se que en caso de emergencia en GNU/Linux siempre hay al menos 3 opciones a seguir.

Por si vuelve a ocurrir he instalado GRUB en el disco duro externo USB que tengo de 200Gb con una ubuntu dapper (el portatil no será muy bueno pero además de arrancar por PXE admite arrancar desde USB)