Archivo de la categoría: Cacharreo

Amplificando mi tablet

Recientemente me compré una pequeña tablet Szenio 1207 que estaba de oferta en unos grandes almacenes. Se trata de un cacharro bastante limitado y que no recomiendo para uso habitual: su procesador no tiene suficiente potencia para mover de manera fluida Android 4.0, por lo que la interfaz se atasca constantemente al intentar utilizarla para navegar o leer el correo (una de las cosas que quiero hacer más adelante es intentar meterle un linux con Debian o Gentoo a ver si mejora).

Sin embargo, para mí es perfecta porque sólo la quiero para ver algún que otro capítulo de series mientras pedaleo en la bicicleta estática del gimnasio (aunque éstas tienen una televisión, estoy harto de ver una y otra vez los mismos capítulos de Rex, el perro policía, y me niego a tragarme a Ana Rosa y similares). En este caso funciona bien porque no hay interacción con el usuario.

Por desgracia el gimnasio es un entorno bastante ruidoso: entre las máquinas y el hilo musical, el volumen que da la tablet a través de los cascos es insuficiente. Por este motivo decidí añadirle un pequeño amplificador de sonido. Casualmente, rebuscando entre la cacharrada que tengo en el taller encontré el viejo amplificador de sonido que construí para mi viejo Spectrum (y que, posteriormente, había reutilizado en un DAC de sonido para mi primer PC), así que decidí aprovecharlo en lugar de ensamblar uno nuevo.

El diseño está basado en el chip LM386, un amplificador de sonido que permite construir equipos con muy pocos componentes y especialmente orientado para su uso con baterías. Este es el esquema (sí, aunque no lo parezca es correcto: no necesita realimentación porque su ganancia interna, por defecto, es de 20. En el datasheet aparece exactamente igual, y garantizo que funciona con la ganancia indicada):

amplificador_tablet2

Como se ve, el amplificador no es estéreo, por lo que tuve que cortocircuitar los canales derecho e izquierdo. Una vez conectado el circuito, lo monté en una pequeña caja con una pila de 9 voltios y demás:

amp1amp2

amp3

Una vez montado quedaba la cuestión de cómo fijarlo a la tablet para no andar con él colgando por ahí. La solución que se me ocurrió fue utilizar velcro para sujetarlo por detrás. De esa manera hace también la función de atril, inclinando el tablet hasta una posición más cómoda, y permite montarlo y desmontarlo las veces que se desee. Además, como mejor se ve la pantalla en el gimnasio es con la tablet «boca abajo», así que decidí poner velcro en todas las esquinas para así poder orientarla en cualquiera de las cuatro posiciones posibles. Para pegar el velcro a la tablet y a la caja del amplificador utilicé cinta adhesiva de doble cara:

amp4amp5

amp6

¡Y ya está!

amp7

Un detalle importante es que ahora es necesario ajustar el volumen de la tablet casi al mínimo. Cuando hice la primera prueba casi me quedo sordo por culpa de la potencia que saca.

Hackeando cuelgatazas

Mi cocina es algo pequeña, así que cualquier cosa que ayude a tener más espacio siempre es bienvenida. Una idea que tuve hace tiempo fue aprovechar que los muebles tienen una moldura por debajo, que deja un hueco de unos tres centímetros, para añadir unos cuelgatazas disimulados en la base, y así tenerlas más a mano y aprovechar el hueco liberado para otras cosas.

Por desgracia, no encontré en ninguna parte un modelo que me convenciese. El más parecido fue éste de CASA, diseñado para enganchar en la balda de un estante. Pese a todo, es más un cuelgapocillos, porque el metal de la zona curva, que es la que sostiene el peso, se dobla demasiado si pongo una taza de desayuno (pulsar en las imágenes para verlas a tamaño completo):

IMG_20130616_192040

Sin embargo, si sujetaba el colgador de manera adecuada todavía podría utilizarlo, así que me puse manos a la obra. Lo primero fue buscar un trozo de tablero (en mi caso, de 15×75 cm) donde fijar los colgadores, y marcar en él los puntos en donde se cruzan las barras que lo forman:

IMG_20130616_164828 IMG_20130616_164847 IMG_20130616_165024

El siguiente paso fue fijar cada uno de los tres cuelgatazas al tablero mediante unas alcayatas, montadas de tal manera que impidan que se mueva en cualquier sentido:

IMG_20130616_165846 IMG_20130616_165904

