Abr 15

Esto es algo que había hecho una vez en windows, y resultó tan sencillo como seleccionar los dos interfaces de red del equipo que iba a usar como pasarela y seleccionar la opción “establecer pasarela”, o algo similar (hace mucho que lo hice y hace mucho que no uso windows). En cualquier caso, me vi en la necesidad de hacer algo similar en linux, pero fue bastante más complicado de lo que pensé que sería. Aquí os pongo el proceso que tuve que seguir de forma muy detallada, para que no os perdáis. Difícil y nada sencillo, pero sí para toda la familia.

Bueno, pues eso, la configuración de la red es la siguiente:

Para poner correctamente la parte cableada, que es de lo que se trata aquí, configuramos las interfaces de los 3 equipos de la siguiente forma:

EQUIPO 1

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0
gateway 192.168.0.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2
up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.0.7
auto eth0

Aquí lo que hacemos es indicarle al equipo que la red wifi (subred 1) se encuentra a través de la puerta de enlace 0.2, y que la subred 2 se encuentra a través de la puerta de enlace 0.7

SERVIDOR

auto lo
iface lo inet loopback

iface eth0 inet static
address 192.168.0.7
netmask 255.255.255.0
gateway 192.168.0.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2
auto eth0

iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
auto eth1

Aquí le indicamos al servidor que la red wifi se encuentra a través de la puerta de enlace 0.2, al igual que con el anterior equipo. A la conexión punto a punto no es necesario ponerle una puerta de enlace.

EQUIPO 2

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

allow-hotplug eth0
iface eth0 inet static
address 192.168.2.5
netmask 255.255.255.0
gateway 192.168.2.1
up route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.2.1
up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.2.1
auto eth0

Aquí le indicamos al equipo que para acceder a las otras 2 subredes tiene que pasar por la puerta de enlace 2.1.

Una vez hecho ésto, tendremos acceso desde cada subred únicamente hasta el servidor, ya que éste no retransmitirá los paquetes de una de sus interfaces a la otra. Para solucionar ésto, es necesario introducir un script de iptables que fuerce esta retransmisión. El script sugerido es el siguiente:

#!/bin/sh

echo Aplicando Reglas de Firewall...

## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -i eth1 -d 192.168.0.0 -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.1.0 -j ACCEPT
iptables -A FORWARD -i eth0 -d 192.168.2.0 -j ACCEPT

echo 1 > /proc/sys/net/ipv4/ip_forward

Aquí hacemos lo siguiente: lo primero es eliminar las anteriores configuraciones de iptables si las hubiese (si tenéis alguna otra cosa, evidentemente tendréis que cambiar ésto).
Posteriormente se establece la política por defecto como aceptación de todos los paquetes (es inseguro. Si os preocupa la seguridad tendréis que cambiar el script para denegarlos por defecto).
A continuación, introducimos una línea para enmascarar la conexión procedente de la subred 2 hacia el exterior. Esta línea es importante, ya que de no ponerla, no podremos conectarnos al router, y por tanto, no habrá acceso hacia internet ni hacia la subred 1.
Después viene el grueso del script. En estas 3 líneas se redireccionan los paquetes, a saber: lo que llega por el interfaz 1 y se dirige a la red 0 se reenvía. Lo mismo para lo que llega por el interfaz 1 y se dirige a la red 1 y para lo que llega por el interfaz 0 y se dirige a la red 2.
Por último ponemos a 1 el bit que activa el ip-forwarding (muy importante. De lo contrario, el script no hará nada).

Una vez hecho ésto, basta con añadir el script a /etc/init.d/ e introducirlo en el arranque del sistema para que se active siempre.

Ene 12

Servidor de descargas con mldonkey (III)

SEPTIMO PROBLEMA: tenía lowID. La solución es sencilla, una redirección de puertos en el router. Sin embargo, no son únicamente los puertos de los servidores a los que nos conectemos. El mldonkey utiliza algunos puertos más para gestionar la conexión (podemos verlos en el fichero de configuración downloads.ini).

Bueno, una vez instalado todo y configurado el mldonkey en el equipo viejo para poder gestionarlo desde toda la red (así se puede poner a bajar desde cualquier ordenador de la casa, y siempre se descarga en el equipo viejo), sólo faltaba un script que pasase ficheros a mi equipo en cuanto estuviesen descargados, por aquello de no llenar aquel disco duro. Como ese ordenador va a estar siempre encendido, lo más cómodo es que el script esté en mi ordenador, y cada cierto tiempo, monte la unidad de red del viejo, compruebe si hay ficheros y, si los hay, los transifera aquí con wget. El script es algo tan sencillo como ésto:

#!/bin/bash

directorio_local="*directorio donde queremos las descargas*"

mkdir $directorio_local/temporal

mount *directorio NFS*
cd *directorio NFS*/incoming/files

for i in * ; do
    cd $directorio_local/temporal

    wget -c ftp://*ip del servidor*/incoming/files/"${i}" --user=*usuario FTP* --password=*password del usuario FTP*

    tamanho1=`ls -l "${i}"`
    tamanho1=`echo $tamanho1 | cut -d\  -f5`
    tamanho2=`ls -l *directorio NFS*/incoming/files/"${i}"`
    tamanho2=`echo $tamanho2 | cut -d\  -f5`

    if [ "$tamanho1" = "$tamanho2" ] ; then
	rm -f *directorio NFS*/incoming/files/"${i}"
	mv "${i}" ../
    fi
done

umount *directorio NFS*