A continuación había que fijarlo al mueble, debajo de la rejilla de los platos. Para ello puse dos pequeñas escuadras en uno de los laterales; en el otro, como hay un mueble «normal», decidí atornillarlo directamente a su base:

IMG_20130616_170102

Una vez colocado el tablero sobre las escuadras y atornillado a éstas, hay que recortar lo que sobresalga de los tornillos, obviamente:

IMG_20130616_171132

¡Y listo! Ya puedo colgar hasta 18 tazas cómodamente.

IMG_20130616_192103

Entrada de línea en mi C2

Cuando, hace años, me compré mi Citroen C2, me conformé con el autorradio que traía de serie: un modelo relativamente sencillo de la marca Clarion. Este equipo trae radio y lector de CDs, además de permitir la conexión de un cargador de CDs externo. Por desgracia, sólo admite CDs normales, nada de MP3, por lo que es bastante limitado.

En varias ocasiones sopesé el cambiarlo por otro modelo, pero eso me obligaba a renunciar a los controles de volumen en el volante, o bien a comprar un (caro) cable adaptador. Encima, la entrada de cargador externo de CDs tienen que activarla en un concesionario para que funcione, por lo que conectar un reproductor externo de manera directa parecía una misión imposible.

Durante un tiempo utilicé un emisor de FM, pero el resultado era bastante pobre, en buena medida porque no conseguía encontrar una frecuencia que se mantuviese libre desde mi casa hasta el trabajo.

Todo parecía perdido cuando, hace unos días, encontré una entrada de Panito69 en el foro del Citroen C2 donde explica como añadir una entrada de línea a esta radio. Básicamente hay que conectarla en los puntos que se ven en esta foto que el propio Panito69 publica en dicha entrada (pincha en ella para agrandarla):

Una vez hecho, basta con meter un CD de música, y el sonido de lo que metamos por la entrada sonará en los altavoces. Por alguna misteriosa razón, al conectar cualquier dispositivo, el lector de CDs quedará silenciado.

En mi coche monté directamente un cable con un jack macho al extremo, para no tener que andar con más cables y demás. Este es el resultado con el móvil conectado, y con el cable recogido:

Sin embargo, el depender de un CD supone algunos problemillas: para empezar, el sonido de éste se escucha muy levemente entre canciones; por otro lado, cuando el CD se acaba y la radio vuelve al principio, el sonido se corta durante dos segundos, el tiempo que el cabezal tarda en volver al principio.

La solución que encontré fue crear un CD en blanco con la duración máxima posible. Con él, puedo escuchar el máximo tiempo posible la música, y con el mínimo de interferencias. Aquí podéis bajar el fichero WAV de 79 minutos que utilicé, listo para grabarse en un CD-R cualquiera. Ojo, que aunque el fichero RAR ocupa sólo 57 KBytes, el WAV resultante ocupa algo más de 800 MBytes. Para hacerlo, basta con escoger la opción Crear un CD de audio en cualquier programa de grabación de CDs, como Nero, Brasero… y añadir ese WAV.

Ahora sólo espero que los herederos de John Cage no me demanden por plagio 😀

Se me olvido meter un binario

Hoy estaba preparando mi TomTom con TTOS porque, por fin, lo voy a poner en mi coche como reproductor de música. Y me he encontrado con una muy desagradable sorpresa: en los paquetes de TTOS faltaban los binarios de los reproductores de MP3 y Vorbis, por lo que nunca pudieron reproducir nada. Simplemente se me olvidó añadirlos. Como cada vez que recompilaba, sólo copiaba los ficheros que habían cambiado, y el resto seguían en la tarjeta del GPS, no me di cuenta de que en el fichero .ZIP no estaban 🙁

Acabo de lanzar la versión 1.2.0 que corrige ese fallo.

Transmission 1.92

Acabo de lanzar una revisión del paquete de mejoras para el disco duro multimedia MemUp LX media. El cambio es la actualización del cliente BitTorrent Transmission a la versión 1.92.

AVISO: a partir de aquí empiezo a tocar en el sistema operativo del disco duro multimedia, lo que significa que estas acciones sólo las deben realizar aquellos que sepan muy bien lo que hacen. Si alguien se carga su disco, será el único responsable.

Avisados estáis.

La instalación es igual que en versiones anteriores: basta con bajarse el fichero ftp_bt4lxmedia_4.1.tar.bz2 y actualizar los ficheros indicados.