Como veis, en el script se hace uso de todo, del servidor ftp y del directorio NFS. Monta la unidad NFS, comprueba si hay ficheros y luego descarga cada uno por ftp. Para eso es necesario tener un servidor ftp instalado (recordad que lo instalamos al principio “para lo que pudiese hacer falta” :P ). Una vez descargado cada fichero, se comprueba si el tamaño de origen y destino coincide (está entero) y si coinciden, se borra del origen. Además, está implementado un pequeño sistema de seguridad. Los ficheros se descargan inicialmente a un directorio temporal, y cuando la descarga está completa, se mueve al directorio principal. Ésto es así por si reiniciamos el equipo mientras se está copiando algo. De esta forma, sabemos que todo lo que tenemos en el directorio principal está terminado. Tampoco pasa nada por interrumpir una transferencia, porque el parámetro -c del wget continua las descargas incompletas.

Para que se ejecute de vez en cuando, basta con añadirlo al cron (para eso hay múltiples tutoriales por ahí, nada del otro mundo). Además, se puede automatizar un poquito más. Mldonkey permite establecer usuarios, por lo que si queremos colas de descarga separadas, creamos distintos usuarios no administradores, e indicamos un directorio de ficheros descargados distinto para cada uno, indicándole al script de cada usuario que se haga con los ficheros del directorio correspondiente. No es complicado utilizando el gestor web del mldonkey.

En fin, eso es todo. Nada fácil y nada sencillo, pero al menos sí para toda la familia :P

Ene 10

Servidor de descargas con mldonkey (II)

Ahora la fonera tenía millones de posibilidades más de las que tenía antes, y había que configurar todo de nuevo. Me pasé un buen rato hasta que di con una configuración que funcionase, porque según lo que pongamos, perdemos el acceso de unas redes a otras, perdemos el acceso de unas redes a internet, perdemos la posibilidad de conectarnos por ip fija… en fin, una locura. La configuración con la que me funcionó es ésta:

Configuración 1
Aquí podemos ver lo básico. La fonera está configurada para conectarse a la red con una ip fija, con su máscara y sus dns correspondientes. Debajo vemos la configuración del interfaz wifi, tambiéncon su ip fija, y especificando como puerta de enlace la ip del router (de lo contrario, no hay acceso a internet).

Configuración 2
Tenemos varios modos de funcionamiento para la fonera. Como ya hay un router actuando de puerta de enlace, si nos fiamos de la ayuda, deberíamos poner la fonera como router y no como puerta de enlace. Sin embargo, si hacemos ésto perdemos la conexión a internet de todos los dispositivos que se conecten a la fonera. Es necesario configurarla como puerta de enlace.

Configuración 3
En cuanto al modo de funcionamiento, debe ser como punto de acceso. En el tipo de red, podría haber puesto b sin problemas, porque sigue siendo superior a la velocidad del USB del ordenador viejo. Sin embargo, ésto limitaría a todos los demás equipos que se pudiesen conectar, por lo que preferí dejarla en mixed, con los rates en auto.

Configuración 4
Ésto es MUY importante. Debemos desactivar el firewall. De lo contrario, no devuelve ni los pings.

Bueno, una vez configurado el firmware nuevo, intenté dejar las redes como estaban y acceder de una red a la otra. Sorpresa, todavía no funcionaba y recibía el mismo mensaje de paquetes filtrados de antes. Aquí ya tenía un nudo cerebral, pero tras intentar varias cosas, se me ocurrió establecer rutas estáticas, y resultó ser la solución. Establecí ésta en el router:

                       Menu 12.1.1 - Edit IP Static Route

                    Route #: 2
                    Route Name= mldonkey
                    Active= Yes
                    Destination IP Address= 192.168.1.5
                    IP Subnet Mask= 255.255.255.0
                    Gateway IP Address= 192.168.0.2
                    Metric= 1
                    Private= No

Con ésto desde windows ya podía acceder desde una red a la otra, pero desde linux no. Evidentemente el problema residía en que en linux había que establecer la misma ruta para el sistema, que en windows se hace automáticamente (punto a favor). Fácil, simplemente añadir ésto en /etc/network/interfaces, en el campo donde configuráis vuestra tarjeta de red:

up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.2

Esto significa que para acceder a cualquier elemento de la red 1, se debe pasar por 0.2, que es el interfaz cableado de la fonera.

Con ésto ya podía acceder por red desde el equipo nuevo al viejo y viceversa. Ahora había que montar los directorios del viejo en red dentro del nuevo, preferiblemente como una carpeta, para aumentar la comodidad. Ésto se hace de forma muy sencilla con NFS. Basta con seguir este tutorial. Una vez hecho ésto ya podía acceder desde este ordenador al viejo, a sus ficheros y demás.

SEXTO PROBLEMA: al acceder de esta forma e intentar copiar un fichero de un equipo a otro, no me da problemas siempre que los ficheros sean inferiores a 5 megas. Cuando intento transferir ficheros mayores, empieza a transmitir a saco, satura la red… Pensé que podría ser culpa del equipo viejo, porque tiene 10 años y el receptor está conectado a un puerto USB1.0 (ni siquiera es 1.1), por lo que la velocidad de transferencia está limitada a 1.5Mbps (no llega a 200 kB/s), y quizás se saturaba con el flujo entrante. Para descartarlo, probé a transmitir un fichero desde el equipo viejo al nuevo, y la red se saturaba igual, así que el problema es de la red en sí. Estuve indagando mecanismos de control de flujo, para limitar la velocidad, etc, pero no encontré nada que lo pudiese hacer de forma sencilla. Sin embargo me di cuenta de que con wget, podía transferir ficheros de un equipo a otro reduciendo considerablemente la saturación. Va bastante lento, aproximadamente a 1/3 de la velocidad que podría dar de sí la red (va a una media de unos 50 kB/s), pero bueno, al menos funciona, y supongo que con un equipo de hace 10 años, otro de hace 6, una fonera y dos paredes de por medio, no puedo pedir mucho más.

Una vez hecho todo ésto, instalé en el equipo antiguo el mldonkey

Servidor de descargas con mldonkey (IV)

Ene 08

Servidor de descargas con mldonkey (I)

Una vez configurada la red, comprobé que con el otro ordenador tenía internet. Efectivamente, el ordenador viejo ya hacía pings a google como un campeón. Le instalé un servidor ssh para poder controlarlo (sin pantalla ni teclado, sería un poco complicado xD) y un servidor ftp para lo que pudiese hacer falta. Los configuré (para más ayuda, google es el camino) y andando. Luego reinicié el cacharro y configuré la bios para que no parase el arranque ante ningún error (por razones de fecha [ese cacharro tiene la pila de la bios gastada], teclado [press F1 to continue, y no hay teclado] y demás), y una vez hecho todo ésto, intenté acceder desde éste al viejo. Tacháaaaaaaaaaan.

CUARTO PROBLEMA: no había acceso desde una red a la otra. Ningún ordenador de la red 0 podía comunicarse con ninguno de la red 1, ni siquiera para hacer pings (el mensaje era que los paquetes estaban siendo filtrados):

fenix:/home/sparkster# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
From 192.168.153.1 icmp_seq=1 Packet filtered

Lo extraño es que desde la red 1 sí tenía acceso a la 0. Tras trastear con varias posibilidades (cambiar máscaras de subred [estaban todas a 255.255.255.0], intentar con la misma red [se me iba al carajo la conexión a internet, cosas de la fonera], cambiar la red 0 por la 1 y la 1 por la 2, etc), supuse que el problema de todo estaba en la fonera, así que decidí la solución más salomónica, más peligrosa, que me dio más problemas y que a la larga era la única solución posible para evitar problemas futuros: flashear la fonera.

Los que tengáis una fonera, sabréis que es una mierda. El firmware que trae es una cacadelavaca, con muy pocas posibilidades, muy capado… Además cada vez que enchufas la fonera, se conecta a internet, cambia el firmware ella solita y hace las de dios. Además leí que el firmware que anda rulando por ahí, de dd-wrt, es bastante completo, lo que ya me hizo decidirme de todo.

QUINTO PROBLEMA: todos los tutoriales que hay para flashear la fonera (TODOS, ABSOLUTAMENTE TODOS) están mal, tienen errores, están incompletos… Vamos, que fue una odisea. Pensé que había estropeado la fonera 3 o 4 veces, porque no se resseteaba, no podía acceder a ella, no servía con desenchufarla… Y resulta que era otro paso de esos “complicados” que no figuran en los tutos… No voy a enlazar ningún tutorial porque no recomiendo intentar flashearla a menos que estéis muy familiarizados con redboot, con telnet y con ssh, además de haber flasheado ya cosas con anterioridad, porque es muy fácil que por culpa de toda esa morralla incompleta que hay por ahí os quedéis sin fonera. En cualquier caso, los pasos que tuve que seguir yo para flashearla son los siguientes (no servirá para que hagáis nada, pero os hacéis una idea).

  1. Entrar en la fonera para verificar la versión del firmware. Era una avanzada, por lo que había que downgradearla
  2. Resetear la fonera para downgradear el firmware (pulsando reset entre 30 y 40 segundos)
  3. Una vez reseteada, configurar la interfaz cableada poniéndola con ip fija (ya la tenía así, pero al resetear se pierde la configuración)
  4. No permitir que la fonera se conecte a internet para que no se actualice el firmware, abrir un script que hay por la web para hacerle un chanchullo al cacharro y que me permita acceder por ssh
  5. Acceder por ssh y cambiar unos cuantos parámetros para que me permita el acceso por redboot y que no se actualice el firmware
  6. Acceder por telnet para cargar los ficheros del redboot y alguna cosilla más. Reiniciar la fonera
  7. Acceder por redboot para cargar parte del firmware nuevo
  8. Enchufar la fonera, esperar 5 segundos, abrir una sesión telnet antes de que pasen 8, cancelar el arranque para que no se cuelgue (flipa) y cargar más cosillas del firmware
  9. Reiniciar la fonera con el firmware nuevo

Algunos de esos pasos, como ya dije, estaban incompletos, erróneos o directamente no aparecían en los tutoriales (como esa sesión telnet antes de 8 segundos tras enchufar la fonera), por lo que pensé que la había jodido varias veces (tras algunos de esos pasos intermedios, la fonera deja de funcionar correctamente, y ya no es accesible de forma normal).

Servidor de descargas con mldonkey (III)

Ene 06

Por razones que no vienen al caso, me vi en casa con mi PII 400MHz aburrido y más parado que un avión de mármol, así que me decidí a buscarle utilidad. Pregunté a la gentuza del foro de teleco y la solución que más me gustó fue la de montar un servidor de descargas. Ya había hecho algo parecido tiempo atrás, pero no había terminado de cuajar la idea.

En fin, vamos al turrón. Hasta ahora la red de mi casa era algo tal que así:

Como veis, había 2 ordenadores cableados conectados a un router, con las ips 5 y 6 de la red 0, así como una fonera. La fonera tenía la ip 2 de la red 0 para la interfaz cableada, y la ip 3 de la misma red para la interfaz wifi. A la fonera se conectaba una nintendo DS configurada mediante DHCP. El router, con la ip 1 era el encargado de proveer acceso a internet a todos los elementos de la red.

Pues bien, me puse al tajo. Lo primero fue instalar el sistema operativo en el otro equipo. Tenía pensado que este cacharro estuviese a pelo, con el mínimo número de programas instalados, por lo que decidí instalar como sistema Linux Debian (mentira cochina, eso ya tenía pensado hacerlo :P ) y tenerlo sin entorno gráfico ni monitor ni teclado ni nada. Pues nada, me hice con el disco de debian stable netinstall y me puse a ello.

PRIMER PROBLEMA: tenía que conseguir que el cacharro utilizase un receptor wifi USB en modo texto, sin ningún tipo de asistente. Una vez instalado, estuve un rato trasteando con ifconfig e iwconfig, y me salían unas cosas más bien raras, a pesar de que el receptor era detectado sin problemas. Lo que ocurría era que a pesar de que lo detectaba, le faltaban los drivers del mismo, ya que el kernel de linux no incluye los drivers de los receptores ralink. Pues nada, no es problema, me hice a través del otro ordenador con los módulos adecuados, los metí en un pendrive y los cargué en el equipo viejo.

SEGUNDO PROBLEMA: los módulos para el receptor son de la rama testing, y en el ordenador antiguo había instalado la rama stable. Al intentar meterlos, me salió un laberinto de dependencias incumplidas que, a pesar de intentarlo, no conseguí solucionar. Al final opté por replantearme la situación, formateé e instalé debian testing (me tuve que bajar el disco entero, no me valía la netinstall). Una vez hecho ésto, sólo tuve que instalar aparte el firmware del receptor (sólo el firmware, nada más), y el paquete wireless-tools.

TERCER PROBLEMA: esta vez el receptor funcionaba correctamente (lo probé instalando el aircrack para hacer un esnifado del aire en sí xD [descargado desde el otro equipo, claro]), pero no tenía muy claro cómo hacer para que se conectase a la fonera sin ningún asistente. Tras un par de consultas a google y a un par de colegas, di con la solución. Lo que hay que hacer es poner ésto en /etc/network/interfaces

iface *dispositivo* inet static
address *ip para el dispositivo*
netmask *mascara de subred*
gateway *ip de la interfaz wifi de la fonera*
wireless-essid *nombre de la red wifi*
auto *dispositivo*

En mi caso, decidí hacer unos cambios a la red. Puse la red cableada como red 0, y la red wifi como red 1, por lo que ahora la fonera pasaba a tener la ip 192.168.1.1 como interfaz wifi. La red ahora tenía ésta pinta:

Por tanto, mi fichero quedó tal que así:

iface wlan0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
wireless-essid wlan
auto wlan0

Servidor de descargas con mldonkey (II)

Ago 26

Los que como yo seáis linuxeros probablemente conoceréis (al menos os sonará) el initram. No voy a saber definiros exactamente cuál es la función de esta cosa, pero bueno, grosso modo carga el arranque del sistema en memoria. De hecho, para que el arranque sea más rápido, podemos hacer una imagen initram del kernel, que se cargará durante el mismo. En cualquier caso, la funcionalidad del initram no es lo que me trae hoy aquí, sino ésto:

¿Mensaje oculto? ¿Publicidad subliminal? ¿Patrocinio secreto? ¿Serendipia?
Quizás la respuesta a la duda es: otra forma de perder el tiempo :P

Abr 08

Los que me conocéis informáticamente hablando, sabéis que, como dice Elrohir, soy un linux terminal cowboy, o lo que es lo mismo, un oscuro adorador de la línea de comandos. Si puedo hacer algo por línea de comandos, por norma general lo prefiero antes que hacerlo a golpe de ratón, porque es mucho más rápido, más eficiente y, para mí, más cómodo. Ya demostré muchas veces ante amigos que este método nos facilita mucho la vida si tenemos que hacer tareas repetitivas, y una vez más volví a demostrarlo. Al turrón.

Después de unos cuantos años me di cuenta de que el método que uso para nombrar los vídeos y fotos que grabo no es el más adecuado a la hora de almacenarlos en el ordenador. Hasta ahora usaba nombres del tipo lugarexacto, lugargeneral, dd-mm-aaaa (tema).jpg, poniendo el mes en números romanos. Por ejemplo, Restaurante Candilejas, Vigo, 9-II-2005 (Pepito de los palotes y su prima).jpg. Este nombre tiene varios problemas. El primero es que si sacamos una foto el día 23 en el mismo sitio, esa foto saldrá antes, ya que el 2 va alfabéticamente antes que el 9. Además, si sacamos una foto el 8 de cualquier mes o cualquier año, seguirá yendo antes que ese 9 de febrero. Otro inconveniente es que al poner el mes en números romanos, septiembre (IX para los no duchos xD) irá antes que mayo (V). Para solucionarlo, la mejor forma sería poner los nombres con el formato lugarexacto, lugargeneral, aaaa-mm-dd (tema).jpg, con el mes en decimal. Pero claro, es muy fácil decirlo, pero agobia un poco más si tenemos en cuenta que entre vídeos y fotos tenía almacenados unos 3500, y eso son muchos nombres de dios para cambiar.