Al igual que en versiones anteriores, los binarios contenidos en este paquete están enlazados estáticamente, por lo que funcionarán en cualquier sistema con procesador MIPSel.

Si ya habías instalado una versión igual o anterior a la 3.0 de ftp_bt4lxmedia, debes borrar el fichero /tmp/hdd/volumes/HDD1/BT/transmission_tmp/settings.json o editarlo para modificar el parámetro rpc-whitelist.

Como ya avisé en un mensaje anterior, aquellos que se decidan a probarlo deben limitar el cliente BitTorrent (sea el que sea) a no más de 300 o 400 KBytes/seg de bajada, porque si se recibe a más velocidad, el disco multimedia se satura y acaba colgándose.

Entradas anteriores:

Transmission 1.91

Acabo de actualizar el cliente de BitTorrent Transmission para mi disco duro multimedia MemUp LX a la versión 1.91.

AVISO: a partir de aquí empiezo a tocar en el sistema operativo del disco duro multimedia, lo que significa que estas acciones sólo las deben realizar aquellos que sepan muy bien lo que hacen. Si alguien se carga su disco, será el único responsable.

Avisados estáis.

Al igual que en versiones anteriores, basta con bajarse el fichero ftp_bt4lxmedia_4.0.tar.bz2 y actualizar los ficheros indicados.

Un detalle importante es que en el fichero de configuración de Transmission he modificado la configuración para que se pueda conectar a la web de configuración desde cualquier equipo con direcciones del rango 192.168.*.*. En versiones anteriores sólo se podía hacer desde direcciones 192.168.1.*, lo que es posible que de problemas a alguna gente.

Si ya habías instalado una versión anterior de ftp_bt4lxmedia, debes borrar el fichero /tmp/hdd/volumes/HDD1/BT/transmission_tmp/settings.json o editarlo para modificar el parámetro rpc-whitelist.

Como ya avisé en un mensaje anterior, aquellos que se decidan a probarlo deben limitar el cliente BitTorrent (sea el que sea) a no más de 300 o 400 KBytes/seg de bajada, porque si se recibe a más velocidad, el disco multimedia se satura y acaba colgándose.

Entradas anteriores:

Transmission

Un nuevo avance en mi disco duro multimedia: he conseguido compilar el cliente de bittorrent Transmission. Las ventajas de éste sobre el viejo cTorrent son muchas, en concreto:

  • Código más reciente y mantenido: la última versión de cTorrent es del 14 de junio de 2008, lo que parece indicar que el autor lo ha dejado de lado, mientras que Transmission (versión 1.76) es del 24 de octubre de 2009, además de que ya están preparando la próxima versión (1.80).
  • Soporta cifrado: sólo por esto ya merece una atención especial, porque puede duplicar (o más) el número de sitios de los que descargar ficheros, además de que muchos Torrents que no funcionaban en cTorrent sí lo harán en éste.
  • Soporta uPNP: para los que no lo conozcan, es un estándar que, entre otras cosas, permite que un dispositivo situado detrás de un router con NAT pueda pedirle de manera automática la redirección de los puertos externos que necesite. Esto elimina por completo la necesidad de abrir a mano puertos específicos en el router; simplemente funcionará.

AVISO: a partir de aquí empiezo a tocar en el sistema operativo del disco duro multimedia, lo que significa que estas acciones sólo las deben realizar aquellos que sepan muy bien lo que hacen. Si alguien se carga su disco, será el único responsable.

Avisados estáis.

Aquí podeis descargar el código completamente compilado, junto con los scripts para lanzar todo el sistema (1,2 MBytes), ajustados para el MemUp LX. Como en el caso anterior, hay que editar el fichero btpd para activar o desactivar los servicios que se deseen. He conservado cTorrent por si alguien prefiere utilizarlo de manera puntual (o incluso tener ambos a la vez en marcha, que a saber…), aunque lo normal será tener sólo Transmission y bFTPd. Al igual que en el paquete anterior, hay un fichero con instrucciones más detalladas.

Respecto a como lo compilé, pocas novedades, salvo el hecho de que, por mucho que especifiqué que quería un ejecutable estático, se empeñó en hacerlo dinámico. Encima, al utilizar autoconf y automake, no muestra la línea de comandos que está ejecutando en cada momento, con lo que ni siquiera podía hacer el enlazado «a mano». La solución, afortunadamente, fue tan sencilla como lanzar make V=1, para hacer la salida más verbosa y que lo mostrase. Así pude copiar y pegar la línea y añadir el -static.