¿Qué hacemos? ¿Nos pegamos un tiro porque no podemos cambiar todo ésto ni en 2 años? Nada más lejos de la realidad. En 4 minutos me curré un script que cambió todos esos nombres por mi, y en sólo unos minutos ya tenía todo con los nombres con el formato que quería. Es una de las ventajas de ser un linux terminal cowboy, estas cosas están a la orden del día ;) . Aquí os dejo el script, que aunque no vayáis a hacer esto en concreto, seguro que podéis retocarlo para algo que necesitéis (Por supuesto, es mejorable, pero lo único que quería era acabar cuanto antes xD).


#!/bin/bash

mkdir procesados
mkdir salida

for i in [ *.jpg *.JPG *.jpeg *.JPEG *.bmp *.BMP *.gif *.GIF *.avi *.AVI ] ; do

#Nos hacemos con el nombre del fichero y de ahi, con la parte de la fecha
nombre1=$i
fecha1=`echo $nombre1 | cut -d ',' -f3`
fecha1=`echo $fecha1 | cut -d ' ' -f1`

#Separamos la fecha en 3 variables: dia, mes y año
dia=`echo ${fecha1} | cut -d '-' -f1`
mes=`echo ${fecha1} | cut -d '-' -f2`
anho=`echo ${fecha1} | cut -d '-' -f3`

#Pasamos los días de la forma d a dd
if [ $dia = "1" ]; then dia="01" ; fi
if [ $dia = "2" ]; then dia="02" ; fi
if [ $dia = "3" ]; then dia="03" ; fi
if [ $dia = "4" ]; then dia="04" ; fi
if [ $dia = "5" ]; then dia="05" ; fi
if [ $dia = "6" ]; then dia="06" ; fi
if [ $dia = "7" ]; then dia="07" ; fi
if [ $dia = "8" ]; then dia="08" ; fi
if [ $dia = "9" ]; then dia="09" ; fi

#Pasamos los meses en números romanos a decimal
if [ $mes = "I" ]; then mes="01" ; fi
if [ $mes = "II" ]; then mes="02" ; fi
if [ $mes = "III" ]; then mes="03" ; fi
if [ $mes = "IV" ]; then mes="04" ; fi
if [ $mes = "V" ]; then mes="05" ; fi
if [ $mes = "VI" ]; then mes="06" ; fi
if [ $mes = "VII" ]; then mes="07" ; fi
if [ $mes = "VIII" ]; then mes="08" ; fi
if [ $mes = "IX" ]; then mes="09" ; fi
if [ $mes = "X" ]; then mes="10" ; fi
if [ $mes = "XI" ]; then mes="11" ; fi
if [ $mes = "XII" ]; then mes="12" ; fi

#Reordenamos el formato de la fecha en una variable de la forma aaaa-mm-dd
fecha2=`echo ${anho}"-"${mes}"-"${dia}`

#Separamos en campos el resto del nombre del fichero
nombre21=`echo $nombre1 | cut -d ',' -f1` #Lugar generico
nombre22=`echo $nombre1 | cut -d ',' -f2` #Lugar preciso
nombre23=`echo $nombre1 | cut -d '-' -f3` #Tema
nombre23=`echo $nombre23 | cut -d '(' -f2` #Tema

#Reescribimos el nombre del fichero con el nuevo formato
nombre2=`echo ${nombre21}","${nombre22}", "${fecha2}" ("${nombre23}`

echo $nombre1
echo $nombre2
echo "--------------------------------"

#Enviamos los ficheros a las carpetas de destino
cp "$nombre1" salida/"$nombre2"
mv "$nombre1" procesados
done