Por desgracia, ni siquiera esto fue suficiente porque se empeñaba en enlazar con un fichero .la (libevent.la, para ser exactos), los cuales son para ejecutables dinámicos. La solución consistió en reemplazar ese fichero por un simple *.o, de manera que pudiese coger lo que más le interesase. Finalmente, un strip dejó el ejecutable limpio como una patena. El resultado es que las descargas ahora son más rápidas al contar con más peers, y encima la interfaz ha ganado aún más.

Obviamente, al ser ejecutables estáticos funcionarán en cualquier equipo con un procesador MIPSel y suficiente memoria, lo que permite reutilizarlos para otros discos multimedia. Lo mismo ocurre con los otros ejecutables (bFTPd, cTorrent y Yodctcs).

Aproveché además para hacer un cambio en la organización de directorios. Hasta la revisión anterior, en DOWNLOADS se almacenaban los ficheros temporales de cTorrent, y en BT los ficheros bajados. Para no ensuciar tanto el raíz del disco, he optado por crear dentro de BT una carpeta, ctorrent_tmp, para albergar esos ficheros, y otra, transmission_tmp, para que transmission haga lo propio. Estas carpetas se crean automáticamente si no existen. Si estabais bajando algo con cTorrent y quereis pasarlo a Transmission, basta con abrir el torrent (que estará, bien en ctorrent_tmp, bien en DOWNLOADS)  y, como el directorio de descargas es el mismo para ambos y no ha cambiado, Transmission comprobará la integridad de los datos que hay ahí y seguirá descargando justo desde donde se quedó el otro. Por tanto, una vez pasados los ficheros, es seguro borrar la carpeta DOWNLOADS.

Por último, actualicé el fichero de instrucciones.

Los que quieran acceder al nuevo bittorrent Transmission, sólo deben abrir la IP del disco en su navegador, contra el puerto 9090 (ej: http://192.168.1.101:9090).

Para finalizar, una captura de pantalla del nuevo cliente:

A disfrutar.

Compilacion en masa

En la entrada Emergiendo expliqué como generar un entorno de compilación cruzada basado en Gentoo para poder compilar cosas para nuestro disco duro, pero luego, en FTP-ando, eché todo por tierra al no poner binarios creados por mí. Ahora ya he sido capaz de compilar, así que, para los impacientes, aquí está el paquete con las últimas versiones de CTorrent (3.2.2), BFTP (2.6) y YAOD (0.7.2). Las instrucciones de instalación son las mismas que en el artículo anterior (FTP-ando). Como gran ventaja, algunos fallos de BFTP han desaparecido, y encima la tasa de transferencia ha subido a 3MBytes/seg.

AVISO: a partir de aquí empiezo a tocar en el sistema operativo del disco duro multimedia, lo que significa que estas acciones sólo las deben realizar aquellos que sepan muy bien lo que hacen. Si alguien se carga su disco, será el único responsable.

Pasando ya a la chicha, la razón de que haya tardado tanto es que la cosa no es tan sencilla, por varias razones:

  • Para empezar, el disco duro tiene su propia versión de la uClibc, por lo que la única manera de garantizar que un programa funcione correctamente es compilarlo contra esa misma versión.
  • Por otro lado, en algunas versiones del compilador GCC cambia el fomato binario de las bibliotecas en C++, por lo que también es conveniente utilizar la misma versión de compilador GCC: para garantizar que la interfaz binaria entre la aplicación y las bibliotecas es la misma.
  • Por último, muchos paquetes no se pueden instalar en un sistema mediante compilación cruzada porque su configure hace cosas raras, como comprobar si GCC compila correctamente un programa de prueba… programa que estará en arquitectura MIPS y, por tanto, no correrá en un Intel, abortando el proceso de compilación.

Y si ya la cosa se veía complicada, encima nos encontramos con que Gentoo no tiene la versión de GCC utilizada en nuestro disco duro (la 3.4.4), y que algunas versiones de uClibc (entre ellas la 0.9.28.3, la de nuestro disco duro) no compilan con según qué compiladores o versiones de binutils. El resultado era desalentador.

La primera idea que consideré para resolver el problema fue meter un sistema Gentoo completo en el disco y ejecutar en él las aplicaciones usando chroot. Por desgracia esta solución es muy ineficiente porque necesita mucho espacio en disco y porque las aplicaciones sólo tendrían acceso a los directorios contenidos dentro del chroot, pero nunca a los de fuera.

La segunda idea consistía en intentar generar un conjunto nativo de compilador GCC, binutils y biblioteca uClibc con las versiones correctas a partir de fuentes oficiales. Por desgracia, el proceso es demasiado complejo y tampoco funciona con todas las versiones de GCC, binutils y uClibc que interesaba.

La tercera idea era usar BuildRoot, el entorno de generación de compiladores cruzados de BusyBox. Por desgracia, una vez más, no sólo no tenía las versiones necesarias, sino que tampoco compilaba cualquier combinación.

Por último, la cuarta, que ha sido la que decidí emplear, consiste en compilar estáticamente los programas deseados utilizando un compilador nativo en el propio disco duro multimedia. De esta manera, al no depender de ninguna biblioteca de enlazado dinámico, el programa funcionará en cualquier sistema, ahorrándonos el problema de la incompatibilidad de versiones. Además, al no importar la versión de binutils, GCC ni uClibc, podemos utilizar versiones más modernas, que siempre tendrán mayor seguridad y fiabilidad. Por último, al compilarse en el sistema de manera nativa, no habrá problemas con ficheros configure que hagan cosas «raras». Como inconveniente, necesita más memoria que un programa compilado dinámicamente.

Sin embargo, seguía con el problema de conseguir un toolchain para MIPS que funcionase correctamente, cosa compleja porque en Gentoo hay nueve versiones de GCC, cuatro de binutils y tres de uClibc (sin contar revisiones), y no todas las combinaciones compilan. Además, no bastaba con el toolchain, sino que también necesitaba instalar en nativo Bash, GCC, binutils, uClibc, make y el entorno básico con BusyBox. ¿Por donde empezar? Por desgracia la versión más reciente no compilaba, y no podía probar las 108 combinaciones posibles… O al menos, no a mano, así que hice un pequeño script en python que probase a compilar todas las posibles combinaciones. Lo dejé una noche, y el resultado fue que sólo compilaba con el GCC 3.4.6-R2 y GCC 4.1.2, las Binutils 2.18-R4, 2.19.1-R1 o 2.20, y sólo con uClibc 0.9.30.1-R1. En el resto de casos, o fallaba la generación del toolchain para compilación cruzada, o fallaba la compilación de las utilidades nativas.

Una vez descubiertas las versiones, sólo fue necesario generar un toolchain adecuado para compilación cruzada:

crossdev --target mipsel-unknown-linux-uclibc --without-headers --gcc 4.1.2 --binutils 2.20 --libc 0.9.30.1-r1
emerge-wrapper --init

Luego, compilar e instalar las aplicaciones básicas necesarias para poder compilar (lo he cortado por razones de espacio, pero es una única línea):

emerge-mipsel-unknown-linux-uclibc  =binutils-2.20 =gcc-4.1.2 =uclibc-0.9.30.1-r1 bash make gzip bzip2 
unzip tar gnuconfig m4 sys-apps/texinfo gawk coreutils sed grep shadow procps net-tools iputils 
debianutils cpio attr sys-apps/acl kbd nano less diffutils

Vemos que instalamos las mismas versiones de binutils, gcc y uclibc que las usadas para generar la cadena de compilación cruzada. Instalamos coreutils y demás en lugar de busybox (o system) porque las utilidades de éste son versiones recortadas y dan problemas con algunas compilaciones. También instalamos tar, gnuconfig, m4 y texinfo, los cuales serán necesarios para instalar autoconf, automake y libtool. La razón de no instalar estos últimos directamente es que la instalación de Perl por compilación cruzada no funciona; tendremos que hacerlo luego a mano.

Por último, creamos los directorios /proc, /dev y /sys en /usr/mipsel-unknown-linux-uclibc, y ya podemos comprimir ese directorio utilizando

tar -cpvf buildchain.tar /usr/mipsel-unknown-linux-uclibc

copiarlo en el disco duro, en /tmp/hdd/volumes/HDD1, descomprimirlo, y lanzar un entorno de compilación utilizando este script, que automáticamente montará mediante bind los directorios del sistema y utilizará chroot para cambiar al nuevo entorno. Ahora nos bajamos Perl, lo descomprimimos y lo compilamos con

sh Configure -de
make
make install

Cabe recordar que el procesador de este disco duro es MUY LENTO, por lo que es posible que necesite toda la noche para compilarlo. Por otro lado, podemos tener problemas con las fechas de los archivos, por lo que es fundamental cambiarlas utilizando el comando touch * en cada directorio. Esto se puede hacer más cómodamente con la línea

find -type d -exec touch {}/* ;

que hará un touch * de manera recursiva en cada directorio. Una vez hecho esto, instalamos autoconf, automake y libtool (no olvidarse de touch en cada uno), y ya tendremos nuestro sistema de desarrollo completo con el que podremos compilar cualquier utilidad. Sólo hay que tener en cuenta algunos detalles:

  • El procesador del disco duro no es gran cosa, así que la compilación tarda BASTANTE tiempo
  • Es fundamental añadir la opción -static en las opciones de enlazado. En algunos programas es posible hacerlo añadiendo LDFLAGS=-static justo antes de ./configure (ejemplo: para configurar ctorrent, la línea sería LDFLAGS=-static ./configure); otra opción es lanzar primero ./configure y luego editar el Makefile para añadirlo donde se defina LDFLAGS. Como opción final, se puede compilar normalmente y, cuando termine, copiar y pegar las líneas de enlazado (suele ser la última) y añadir -static a mano antes de ejecutarla.
  • Es muy recomendable eliminar el parámetro -g durante la compilación, pues lo que hace es añadir información de depuración totalmente innecesaria, además de impedir que el compilador pueda aplicar muchas optimizaciones. Para hacer esto no queda más remedio que editar manualmente el fichero Makefile (no olvidar que puede haber varios Makefiles en otros subdirectorios. Hay que editarlos todos). También es bueno utilizar el comando strip en el ejecutable final para eliminar los últimos restos de datos de depuración
  • Algunos programas están preparados para versiones de autoconf o automake anteriores a la que hemos instalado. En ese caso basta con hacer un autoreconf para regenerar los ficheros. Este debe hacerse después de autogen.sh si lo hubiera. Una vez hecho esto ya se puede ejecutar ./configure y make.
  • Es necesario ajustar las fechas de los archivos porque, si no, Make se lía y no sabe qué compilar. Para ello basta con ejecutar el comando touch * en todos y cada uno de los directorios del programa a compilar (la línea find -type d -exec touch {}/* ; lo hará de manera recursiva por nosotros). No recomiendo cambiar la hora del disco duro porque, por alguna razón, las veces que lo hice el sistema se volvió inestable, llegando a colgarse incluso.
  • En algunos programas, libtool «se vuelve loco» y empieza a lanzar copias de sí mismo indiscriminadamente, llegando a ahogar al procesador y colgando el disco duro. Si, cuando va a enlazar el código, un PS nos devuelve una gran cantidad de procesos libtool, hay que matarlos rápidamente y enlazar «a mano» el código.

Para aquellos que no quieran pasar todo el trabajo, pueden bajarse el entorno de compilación completo aquí. Basta con descomprimir el .zip, copiar el .tar en el directorio /tmp/hdd/volumes/HDD1 del disco duro y descomprimirlo mediante

tar -xpvf buildchain_1.0.tar

entrar en el directorio con cd buildchain, montar los sistemas de archivos virtuales (proc, dev y sys) con ./mount.sh y lanzar un chroot con ./launch.sh. Una vez se haya terminado, salir y desmontar los sistemas de archivos virtuales con ./umount.sh.

FTP-ando

Actualizado; el enlace a los binarios estaba mal.Tras curiosear y probar, ya he conseguido meter un nuevo cliente de BitTorrent y un servidor de FTP en mi disco duro, aunque, por diversas razones (que comentaré en otra entrada), el código proviene de la página del MediaPlayer RTD1261, en lugar de haber sido compilado con la Gentoo que comentaba en entradas anteriores.

El nuevo servidor BitTorrent es cTorrent, junto con la interfaz web yodctcs. Respecto al servidor FTP, se trata de bftpd. Básicamente he retocado las configuraciones para que todo funcione sin tener que meter ficheros en carpetas del directorio raíz (por ejemplo, en /etc o en /lib). La razón es que, por defecto, toda esa parte (que está almacenada en la Flash) se monta en modo sólo-lectura; pero aunque pudiese escribir, sería bastante arriesgado (un error y tendré un caro pisapapeles), por lo que mi intención es hacer cualquier cambio únicamente en el disco duro, en donde se pueda recuperar todo simplemente ejecutando la opción de formateo desde el menú principal.

AVISO: a partir de aquí empiezo a tocar en el sistema operativo del disco duro multimedia, lo que significa que estas acciones sólo las deben realizar aquellos que sepan muy bien lo que hacen. Si alguien se carga su disco, será el único responsable.

Avisados estáis.

Lo primero es copiar el contenido del fichero con los binarios (este) en el disco duro multimedia, en concreto el fichero upgrade.tar. En él están todos los binarios y ficheros de configuración.

Una vez que lo tenemos (en /tmp/hdd/volumes/HDD1) entramos por telnet, lo movemos a /tmp/hdd/root y lo descomprimimos en esa carpeta con tar -xpvf upgrade.tar, de manera que se conserven los permisos de los ficheros. Dentro hay cuatro carpetas y un fichero script:

  • etc: contiene los ficheros de configuración del cliente BitTorrent y del servidor FTP
  • bftpd: contiene los binarios del servidor FTP
  • ctorrent: contiene los binarios del cliente BitTorrent cTorrent y de su interfaz web dctcs
  • lib: contiene las bibliotecas libgcc_s.so y libstdc++.so, necesarias para dctcs
  • btpd: reemplaza al script original.

El script btpd permite lanzar y parar todos los nuevos servicios de manera selectiva, relanzando aquellos procesos que queremos que estén lanzados si se caen, y matando los que no queremos si, por la razón que sea, se ejecutan (todo esto es posible porque el disco duro ejecuta regularmente este script, junto con el de samba, con el comando start). También monta, si se desea, la partición principal como EXT3. Por último, asigna a la variable de entorno LD_LIBRARY_PATH el valor /tmp/hdd/root/lib de manera que los programas lanzados desde él puedan utilizar las bibliotecas aunque éstas no se encuentren en los directorios por defecto (/lib, /usr/lib o /usr/local/lib). Es necesario editar este script (por ejemplo, con vi) para ajustar la configuración a nuestras necesidades. En concreto, si lo abrimos, vemos al principio lo siguiente:

# change here to set the services you want:
# 1: launch it
# 0: don't launch it

# main partition in EXT3 format
HD_EXT3=1

# old BitTorrent service
OLD_BT=0

# new BitTorrent service (cTorrent)
NEW_BT=1

# FTP server
FTP=1

Así, si queremos utilizar el cliente de BitTorrent original, tenemos que almacenar un 1 en OLD_BT. Si queremos utilizar el nuevo cliente BitTorrent, ponemos un 1 en NEW_BT. Si queremos activar el servidor FTP ponemos a 1 FTP. Y si hemos formateado en EXT3 la partición principal del disco duro, entonces tenemos que poner a 1 HD_EXT3 (si la tenemos en NTFS es imprescindible ponerla a 0). Una vez hecho esto, movemos dicho script a la carpeta script, reemplazando al viejo btpd. En el tar.bz2 incluyo la versión original, por si alguien se arrepiente.

Finalmente, lanzamos los nuevos programas mediante el comando ./btpd start y listo, ya tenemos acceso por FTP y un nuevo cliente BitTorrent.

Para acceder al cliente bittorrent hay que abrir con un navegador una conexión al puerto 8080 del disco duro multimedia. El usuario por defecto es admin, y la clave 123, pero se pueden cambiar editando el fichero /tmp/hdd/root/etc/dtcts.conf. Algunos cambios que hice en él con respecto al original de la página del otro disco duro fueron, por una parte, aumentar el buffer de recepción hasta 64Kbytes para conseguir la misma velocidad de transferencia (2,4MBytes/seg) que con SMB (con los 2Kbytes originales sólo se conseguían 200Kbytes/seg, diez veces más lento), así como eliminar toda la parte de registro (log) para no consumir disco duro inútilmente (quien quiera activarlo sólo tiene que echar un vistazo al fichero de configuración de demostración que viene en el paquete original de dtcts). Por último, cambié los nombres de las carpetas: en /tmp/hdd/volumes/HDD1/BT almacena los ficheros recibidos, igual que el viejo cliente BitTorrent, y en DOWNLOADS almacena los .torrent de los ficheros que se están descargando.

Respecto al servidor FTP, por defecto se puede entrar como anónimo, pero se puede cambiar la configuración en el fichero /tmp/hdd/root/etc/bftpd.conf.