mv salida/* .
rm -fr salida

Si os preguntáis por qué copio los ficheros en lugar de directamente renombrarlos, tiene una explicación muy sencilla. Si por casualidad alguno de esos ficheros no tuviese el formato de fecha deseado, podríamos perder datos que tenemos en ese nombre y que no querríamos perder por nada del mundo. De esta forma siempre tenemos los ficheros originales con su nombre y demás.

Sep 11

Bueno, tras un tiempo utilizando el iPod, creo que ya tengo una opinión bastante depurada en cuanto al reproductor de apple. Para los que estéis un poco desconectados, me habían tocado un iPod shuffle y un iPod video 80GB en un concurso hace unos meses, y desde entonces me dediqué a hacer experimentos diversos para comprobar qué podía y qué no podía hacer con ellos (siempre en el sentido de las cosas usuales; no probé linux en el ipod ni le metí ninguno de esos programas para cambiar el interfaz).

Antes de nada decir que el soporte para los que utilizamos Linux es peor que deficiente. Está más que claro que apple intenta barrer para casa con este cacharro y que la gente se pase a mac+macOS, porque si no, no me lo explico. Los pocos programas que hay por norma general funcionan bastante mal, pero bueno, eso ya lo había comentado. Pasamos al despotrique.

El iPod es un buen reproductor en el sentido de que reproduce las cosas bien, pero tiene MUCHOS inconvenientes. Para empezar, los formatos. No reproduce wma, no reproduce ogg, no reproduce nada que no sea mp3, aac o wav. En cuanto a video, no reproduce prácticamente nada. Solamente mov y mp4, y aún así el mp4 con muchísimas limitaciones. Además reproduciento video la batería vuela (nada que no sepáis). Dura muchísimo más la batería de la Nintendo DS reproduciendo a 2 pantallas que la del ipod reproduciendo a una sola (siempre con el brillo al mínimo, claro). En fin, el disco duro es lo que tiene, es un fagocitador de batería. Por otro lado, con esta basurilla no funciona el drag and drop. Si queremos meter algo, cualquier tipo de contenido, a la fuerza tenemos que pasar por software que edite la base de datos. Si no, el cacharro no sabe qué es lo que tiene metido.

En cuanto a reproducción, la reproducción es correcta en lo poco que soporta y una vez que nos volvimos locos para meterlo dentro. La calidad de los mp3 es impecable, los videos se ven perfectamente y las fotografías también. La verdad es que la pantalla tiene una calidad asombrosa para su tamaño, y presenta más resolución de la que pueda parecer (320×240, que en ese tamaño es muy aceptable).

Y ahora vamos a prestar un poco de ayuda a los atormentados usuarios de linux que os estéis volviendo locos con esta cosa. Para introducir canciones en el iPod, nada más sencillo que usar el amarok. Está perfectamente preparado para la tarea y no da ningún problema. Con las fotografías, la cosa está un poco más complicada. Hay un programa llamado Gpixpod que funciona de una forma bastante sencilla y es relativamente fácil ponerlo a andar. Sin embargo tiene una gran limitación. Si metemos en el iPod una gran cantidad de imágenes (del orden de 3 gigas) tarda exageradamente a la hora de leer la base de datos (del orden de hora y media). Para solucionar esto tenemos que activar la opción de crear las previsualizaciones en el equipo y no en el ipod. Esto hace que se cree una réplica de lo que mete en el iPod en nuestro disco duro (no sé por qué), así que estaremos ocupando en el ordenador 3 gigas de forma totalmente estúpida. La alternativa a este programa tan desastroso es el tripod. Es un programa realmente sencillo que funciona sin problemas, pero a mí me costó instalarlo debido a que me daba un buen montón de errores. Ahora no puedo ayudaros con ésto porque no recuerdo qué problemas me daba, pero podéis ir apañándoos si tiráis de google a cada error. Con 3 o 4, el programa está instalado xD.

Y ahora vamos a la parte dolorosa, el video. Para meter los videos en el iPod, un programa muy sencillo de utilizar es el gtkPod. Los videos se meten como si fuesen canciones y no dan ningún tipo de problema. El problema viene a la hora de convertir los videos para que funcionen en el iPod. Por más que busqué no encontré nada que funcionase, así que me curré un pequeño script que a más de uno le solucionará la vida. Para que funcione, tenéis que instalar el ffmpeg con soporte para xvid y aac. Para eso, vais a la página de ffmpeg e instaláis la versión SVN

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

Una vez hecho ésto, compiláis el programa con soporte para xvid y aac. Para eso, podéis ver las opciones disponibles con ./configure –help. Creo que para el soporte para esas dos, era algo así como ./configure –include-libxvid –include-libfaac. En cualquier caso, verificadlo.
Una vez compilado e instalado, lo único que tenéis que hacer es meter todos los videos que queráis convertir en el mismo directorio. El script crea 2 directorios, procesados y salida, e introduce los videos originales en “procesados” y los aptos para el iPod en “salida”. Hay un pequeño número de videos con el que da error y el fichero de salida es de 0 bytes. Es debido a algún tipo de compatibilidad con el formato original del video, pero bueno, pasa con muy pocos y no parece algo fácil de solucionar, así que preferí dejarlo así. Para dudas, consultas, insultos y mejoras del scirpt, ya sabéis dónde estoy.


#!/bin/bash
mkdir procesados
mkdir salida
for i in [ *.asf *.avi *.mov *.mp2 *.mpg *.mpeg *.ram *.swf *.wmv ] ; do
ID1=$i
ID2=`echo $i | cut -d. -f1`
ffmpeg -i "${ID1}" -acodec libfaac -vcodec libxvid -b 300kb -s 320x240 -f mp4 "${ID2}".tmp
mv "${ID1}" procesados
mv "${ID2}".tmp salida/"${ID2}".mpg
done

Jun 10

Todos los que me conocéis medianamente bien sabéis que soy linuxero acérrimo. Por un lado estoy completamente de acuerdo con iniciativas como la GPL o la Creative Commons, que permiten que este tipo de cosas se distribuyan de forma abierta para todos los usuarios. Además, al ser en su mayoría código abierto, los sistemas Linux son mucho más seguros que los sistemas propietarios como Windows, mucho más fiables, se actualizan con mayor rapidez… En fin, todas esas cosas que ya sabéis y que no os voy a contar ahora porque no es el propósito de este post.

Lo que sí os quiero contar es cómo me inicié en este mundillo y cómo fui evolucionando en él con el paso de los años. Vamos allá (Abreviaré la correcta notación GNU/Linux a Linux por razones obvias de comodidad):

TOMA DE CONTACTO

Winlinux 2000

Todo empezó hace ya 7 años con un desastroso “WinLinux 2000″. Se trata de una versión de Linux que se instala sobre Windows como si fuese una aplicación más. La versión que probé traía un árido KDE de los primeros (creo recordar que era una de las versiones 1.X), además de que era increíblemente inestable. Se colgaba a la mínima por funcionar bajo windows y apenas traía aplicaciones. Lo único que se podía hacer con él (sobre todo sin tener ni puta idea como era mi caso) era jugar a los 4 jueguecillos que traía el entorno gráfico y montar el cdrom xD. No conseguí hacer nada más, pero para aprender grosso modo que existen otros sistemas me sirvió.

PRIMEROS PINITOS

Mandrake 7.2

Tras mi desastroso inicio con Winlinux lo dejé durante un añito, y volví sobre mis propios pasos hace 6 años, instalando una Mandrake 7.2. Venía con un instalador gráfico, por lo que su instalación era muy sencilla incluso para usuarios inexpertos. Traía ya unos cuantos entornos gráficos distintos (los de siempre, KDE, Gnome y algún otro de los menos comunes). Yo solía utilizar KDE, más que nada porque ya lo conocía de Winlinux (quizá de ahí proceda mi KDEísmo). Ya era un interfaz un poco más amigable que el anterior, aunque seguía siendo bastante sobrio. Al venir en 2 cds y no ser un simple programa, como el winlinux, ya venía bastante más surtido de aplicaciones, tales como el netscape, el openoffice… Con esta distro aprendí a instalar un linux propiamente dicho, qué es la Swap y para qué se utiliza, las particiones que hacen falta, así como el sistema de carpetas, aprendí nociones básicas sobre los gestores de paquetes (más concretamente sobre RPM)… En fin, nociones muy básicas a nivel de usuario. Por diversas razones (entre otras, que no tenía una conexión decente a Internet) tuve que darlo por imposible y volver a Windows.
(Para los no iniciados, actualmente Mandrake se llama Mandriva).

TOMA EN SERIO

Red Hat 8.0

Tras haber pasado por estas dos experiencias previas y después de otro año, entré en teleco y para mi sorpresa, en la mayoría de las prácticas se trabaja bajo entorno linux. Una vez más, y con ánimos renovados, me decidí a instalar de nuevo una distro de linux. Esta vez me decanté por una Red Hat 8.0. Esta distro era muy parecida a la anterior. También tenía un instalador gráfico, incluso más intuitivo que el de Mandrake, y venía igualmente surtido de aplicaciones (también incluía el gestor de paquetes RPM). Con esta distro intenté quedarme definitivamente con un sistema Linux, aunque después de 4 meses tuve que volver a dejarlo por imposible, una vez más por culpa de mi conexión a Internet. Cada vez que quería instalar un programa, tenía problemas de dependencias por tener la distribución demasiado anticuada, y sólo podía resolverlas por Internet, por lo que era imposible solucionarlo. Posteriormente actualicé la distro a una versión 9.0, con pocos cambios. Lo más destacable es que traía un programa que permitía actualizar algunas partes del sistema por Internet, aunque su funcionamiento era bastante malo.
(Para los que no estéis al tanto, actualmente el proyecto Red Hat se denomina Fedora.

CONVERSIÓN DEFINITIVA

Knoppix 3.2

La conversión definitiva llegó para mí de la mano de una distro muy novedosa: una Knoppix 3.2. Esta distro era para mí una gran novedad por dos razones importantes: la primera es que no estaba basada en Red Hat ni Mandrake, y no utilizaba RPM, sino que estaba basada en Debian y el gestor de paquetes que utilizaba era el APT. El APT era muy superior al RPM por muchas razones. A la hora de instalar un paquete, bastaba con escribir un comando (apt-get install paquete), a la hora de borrarlo, igual (apt-get remove paquete). Para actualizar TODO el sistema, incluyendo las librerías y dependencias, otro comando (apt-get dist-upgrade)… Es decir, tanto para instalar paquetes como para borrarlos, como para mantener el sistema al día, bastaba con poner un simple comando, y el APT se encargaba de todo, incluso de resolver los problemas de dependencias.
Por otro lado, esta distro tenía otra novedad muy interesante, que es que no era necesario instalarla. Venía en un CD desde el que se podía arrancar el sistema operativo (directamente desde el CD). Es lo que se conoce como Live CD. Esto permite probar el sistema sin necesidad de instalarlo en el disco duro. En cualquier caso, para instalarlo, en esta antigua versión bastaba con un sencillo comando (knx-hdinstall) y arrancaba un asistente gráfico muy sencillo de utilizar.
Con esta distribución aprendí a no depender de Windows para nada. Al poder instalar cualquier aplicación sin problemas, tenía a mi disposición todo un abanico de posibilidades en cuantro a programas. Aprendí lo importante que es tener el sistema siempre al día, a no utilizar la cuenta de superusuario a no ser que sea indispensable, a trastear un poco con los scripts del sistema operativo, a gestionar las aplicaciones que arrancan en el inicio del sistema, a configurarlo a mi gusto, a manejarme en el modo texto utilizando los comandos y no dependiendo tanto del entorno gráfico, a configurar el gestor de arranque, y lo más importante, a recompilar el kernel del sistema operativo de acuerdo con mi equipo.
Sin embargo, y a pesar de ser una distro tan maravillosa, tuve que dejarla al cabo de casi un año porque tenía un grave error. En ocasiones, al actualizar el sistema, se le iba la olla de mala manera y borraba muchos paquetes necesarios, haciendo que el sistema operativo dejase de funcionar (una verdadera putada). En cualquier caso sigue sacándome de apuros cuando me cargo el gestor de arranque.

EL FLECHAZO

Logo de Debian

Una vez que aprendí tanto con Knoppix, decidí deshacerme de ella para pasarme a tareas mucho más ambiciosas: instalar una distro Debian. Esta distro era bastante más complicada de manejar que todas las que había usado hasta ahora, porque a pesar de que su funcionamiento era igual que en la Knoppix (la Knoppix está basada en ella) la instalación no es gráfica, sino que es mediante un interfaz modo texto en el que se van seleccionando las opciones. Además no viene con paquetes de por sí, sino que hay que seleccionar manualmente todo lo que queremos (incluídos los paquetes individuales necesarios para el entorno gráfico). Tardé mucho tiempo en instalarla (podéis comprobarlo aquí en tono de humor), pero al final lo conseguí. Con esta distro estuve alrededor de año y medio o dos años (ya tenía conexión de banda ancha) y la verdad es que ya no había mucho que pudiese aprender. Aprendí a gestionar un poco más los scripts del equipo, y a utilizar las fuentes de paquetes adecuadas (el APT estaba gestionado por unas direcciones de donde sacar los programas, y podían ponerse 3 tipos: direcciones de paquetes inestables, pero muy nuevos, direcciones de paquetes en pruebas, pero un poquito más antiguos, y direcciones de paquetes estables, pero muy anticuados). Aparte de eso, poco más aprendí. A poner pijotadas como una pantalla bonita en el arranque, por ejemplo.

EL COLMO DEL CONTROL

Logo de Gentoo

Después de haber aprendido tanto, y con la experiencia adquirida en la instalación de Debian, me decidí a intentarlo con uno de los proyectos más ambiciosos que podía intentar: instalar una Gentoo. Esta distro no está basada en ninguna, y, una vez más, el gestor de paquetes es distinto. En este caso, la piedra angular del sistema es el portage, que funciona de una forma bastante parecida a APT, aunque con diferencias evidentes. Por un lado no era necesario gestionar las fuentes del portage, sino que hay una única fuente. Por otro lado, el portage no instala los programas, sino que los compila. En el momento de instalar el sistema, se indican los parámetros del equipo de forma muy pormenorizada (procesador, tipo, arquitectura, características, parámetros de configuración…) y posteriormente se compila TODO (incluso los compiladores). Esto tiene una ventaja evidente: al estar todo totalmente personalizado, los programas ocupan bastante menos, quitando trozos de código que no se utilizan. Por otro lado, la ejecución de los mismos es ligeramente más rápida (la verdad es que no es muy apreciable en aplicaciones normales). También tiene una desventaja evidente. Tanto para instalar programas como para actualizarlos, hay que compilarlos, y esto es un proceso muy lento (en actualizar el sistema completo, a veces tardaba 3 días ininterrumpidos). Con esta distro aprendí los pormenores del modo texto (la instalación era totalmente en modo texto, por comandos. Ni siquiera había opciones para elegir, como en debian). Aprendí también a configurar un sistema “a pelo” (no tiene ningún asistente, todo es completamente manual). En definitiva, a ser un usuario más que avanzado en lo que respecta a la gestión y utilización del sistema.
Otro punto débil de Gentoo es que los usuarios dependen (MUCHO) de quienes están al tanto de los programas y actualizan el árbol del portage. Si meten la pata e introducen un paquete en mal estado, todos los usuarios nos vemos afectados. Esa es una de las razones por las que después de más de dos años, dejé de utilizar Gentoo. Cada vez que alguien metía la pata, nos pasábamos 2 días con un sistema inestable. Además era un coñazo tardar tanto en instalar lo que fuese, y el mantenimiento del sistema era muy complicado y pesado.

ACTUALMENTE

Mi sistema actual

Actualmente, desde hace pocas semanas, estoy utilizando de nuevo una distro Debian. La verdad es que nunca me fue mal, aunque haber utilizado Gentoo durante tanto tiempo me sirvió para aprender mucho (ahora puedo estar escuchando música, viendo películas y trabajando en modo texto, como si fuese MS-DOS, y todo a la vez, sin ningún tipo de problema). No sólo aprendí en la utilización del sistema, sino también en su gestión y mantenimiento. En cualquier caso, por diversas opiniones que oí por ahí, quizás pruebe al terminar los exámenes una Ubuntu. Ya os contaré qué tal ;) .

Dic 07

Hace mucho, mucho tiempo, en una galaxia muy lejana… bueno, en realidad hace un par de años en esta misma habitación, instalé un script para linux que abría una nueva sesión de trabajo en una ventana aparte. Hasta aquí todo normal. Lo novedoso era que en esa sesión las ventanas eran de gelatina; al moverlas temblaban como si fuesen blanditas, y hacían un par de tonterías más. Ese proyecto fue evolucionando hasta, poco a poco, convertirse en lo que hoy se conoce como XGL y AIGLX.

Hace un año, más o menos, volví a instalarlo, ahora ya bajo el nombre de GLX, con muchas más funcionalidades, pero todavía estaba en una fase de desarrollo demasiado prematura, y no era compatible con muchas cosas que uso habitualmente, como la doble pantalla o los videos. Ayer me volvió a picar el gusanillo y decidí ponerme a ello de nuevo. Cual fue mi sorpresa cuando vi que tanto XGL como AIGLX están integrados (en parte) en los drivers de nvidia para linux (es decir, que no es necesario instalar prácticamente nada si tienes una nvidia con los drivers de estos señores). Lo único que tuve que instalar fue el beryl (el gestor de ventanas que hace uso de esta cosita) y activar un par de opciones en el fichero de configuración de la pantalla (todo muy bien indicado en la guía de Gentoo-wiki).

Estoy muy contento con el resultado; por un lado porque apenas tuve que instalar nada, y por otro porque todo funciona más o menos bien. Hay un par de errores debidos al uso de dos pantallas, pero bueno, nada que moleste demasiado. Llevo un par de días dándole vueltas al escritorio con los efectillos y la verdad es que va bastante bien. Si tengo demasiadas ventanas abiertas, y sobre todo si son cosa de java, ralentiza un poco, pero bueno, es el precio que hay que pagar por tenerlo todo curiosote.

Para los que no sepáis cómo es un escritorio con GLX, os paso un par de videos (12). Por poneros un símil, os diré que es una copia descarada de algunos efectos de MacOS X :P .