01_okladka_ES.indd
1
2009-10-23, 15:26
02_rekl_Axarnet.indd
1
2009-10-14, 18:19
a modo de introducción
Linux: lo mejor para los juegos
Linux: lo mejor
para los juegos
H
ace unos días tuvimos problemas con Internet en la
empresa y durante un par de horas no hubo conexión.
Como el trabajo de la mayoría de las personas en la
redacción, aparte de los gráficos, se basa en la comunicación vía red, tuvimos que esperar hasta que arreglaron el problema.
¿Y qué puede hacer un empleado en la oficina cuando no tiene nada
que hacer y el jefe está fuera? Muy simple: jugar con el ordenador. Así
que muchas personas sin pensarlo mucho aprovecharon la situación.
De repente escuché una pregunta: ¿Por qué tú tienes tantos juegos?
¡Yo no los tengo! Y la respuesta: ¡Porque tengo Linux!
Entonces resulta que no siempre Windows es el mejor para jugar con el ordenador. Linux ha dejado de ser un sistema que sirve
solamente para trabajar y cada día desarrolla más sus oportunidades
para la diversión. Ya existen las aplicaciones totalmente libres que nos
permiten hacer todo: escuchar, grabar y crear música, ver, modificar
y grabar vídeos, trabajar con nuestras fotos, etc. En este número os
De repente escuché una pregunta:
¿Por qué tú tienes tantos juegos?
¡Yo no los tengo! Y la respuesta:
¡Porque tengo Linux!
presentamos el lenguaje de programación Processing, que sirve para
crear arte digital. Permite programar imágenes, animaciones e interacciones. Una herramienta perfecta para todos los que quieran profundizar en este campo.
Cambiando un poco el tema, éste es el número 60 de nuestra revista y aunque yo todavía no estuve en la redacción cuando salió el
primer número, después de tres años y medio con vosotros, buscando
los temas más interesantes para los artículos y tratando de aportaros la
información más actual, me siento la parte de la revista. Espero que
con estos 60 números hayamos aportado algo al mundo linux y os
hayamos ayudado a aprender cosas prácticas y hacer vuestro trabajo
con este sistema operativo más fácil y satisfactorio.
Y como estamos en diciembre no me queda más que desearos todo
lo mejor; que paséis Felices Fiestas y que el año que viene sea todavía
mejor que el que acaba.
¡Nos vemos el próximo año!
Paulina Pyrowicz
Redactora Jefe de Linux+
3
www.lpmagazine.org
03_Wstepniak.indd
3
2009-10-15, 16:13
índice
En este número
descripción de DVD
20
6
Existen infinidades de reproductores de música para GNU/Linux.
Este artículo pretende analizar a justo juicio cuál es la mejor alternativa que se adapte mejor a nuestras necesidades al momento de reproducir audio en nuestra PC, por supuesto sin resignar ningún aspecto
de interés para nosotros, haciendo un balance parcial entre rendimiento, usabilidad, estabilidad y funcionalidad.
Supreme Super Gamer
Francisco Javier Carazo Gil
novedades
8
10
Noticias
Alex Sandoval
Ubuntu
Francisco Javier Carazo Gil
11
Juan Gamez
12
Diego Rivero Montes
Mandriva
Fedora
26
diversión
14
Reproductores de Música para GNU/Linux
Jorge Emanuel Capurro
Processing: Código abierto para
la creación de Arte Digital
Lino García Morales
Processing es un lenguaje de programación de código abierto,
creado por Casey Reas y Ben Fry, para gente que desea programar imágenes, animaciones e interacciones. Lo usan estudiantes,
artistas, diseñadores, investigadores, y aficionados al aprendizaje,
elaboración de prototipos y producción. Aunque fue creado para
enseñar fundamentos de programación en un contexto visual en
el Media Lab del MIT, por su uso, versatilidad, potencia y acceso,
se ha convertido en una herramienta de producción profesional.
Su comunicación con la plataforma Arduino y familia (también
de código abierto) permite extender su interacción con un número
ilimitado de dispositivos y la construcción de verdaderas obras
digitales interactivas.
En Linux también se juega
Francisco Javier Carazo Gil
... y mucho, podría ser la continuación del título de este artículo. Hace
ya mucho que Linux dejó de ser un sistema operativo meramente profesional o de “expertos” para convertirse en un sistema operativo de
escritorio, listo para ser utilizado por todo tipo de usuarios. Aunque
su difusión todavía no ha conseguido los niveles necesarios para ver
juegos comerciales en las grandes superficies con el logo de Linux, sí
es cierto que desde un comienzo en el que jugar en Linux se limitaba
a un reducido grupo de juegos simples, en la actualidad tenemos un
catálogo de posibilidades que nada tiene que envidiar a cualquier otro
sistema operativo, véase Microsoft Windows.
34
Streaming de Audio y Vídeo con VLC
Matías Barletta
Desde una conferencia de negocios hasta nuestra película favorita
podemos transmitirla vía red utilizando VLC, una aplicación de
código abierto que nos permite reproducir y compartir cualquier contenido multimedia. Si te sientes tentado de compartir/transmitir una
película con tus amigos vía Internet o hacer tu propia radio en la oficina, este artículo es para ti. Vamos a enseñarte paso a paso qué hacer
para conseguirlo.
4
04_05_SPIS_TRESCI.indd
Linux+ 12/2009
4
2009-10-15, 12:47
índice
Tema del número
Diversión
software
programación
40
64
Juegos
Francisco Javier Carazo Gil
Protegiendo formularios Web
con reCAPTCHA
José María Gómez Hidalgo
práctica
42
Retorno al Shell
Daniel Alejandro Benitez
Muchas son las razones que podemos escuchar y dar acerca de
los beneficios de saber operar GNU/Linux prescindiendo de la
interfaz gráfica, pero sin lugar a dudas todos coincidimos en que
las utilidades que podemos ejecutar desde la línea de comandos
no sólo son muy poderosas, sino que en ocasiones simplifican
las tareas que se realizan desde el entorno gráfico. Esto puede
parecer una exageración, pero los invito a que sean ustedes los
que lo comprueben.
52
Introducción a LVM: guía práctica
Sebastian Pignataro
LVM es una implementación de un administrador de volúmenes
lógicos para el kernel de Linux. Con él podemos agregar particiones en volúmenes lógicos, agrandar o achicar el tamaño de
una partición en caliente, sin reiniciar el sistema ni dejar de
prestar servicio. También nos dará la opción de crear snapshots
y muchas cosas más.
soluciones para empresas
58
La esencia de la Web, y más aún de la Web 2.0, es la interactividad. Se acabaron los tiempos en los que sólo unos cuantos
privilegiados tenían la oportunidad de verter contenidos en la
Web. Hoy en día, cientos de millones de personas alimentan la
red con sus comentarios, fotografías y vídeos, usan redes sociales como Facebook o Tuenti a diario para permanecer en contacto con sus amistades y compañeros, o para conocer a otras
personas, entretenerse y divertirse. Pero las oportunidades para
verter contenidos lo son también para que spammers y crackers
abusen de ellas, difundiendo miles de millones de correos
basura, infectando millones de equipos, y practicando el fraude
a gran escala.
seguridad
70
Evadiendo la seguridad de los captcha
David Puente Castro
A día de hoy, al lado de cada formulario presente en la web se
encuentra una especie de desafío-respuesta que intenta identificar
si quién cumplimenta el mismo se trata de una persona humana
o de un sistema automatizado. El único modo de lograr que
estos sistemas, conocidos como “captchas”, se vuelvan seguros,
es desechar la idea de que la mayoría de ellos no pueden ser vulnerados, y eso es lo que estamos a punto de demostrar.
Linux en la PYME paso a paso
Santiago Gómez Ruiz
La aventura de iniciar una empresa dista mucho de ser algo relajado o sencillo. Es una tarea titánica que pocos saben apreciar.
Cuando luego alguien pasa por la puerta, entra a pedir un presupuesto, o algún amigo te pregunta que cómo va el negocio, no
pueden imaginar ni lejanamente el inmenso trabajo, la montaña
de papeleo, de estudios, de formación que has tenido que asumir
para poder poner en marcha tu pequeña empresa.
opinión
82
La ‘autoformación’ no nos hace expertos
en seguridad
Fernando de la Cuadra,
director de Educiación de Ontinet.com
La noticia de que un virus informático (técnicamente, un troyano)
ha sido propagado en nombre de la policía está en muchos sitios.
Y seguramente muchos usuarios estarán preocupados por los posibles efectos que cause este troyano.
5
www.lpmagazine.org
04_05_SPIS_TRESCI.indd
5
2009-10-15, 14:31
descripción de DVD
DVD
SuperGamer
D
istribuciones en el mundo de
GNU/Linux hay para casi todos los gustos y necesidades.
El mundo del videojuego no
podía ser menos y aprovechando la gran cantidad de juegos libres de calidad que existen
ahora mismo en el mercado, nada mejor que
crear una distribución centrada en este tema.
Podemos instalarle si queremos software para
que actúe de servidor, por ejemplo, pero sin
añadir nada y sin requerir de conexión a Internet nos asegura muchas horas de diversión.
En esta revista se suelen presentar las distribuciones de más actualidad. Este mes y haciendo una excepción, no vamos a tratar una
distribución popular (véase por popular Ubuntu, openSuse, Mandriva, Fedora, etc.) sino una
distribución centrada en un tema. En otras ocasiones lo hemos hecho, recuerdo el caso en el
que yo también me encargué de hacer la presentación de la misma. Se trataba de Ubuntu
Studio y el número estaba centrado en el campo
multimedia. Hoy el número está centrado en la
diversión y qué mejor que una distribución muy
“jugona”. La distribución elegida es SuperGamer y sólo por el nombre podéis suponer qué
trae consigo. Comencemos con sus orígenes.
Orígenes
Aunque no es la primera distribución dedicada al mundo del videojuego, es de las
más populares dentro de esta división y por
supuesto, de las más completas, por no decir
la más. Aunque en un primer momento se
creó basándose en PC Linux OS, el paso del
tiempo hizo que los dirigentes del proyecto
cambiaran a otra distribución como base para las nuevas versiones, Vector Linux (distribución, por cierto, basada a su vez en la
veterana Slackware).
La filosofía de los creadores de SuperGamer es dotar al jugador del máximo número
de juegos disponibles nada más terminar la
instalación. Todos los juegos ejecutan nativamente en Linux, aunque la distribución
también permite la instalación de herramientas adicionales, como Wine o Cedega de los
que se hablarán en un artículo de este mismo
número, por este mismo hecho; para jugar a
juegos para Windows.
Figura 1. Logo SuperGamer
6
06_07_OPIS_DVD.indd
Figura 2. Toma de pantalla oficial
terfaces de instalación con entornos gráficos,
ésta puede resultaros algo extraña. Aunque no
es una instalación en modo texto, con letras en
blanco sobre fondo oscuro, sí se trata de una
instalación con un interfaz gráfico que si no
sois usuarios de GNU/Linux experimentados
puede recordaros a la de Windows XP. La verdad es que tecnológicamente no es tan antigua,
pero otras distribuciones nos tiene acostumbrados a unas instalaciones tan gráficas e intuitivas, que resulta raro ver el fondo azul con los
cuadros hechos con caracteres ASCII.
Instalación
Si no tenéis particionado vuestro disco
La instalación se realiza de igual manera en antes de instalar, os recomiendo que lo hagáis
esta distribución y en su distribución matriz, con una herramienta como gParted que os
Vector Linux. Si estáis acostumbrados a in- proporcionará facilidad y seguridad. Si tenéis
Sus mayores rivales en el campo de las distribuciones para jugones son: LinuxGamer.net
Live!, basado en Arch Linux y Ultimate Edition Gamer's Edition, valgan la redundancia,
basada en Ubuntu. Todas ellas cumplen a la
perfección su cometido y si queréis podéis probar con ellas para comprobar qué pros y contras
tienen respecto con la que os presentamos aquí.
Al final de este artículo de presentación, como
de costumbre, tenéis los enlaces web a los sitios
de ambas distribuciones.
Figura 3. Urban Terror
Linux+ 12/2009
6
2009-10-15, 11:44
descripción de DVD
DVD
todo preparado, meted el DVD y seguid los
pasos. La instalación es muy intuitiva, a pesar
del interfaz no tan moderno, y en unos pocos
pasos tendréis vuestra distribución funcionando en vuestro equipo. La distribución
asegura soporte tanto para Nvidia como para
Ati, por lo que no tendréis problemas de compatibilidad hardware, al menos en el apartado
gráfico. Incorpora kernel 2.6.18.5 y servidor
gráfico xorg 6.9 .
Juegos disponibles
Puesto que la intención de esta distribución es
facilitar el juego enumeremos los juegos que
incluye la versión más completa de todas las
disponibles de la misma, la Supreme (que necesita un DVD de doble-capa). Las distintas
versiones de la distribución están disponibles
en la sección Downloads del portal a través
de enlaces a ficheros .torrent que posibilitan
que la distribución pueda ser descargada sin
precisar de servidores propios (hago desde
aquí un llamamiento para que todos utilicemos ficheros .torrent para descargar todas las
distribuciones para evitar que se sobrecarguen los servidores de las mismas).
Veamos el listado de juegos que incluye
la versión más completa de la distribución:
•
•
•
•
•
•
•
•
•
•
•
Quake Wars,
Doom 3,
Prey,
Unreal Tournament,
Quake 4,
Savage 2,
Postal 2,
Enemy Territory,
Penumbra Black Plague,
Sauerbraten,
Urban Terror,
Figura 5. Super Tux
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Soldier Of Fortune,
Torcs,
Tremulous,
AlienArena,
True Combat,
America's Army,
Nexus,
OpenArena,
PlaneShift,
Drop Team,
Frets On Fire,
Chromium B.S.U.,
Mad Bomber,
X-Moto,
BZ Flag,
Mega Mario,
Glaxium,
GL-117,
NeverBall,
NeverPutt,
Super Tux,
PPRacer.
Como veréis, muchos de los juegos incluidos
han aparecido en la sección mensual de juegos de esta revista que yo también escribo.
Desde juegos de disparo en primera persona,
como Urban Terror, a clásicos de plataformas
como Super Tux, pasando por juegos en línea
de rol como Plane Shift, están dentro de la
distribución, por lo que prácticamente sea
cuál sea vuestro género favorito, encontraréis
diversión.
Conclusiones
Una razón más para demostrar a los que aún
creen que no se pueden divertir con Linux
(muchas más encontraréis en este número).
En ningún otro sistema operativo, o familia
de sistemas operativos, existe un conjunto tan
completo de juegos tan potentes y que vienen
preparados directamente para el juego, sin
necesidad de realizar nada más, sólo instalar
la distribución.
Podemos convertir un equipo algo antiguo en una “consola” libre con esta distribución o directamente podemos usarla para
demostrarle a nuestros amigos que este sistema operativo “tan aburrido” en ocasiones,
sólo tiene juegos.
Francisco Javier Carazo Gil
En la red
•
•
•
Figura 4. Plane Shift
SuperGamer
– http://supergamer.org/
Live! Linux-Gamers
– http://live.linux-gamers.net/?s=
home
Ultimate Edition Gamer's Edition
– http://ultimateedition.info/
7
www.lpmagazine.org
06_07_OPIS_DVD.indd
7
2009-10-15, 11:44
NE WS
novedades
Noticias sección llevada por José Alex Sandoval Morales [email protected]
Nvidia apuesta
por OpenCL en Linux
Nvidia ha presentado su primer controlador -propietario, eso sí- para Linux
con soporte para el estándar OpenCL de
computación GPGPU. De hecho, este tipo
de controladores aparecerán al mismo
tiempo que los de Windows, una señal
de la relevancia que para Nvidia tiene
ese soporte también en el sistema operativo de libre distribución. La tecnología
GPGPU comienza a despegar y el estándar elaborado por The Khronos Group
pretende eliminar los conflictos de las
alternativas propietarias.
El llamado Open Computing Language
es una plataforma inicialmente desarrollada por Apple y que ahora también
está disponible para Windows y Linux
gracias en gran parte al esfuerzo de The
Khronos Group, un organismo que ya se
encargaba también del estándar OpenGL
y que ahora está tratando de impulsar este
desarrollo para computación GPGPU.
Y Nvidia ha dado un paso importante en
la aceptación del estándar en el mundo
Linux, ya que su controlador GeForce
190.29 da soporte tanto a OpenGL como
a OpenCL.
El controlador se puede encontrar en
el sitio de Nvidia para desarrolladores,
donde además están el OpenGL SDK
para todas las plataformas, además de
código fuente de ejemplo y el llamado
OpenGL Visual Profiler para ayudar
a optimizar los programas y “transformarlos” a código que se pueda ejecutar por
parte de la GPU.
Si todo va bien puede que las alternativas actuales de Nvidia (CUDA)
y AMD/ATI (FireStream) desaparezcan
en favor de OpenCL, que trata de aunar
esfuerzos y que debería ser la referencia
gracias al apoyo de numerosas empresas
del sector.
http://www.muylinux.com/2009/10/06/
nvidia-apuesta-por-opencl-en-linux/
MercadoLibre migra a Oracle
Unbreakable Linux
Oracle logró una gran victoria al anunciarse que MercadoLibre Inc., sin duda
el mercado de comercio electrónico más
grande de Latinoamérica, cambió su
anterior infraestructura basada en otra
distribución GNU/Linux no especificada
por Oracle Unbreakable Linux, básicamente un clon de Red Hat Enterprise
Linux (RHEL) con el soporte técnico
comercial de la misma Oracle. Para poner
esta información en su contexto real,
recordemos que MercadoLibre.com está
entre los 50 sitios más importantes del
mundo en términos de visualización de
páginas y cuenta con más de 37,8 millones de usuarios.
http://www.vivalinux.com.ar/biz/
mercadolibre-con-oracle-unbreakable-linux
8
08_09_Newsy.indd
Dell presenta “Latitude ON” un sistema
Linux alternativo para portátiles
D
ell desarrolla su propio sistema operativo instantáneo basado en Linux para
sus equipos portátiles. Se trata de Latitude
ON, que ofrece un entorno de trabajo a los
pocos segundos de arrancar el computador,
similar a DeviceVM Splashtop o Phoenix
HyperSpace. En este entorno el usuario podrá consultar el correo electrónico, navegar
por la Web y funcionar durante días utilizando la batería normal del portátil.
La propuesta de Dell es más ingeniosa
que las alternativas señaladas anteriormente
por varias razones, pero la más importante de
todas ellas es que entra en la categoría de los
llamados SoC (System-on-a-Chip), es decir:
es un minicomputador en sí mismo. Este
sistema de Dell cuenta con un procesador
ARM propio y todos los elementos necesarios, incluyendo un chip WiFi, para
funcionar de forma autónoma al resto de
los componentes del portátil.
El sistema operativo está basado en SUSE
Linux Enterprise Desktop 10, y además incorpora un navegador derivado de Firefox,
un cliente de correo, un organizador de
citas y contactos, y alguna que otra aplicación más, y todo ello reside en un chip de
memoria flash que como el resto de componentes está exclusivamente destinado
a operar con el sistema operativo instantáneo Latitude ON.
De hecho, este SoC dispone de controladores para poder aprovechar la conectividad 3G que tienen como opción algunos
portátiles de la familia Latitude de Dell
-por ejemplo los novísimos y exclusivos
Dell Latitude Z, o los E4200 y E4300, que
fueron los primeros acompañantes de este
desarrollo.
No es el primer sistema operativo instantáneo que
se presenta, pero resulta interesante que un gran
fabricante como Dell prefiera no comprometerse
con nadie y desarrollar su propia propuesta en
este sentido
Una de las ventajas fundamentales de
esa aproximación al mundo de los sistemas
operativos instantáneos es que el consumo
es mínimo, y aun navegando por Internet
y escribiendo correos o un documento de texto la batería, que normalmente aguanta entre
2 y 4 horas, llega a las 20 horas utilizando
ese sistema.
Obviamente Latitude ON solamente
dispone de unas pocas prestaciones en forma de aplicaciones, pero si el usuario puede aprovechar ese modo “ligero” de trabajo, la recompensa es destacable: tiempos
de arranque casi instantáneos, y autonomía
muy superior a la media de los portátiles
convencionales.
Una gran idea de Dell, que esperamos
que otros fabricantes apliquen pronto en sus
portátiles.
http://microteknologias.wordpress.com/
2009/09/30/dell-publica-latitude-on-un-sistema-linux-alternativo-para-portatiles/
Europa líder en Open Source
L
os resultados del estudio de la empresa Actuate sobre la popularidad del
software de Código Abierto confirman el
buen nivel de adopción de esta filosofía en
Europa, con China como claro referente de
futuro por la rápida expansión de soluciones
Open Source en ese país. La encuesta, a la
que respondieron 1.500 directivos, administradores de sistemas y desarrolladores ha
dado datos interesantes.
La encuesta se realizó en el Reino Unido,
Estados Unidos, Alemania, Francia y, por
primera vez, China, y en ella la empresa Actuate incluyó una serie de cuestiones que permiten analizar el interés que los responsables
en la toma de decisiones en infraestructuras
informáticas tienen por el software Open
Source y por sistemas operativos Linux.
http://www.muylinux.com/2009/10/07/europalider-en-opensource/
Linux+ 12/2009
8
2009-10-23, 12:38
novedades
sección llevada por José Alex Sandoval Morales [email protected] Noticias
9
www.lpmagazine.org
08_09_Newsy.indd
210x297 Linux.indd 1
9
NE WS
2009-10-23, 13:46
23/10/09 8:49
novedades
Ubuntu sección llevada por Francisco Javier Carazo Gil [email protected]
Debian usará el Startup de Ubuntu
Si el mes pasado hablábamos de que las
relaciones entre Ubuntu y Debian (en ambos sentidos) eran cada vez menos frías,
parece que las intenciones se están materializando en anuncios como el que nos
ocupa. El sistema de arranque más popular
en GNU/Linux, el demonio del init, tiene
un defecto, está concebido para equipos
que necesiten pocos arranques pero mucha
fiabilidad (servidores). Cuando hablamos
de equipos de escritorio, la fiabilidad que
se gana, es baja; y el tiempo de arranque
mucho mayor, ya que apenas paraleliza
procesos en el arranque.
Este problema es conocido por los creadores de distribuciones de escritorio, como
Ubuntu, y se han dado distintas soluciones,
creando distintos métodos para el arranque.
El primero en dar el paso fue Ubuntu
y parece que la experiencia en este campo
y los buenos resultados obtenidos, han
hecho que sea el proceso de arranque elegido por Debian para sustituir a init, y así
conseguir unos tiempos de arranque
sustancialmente menores sin perder la
fiabilidad que ha caracterizado siempre
a la distribución, acercándose de esta
manera, al usuario de escritorio.
ubuntuone.com es ahora one.ubuntu.com
El servicio de backup, almacenamiento
y sincronización remoto ofrecido por
Canonical a los usuarios de Ubuntu, ha
cambiado su nombre en la red. Del
dominio propio que tuvo en un primer
momento, ha pasado a ser un subdominio
de Ubuntu para integrarlo más en la marca.
Probablemente os será de gran utilidad este
servicio para almacenar los documentos
más importantes y estar ajenos a problemas
software o hardware que “atenten” contra
ellos.
Lucid Lynx
Sabíamos que iba a empezar por una
doble “L” la versión 10.04 de Ubuntu,
pero lo que no sabíamos es que fuera
a ser de un lince. Se había especulado con
multitud de animales, ya que en la “L”
había múltiples posibilidades (en realidad,
posibilidades hay en todas las letras pero
que sean populares como en el caso de la
“L” con león, leopardo o lemur, no es tan
frecuente). Además, se le ha añadido el
adjetivo pertinente, “Lúcido”, como marca
la regla y encima en este caso viene a la
perfección.
El calendario de lanzamiento será el siguiente:
• 3 de Dicicembre de 2009. Alpha 1,
• 7 de Enero de 2010. Alpha 2,
• 4 de Febrero de 2010. Alpha 3,
• 4 de Marzo de 2010. Beta 1,
• 1 de Abril de 2010. Beta 2,
• 15 de Abril de 2010. Release Candidate,
• 29 de Abril de 2010. Versión Final.
10
10_Ubuntu.indd
Karmic Koala
C
uando leáis este artículo, Karmic Koala, ya estará disponible en la red y no
seréis pocos los que la estaréis utilizando. La
edición número once de la distribución más
popular de GNU/Linux tiene ante sí un gran
reto, mantener ese puesto. Para ello, cuenta
con una batería de novedades que probablemente le permita conservarlo con relativa facilidad. A todas las ventajas ya demostradas
por la distribución en ediciones anteriores, se
suman nuevas funcionalidades que nos hacen la vida más fácil y que posibilitan seguir
batallando en primera línea contra Mac OS
X y Microsoft Windows.
Como os digo, esta primera parte de la
sección de este mes, tratará sobre todo acerca
de las novedades de la distribución. Además de
ser importante mantener un ritmo de renovación tan regular, es necesario aportar en cada
nueva versión algo que haga que los usuarios
quieran renovarse. No se trata de grandes novedades, porque en seis meses no da tiempo
a implementar grandes funcionalidades, pero
algunas de ellas vienen ya de largo y son un
paso más en grandes metas.
por defecto, pasando de ser Pidgin a Empathy. Además se ha reformado GDM, el sistema de logueo, para integrarlo mejor en el
sistema.
Ubuntu One
El sistema de backup automático de Canonical, se incluye por defecto en la nueva versión
de la distribución para que un mayor número
de personas haga uso de él de forma gratuita, una vez asegurada ya la estabilidad del
mismo. Todo un detalle a tener en cuenta para
todos, ya que no somos pocos los que tenemos problemas con pérdidas de datos de forma accidental alguna vez en nuestra vida.
Kernel 2.6.31 y mejoras en la gestión
de energía
Nueva versión del kernel. Estabilidad, rendimiento y mayor reconocimiento de hardware.
Además, se ha mejorado especialmente la
gestión de energía. No eran pocos los usuarios, sobre todo de equipos portátiles, que
sufrían los inconvenientes de tener un sistema que tenía problemas de incompatibilidad
con la energía: no poder cambiar el brillo,
Mejoras en Upstart
problemas al apagar/suspender/hibernar el
El sistema de arranque de Ubuntu, pionero equipo...
tecnológicamente y quizás el más eficiente, ha
recibido nuevas mejoras para hacer aún más ext4 por defecto
pequeño el tiempo de arranque del sistema Pues eso, tras la fase de pruebas de ext4 y el
sin perder estabilidad. En las noticias cortas, paso a oficial en otras distribuciones como
podéis ver que Debian también ha decidido Fedora, algo más aventureras que Ubuntu,
apuntarse a la lista de distribuciones que lo ext4 ha sustituido a su “padre” (hablando de
usan. Asimismo se ha mejorado la “experien- sistemas de ficheros que utilizan internamencia de arranque”, es decir, se ha hecho más te estructuras de árbol es muy propia esta examigable el arranque evitando en lo posible presión) ext3.
pantallas en modo texto y dotando de un asGrub 2
pecto más visual a todo el proceso.
Se acabó la triste pantalla de inicio en blanSoftware center
co y negro y modo texto a la que nos tenía
Para muchos la más importante de todas las acostumbrado Grub. Grub 2 provee una exnovedades. El que será el sustituto, al menos periencia más gráfica y amigable al usuario,
para el usuario medio, de Synaptic a medio incluso cuando hay que elegir con qué equiplazo, ya ha sustituido a “Añadir/quitar prog- po arrancar.
ramas”. Dota al sistema de una interfaz amiAdemás de éstas, existen otras novedades
gable para poder instalar software de terceros. de menor calado que podéis leer en la página
Todo un reclamo para el usuario de software oficial de Ubuntu y que os serán también
privado.
muy útiles. El progreso sigue y cada seis meses tenemos pruebas de que el buque insignia
Gnome 2.28
en el mundo del escritorio en sistemas operaAdemás de mejoras menores, la nueva versión tivos libres, no para de renovarse para hacer
del entorno de escritorio incluye la sustitu- frente a rivales tan potentes como Windows 7
ción del cliente de mensajería instantánea o Mac OS X Snow Leopard.
Linux+ 12/2009
10
2009-10-14, 18:04
novedades
Mandriva
sección llevada por Juan Gamez [email protected]
Mandriva Cooker
M
ientras espero con impaciencia a que
salga Mandriva 2010.0 y al hilo de
un mensaje publicado en Blogdrake sobre
esta rama de nuestra distribución favorita,
he creído conveniente escribir un poco sobre Mandriva Cooker, esa parte de Mandriva infravalorada y, a veces, un tanto olvidada.
Cooker es la versión de desarrollo de
Mandriva. Cuando se aproxima la fecha de
publicación de una de las versiones de Mandriva, Cooker pasa a ser la versión beta
y RC de esa versión. El objetivo de Cooker
es ser un marco de interacción entre el equipo de desarrollo de Mandriva Linux y de
los usuarios con el objetivo de mejorar la
distribución. Es estas interacciones se depuran los errores encontrados así como se añaden o eliminan funcionalidades y software
de la distribución.
Cooker es una distribución completa
y en continuo cambio y que, en algunos casos, su inestabilidad puede llevar a no ser
ni siquiera instalable por motivos de incompatibilidad entre las distintas piezas de
software que la componen.
También debemos de indicar qué no es
Cooker o en qué entornos no debería ser
utilizada. Cooker no es el lugar donde encontrar las últimas versiones de software
para nuestra distribución estable, para
ello tenemos las ramas Testing y Backport. No debería instalar paquetes de Cooker en una versión estable dado que los
RPM de Cooker pueden ser incompatibles
con los instalados al estar compilados
usando librerías que no están disponibles
en la versión estable. Además los paquetes de Cooker pueden estar llenos de
fallos al no estar terminada la depuración
del software o librerías. Asimismo, y por
los mismos motivos, pueden tener funcionalidades no operativas o en un grado
mínimo.
Una vez que nos hemos decidido a usar
Cooker debemos pasar a instalarla, siempre en un entorno de pruebas, ¡nunca de
producción! Mandriva nos ofrece muchas
formas de instalar Cooker, podemos hacerlo mediante FTP, descargando las imágenes ISO (estas se generan cada dos semanas), mediante PXE, etc.
Una vez instalada podemos mantener
nuestra Cooker actualizada de la misma
Fondos de escritorio
forma que mantenemos actualizada nuestra distribución estable, mediante urpmi.
La única salvedad es que dado que los
repositorios de Cooker cambian a diario
deberíamos actualizar la lista de paquetes
mediante el comando urpmi-update -a, una
vez actualizados los repositorios ejecutar
urpmi –auto-select, este comando revisará
los paquetes instalados y determinará si hay
algún paquete nuevo en los repositorios,
si es así, este nuevo paquete será instalado
junto con sus dependencias si las hubiere.
También podemos ejecutar urpmi –autoupdate que combina en un solo paso los
dos comandos anteriores.
Una vez que tengamos Cooker instalada y trabajando con ella, más tarde o más
temprano tendremos un error. ¿Qué hacer
en ese momento? Ya hemos comentado
que Cooker está pensada para que los
usuarios comuniquen a los desarrolladores
fallos y problemas para poder ser subsanados antes de que salga la versión estable.
Esto redunda en la calidad y estabilidad de
las versiones de Mandriva, por lo que el
reporte y arreglo de esos fallos es fundamental.
Cuando nos encontremos con un fallo
debemos de seguir estos pasos. Primero
comprobar si nuestra Cooker está actualizada, si no lo está, actualizarla y ver si se
ha solucionado ese error. Si se sigue produciendo, comprobar que es reproducible.
Busquen además en los archivos de la lista
de correo de Cooker si ese error ya ha sido
reportado, si es así y puede aportar nuevos
datos al informe, hágalo. Utilice la lista
de correo para comentar si algo es o no un
error, si lo es, utilice Bugzilla para informar (http://wiki.mandriva.com/es/Mandriva_Cooker_Bugzilla). El idioma, tanto de
la lista de correo como de Bugzilla, es el
inglés.
Como habéis visto, instalar y trabajar
con Cooker puede ser una experiencia excitante, no solamente por ver un adelanto
de cómo será nuestra distribución estable
en el futuro, sino que seremos partícipes
de la creación, gestación y optimización de
nuestra distribución favorita. Podéis saber
más sobre Cooker, como siempre, en la
Wiki de Mandriva (http://wiki.mandriva.
com/es/Como_Cooker) .
Mandriva ha realizado un concurso para
elegir 10 fotografías proporcionadas por
los usuarios para crear 10 fondos de
escritorio para Mandriva 2010.0.
Cuando leas esto, ya habrá terminado
el plazo de inscripción, pero puedes
ver las imágenes enviadas en: http://
www.flickr.com/group
Moblin en Mandriva
Moblin estará incluido en Mandriva 2010.0.
Moblin es un proyecto de código abierto
enfocado al desarrollo de software orientado a dispositivos móviles para conectividad
a Internet (MIDs) y nuevas clases de dispositivos como netbooks y nettops.
Mandriva será la primera distribución en
integrar Moblin (http://www.moblin.org/).
Día mundial contra las patentes
de software
El pasado día 24 se celebró el día contra las
patentes de software, amenaza que sigue
pendiente después de 6 años. Tenéis varias
formas de hacer llegar vuestro desacuerdo,
todas ellas descritas en
http://stopsoftwarepatents.org/
Cambio en el particionado de discos
en Mandriva Linux 2010
El particionado de discos en Mandriva
hasta ahora no terminaba de ser muy
intuitivo para usuarios poco experimentados. El equipo de Mandriva ha decidido
cambiarlo desarrollando una nueva ventana
para que el usuario sea capaz de confeccionar fácilmente su esquema de particionado
en el disco duro a la hora de instalar la
distribución de GNU/Linux.
Los cambios realizados se ven directamente
en la captura de pantalla. En la parte
superior se muestra un gráfico de cómo
está particionado actualmente el disco
duro.
A continuación, el instalador busca las
diferentes posibilidades disponibles
y nos las da para elegir:
• Instalar el sistema operativo en el espacio
libre actualmente en el disco.
• Utilizar las particiones actuales para
instalar el sistema.
• En caso de haber una versión de Windows instalada, otra opción es instalar
Mandriva en el espacio libre que quede
en su partición.
• Eliminar y utilizar todo el disco duro.
• Modificar libremente toda la tabla de
particiones.
11
www.lpmagazine.org
11_Mandriva.indd
11
2009-10-14, 17:22
novedades
Fedora sección llevada por Diego Rivero Montes [email protected]
Driver Nvidia
Ya la tenemos aquí, la nueva versión de los
controladores para las tarjetas gráficas Nvidia
para los sistemas operativos GNU/Linux,
FreeBSD y Solaris.
Entre otras particularidades esta nueva hornada nos trae varias correcciones dignas de ser
mencionadas como son:
• Ha sido corregido un error que en algunas
GPU's móviles al iniciar el entorno gráfico
había provocado el famoso Kernel panic.
• También ha sido solucionado un problema
de interacción que existía entre VDPAU
y PowerMizer cuando el primero es utilizado únicamente como mecanismo de
visualización y no para decodificar flujos
de vídeo.
• Igualmente se ha procedido a realizar una
corrección en VDPAU y así evitar la "prevención de visualización" en algunos casos
en que un VdpOutputSurface se suprime
cuando aún se encuentra activo (en cola o
visible) en VdpPresentationQueue. Esto
realmente puede ocurrir si en MPlayer
utilizamos la opción "fs" lo que podría
evitar que VDPAU realizara toda su labor
con éxito.
La ficha técnica de la actualización es:
Nombre: Driver Nvidia
Versión: 185.18.36
Género: Driver
Licencia: Comercial
Plataformas: GNU/Linux, FreeBSD, Solaris.
Novedades en Fedora 12
No paran de salir noticias sobre la versión
número 12 de nuestra distribución. De momento parece que ya está bastante perfilada
a estas alturas contando con un buen número
de características nuevas.
De entre todas ellas llama la atención el
hecho de que por una parte ya va a estar
completamente optimizado para arquitecturas i686 y por otra que los procesadores
que obtendrán óptimo rendimiento serán
los posteriores a la cuarta generación de los
Pentium.
Otras novedades que podemos probar en
la versión Alpha entre muchas otras que se
avecinan son:
• Mejor soporte para webcam.
• Ahora Empathy es el cliente por defecto
de mensajería instantánea.
• GNOME 2.28 Beta.
• KDE 4.3.
• Mejor soporte para la administración de
Red de banda ancha móvil.
• Mejor codec libre de video.
• Mejoras en Packagekit.
• Mejoras en PulseAudio, Administrador de
energía, KVM y soporte Ipv6.
• GRUB soporta ext4.
• Utilización de xz, en lugar de gzip para los
paquetes.
• Servicio de Bluetooth en segundo plano
para detectar en todo momento los dispositivos que se conecten.
Para ver el resto de novedades habrá que ir a
la web de Features.
12
12_Fedora.indd
Moblin y “Constantine”
S
egún publica en la lista de correo de Fedora desarrollo, Peter Robinson, que es
uno de los encargados del proyecto Fedora
respecto a los netbooks, la tecnología derivada
del proyecto Moblin ha sido integrada en la
distribución, con la intención de estar operativa para la nueva release o sea Fedora 12.
En un primer momento Moblin se trataba
en origen de una iniciativa de Intel, la famosa
fabricante de procesadores, pero la cosa fue
a más y se extendió a otras distribuciones de
Linux. En resumen la idea es la creación de
una distribución Linux totalmente adaptada
a microdispositivos y dispositivos móviles de
todo tipo, con sus naturales particularidades de
cada uno en lo tocante a hardware, consumo,
aplicaciones y demás singularidades.
Lo que en un principio llamó poderosamente la atención acerca de este sistema operativo fue su capacidad de iniciar un escritorio
Linux en 5 (cinco) segundos partiendo desde
el dispositivo totalmente apagado, pero ahí no
queda la cosa, en la segunda versión también
Skype 2.1
A
unque aún se encuentra en versión beta,
en el momento de redactar esta noticia,
se ha anunciado la disponibilidad de esta nueva
versión del software de llamadas vía IP para
sistemas Linux. Hasta hace poco los clientes
de voz sobre IP eran únicamente eso, algo que
nos permitía realizar llamadas telefónicas a través de Internet. Eso era antes, en la actualidad
hacen mucho más que eso, se pueden utilizar
como cliente de mensajería instantánea y envío de vídeo entre otras funciones. Una de las
características fundamentales que marcan esta
nueva versión es el gran cambio que ha sufrido
respecto a las anteriores, las cuales podíamos
calificarlas de más que espartanas careciendo de
opciones dignas de mención si las comparamos
con sus hermanas del sistema de las ventanitas,
tanto en funciones como en la interfaz.
Como decimos, en la nueva versión ya
tenemos características como vídeo de alta calidad, envío de SMS, se ha logrado la integración
con PulseAudio y la interfaz está tan lograda
como pueda estarlo la versión para Window$.
Requisitos de hardware:
•
•
•
Procesador de 1 GHz o superior.
256 MB de RAM.
20 MB de espacio libre en el disco duro.
dio la campanada con los cambios realizados
en la interfaz de usuario que habían tenido hasta la fecha los pequeños dispositivos.
Respecto de la integración en Fedora, la
idea partió y fue puesta en práctica por Fedora
Mini, que en definitiva es el grupo que se encarga de la adaptación del sistema operativo a
dispositivos de pequeño tamaño o sea trabajan
con netbooks, dispositivos móviles de Internet
(MID's en inglés) y según dicen también será
para los Set Top Boxes (STB's o receptores
decodificadores de TV). A partir de aquí fue
integrada en la versión Alfa de Constantine y
los paquetes Rawhide, pero con una particularidad, aquellos que quieran probar lo que da de
sí Moblin necesitarán descargar e instalar los
paquetes correspondientes a "Moblin Desktop
Environment" y posteriormente reiniciar el sistema escogiendo "Moblin User Experience".
Una cosita más, es del todo evidente que
se trata de una versión de pruebas, por lo tanto
ni que decir tiene que existe la posibilidad de
encontrarse con errores de funcionamiento.
•
•
•
Micrófono y altavoces o auriculares con
micrófono.
Conexión a Internet. Lo ideal es banda
ancha (no se admite GPRS en llamadas).
Driver de tarjeta de video compatible con Xv.
Requisitos de software:
•
•
•
•
•
Qt 4.2.1+
D-Bus 1.0.0
libasound2 1.0.12
PulseAudio 0.9.10+ (opcional)
PulseAudio 0.9.15+ (opcional, recomendado).
El paquete rpm está disponible en la página de
Skype: http://www.skype.com/intl/es/downlad/
skype/linux/.
Aquí descargamos la versión que pone
Fedora 10+, después cambiamos al directorio donde lo hemos descargado y ejecutamos el comando:
su -c 'yum localinstall
skype-2.1.X.XX...'
Comando que habrá que adecuar a la versión
evidentemente.
Linux+ 12/2009
12
2009-10-14, 17:05
Si no puedes leer el disco DVD
y no notas ningún tipo de deterioro
mecánico, por favor, pruébalo en al menos
dos unidades de disco diferentes.
12/2009
En caso de problemas, escribir a: [email protected]
13_pod_dvd.indd
11
2009-10-14, 18:16
diversión
Creación de Arte Digital
Processing:
Código abierto para la creación
de Arte Digital
Lino García Morales
[email protected]
Processing (http://www.processing.org/) es un lenguaje de programación de código abierto,
creado por Casey Reas y Ben Fry, para gente que desea programar imágenes, animaciones
e interacciones. Lo usan estudiantes, artistas, diseñadores, investigadores, y aficionados
al aprendizaje, elaboración de prototipos y producción. Aunque fue creado para enseñar
fundamentos de programación en un contexto visual en el Media Lab del MIT, por su uso,
versatilidad, potencia y acceso, se ha convertido en una herramienta de producción profesional.
Su comunicación con la plataforma Arduino y familia (http://www.arduino.cc/)(también de
código abierto) permite extender su interacción con un número ilimitado de dispositivos y la
construcción de verdaderas obras digitales interactivas.
P
rocessing se puede descargar gratuitamente para GNU/Linux, Mac OS X, y Windows desde
http://www.processing.org/download/. El padre directo de Processing es Diseño Por Números
de John Maeda (http://dbn.media.mit.edu/). El objetivo de
sus desarrolladores fue emular su simplicidad y enfocarlo
en la realización de imágenes, animación, e interacción.
Processing tiene claras influencias de PostScript y Java.
De hecho Processing es una especie de máquina virtual
cuyo código final se ejecuta en Java. Un lenguaje de scripting de muy alto nivel tan simple como BASIC o LOGO
que oculta la complejidad del Java que hay debajo. La API
(Application Program Interface) y la sintaxis son muy
simples y concisas; las operaciones que se usan comúnmente tienen, de hecho, nombres directos.
Entorno de desarrollo
las acciones más frecuentes y una serie de menús. Cuando
el programa se ejecuta, abre una ventana de proyección
(display) nueva.
Los programas creados con Processing se llaman
bocetos (sketches). Se escriben en el editor de texto con
todas las opciones comunes de cortar y pegar, buscar
y reemplazar, etc. El área de mensajes avisa de versiones
guardadas en disco , exportaciones y también muestra los
errores del código. Processing usa la consola para mostrar
textos incluyendo mensajes de error completos y también
de los programas mediante las funciones print() y println(). La barra de botones permite correr y parar programas,
crear un nuevo boceto, abrir, salvar y exportar.
•
La Figura 1 muestra el entorno de desarrollo de Proces- •
sing que consiste de un editor de código simple, un área •
de mensaje, una consola de texto, pestañas (tabs) para gestionar los archivos, una barra de tareas con botones para
14
14_15_16_17_18_Processing.indd
Run. Compila el código, abre una ventana de proyección, y hace correr el programa dentro. Mantén pulsada la tecla shift para Presentar en lugar de Correr.
Stop. Detiene un programa en ejecución.
New. Crea un boceto Nuevo (proyecto) en la ventana
en curso. Para crear un boceto nuevo en su propia
ventana, use File ->New.
Linux+ 12/2009
14
2009-10-14, 17:36
diversión
Creación de Arte Digital
Figura 1. Entorno de desarrollo de Processing (PDE, Processing Development Environment)
•
•
•
Open. Provee un menú con opciones para
abrir archivos desde un boceto, abrir un
ejemplo o abrir un boceto desde cualquier
lugar en el ordenador. Para reemplazar
el boceto de la ventana en curso abra el
boceto desde la barra de tareas mediante
File -> Open.
Save. Salva el boceto en curso en la localización (directorio) en curso. Si desea dar
al boceto un nombre diferente use File ->
Save As.
Export. Exporta el boceto en curso como
un Applet Java Applet integrado en un
archivo HTML. Cuando se abra la carpeta que contiene los archivos, pinche en
index.html para cargar el programa en el
navegador por defecto del ordenador. Mantenga pulsada la tecla shift para exportar
a una aplicación en lugar de a un applet.
Observe que al exportar un boceto borrará el contenido anterior de las carpetas
“applet” o “application.xxxx”.
Los comandos anteriores son los más utilizados pero existen una serie de comandos
adicionales repartidos en los cinco menús:
File, Edit, Sketch, Tools, Help. Estos menús
son sensibles al contexto; o sea que sólo están
disponibles aquellos elementos relevantes al
trabajo en curso.
Cuaderno de bocetos (Sketchbook)
Todos los proyectos de Processing se denominan bocetos. Cada uno tiene su propia carpeta. El programa principal de cada boceto
tiene el mismo nombre que la carpeta que lo
contiene. Por ejemplo, si la carpeta para el boceto se llama "Sketch_123", el archivo principal se llamará "Sketch_123.pde". La extensión del archivo PDE es el acrónimo de Processing Development Environment.
La carpeta de un boceto a veces contiene otras subcarpetas para archivos media
y bibliotecas (libraries) de código. Cuando se
añade un tipo de letra (Font) o imagen a un
boceto mediante "Add File..." desde el menú
Sketch, automáticamente se crea una carpeta
“data”. También es posible añadir archivos
a un boceto Processing arrastrándolo al editor
de texto. Cualquier archivo de sonido e imagen
arrastrado (dragged) a la ventana de aplica
ción se añade directamente a la carpeta “data”.
En esta carpeta deben estar todos los archivos
de datos entre los que se incluyen imágenes,
letras, sonidos y cualquier otro archivo. Todos
los bocetos cuelgan de la carpeta Processing
cuya localización depende del sistema operativo PC, Mac o Linux y de cómo están configuradas las preferencias. Para localizar esta
carpeta seleccione File->Preferences y busque por "Sketchbook location".
Listado 1. Ejemplo del modo Básico que
dibuja un rectángulo amarillo en la pantalla
Listado 3. Ejemplo del modo Continuo que
size(200, 200);
mouseX y mouseY). El bloque draw() corre
siempre hasta que el programa sea detenido,
por lo tanto potencia movimiento e interacción
background(255);
noStroke();
fill(255, 204, 0);
rect(30, 20, 50, 50);
dibuja rectángulos que siguen la posición del
ratón (almacenada en las variables del sistema
void setup() {
size(200, 200);
rectMode(CENTER);
Listado 2. Ejemplo del modo Continuo que
dibuja cuatro círculos en la pantalla y utiliza
una función a medida llamada circles(). Esta
función circles() no forma parte del lenguaje
Processing language. El código en la función
draw() sólo corre una vez debido a la senten-
noStroke();
fill(0, 102, 153, 204);
}
void draw() {
background(255);
rect(width-mouseX, height-
cia noLoop() llamada en setup()
mouseY, 50, 50);
void setup() {
}
size(200, 200);
noStroke();
background(255);
rect(mouseX, mouseY, 50, 50);
Listado 4. Ejemplo del listado 3 en modo Java
fill(0, 102, 153, 204);
public class MyDemo extends
smooth();
PApplet {
void setup() {
noLoop();
}
size(200, 200);
rectMode(CENTER);
void draw() {
noStroke();
fill(0, 102, 153, 204);
circles(40, 80);
}
circles(90, 70);
void draw() {
}
void circles(int x, int y) {
ellipse(x, y, 50, 50);
background(255);
rect(width-mouseX, heightmouseY, 50, 50);
ellipse(x+20, y+20, 60, 60);
rect(mouseX, mouseY, 50, 50);
}
}
}
Figura 2. Sistema de coordenadas de Processing
15
www.lpmagazine.org
14_15_16_17_18_Processing.indd
15
2009-10-14, 17:36
diversión
Creación de Arte Digital
Figura 3. A la izquierda la foto original y a la derecha la imagen que resulta en blanco y negro de eliminar la saturación en modo HSB (Hue, Saturation, Brightness). La imagen de Lena es un fragmento de
una fotografía reproducida en el número de noviembre (miss noviembre) de 1972 de la revista Playboy.
Sirve como imagen de prueba para los algoritmos de procesado de imagen; de hecho se ha convertido
de facto en un estándar industrial y científico, porque tiene de todo: alta y baja frecuencia, líneas horizontales, verticales y diagonales, etc.
Es posible que un boceto comparta varios
archivos que pueden ser archivos de texto
Processing (extensión .pde) o Java (extensión
.java).
Para crear un archivo nuevo pinche sobre
el botón flecha a la derecha de la pestaña de
archivos. Este botón da acceso a crear, borrar
y renombrar los archivos que componen el
boceto en curso. Es posible escribir funciones
y clases en archivos PDE nuevos y cualquier
código JAVA en archivos con extensión JAVA.
El trabajo con múltiples archivos facilita la
reutilización de código y subdividir los programas en sub-programas más pequeños.
Coordenadas
Processing utiliza un sistema de coordenadas Cartesiano con el origen en la esquina
superior izquierda. Si el programa es de 320
píxeles de ancho por 240 píxeles de alto, la
coordenada [0, 0] es el píxel de la esquina superior izquierda mientras que el último píxel
visible corresponde a la posición [319, 239].
Processing simula dibujos en tres dimensiones. En la superficie de la imagen la coordenada z es cero, los valores negativos de z se
mueven hacia atrás en el espacio. Al dibujar
en 3D la posición de la “cámara” corresponde
al centro de la pantalla.
Modos de Programación
Processing permite programar a tres niveles
de complejidad: Básico, Continuo y Java. La
Figura 4. A la izquierda, imagen de Lena en blanco y negro; y a la derecha la imagen con realce cuadrá- gente que programa, por primera vez debe
tico de contraste
empezar con el modo Básico, aprender las
coordenadas, variables y bucles antes de seguir con los modos Continuo y Java.
Básico
Este modo permite dibujar imágenes estáticas
y aprender los fundamentos de la programación. En este modo las líneas de código tienen
representación directa en la pantalla.
Continuo
Figura 5. Selección de algunas imágenes del concurso Tiny Sketch http://www.rhizome.org/tinysketch/)
16
14_15_16_17_18_Processing.indd
En este modo se deben crear dos funciones.
La función setup(), desde donde se controlan
las propiedades de visualización, como el tamaño del lienzo (canvas) digital, la velocidad
de reproducción (frame rate) y quizá variables como ancho de bordes (stoke-weight)
o color de fondo (background-color).
Y la función draw(), que controla el comportamiento de cada trama en la animación. La
función setup() sólo ejecuta una vez mientras
que draw() funciona en un bucle continuo, según la velocidad programada, a menos que use
el comando exit() o noLoop(), en setup().
Linux+ 12/2009
16
2009-10-14, 17:36
diversión
Creación de Arte Digital
Listado 5. Ejemplo de un círculo azul con borde blanco que sigue al cursor del ratón sobre un fondo
gris con el generador gráfico OPENGL
import processing.opengl.*;
// Global variables
Luego se pueden crear todas las estructuras adicionales necesarias para escribir funciones a medida y clases que usen los eventos
del ratón y teclado.
Java
float radius = 50.0;
Éste es el modo más flexible y permite escribir programas completamente en Java desde
dentro del entorno de Processing. Este modo
es para usuarios avanzados sólo. En este modo
el programador debe comunicarse apropiadamente con el servidor PApplet por su cuenta.
int X, Y;
int nX, nY;
int delay = 16;
void setup(){
size(200, 200, OPENGL);
strokeWeight(10);
frameRate(15);
Modos de Entrega
X = width/ 2;
Y = height/ 2;
nX = X;
nY = Y;
}
void draw(){
radius = radius + sin(frameCount/ 4);
// Track circle to new destination
X += (nX- X)/ delay;
Y += (nY- Y)/ delay;
background(100);
// Fill canvas grey
fill(0, 121, 184);
// Set fill-color to blue
stroke(255);
// Set stroke-color white
ellipse(X, Y, radius, radius);
// Draw circle
}
Un programa Processing tiene cuatro modos
de entrega (rendering) en dependencia de la biblioteca de dibujo que utilice: Java 2D, una máquina 3D personalizada llamada P3D, y a través de OPENGL mediante la interfaz JOGL,
una máquina 2D personalizada llamada P2D
y PDF, una máquina 2D que dibuja en un
archivo acrobat. El modo de entrega se especifica en la función size().e.g., size(200, 200,
P3D). Se ha hecho un gran esfuerzo en que el
comportamiento del lenguaje Processing sea
similar independientemente de su modo de
entrega pero existen algunas inconsistencias.
Algunos ejemplos
// Set circle's next destination
void mouseMoved(){
nX = mouseX;
nY = mouseY;
}
Listado 6. Ejemplo de procesado de imagen. Se lee la foto de Lena en formato JPG en la imagen
a, se le quita el color en la imagen b y se muestran las dos
float h, s, v;
color c;
int sizeImage = 512*512;
size(1024, 512);
colorMode(HSB, 360, 100, 100);
PImage a = loadImage("lena.jpg");
PImage b = createImage(width/2, height, RGB);
a.loadPixels();
b.loadPixels();
for (int i = 0; i < sizeImage; i++) {
h = hue(a.pixels[i]);
s = saturation(a.pixels[i]);
v = brightness(a.pixels[i]);
// Make a new color with an alpha component
c = color(h, 0, v);
b.pixels[i] = c;
}
b.updatePixels();
image(a, 0, 0, 512, 512);
image(b, 512, 0, 512, 512);
Processing es muy potente para crear y procesar imágenes debido a la gran cantidad de
sentencias que tiene dedicadas a procesar un
píxel. El píxel es la unidad mínima de información de una imagen. Los atributos de un píxel
dependen del modo de color, establecido con
el comando colorMode(). Processing utiliza
dos modos de color: RGB y HSB. RGB, de las
siglas en inglés de "Red, Green and Blue", es
el sistema de síntesis aditiva del color más popular que parte de los tres colores primarios o
básicos: rojo, verde y azul. Sin embargo HSB,
(siglas en inglés de "Hue, Saturation and Brightness"), es un modo alternativo que se basa
en color o tonalidad (normalmente expresado
en grados de 0º a 360º), la saturación o grado
de negro y blanco (expresado en porcentaje, de
0% a 100%) y el brillo o intensidad (expresado
igualmente en porcentaje, de 0% a 100%). El
modo de color se elige según su conveniencia
para el tipo de procesado.
Para convertir una imagen en color a una
imagen en blanco y negro basta con reducir
la saturación a 100% de negro, lo que es lo
mismo que 0% de blanco.
El listado 7 muestra el mismo proceso desde una webcam. Observe que la mayoría de
las líneas son las mismas; excepto el tipo de la
variable que recoge la imagen y la necesidad de
17
www.lpmagazine.org
14_15_16_17_18_Processing.indd
17
2009-10-14, 17:36
diversión
Creación de Arte Digital
Listado 7. Ejemplo de procesado de imagen
desde una webcam
Listado 8. Ejemplos de modificación de contraste a la imagen de Lena
float h, s, v, w;
import processing.video.*;
color c;
float h, s, v;
int sizeImage = 512*512;
int sizeImage = 512*512;
colorMode(HSB, 360, 100, 100);
color c;
Capture a;
size(1024, 512);
PImage a = loadImage("lena.jpg");
PImage b = createImage(width/2, height, RGB);
PImage b;
void setup() {
PImage d = createImage(width/2, height, RGB);
size(1024, 512);
colorMode(HSB, 360, 100, 100);
a = new Capture(this, width/2,
height, 12);
b = createImage(width/2,
a.loadPixels();
b.loadPixels();
d.loadPixels();
for (int i = 0; i < sizeImage; i++) {
h = hue(a.pixels[i]);
s = saturation(a.pixels[i]);
height, RGB);
v = brightness(a.pixels[i]);
}
void draw() {
// Make a new color with an alpha component
if(a.available()) {
c = color(h, 0, v);
b.pixels[i] = c;
a.read();
a.loadPixels();
// usual brightness transformation
b.loadPixels();
//
for (int i = 0; i <
sizeImage; i++) {
h = hue(a.pixels[i]);
s =
saturation(a.pixels[i]);
v =
brightness(a.pixels[i]);
// Make a new color with
// an alpha component
w = 100- v;
// inverse
w = pow(v,2)/ 100;
// cuadratic
//
w = sqrt(100* v);
// square root
//
w = log(1+ v)/log(1+ 100)* 100;
// natural logaritmic
d.pixels[i] = color(h, 0, w);
}
b.updatePixels();
d.updatePixels();
image(b, 0, 0, 512, 512);
image(d, 512, 0, 512, 512);
c = color(h, 0, v);
b.pixels[i] = c;
Fry, y disfrutar de un vídeo (http://vimeo.com/
1663988, Roots Multi Touch Tangible Installab.updatePixels();
tion Teaser) que ilustra la verdadera potencia
image(a, 0, 0, 512, 512);
de
Processing: la interactividad.
image(b, 512, 0, 512, 512);
Una prueba del impacto de Processing es
}
el
esfuerzo
que se está haciendo para portarlo
}
a otros lenguajes como Processing.js (iniciado
por John Resig y continuado por Al MacDoprogramar en modo Continuo (a 12 imágenes nald) y Ruby-Processing (creado por Jeremy
por segundo, en este ejemplo).
Ashkenas). Además existen versiones para
El listado 8 ilustra diferentes maneras de
modificar el contraste de una imagen.
}
Sobre el autor
Conclusiones
En este artículo sólo se han utilizado funciones
relacionadas con la imagen pero Processing es
mucho más que eso. Cuenta con potentes bibliotecas para manipular sonido y para interactuar con el mundo real a través de plataformas
de código abierto compatible con Arduino (que
además utiliza una sintaxis muy similar, por lo
que facilita enormemente los desarrollos). En el
enlace http://rhizome.org/editorial/2960#more
de la plataforma RHIZOME puede encontrar
una entrevista a los autores, Casey Reas y Ben
18
14_15_16_17_18_Processing.indd
Scala, Python, ActionScript, y quién sabe cuántas estén por venir. El presente del Arte Digital
está garantizado. Processing permite, de manera sencilla y gratuita, acercarse a cualquier
aficionado al mundo de la programación e interactividad desde cualquier sistema operativo.
El enfoque democrático que potencia esta herramienta influirá sin duda positivamente en el
mundo Linux. Ahora todo está en manos de los
límites de la imaginación y la creatividad.
Lino García Morales – graduado en Ingeniería en Control Automático, Máster en Sistemas y Redes de Comunicaciones y Doctor por la Universidad Politécnica de Madrid.
Ha sido profesor en el Instituto Superior de Arte de La Habana, la Universidad Pontificia
“Comillas” y la Universidad Menéndez Pelayo.
Actualmente es profesor de la Escuela Superior de Arte y Arquitectura y de la
Escuela Superior Politécnica de la Universidad Europea de Madrid y Director del
Máster Universitario en Acústica Arquitectónica y Medioambiental. Músico, escritor
y científico, lidera un grupo de investigación interdisciplinar en la intersección Arte,
Ciencia y Tecnología. Ha disfrutado de Becas por la Agencia Española de Cooperación
Internacional, FUNDESCO, el Consejo Superior de Investigaciones Científicas (CSIC)
y la Universidad Politécnica de Madrid.
Linux+ 12/2009
18
2009-10-14, 17:36
19_rekl_nomalina.indd
1
2009-10-15, 12:42
diversión
Reproductores de Audio
Reproductores
de Música
para GNU/Linux
Jorge Emanuel Capurro
[email protected]
Existen infinidades de reproductores de música para GNU/Linux. Este artículo pretende
analizar a justo juicio cuál es la mejor alternativa que se adapte mejor a nuestras
necesidades al momento de reproducir audio en nuestra PC, por supuesto sin resignar
ningún aspecto de interés para nosotros, haciendo un balance parcial entre rendimiento,
usabilidad, estabilidad y funcionalidad.
S
in duda el mercado que nos ofrece GNU/
Linux para reproducir audio es sumamente
grande. Podremos optar desde simples reproductores de MP3, hasta completos programas
que se dedican a ordenar, registrar y analizar el uso que le
damos a nuestra música. Cada elección depende del uso
que le demos a diario. Esta comparativa pretende analizar la oferta que nos provee GNU/Linux y así poder,
elegir un reproductor que se adapte justamente a nuestras
necesidades.
Obviamente, para conseguir esto necesitamos conocer
cuáles son los aspectos fundamentales a tener en cuenta
a la hora de elegir un buen reproductor de música.
Aspectos a tener en cuenta
A continuación se presenta una lista con los aspectos
a considerar a la hora de elegir un reproductor de audio
que se adecue a nuestras necesidades.
Necesidad: En un principio, tendremos que formularnos las siguientes preguntas: ¿Qué uso en particular le voy
a dar a mi reproductor de audio?, ¿uso hogareño?, ¿uso
20
20_21_22_23_24_25_Musica.indd
profesional? Lisa y llanamente al grano: de nada sirve
tener un reproductor de música que busque las caratulas
de nuestros CDs mediante conexión a Internet si, por
ejemplo, no poseemos conexión a Internet. Tampoco sirve
tener un reproductor de música con infinidades de opciones de ecualización, si simplemente queremos escuchar
audio y nada más.
Cuando tengamos las respuestas a estas preguntas, sin
duda habremos descartado muchas alternativas.
Recursos: El consumo de recursos es un tema esencial
para una buena elección. Si tenemos la costumbre de escuchar música mientras trabajamos con la PC, no querríamos
que el solo hecho de escuchar música consuma más del
50% de nuestros recursos. Este aspecto está relacionado
directamente con la necesidad que tenemos cada uno.
Interfaz: ¿GNOME o KDE? Para muchos usuarios, el
aspecto de una aplicación es un punto a favor al momento
de elegirla. Aunque este aspecto no sea de lo más importante, siempre es bueno tenerlo en cuenta.
Compatibilidad: Este aspecto sin duda es uno de los
más importantes. La compatibilidad. Esto da la capacidad
Linux+ 12/2009
20
2009-10-14, 17:24
diversión
Reproductores de Audio
Muchos dicen que Amarok es un reproductor
de música inteligente ¿Por qué? Sencilla es
la respuesta: Amarok “sabe” qué música escuchamos más a menudo y cual no y así, por
ejemplo, al elegir “Modo Aleatorio”, él sabrá
que es lo que más nos gusta escuchar. Esta es
una de las tantas características que destacan
a Amarok y lo posicionan sobre la elección
de unos de los reproductores de música más
usados.
Como todo, Amarok también posee defectos. Podemos mencionar algunos puntos
en contra:
•
•
•
Figura 1. Interfaz de Amarok. Sin duda muy completa e intuitiva
que tiene el reproductor para soportar distintos formatos de audio. Si tenemos audio en
formato OGG, nuestro reproductor elegido
tendrá que soportar dicho formato, sino prácticamente no serviría de nada.
Adaptabilidad: Podremos elegir un reproductor que sea excelente, pero si el mismo
es difícil de manejar, no nos adaptamos a él
y nos resulta incómodo, seguramente no nos
servirá de nada. Sin duda, este aspecto se va
dando con el tiempo, pero no por ello perderlo de vista.
Una vez establecidos estos parámetros
correctamente, estamos en condiciones de
abordar una buena elección de reproductor
de audio. Empecemos con el padre de los
reproductores: Amarok.
TABU, reproductor de audio
minimalista
Reproductores de audio libres para
GNU/Linux hay muchos, pero TABU tiene algo que me llamó mucho la atención,
su minimalismo. Muy sencillo, nada dotado de montones de botones y menús
que realmente se usan poco y nada.
Todo lo contrario, TABU simplemente
nos muestra una lista de reproducción,
un botón para agregar canciones, otro
para borrarla, uno para darle Play, y por
último, dos más para adelantar o retroceder en la lista de temas. Sin dudas, es
un reproductor que no hay que perderlo
de vista si lo que se busca es escuchar
música y nada más.
Puede descargarse desde http://
www.kalmbach.com.ar/
Amarok: mucho más
que un reproductor de audio
Si hablamos de excelencia en reproductores
de audio, sin duda estaremos hablando de
Amarok. Poseedor de una interfaz agradable,
completa y simple a la vez, sin duda Amarok
posee funcionalidades que ningún otro reproductor de música posee.
Dentro de sus principales características
se encuentran:
• Es libre, de código abierto y gratuito.
• Capacidad de indexar las colecciones de
música en una base de datos MySQL,
SQLite o PostgreSQL.
• Navegación en reproductores portátiles
de música digital como iPod, dispositivos USB con sistema de archivo FAT.
• Posibilidad de descargar letras de Internet de diferentes sitios y ser guardadas.
• Edición de etiquetas para diferentes formatos de audio (WMA, MP4, AAC,
MP3, Real Media).
• Escuchar radios de Last.fm
• Provee información de los artistas a través de Wikipedia, en el idioma elegido.
• Administrador de portadas integrado con
la descarga automática de la portada del
álbum desde Amazon.
• Sistema doble de puntuación de música,
uno automático y otro manual. El automático tiene en cuenta el tiempo y el número
de veces que se reproduce cada canción.
• Ecualizador gráfico de 10 bandas.
• Asistente inicial para una sencilla configuración.
• Mover y renombrar ficheros basados en
etiquetas o situación en la colección.
• Filtrado de la colección.
• Soporte de skins.
Alto consumo de recursos,
Mala integración con Gnome,
Alto consumo de espacio en disco.
También, desde el punto de vista donde se
analice, podemos considerar que la infinidad
de funciones que posee sea un punto a favor o
un punto en contra, dependiendo de la necesidad que se le vaya a dar.
Sin lugar a dudas, Amarok es el reproductor de música más popular dentro del mundo
GNU/Linux y es una buena elección sin lugar a dudas.
EarCandy, control de
volumen inteligente
EarCandy es una pequeña aplicación
que trabaja con PulseAudio y que permite gestionar el volumen del sistema
de una forma inteligente. ¿Por qué inteligente? Porque así lo indican en la página oficial: “Silenciará tu música cuando comience una película o un vídeo de
YouTube, y también silenciará el vídeo
cuando te entre una llamada de Skype“.
Sin duda, una simple utilidad que es
más que cómoda.
El proyecto está disponible para
infinidades de distribuciones, gracias
a que se encuentra disponible su código fuente.
Para instalarlo en Ubuntu:
•
Agregamos este repositorio:
deb http://ppa.launchpad.net/
earcandy-devel/ppa/ubuntu
•
jaunty main
Por último, actualizamos los repositorios e instalamos:
udo apt-get update && sudo
apt-get earcandy
21
www.lpmagazine.org
20_21_22_23_24_25_Musica.indd
21
2009-10-14, 17:24
diversión
Reproductores de Audio
•
•
•
•
•
•
•
•
•
Permite escuchar diversas radios de Internet,
Transferencia de música desde y hacia
iPod y reproductores de música USB,
Muestra tapa del álbum y letras de canciones descargadas de Internet,
Reproduce y graba CDs de audio,
Descarga automática de podcasts de audio,
Tiene listas de reproducción dinámicas y
se pueden crear nuevas listas fácilmente,
Posee sistema de puntuación,
Almacena el número de reproducciones
y el momento de la última reproducción,
Notificación con libnotify.
Como punto en contra se puede mencionar
el pobre sistema de plugins que posee, el
cual resigna la extensibilidad por parte del
usuario.
Sin duda Rhythmbox es una excelente
Figura 2. Rhythmbox tiene una interfaz y funcionalidad inspirada en el iTunes de Apple
alternativa, sobre todo para ambientes que
XMMS: el Winamp
cual es un fork de XMMS. También tiene posean GNOME.
de GNU/Linux
un aspecto similar al viejo Winamp y por
XMMS (X Multimedia System) es un exce- supuesto, también soporta skins. La mayor Muine: sencillez extrema
lente reproductor multimedia que funciona diferencia que se puede mencionar entre Muine se resume en dos palabras: sencillez
en casi todos los sistemas, pero tiene algu- XMMS y BMP es las disponibilidad de plu- extrema. Es tan sencillo que no existe una
biblioteca por la que uno pueda moverse,
nos elementos especiales que sólo funcionan gins que ambos reproductores usan.
en Linux. XMMS puede reproducir archivos
También, siguiendo con interfaces simi- sino que al importar una carpeta que contiemultimedia como MP3, MOD, WAV y otros lares al Winamp, se encuentra Audacius. Este ne nuestra música se nos presenta con una
con el uso de plugins. Tiene una interfaz bas- último admite los mismos skins del Winamp, lista de los álbumes o canciones contenidas
tante limpia y agradable, similar a las viejas por lo cual puede variar su aspecto amplia- por lo que no parece conveniente para una
versiones del Winamp. Así que los usuarios mente. Sus características no tienen diferen- colección de música de un tamaño mínimaque vengan de Windows y hayan usado Win- cias significativas con respecto a XMMS mente considerable. Tampoco posee notificaciones, ni mucho menos plugins. Las
amp se sentirán como en casa.
y BMP.
teclas multimedia para Muine parecieran
Últimamente también se ha hecho muy
no existir.
popular el BMP (Beep Media Player), el Rhythmbox:
da mucho y pide poco
Todas estas características no son tan maRhythmbox es un gran reproductor de audio las como pueden parecer. ¿Para qué tantas oppara GNU/Linux. Es libre, gratis, y permite ciones? Podrán decir aquellos que quizás lo
escuchar y organizar fácilmente la música único que desean es escuchar música cargada
mediante listas de reproducción. Inspirado desde su lista de temas favoritos, sin mayoen el iTunes de Apple, funciona muy bien res complicaciones. Muchos lectores seguracon el escritorio GNOME, ya que en el mis- mente formarán parte del grupo de usuarios
de “Aplicaciones Minimalistas”. Si eres uno
mo viene por defecto.
Algunos dicen que “si tenemos Amarok de ellos, sin duda Muine te será de mucha
para KDE, tenemos Rythmbox para GNO- utilidad.
ME”. Si bien esto tiene algo de cierto, la realidad es que Rythmbox posee una interfaz un Banshee: un reproductor
poco más sobria que Amarok. Obviamente de música más…
esto no quiere decir que carezca de funcio- Banshee es un programa para gestionar y escuchar nuestra colección musical. A primera
nalidades.
Es más, Rhythmbox se destaca por las vista es muy similar a Rhythmbox, pero luego
de explorar un rato por sus menús, observasiguientes funcionalidades que posee:
mos que si bien podemos gestionar nuestros
álbumes, el programa no está tan desarrolla• Fácil de usar,
do, lo cual no quiere decir que sea malo.
• Motor de búsqueda y selección,
Además de poseer la funcionalidad bá• Reconoce distintos formatos de audio
Figura 3. TABU: reproductor de música minimalista
sica de reproducir música, también puede
con soporte de GStreamer,
22
20_21_22_23_24_25_Musica.indd
Linux+ 12/2009
22
2009-10-14, 17:24
diversión
Reproductores de Audio
noticias, fotos, vídeos, etc. Y LyricMaster,
la cual muestra la letra de la canción que se
está reproduciendo, dando la posibilidad de
guardarla.
Algunas características de Songbird se
mencionan a continuación:
•
•
•
•
•
•
•
•
Figura 4. Si se busca un reproductor simple, Muine es una perfecta elección
importar y grabar CDs de audio, ejecutar
y sincronizar música con el iPod y compartir
música con facilidad. Banshee también tienen la capacidad de presentación de informes sobre las canciones al usuario, listas de
reproducción inteligentes, recomendaciones
de música, grabar audio y CD de MP3
y mucho más...
Como punto en contra tenemos que no
se puede examinar la biblioteca por género,
artista o álbum, sino que se muestra en la lista
de reproducción toda la música encontrada
en la carpeta importada, lo que se traduce en
un desorden asegurado, lo cual es un gran inconveniente para aquellos que importen una
cantidad de música considerable a la lista.
Otro punto en contra es el pobre sistema de
plugins disponible.
En conclusión, se puede decir que Banshee es la alternativa perfecta para quienes
buscan algo no tan básico como Muine, pero
tampoco tan complejo como Amarok.
del código fuente de Firefox y de VLC), lo
que permite reproducir contenido multimedia
directamente desde algunas páginas.
Tiene otras características como ser
multiplataforma (se encuentra disponible
para otros SO), reproduce gran cantidad
de formatos de audio, interactúa con radios
por Internet, listas personalizadas e interfaz
con pestañas que facilita su uso, lo cual es
imprescindible.
Como no podía ser de otra manera, al
pertenecer a la familia Mozilla, se caracteriza
por poder agregarle extensiones y skins. Dos
de las extensiones más famosas son mathTape, la cual brinda información del artista,
•
Es Multiplataforma (GNU/Linux, Windows, MacOS),
Reproduce MP3, AAC, Ogg Vorbis,
FLAC, Windows Media Audio, FairPlay y Windows Media DRM,
Posibilidad de personalizar la interfaz
a tu gusto mediante paneles e incluso
optar por la vista “mini”,
Incluye un navegador web,
Ecualizador,
Crear y editar listas de reproducción,
Editar tags,
Descarga automática de tapa de los
discos,
Integración con Last.fm, Shoutcast,
Emusic, etc.
Obviamente, estas son solo algunas de las
innumerables características de Songbird.
Como punto en contra considerable, es el alto
consumo de recursos, el cual está dado en
función a las características que este programa brinda. Sin duda, un digno competidor de
Amarok.
MOC: música desde
la consola
Sin lugar a dudas, las aplicaciones de consola se destacan por su bajo consumo de
recursos de sistema. Algunas de ellas también se destacan por su dificultad de uso,
Songbird:
el gran rival de Amarok
Basado en la plataforma XULRunner de Mozilla, Songbird es verdaderamente un tremendo reproductor y organizador de tus archivos
de música.
Sin duda alguna es uno de los reproductores de audio más completos y estéticamente
más bonito. Aparte de ser un reproductor de
audio más que completo, Songbird incorpora
también un navegador web y puedes hacer
streaming con él (puesto que contiene parte Figura 5. Pantalla principal de Banshee
23
www.lpmagazine.org
20_21_22_23_24_25_Musica.indd
23
2009-10-14, 17:25
diversión
Reproductores de Audio
•
•
•
•
Obtiene información sobre el artista
y álbum a través de Wikipedia,
Puede soportar iPod (requiere pythongpod),
Listas de reproducción con pestañas,
Listas negras de las pistas de la biblioteca musical.
Si bien el proyecto va por buen camino al
tratar de imitar a Amarok, a Exaile todavía le
falta mucho camino por recorrer para poder
ser el “Amarok de GNOME”.
MPlayer y VLC: más que simples reproductores de música
Figura 6. Songbird, el perfecto rival de Amarok
lo cual juega en contra para un usuario hogareño. MOC (Music On Console) fusiona
la facilidad de uso con el bajo consumo de
recursos, lo cual la convierte en una aplicación elegida entre muchos usuarios de
GNU/Linux. El mismo, fue diseñado para
explotar estas dos características, sin dejar
de ser poderoso.
Implementado bajo la librería ncurses,
MOC posee una interfaz de consola simple
e intuitiva.
Soporta formatos de archivo como MP3,
OGG Vorbis, FLAC, WAVE, Speex, Musepack (MPC), AIFF, AU, WMA. Continuamente, el proyecto se encarga de agregar más
soporte de archivos. Sin duda, MOC no debe
ser prejuzgado por los usuarios por ser una
aplicación de consola, pensando que la misma tendrá un manejo difícil y poco intuitivo,
sino todo lo contrario.
Puede instalarse desde Ubuntu simplemente con sudo apt-get install moc.
Como fiel competidor en el área de reproductores de música de consola, se encuentra mp3blaster. Este reproductor es igual de
intuitivo que MOC, con la salvedad de que
posee listas de reproducción personalizadas,
un ecualizador mínimo, conversor de WAV
a MP3 y muchas características más.
Puede instalarse mediante sudo apt-get
install mp3blaster.
Exaile: Amarok con GTK+
Exaile es un reproductor de música para sistemas basados en Unix y que se intenta asemejar al Amarok de KDE, pero basándose en
GTK+ en lugar de QT.
Características incluidas:
•
•
•
Extrae automáticamente pistas del álbum,
Manipulación de grandes bibliotecas de
música,
Obtiene las letras de las canciones a través de Internet,
Figura 7. mp3blaster es una de las mejores alternativas de reproductores de música de consola
24
20_21_22_23_24_25_Musica.indd
Muchos usuarios prefieren eligen aplicaciones las cuales puedan desarrollar varias
tareas a la vez. Claros ejemplos son MPlayer
y VLC, los cuales no son simples reproductores de música, sino que además pueden reproducir vídeo.
Ambos se encuentran liberados bajo Licencia GPL, además de tener asombrosas características que los destacan como los reproductores multimedia por excelencia.
Mplayer: Sin duda, MPlayer es realmente
uno de los mejores reproductores de multimedia.
El reproductor puede funcionar en la mayoría de las plataformas, incluyendo Linux,
Windows, MacOS, y hasta en la mismísima
consola de videojuegos Nintendo Wii.
Se destaca por tener infinidades de codecs
de audio y vídeo, como así también características sorprendentes, como es la reproducción de vídeo por consola, mediante caracteres ASCII.
Posee un gran soporte de subtítulos, como así también, la posibilidad de modificar
su apariencia mediante skins.
Trae por defecto un GUI hecho en GTK+,
gmplayer, aunque existen también algunos
otros GUI's como por ejemplo KMPlayer, el
cual está hecho en Qt.
En su web oficial, pueden verse las
infinidades de bondades de este increíble reproductor multimedia. Web oficial: www.
mplayerhq.hu
VLC: Es un excelente reproductor multimedia. Gracias al gran soporte de codecs de
audio, lo hace perfecto para reproducir cualquier archivo de este tipo. Prácticamente, no necesita codecs adicionales para reproducir audio
o vídeo. Tiene la ventaja de ser multiplataforma, soportando versiones para GNU/Linux,
Windows, MacOS, entre muchos otros.
También, VLC se distingue del resto porque puede ser utilizado como un servidor de
Linux+ 12/2009
24
2009-10-14, 17:25
diversión
Reproductores de Audio
Sobre el autor
Jorge Emanuel Capurro es estudiante de
la Tec. Superior en Programación, carrera dictada en la Universidad Tecnológica
Nacional – Facultad Regional Haedo,
provincia de Bs.As., Argentina. Principalmente, su área de investigación se centra en el Estudio de Sistemas Operativos
de tipo UNIX y de la programación bajo
dicha plataforma.
Es el creador del proyecto IDEas
(http://ideasc.sourceforge.net), que es el
primer frontend desarrollado bajo Gambas del compilador gcc (http://gcc.gnu.
org), que se utiliza con fines didácticos.
Figura 8. Reproductor de música Exaile
streaming: esto es, transmitir vídeo o audio
mediante Internet.
Otra de las sorprendentes características de
VLC es su capacidad para trascodificar al vuelo
(on the fly transcoding), es decir, convertir un
formato de vídeo que está siendo reproducido,
en otro formato de vídeo, con el fin de que ocupe menos en el disco duro, o para guardar un
vídeo que estamos viendo desde Internet.
Otras Alternativas
•
•
•
•
•
Listen: escrito en Python. Soporta ogg,
flac, mpc, mp3, mp4, m4a.
ncmpc: cliente de Music Player Daemon
con interfaz ncurses.
Sonata: otro elegante reproductor de música GTK+. Es gratuito.
CoolPlayer: otra alternativa similar al
Winamp. Soporta MP3 y OGG.
Cdcd: otro reproductor de música de
consola.
Existen muchas más alternativas conocidas Conclusión
(y no tanto) para reproducir música en GNU/ En fin, la conclusión final a dar está dada en
Linux. A continuación, se describen breve- las características de cada reproductor que
más se adecuen a nuestras necesidades. Comente:
mo conclusión global, podemos decir que és• Noatun: es el reproductor de música ta es más que reconfortante. La gran cantidad
predeterminado de KDE. Incluye listas de programas de reproducción de música es
impresionante y la mayoría, de gran calidad.
de reproducción y extensiones.
• JuK: administra medios, listas de repro- Simplemente, nos quedará probar aquellos
ducción y etiqueta los archivos de música.
• GMPC (Gnome Music Player Client):
interfaz para el Music Player Daemon.
Figura 9. Pantalla principal de Mplayer. Simple,
pero sin duda, potente
Actualmente se desempeña laboralmente como programador para la
empresa Argentina VATES S.A. “Ingeniería de Software – CMMI 5” (http://
www.vates.com/) participando activamente en proyectos de la Software Factory. Paralelamente, también se encuentra editando un libro dedicado a la Programación de Sistemas GNU/Linux.
programas que creemos que cubran nuestras
necesidades, y finalmente decidirnos por uno.
Seguramente, muchos de nuestros lectores ya
tienen un reproductor de música instalado
con el cual están acostumbrados. Tal vez,
puede ser el mejor para ellos, pero nunca hay
que subestimar a otros proyectos y siempre
hay que darles una oportunidad, para que los
mismos puedan seguir creciendo.
Figura 10. Escena de la película “Big Buck Bunny" reproduciéndose en VLC
25
www.lpmagazine.org
20_21_22_23_24_25_Musica.indd
25
2009-10-14, 17:25
diversión
En Linux también se juega
En Linux también
se juega
Francisco Javier Carazo Gil
[email protected]
... y mucho, podría ser la continuación del título de este artículo. Hace ya mucho que Linux dejó de
ser un sistema operativo meramente profesional o de “expertos” para convertirse en un sistema
operativo de escritorio, listo para ser utilizado por todo tipo de usuarios. Aunque su difusión todavía
no ha conseguido los niveles necesarios para ver juegos comerciales en las grandes superficies
con el logo de Linux, sí es cierto que desde un comienzo en el que jugar en Linux se limitaba a un
reducido grupo de juegos simples, en la actualidad tenemos un catálogo de posibilidades que nada
tiene que envidiar a cualquier otro sistema operativo, véase Microsoft Windows.
E
n un comienzo, como todos ya sabréis, Linux fue creado por un grupo de expertos de
informática que cuidaron poco la apariencia
gráfica o las aplicaciones dedicadas al ocio.
Con el tiempo, se ha ido adaptando más y más al mercado
de escritorio y a día de hoy está al nivel, o por encima,
de los sistemas operativos más amigables que hay en el
mercado. Sin embargo, la marca del pasado podríamos
decir que es profunda y todavía es más que normal que la
mayoría no conozca bien a Linux. Cuando digo no conozca bien no me refiero sólo a que no sepan de qué se trata,
sino que algunos saben de qué se trata pero ignoran ciertos
temas como la facilidad para jugar con él y creen que sigue
siendo un sistema operativo en consola que poco tiene que
ofrecer al gamer.
Dificultades
Las dificultades son mayores en un campo como el de los
videojuegos que en otros como, por ejemplo, en el de la programación en el que Linux ha superado a sus rivales ostensiblemente. Factores negativos hay muchos. Para comen-
26
26_27_28_29_30_31_32_33_Juegos_Linux.indd
zar, el mundo del videojuego es un mundo multidisciplinar
en el que además de expertos en informática, también son
necesarios artistas gráficos o músicos, por poner un ejemplo. Sin poner una motivación económica por delante, es
más complicado introducir en este mundo del software
libre a personas que no provienen de las ciencias de la
computación.
Por otro lado, el soporte hardware para Linux ha sido
deficitario hasta hace no mucho. Sin controladores tridimensionales, ni siquiera los juegos comerciales podían
ejecutarse convenientemente. Aparte, estos juegos comerciales, no suelen sacar versiones para Linux por varias razones. Pueden estar implementados con DirectX (o derivados) como es bastante frecuente y por lo tanto son imposibles de compilar para Linux. También es posible que la
empresa desarrolladora no quiera hacer el esfuerzo de desarrollar una versión para Linux cuando el mercado objetivo es bastante reducido. Además el ambiente profesional
que siempre ha rodeado al sistema operativo no ha hecho
que el lanzamiento de juegos haya creado furor en torno al mismo.
Linux+ 12/2009
26
2009-10-15, 12:50
diversión
En Linux también se juega
Esta clasificación quizás no sea la más correcta
de todas las posible, pero sí nos deja diferenciar tres grandes grupos de juegos que comparten características como los pasos a seguir
para instalar o para conseguirlos y un grupo
de programas que nos permiten ejecutar programas, y por lo tanto juegos, de otras plataformas.
Antes de continuar recomendaros que le
echéis un vistazo a la instalación de los controladores de aceleración tridimensional de
vuestro sistema y del sonido.
Juegos libres
Figura 1. Open Arena
Hay más factores en contra y aunque no
me quiero poner pesado ni ser pesimista, creo
que todos debemos ser objetivos y voy aunque
sea a comentarlos. Sigamos, existe una cantidad de distribuciones y configuraciones posibles que crean más dificultades a los desarrolladores de videojuegos. Y para terminar, aunque sea quizás un poco subjetivo, la persona
que sólo utiliza el ordenador para jugar, será la
última que decida migrar a otro sistema operativo distinto de Windows porque en realidad
Windows le da todo lo que necesita.
verdad que la compatibilidad plena aún no está
conseguida, pero con sólo ver el número de
versión de Wine estable liberado hasta el momento, la 1.0.1 (en el momento de escribir estas
líneas), ya sabréis que a día de hoy es un software maduro y plenamente funcional.
De todos estos tipos de juegos, que dividiremos en tres bloques:
•
•
•
Nuevos tiempos
Juegos libres,
Juegos propietarios que ejecutan directamente en Linux,
Juegos propietarios que necesitan Wine
para ejecutarse,
Emuladores.
Sin embargo, las cosas han cambiado mucho •
en los últimos años. Cada mes comprobaréis
en la sección de juegos de esta misma revista
la cantidad, calidad y variedad de los juegos
libres disponibles no sólo para Linux, sino
para todas las plataformas. También son cada
día más numerosas las compañías que publican sus juegos compatibles con Linux, como
puede ser el caso por ejemplo de Vendetta Online (como podéis ver en este mismo número)
y por último el detalle quizás más importante,
Wine es cada día más potente.
¿Qué tiene que ver Wine con el mundo
de los videojuegos? Los videojuegos exclusivos para Windows, podemos ejecutarlos sin
pérdidas de rendimiento y sin mayores complicaciones en nuestro sistema operativo libre (ya
sea Linux, BSD, Solaris e incluso el comercial
Mac OS X). Cierto es que se necesitan configurar ciertos ficheros, instalar librerías... trabajo que herramientas como Cedega o Play On
Linux nos facilitan enormemente. También es Figura 2. Battle for Wesnoth
El grupo más importante para los amantes
del software libre, es este primero. Como ya
dijimos al comienzo, el hecho de ser un campo multidisciplinar el de los juegos, dificulta
que autores de otros géneros distintos a la
informática aporte contenido libre, que sin
embargo es extremadamente necesario. Hablamos de diseñadores, dibujantes, músicos,
guionistas... toda la parafernalia aparte de
la tecnología que necesita un juego, que sin
lugar a dudas es extremadamente importante.
Aunque cada vez se supera más este hándicap, sólo hay que comprobar la cantidad de
materia artística con licencia CreativeCommons; cierto es que sigue pesando.
Por lo tanto, por lo general en este grupo
no incluiremos grandes superproducciones comerciales, sino juegos realizados a través de
proyectos de software libre, que por lo general
son fáciles de instalar en nuestro equipo, directamente desde el repositorio en muchas ocasiones; y que evolucionan de manera paulatina
como todo proyecto de software libre. Algunos
27
www.lpmagazine.org
26_27_28_29_30_31_32_33_Juegos_Linux.indd
27
2009-10-15, 12:50
diversión
En Linux también se juega
nación perfecta para jugar en red con los
amigos.
El juego está en plena evolución y además no necesita un gran equipo para ejecutarse a pesar de su aspecto gráfico, por lo que
podemos aprovechar equipos antiguos para
echarlo a andar.
La web oficial del juego es: http://open
arena.ws/
TORCS
Figura 3. TORCS
estarán en versiones alfa, otros en beta y otros
en estables que seguirán evolucionando. Es la
magia de los proyectos libres. Prácticamente
todos están implementados haciendo uso de
las librerías más populares para desarrollo de
videojuegos en el mundo libre, SDL y Allegro
y para gráficos tridimensionales OpenGL.
Aunque hay muchísimos ejemplos que
aportar, vamos a hacer una pequeña selección
de los mejores representantes de cada género
y hablaremos muy brevemente de cada uno.
Dada su difusión es más que probable que se
encuentre en vuestro sistema de paquetería
y la instalación por lo tanto será prácticamente inmediata, vía Synaptic, Yum, Adept...
Comencemos.
La web oficial del juego es: http://www.
wesnoth.org/.
OpenArena
Un día después de que el código fuente de
Quake III fuera liberado, se lanzó la primer beta
de OpenArena. Podemos decir que es el mejor
exponente de la acción en primera persona
dentro de los juegos libres, aunque tenemos
otros muchos representantes de gran calidad
como Warsow, World Of Padman o Urban
Terror.
Tiene unos cuidadísimos gráficos tridimensionales a los que se le suman 12 modos
de juego diferentes, 48 mapas distintos y una
cantidad de acción que lo hacen la combi-
The Open Racing Car Simulator, o lo que viene a ser en español, el “Simulador abierto de
carreras de coches” es probablemente el mejor
juego de conducción libre del momento. Aunque existen otros juegos como Mania Drive
con una excelente jugabilidad y unos gráficos
muy detallados, el modo de conducción me
parece mejor el de TORCS pues es algo “menos arcade” y más realista.
Aún así, si hay un detalle que no me gusta
del juego en comparación con las alternativas
comerciales, como la saga Gran Turismo, es
la sensación de conducción. Sus gráficos, la
cantidad de vehículos y circuitos disponibles,
tanto de asfalto como de arena; están al nivel
de los juegos comerciales.
Su web oficial es: http://torcs.source
forge.net/.
SuperTux
El clásico en dos dimensiones, Super Mario,
creado por Nintendo en la década de los 80's,
tiene su clon libre en el que el personaje cambia, pasa a ser Tux y la ambientanción se vuelve más “helada”, pero el resto del juego sigue
prácticamente igual. Es un juego de platafor-
Battle for Westnoth
Todo un clásico de los juegos libres. Es un
juego de estrategia por turnos basado en un
mundo virtual fantástico, donde un jugador o
varios jugadores (se puede jugar en red) controlan una serie de personajes. Cada uno tiene
sus características propias además de unas
habilidades específicas. También se tienen en
cuenta otros factores, como el terreno en el que
jugamos, la experiencia o el coste en mantenimiento de la mismas.
Podemos jugar tanto en pantallas “simples”, contra la “máquina” o contra otros humanos en red o en el mismo ordenador; o también jugar en modo campaña, de forma que
tengamos que ir superando un hilo argumental.
Los gráficos son bidimensionales pero tienen
todo el encanto y la calidad de juegos clásicos
como Warcraft II. Otros juegos de estrategia a
destacar son FreeCol o FreeCiv.
Figura 4. Super Tux
28
26_27_28_29_30_31_32_33_Juegos_Linux.indd
Linux+ 12/2009
28
2009-10-15, 12:50
diversión
En Linux también se juega
•
•
•
•
Lincity-NG: Clon libre de la saga Sim City.
UltraStar Deluxe y sucesores: Clones del
superventas Singstar. Karaoke libre con
tus amigos.
Pingus: Al más puro estilo Lemmings.
Frets On Fire: Clon libre de Guitar Hero.
Método general de instalación
Figura 5. The Mana World
mas en dos dimensiones que os hará recordar
otras épocas. Dentro de este género hay multitud de representantes en este campo, como
Super Mario War y Secret Maryo Chronicles o
en otros géneros pero que comparten con éste
que son clones de clásicos bidimensionales
son: Frozen Bubble inspirado en Puzzle Buble
o Wormux basado en Worms.
Su web oficial es: http://torcs.source
forge.net/.
•
•
•
•
•
The Mana World
Los juegos RPG bidimensionales al más puro •
años noventa es el estilo de The Mana World
o de Hero Of Allacrost. Si unimos a esto la
posibilidad de jugar con miles de jugadores
de todo el mundo a través de partidas establecidas en red, como buenos MMORPG
(juegos de RPG masivos en red), tenemos
una mezcla de muchísima adictividad. Si
queremos gráficos tridimensionales, tenemos otras posibilidades como PlaneShift. Por
cierto, The Mana World está inspirado en el
juego para Super Nintendo titulado, Secret
Of Mana.
UFO Alien Invasion: Clon y mejora del
mítico X-COM: Terror from the Deep,
de la década de los noventa.
Simutrans: Clon libre de la saga Transport/Railroad Tycoon.
Open Raider: Clon libre de la saga Tomb
Raider.
Robombs: Clon libre de la saga Bomberman, con gráficos tridimensionales.
Angry Drunken Dwarves: Juego basado
en el Super Puzzle Fighter Turbo II de la
consola Play Station de Sony.
Open Invaders: Para los más nostálgicos,
clon libre mejorado del mítico Space Invaders.
Aunque es difícil dar un método de instalación general para todos los juegos de este tipo,
vamos a ofrecer unas directrices básicas que
seguir ya que la práctica totalidad están disponibles a través de paquetes precompilados, vía
gestor de paquetería o vía repositorio web.
Lo primero que intentaremos es instalarlo a través de nuestro gestor de paquetes. Un
problema de esta opción es que quizás no esté
en nuestro repositorio la última versión, pero
el resto son ventajas: facilidad, rapidez, posibilidad de actualización automática, etc. Si usáis
Debian, Ubuntu o cualquier otra distribución
derivada, debéis buscar Synaptic y en él buscar
el juego (ya sea mediante el cuadro de búsqueda o en la lista de paquetes de forma directa).
Si utilizáis otra distribución, probablemente
también tenga disponible otro gestor de paquetes, como Yum, emerge, pacman... el método
será análogo.
Si no encontramos el juego en el gestor,
la siguiente opción es buscarlo en la web del
proyecto del mismo o en algún repositorio
de paquetes en línea, como por ejemplo GetDeb, en forma de paquete precompilado (.deb,
.rpm, como autopackage...). Si lo encontramos procedemos a instalarlo, recordad que
probablemente sea la última versión, aunque
no se actualizará solo. Para instalar un paquete
Otros géneros
Además de los géneros aquí expuestos, dentro
de los juegos libres, hay una gran variedad
y cantidad que podréis comprobar a través de
la sección de esta misma revista mes a mes
o a través de cualquiera de los enlaces que os
dejamos en la sección “En la red...”. Antes de
seguir, destacaremos algunos juegos de los
que considero más relevantes y que todavía
Figura 6. Neverwinter Nights
no he mencionado:
29
www.lpmagazine.org
26_27_28_29_30_31_32_33_Juegos_Linux.indd
29
2009-10-15, 12:50
diversión
En Linux también se juega
Figura 7. Logo Wine
podemos a través de la interfaz gráfica con
GDebi o con dpkg o la herramienta adecuada
para nuestro paquete.
En caso de que no encontremos el paquete, la siguiente opción será descargarse el juego compilado y comprimido, aunque no empaquetado. De esta forma tendremos el juego
en nuestro disco duro, aunque es posible que
tengamos que realizar alguna configuración
adicional, aparte de tener que instalar alguna
librería determinada (como por ejemplo algún
elemento de la SDL).
Por último, la opción que siempre tendremos disponible, ya que se trata de software
libre, es la preparación, compilación y configuración del mismo. ¿Los pasos a seguir?
Primero descargar el código, descomprimirlo
y pasar a compilarlo. Aunque no todos los casos son iguales, las directrices generales para
compilar un juego son:
•
•
•
Los dividiremos en dos partes. La primerade ellas, de la que vamos a hablar a continuación y que tratará sobre los videojuegos
comerciales que ejecutan directamente en
Linux, es decir, que tienen una versión compilada ex-profeso para este sistema. Y por
otro lado, los juegos que no tienen una versión disponible para Linux, pero que gracias
a la intermediación de herramientas libres
como Wine, somos capaces de ejecutar en
nuestro sistema.
¿Es importante que existan videojuegos
comerciales en Linux? Por supuesto que sí.
Además de no dañar al mercado del juego
libre, es una demostración de que Linux tiene
cada vez más peso en el mercado del ordenador de escritorio y por lo tanto, resulta rentable
desarrollar una versión específica para la plataforma. Cada vez son más los juegos que se
apuntan a esta tendencia, por lo que el futuro
es prometedor.
¿Inconvenientes de los juegos comerciales? Creo que no hace falta recordarlos,
además de todos los problemas que conlleva
el uso de software de código cerrado, el coste que suelen tener hacen que no sea siempre
una opción disponible para todos. Comentemos brevemente algunos de los mejores representantes de este segmento en Linux. Por
cierto, si no encontráis estos juegos en las
grandes superficies, os recomiendo dos tiendas en línea, la primera más completa y en
inglés, Tux Games (http://www.tuxgames.
com/); y la segunda más joven y simple
pero en español, Guadagames (http://www.
guadagames.com/).
Unreal Tournament 3
Aunque lo mismo podríamos decir de sus
predecesores, Unreal Tournament I o II (también conocidos como UT I o UT II), Unreal
Tournament III es el último representante de
una de las sagas más populares en el campo
de la acción en primera persona. Se espera
que esta última versión esté disponible para
Linux el día 31 de Octubre.
Los requisitos que piden, son similares
a los que pide la versión para Windows
(512 MB de RAM, un procesador relativamente moderno, 256 MB de memoria gráfica)
aunque tenemos que añadir que es necesario
tener una versión igual o superior a la 2.2.x
del kernel y unos cuantos requisitos software
más que prácticamente todos cumpliréis y tener correctamente configurado ALSA u OSS
para el sonido.
Probablemente la saga, sea una de las más
vendidas en este mercado de los juegos propietarios para Linux. Tenemos que agradecerle a sus desarrolladores, Epic Games, el haber
apostado desde tan pronto por una versión
nativa para GNU/Linux.
Neverwinter Nights
El segundo juego de esta sección es uno de los
grandes videojuegos de rol de todos los tiempos. Aunque data de 2002, todavía sigue siendo
conocido y jugado. Está basado en la tercera
edición del archiconocido juego de rol, Dungeons & Dragons. La combinación, un entorno
tridimensional de altísima calidad, la posibilidad de jugar en línea con otros jugadores y la
fidelidad con que trata en prácticamente todos
Ejecutar el script, configure.
Proceder a realizar la compilación: make
install (si nos da algún error pidiendo
alguna librería en concreto, deberemos
buscarla en versión “dev”, es decir de
desarrollo no compilada, en nuestro gestor de paquetes).
Instalar con make install.
Juegos comerciales para Linux
Como comentamos en un primer momento,
una gran superproducción comercial, es difícilmente alcanzable en cantidad de contenido
y calidad de los mismos, por una producción
libre dentro del mundo del videojuego. La
cantidad de personal y recursos involucrados
en un proyecto de este tipo, toca muchas
áreas de la creación humana que muy pocos
proyectos libres son capaces de acaparar. Por
lo tanto, creo necesario que hablemos de los
juegos comerciales.
Figura 8. Play On Linux
30
26_27_28_29_30_31_32_33_Juegos_Linux.indd
Linux+ 12/2009
30
2009-10-15, 12:50
diversión
En Linux también se juega
los detalles del juego de rol original, hacen de
éste, uno de los juegos de rol más completos
y seguidos de la historia del videojuego.
Sus requisitos hardware son muchos
menores que los de UT 3 y los de software similares, aunque como ya hemos comentado,
no representan problema alguno.
Enemy Territory: Quake Wars
Por último, Enemy Territory: Quake Wars, es
un juego sucesor de Wolfenstein: Enemy Territory, pero que se encuentra colocado en la
serie de Quake. Es un juego de acción en primera persona, prácticamente tan moderno
como UT 3, con unos gráficos tridimensionales de excepcional calidad. Los requisitos
hardware son similares a los de éste.
Por cierto, la instalación de todos ellos
os resultará fácil ya que las empresas crean
instaladores que aunque se alejen de lo estándar, son prácticos y amigables para el usuario.
No seguimos comentando más juegos de este
tipo para pasar directamente a los juegos que
no ejecutan en Linux y necesitan alguna herramienta como Wine, que sin duda os será de
interés saber cómo hacerlos funcionar.
Juegos comerciales
para otros sistemas
Puesto que todavía hoy la mayoría de las
compañías no saca videojuegos nativos para
Linux, o por razones económicas o por razones técnicas (por ejemplo el uso de Direct X),
es importante conocer cómo poder disfrutar de
todos estos títulos en nuestra plataforma. En
lugar de comentar los juegos en sí, puesto que
son tantos y tan conocidos, creo que lo mejor
será explicar cómo hacerlos funcionar y enumerar en todo caso los más famosos.
Tenemos varias opciones. Las primeras
más básicas y menos eficientes son: crear una
máquina virtual sobre la que ejecutar Windows, con la consiguiente pérdida de rendimiento (si no tenemos una máquina potente
esta opción debemos desecharla) o tener dos
particiones, la solución clásica, una para cada
sistema operativo utilizando un gestor de
arranque, para arrancar en cada caso en función a nuestras necesidades.
Sin embargo, la que más interesa y que
incluso puede darnos un mejor rendimiento es
la de utilizar Wine. ¿Qué es Wine?
sistemas operativos basados en Unix que permite la ejecución de programas para Windows,
como por ejemplo juegos, sobre Linux. Algunos dicen que se trata de un emulador, pero en
realidad lo que hace Wine es implementar las
DLL de Windows como bibliotecas propias de
Linux, traduciendo las funciones de Windows
a las nativas de Linux. Algunas bibliotecas
libres como el caso de OpenGL, apenas necesitan transformación ya que simplemente
“convierten” las llamadas a las DLL.
Antes de utilizar Wine, es posible que tengamos que instalarlo. Es más que probable que
lo tengáis en el repositorio. En caso contrario,
en la web de Wine lo encontraréis preparado
para vuestra distribución sin problemas.
¿Qué necesito para instalar un juego con
Wine y poder jugar a él? En ocasiones nada,
es decir, simplemente ejecutar el archivo de
instalación con Wine, wine setup.exe, por
ejemplo y todo funcionará a la perfección. Sin
embargo, dado que Wine no tiene multitud de
DLL que existen en Windows y que hay otros
aspectos que cuidar, la cosa se complica.
¿Qué tendré que ver un manual de instalación para cada juego que instale con Wine?
No, antes sí era necesario, pero pasado el tiempo, algunos desarrolladores libres han creado
herramientas que automatizan todo este trabajo para hacer el proceso de instalación lo más
transparente posible.
Cedega
Creado por una empresa llamada Transgaming, nació con el nombre de WineX y es en
realidad un software comercial, no libre (aunque parte del código lo tienen disponible para
el público) que posiblemente sea el mejor en
su tarea.
Su tarea es la de permitir una compatibilidad prácticamente plena con los juegos de
Windows en Linux. Para ello utiliza internamente Wine y otras herramientas creadas por
Trasgaming asegurando una compatibilidad
y un rendimiento sin igual en una lista de
juegos extensa (podéis consultarla en la web
del proyecto). No seguiremos hablando de
Cedega, porque existen herramientas no comerciales que hacen una labor similar y que
además son software libre.
Play On Linux
Para mí el mejor programa libre para trabajar
más fácilmente con Wine. Aunque comenzó
centrado sólo en el mundo del videojuego, a día
de hoy, también permite instalar aplicaciones
que no sean lúdicas como por ejemplo la familia Internet Explorer, Microsoft Office 2003
y 2007 o Autocad (incluso la versión 2008).
El programa incluye una serie de script
que nosotros mismos podemos ampliar y distribuir, de extensión “.pol”, que le indica cómo
instalar y configurar los programas de Windows que nos ofrece. Si el programa es libre, por
ejemplo el excelente editor para Windows, Notepad++, él mismo se encargará de descargar,
instalar y configurar adecuadamente el software. En caso contrario, deberemos indicarle
dónde está el programa de instalación (por
ejemplo un CD).
Para descargarlo e instalarlo debéis dirigiros a la sección de descargas del portal del
proyecto (está parcialmente traducido al
español y podéis encontrarlo en: http://www.
playonlinux.com/es/download.html) y allí dependiendo de vuestra distribución, vendrá detenidamente explicado cómo instalar Play
On Linux (viene diferenciado incluso cómo
instalarlo en función a la versión de la distribución que tengas).
Una vez instalado, nada más ejecutarlo
nos aparecerá un interfaz en el que aparecerá
Wine
Wine, significa “Wine Is Not An Emulator”
(un acrónimo recursivo, muy al gusto del
software libre) y básicamente es una reimplementación de la API de Win16 y Win32 para Figura 9. Wine Doors
31
www.lpmagazine.org
26_27_28_29_30_31_32_33_Juegos_Linux.indd
31
2009-10-15, 12:50
diversión
En Linux también se juega
un fondo blanco (se irá rellenando conforme
instalemos más juegos y aplicaciones), una
barra de herramientas y un menú con una serie de opciones. Si le damos a “Instalar” nos
aparecerá un formulario en el que en un menú
a la izquierda, elegimos qué tipo de programa
queremos instalar: accesorios, desarrollo, juegos... el más nutrido y el que más nos interesa
es éste, “Juegos”.
La lista de juegos oficialmente soportados os sorprenderá por su longitud y prácticamente seguro que incluye el juego que estáis
buscando. Además, puesto que Play On Linux
se actualiza automáticamente, si lo instaláis vía
un sistema de paquetería, esta lista irá aumentando con el tiempo.
Una vez habéis elegido el juego, por ejemplo “Baldurs Gate 2”, pulsáis sobre “Aplicar”
y el proceso de instalación comenzará como
si estuvierais en Windows. Debemos destacar
lo fácil e intuitivo que resulta Play On Linux.
Una vez esté instalado el juego, en el fondo
blanco que os comentaba antes, aparecerá el
icono del mismo y desde allí podréis lanzarlo,
desinstalarlo o configurarlo (si permite el juego más configuraciones).
Algunos de los juegos soportados por Play
On Linux:
•
•
•
•
•
•
•
•
•
•
Age Of Empires 2, 3 y extensiones,
Baldurs Gate 1, 2 y extensión “Throne of
Bhaal”,
Command and Conquer 3,
Dawn of War: Dark Crussade,
Guild Wars,
Half-Life,
Star Wars Jedi Knight II: Jedi Outcast,
Star Wars Racer,
Warcraft III,
World of Warcraft.
Wine Doors
que yo haya visto en las distribuciones que
manejo).
Descargáis e instaláis la versión estable
del sitio de descargas y cuando lo ejecutéis os
preguntará si tenéis una copia válida con licencia de Microsoft Windows. Una vez ya dentro del programa podréis buscar en una lista
en función a una serie de conceptos: nombre,
creador, categoría... qué programa o juego
queréis instalar. Si ponéis “Categoría” y escribís “games” (juegos en inglés), os aparecerá la
lista de juegos oficialmente soportados hasta
el momento.
La verdad que es menos extensa que la de
Play On Linux pero no deja de ser suficiente
para muchos. Elegís el juego, le dais a aplicar
y el proceso es el mismo al que se sigue en
Windows.
Algunos de los juegos soportados por
Wine Doors:
•
•
•
•
•
•
Nintendo
•
•
•
•
•
NES,
FCEUX,
Nestopia,
Super Nes,
ZSNES: Emulador de la Super NES.
Game Boy, Game Boy Color
Medal Of Honor: Allied Assault 1,
Quake 4,
Call Of Duty 1 y 2,
Half Life 2,
World Of Warcraft 2,
Real War.
Emuladores
Puesto que creo que todos sabemos de las
plataformas más famosas de la historia: PlayStation, Mega Drive, Game Boy, Super Nintendo... os dejo un completo listado de los emuladores más famosos que existen en Linux.
Para instalarlo, es posible que lo tengáis
disponible en el gestor de paquetes, o en caso
contrario, tendréis que buscarlos en repositorio como GetDeb o directamente en la página
web del proyecto. Además, deberéis tener las
ROM (imágenes binarias del juego original)
en vuestro equipo.
•
•
•
•
Finalmente, ante de dar por terminado el artículo pasamos a los emuladores. Aunque no
son juegos en sí, nos permiten jugar a juegos
de antiguas (y no tan antiguas) plataformas con
las que ya no podemos disfrutar. Desde el comienzo del software libre, éste ha sido un tema
muy explotado por lo que tenemos a nuestra
disposición, emuladores para prácticamente
todas las plataformas comerciales con algo de
edad. Las más modernas, están todavía en proceso de ser emuladas (con emuladores no estables o que no emulan a un ritmo suficiente
debido a la complejidad de sus arquitecturas).
TuxBoy,
KiGB,
Mednafen: También de la Game Boy
Advance,
VisualBoyAdvance: emulador de la Game
Boy Advance con soporte para versiones
antiguas de Game Boy.
Nintendo 64
•
•
•
Mupen64Plus,
Nintendo DS,
DesMuMe.
Sega
•
•
•
Master System,
Meka,
Mega Drive,
De manera similar a Play On Linux, Wine Doors nos ofrece la posibilidad de instalar aplicaciones de todo tipo para Microsoft Windows
en nuestro sistema operativo Linux, a través de
un interfaz gráfico y automatizando los pasos
necesarios para que todo funcione con Wine.
Incluye parte de código de Cedega y aunque
soporta una lista menor de programas, y de
juegos, que Play On Linux, también es una
opción muy interesante.
Para instalarlo deberéis acceder a la página oficial del proyecto y acceder a la sección
descargas. Una vez dentro, descargáis lo que
mejor os venga: paquete .deb, paquete .rpm
o código. Creo que no está disponible a través de ningún repositorio oficial (al menos Figura 10. Emulador PlayStation
32
26_27_28_29_30_31_32_33_Juegos_Linux.indd
Linux+ 12/2009
32
2009-10-15, 12:50
diversión
En Linux también se juega
Sobre el autor
Francisco Javier Carazo Gil es Ingeniero
Técnico en Informática de Sistemas. Nacido en Córdoba, actualmente está estudiando Ingeniería en Informática además de trabajar en el Consejo Superior
de Investigaciones Científicas. Es webmaster de LinuxHispano.net, sitio del que
es uno de los fundadores, además de ser
el responsable de LinuxHispano-Juegos
y colaborador habitual del podcast de
LinuxHispano. En esta revista es colaborador habitual y sus intereses son principalmente el software libre, la programación y todo lo relacionado con GNU/Linux.
Su sitio web personal está en http://
www.jcarazo.com. Podéis contactar con él
a través de [email protected]
•
•
•
•
•
•
Dgen/SDL,
Gens,
Sega Saturn,
Yabause,
Dreamcast,
1xdream.
Sony
•
•
•
•
•
•
•
PlayStation,
ePSXe,
PCSX,
pSX,
PlayStation 2,
PCSX2.
•
•
Otras plataformas
•
Tenemos que distinguir entre las videoconsolas orientadas hacia al software
libre, básicamente la familia GP32/GP2X
(aunque exista algún representante más éstas
son las que más han conseguido llegar al mercado) y las que son puramente comerciales.
Entre las primeras es lógico que además
de compartir juegos, también exista la posibilidad de instalar un núcleo Linux provisto
de mayor o menor funcionalidad en dichos
aparatos. Puesto que GP32 y GP2X son máquinas portátiles, las posibilidades no son las
de un equipo de escritorio.
Respecto a las otras consolas comerciales, entre las tres que ocupan el mercado del
videojuego “no portátil”, hay que destacar a
Play Station 3. XBox al ser un producto de
Microsoft está completamente cerrado a este
tipo de iniciativas. Si alguien le instala un
núcleo Linux y consigue hacerlo ejecutar es
de un modo aficionado. Algo parecido pasa
con la superventas de Nintendo, la Wii. Sin
embargo, el caso a destacar es el de Sony con
la Play Station 3. De un modo oficial y prácticamente con el soporte de Sony es posible
instalar una serie de distribuciones. Las más
famosas son:
Yellow Dog Linux: Basada en Cent OS
y Fedora podríamos decir que es la distribución “oficial” de la consola.
Ubuntu: A través de PSUbuntu (http:
//www.psubuntu.com/) podemos documentarnos para instalar Ubuntu en la
PS3.
OpenSuse: Al igual que Ubuntu, es relativamente fácil instalarla y las opciones
son las del escritorio.
DosBox: emulador para juegos de MSDOS (con Wine también podréis ejecutar alguno).
GnGeo: emulador de la Neo-Geo.
AdvancedMAME: versión no oficial de
MAME/MESS.
SDLMAME: un port del famoso emulador MAME.
Aunque en la nueva versión de PS3 se ha
dejado de permitir la instalación de este tipo
de distribuciones, esperemos que la decisión
•
de Sony cambie o que los usuarios más expe•
rimentados aprendan rápidamente a volver a
darle la funcionalidad.
•
Sin lugar a dudas, un tema muy interesante que esperemos que siga en auge, ya no
sólo con Sony sino con más gigantes del secVideoconsolas y Linux
tor. Ellos también ganan porque gratuitamenA modo de apunte ya que el tema creo que te permiten a sus usuarios tener un equipo tan
merece un artículo propio, vamos a comentar funcional como uno de escritorio, teniendo
brevemente la relación existente entre GNU/ sólo la videoconsola.
Linux y el mundo de las videoconsolas, es
decir, de los aparatos de entretenimiento do- Conclusiones
méstico. Por un lado, hemos visto que existen Espero que tras leer el artículo, y con la seemuladores de dichas plataformas para Linux cción de juegos de todos los meses de la revispero, ¿es posible ejecutar Linux sobre alguna ta, no tengáis que reiniciar nunca más a Windows a “echar una partidita”. Como véis las
consola actual?
posibilidades son múltiples y con la ayuda de
Wine y Play On Linux, os puedo asegurar que
muy pocos juegos de Windows se resisten. El
tiempo también juega a nuestro favor, cada vez
más empresas apuestan por Linux para editar
sus juegos comerciales, cada vez más juegos
compatibles con Linux y también cada vez más
juegos libres. El tema de los emuladores es especialmente interesante para los más nostálgicos, aunque seguro que os gusta a todos. Cada
vez quedan menos razones a los que dicen que
Linux no es un sistema operativo en el que se
pueda jugar.
En la red
Blogs especializados en español:
• Linux Juegos
http://www.linuxjuegos.com/
• Juegos Libres
http://www.juegoslibres.net/
• Linux Hispano – Juegos
http://www.linuxhispano.net/juegos/
Portales especializados en inglés
• The Linux Game Tome
http://happypenguin.org/
• Linux Games
http://www.linuxgames.com/
• Linux Gamers
http://www.linux-gamers.net/
Repositorios de juegos ya compilados
• GetDeb
http://www.getdeb.net/
Juegos aparecidos en este artículo
• Battle for Wesnoth
http://www.wesnoth.org/.
• OpenArena
http://torcs.sourceforge.net/.
• TORCS
http://www.linux-gamers.net/
• Super Tux
http://supertux.lethargik.org/
• The Mana World
http://themanaworld.org/
Tiendas de juegos para Linux en línea
• Tux Games
http://www.tuxgames.com/
• Guada Games
http://www.guadagames.com/
Herramientes relacionadas con Wine
• Wine
http://www.cedega.com/
• PlayOnLinux
http://www.playonlinux.com/es/
•
Wine Doors
http://wddb.wine-doors.org/
33
www.lpmagazine.org
26_27_28_29_30_31_32_33_Juegos_Linux.indd
33
2009-10-15, 12:50
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
Streaming de Audio
y Vídeo con VLC
Matías Barletta
[email protected]
Desde una conferencia de negocios hasta nuestra película favorita podemos transmitirla
vía red utilizando VLC, una aplicación de código abierto que nos permite reproducir
y compartir cualquier contenido multimedia.
S
i te sientes tentado de compartir/transmitir una Todos estos escenarios pueden ser resueltos con VLC y la
película con tus amigos vía Internet o hacer tu ayuda de este artículo. Sigue leyendo que vamos a realizar
propia radio en la oficina, este artículo es para la primera transmisión en pocas líneas.
ti. Vamos a enseñarte paso a paso qué hacer
Primera transmisión
para conseguirlo.
de Vídeo Local
Imagina por un momento estos escenarios:
Vamos a comenzar directamente con un caso práctico
• Tienes una gran colección de música en un computa- y para eso vamos a transmitir un vídeo desde y hacia tu
dor, la tienes ordenada como a ti te gusta y has crea- mismo ordenador. Aquí los pasos:
Realizar la Transmisión de Vídeo:
do una lista de reproducción que te gustaría compartir por ejemplo con tus amigos y familia. ¿Cómo
haces? ¿Compartes una carpeta de red y les das • Instalar VLC. Descarga de www.videolan.org o bien
para los que tienen *Ubuntu haz “sudo apt-get install
acceso?
vlc”. Aquí usaremos la versión en inglés para evitar
• Tienes una película que te gusta mucho pero solo una
complicaciones.
copia (DVD?) y tienes varios interesados en verla,
¿se te ocurre alguna idea de cómo compartirla inme- • Busca en el menú VLC o desde la consola con el comando “vlc”. Deberías ver una aplicación como en la
diatamente?
Figura 1.
• El partido más emocionante va a empezar y tienes tu
capturadora de TV y deseas compartirlo con tus ami- • Haz clic en Media –> Streaming.
gos, tu familia o bien transmitirlo por Internet y verlo • Haz clic en Add y elije el vídeo que deseas transmitir,
luego clic en “Stream” (ver Figura 2).
desde la oficina.
34
34_35_36_37_38_39_VLC.indd
Linux+ 12/2009
34
2009-10-15, 12:57
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
Figura 1. Pantalla principal de VLC
•
•
•
Hacer Clic en “Next” y Seleccionar HTTP
luego clic en “Add” (ver Figura 3).
Seleccionar “Activate Transcoding” y seleccionar en la lista “Vídeo – Theora +
Vorbis (OGG).
Finalmente clic en “Stream”.
Con estos pasos ya estamos transmitiendo en
“vivo” el vídeo que elegimos.
Recibir la Transmisión:
•
•
•
Abrir VLC, Clic en Media –> Open Network Stream.
Seleccionar en la lista HTTP y en el campo Address escribir “Localhost:8080”
(ver Figura 4).
Dar Play y observar (ver Figura 5 que en
mi caso es Gotenks para los aficionados
a Dbz).
Si todo fue bien ya vamos a poder ver el vídeo
que estemos enviando. Fueron pocos pasos
y de manera muy rápida ya estaban haciendo
streaming de vídeo.
Puedo imaginar que tampoco les parece
increíble, es su misma máquina por lo cual
no han encontrado mayor desafío, pero puedo
asegurarles que todo lo que están haciendo es
lo mismo que harían si fuera entre varias máquinas (y algún que otro pequeño gran e interesante desafío), de hecho la transmisión-recepción en este ejemplo se hace mediante protocolos de red (TCP/IP + HTTP) dentro del mismo
Linux.
Todo esto no fue nada complicado, sin
embargo si queremos enfrentar todos los escenarios que describimos debemos tener un poco
de teoría sobre cómo funciona el streaming.
Youtube, Pandora o Last.fm y el streaming
en directo como es el tipo de una radio por
Internet.
Todos conocemos Youtube y es una plataforma de vídeo bajo demanda que nos da la
opción de ver vídeos “En Internet” sin necesidad de “descargar” los archivos a nuestros
ordenadores. El tipo de streaming que utiliza
Youtube se llama bajo demanda porque solo
se envía al momento que alguien selecciona
un vídeo para ser visto.
En el caso “Bajo Demanda” si al vídeo de
DBz lo están viendo 2 personas, éstas lo están
viendo como si fueran vídeos separados, cada
uno puede estar en una parte diferente del
vídeo, puede pausar, retroceder y adelantar de
acuerdo a su voluntad sin que esto signifique
ningún cambio para el resto de los que ven el
mismo vídeo.
Caso contrario ocurre, por ejemplo, con
la radio por Internet la cual está transmitiendo
sin importar quienes o cuanta gente la esté escuchando en un momento dado. Otra particularidad es que si 3 usuarios (por dar un ejemplo) están escuchando la misma radio por
Internet todos estarán – aproximadamente
– escuchando lo mismo, no pueden adelantar
ni retroceder* el streaming.
En resumen los escenarios pueden ser divididos según el tipo de control que tengamos
sobre el mismo, bajo demanda nos posibilita
todo el control de lo que estamos recibiendo
por streaming, podemos adelantar, retroceder,
pausar y continuar. También podemos decir
que el streaming bajo demanda tipo Youtube
está dirigido sólo (generalmente) a una persona y esa persona elige el mejor momento
para recibirlo.
En el caso del tipo “radio“, el streaming
está siendo realizado para mucha gente simultáneamente, no tenemos posibilidad de
avanzar la reproducción y perdemos control sobre el mismo. Por último el proveedor
del streaming decide en qué momento se
hace la transmisión. Un ejemplo de esto sería
un partido de fútbol por streaming donde
tendremos que esperar el momento que se
transmita y naturalmente no podremos adelantar.
Por eso es importante saber qué tipo de
streaming podemos hacer nosotros con VLC
y cual es el tipo de streaming que debemos
utilizar según el escenario que tengamos.
Debemos recordar que cada tipo de streaming requiere diferentes herramientas y somete al servidor a una carga diferente. Una
radio por Internet envía el mismo contenido
a todos los usuarios utilizando menos recursos.
En líneas generales VLC está más situada
como una herramienta para hacer streaming
ocasional y determinado, no como un “proveedor” de streaming como lo sería Youtube.
Sin embargo veremos más adelante que VLC
es muy flexible.
Tecnología – Codecs, Red y Otros
Conceptos clave
Bien, llegamos a la parte complicada e interesante. Para los que solamente quieran estos
poderes nuevos sin necesidad de saber como
Conceptos de Streaming
Tipos de streaming
Streaming es el proceso de transmitir por red y
en tiempo real un vídeo o audio sin necesidad
de que quien lo reciba deba descargarlo completamente para reproducirlo. Un ejemplo de
esto es Youtube o las radios por Internet.
Dentro del mundo del streaming existen
unas cuantas diferencias, por ejemplo el
streaming bajo demanda, como es el tipo de Figura 2. Seleccionando el archivo a enviar
35
www.lpmagazine.org
34_35_36_37_38_39_VLC.indd
35
2009-10-15, 12:57
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
Figura 3. Seleccionando el archivo a enviar
funcionan no se preocupen, VLC es una
herramienta súper sencilla y no necesitan dominar cuestiones muy profundas. Para aquellos que deseen ir más allá y conocer a fondo
la tecnología y las opciones sigan leyendo
que van a encontrar mucha información
interesante.
Primero hablaremos de la transmisión
y la red, un tema muy importante puesto que
es la base del streaming. Para comprender
el siguiente tema nos pondremos los zapatos
del administrador de sistemas de 2 proveedores de servicio – Linux Tube (que provee
vídeos) y RadioTux (proveedor de radio por
internet) – y trataremos de ver cómo hacer
para que todos nuestros usuarios consigan el
contenido que buscan de manera eficiente.
Empezaremos con RadioTux, una radio
exitosa que transmite música clásica desde
la Antártida para todos sus oyentes. Vamos
a imaginar que por un lado tenemos el contenido en nuestros servidores y por el otro
los usuarios hambrientos de contenido. Entre
ellos se encuentra el vasto océano de Internet, una red IP que nos interconecta con el
usuario.
Lo primero que haremos será poner el
contenido en un sitio web, lo publicaremos
y les pediremos a los usuarios que vengan a disfrutarlo. Sencillo ¿no? Bueno, ya veremos.
Digamos que llega el primer usuario a nuestro sitio y hace clic en “RadioTux en Vivo”.
El software encargado de recibir el streaming
comienza a reproducir el contenido inmediatamente.
36
34_35_36_37_38_39_VLC.indd
Desde el otro lado (el servidor) comenzaremos a servir el contenido de la radio como
un flujo de datos que viaja desde el servidor
hacia el equipo del cliente. Este flujo de datos
digamos que necesita un ancho de banda de
100 kbits/seg y es una comunicación punto
a punto entre nuestros servidores y el equipo
del cliente.
RadioTux se hace famosa y tiempo
después recibimos un total de 10 visitas simultáneas, en ese momento tendremos que
servir el contenido a 10 usuarios diferentes,
en 10 ubicaciones diferentes, por lo cual tendremos 10 comunicaciones punto a punto por
un total de 1000 kbits/seg (aproximadamente
1 mbits/seg). Como pueden ver, proveer de
streaming a 10 usuarios requiere un ancho de
banda de 1 mbits/seg y un procesamiento mayor por lo cual el servidor web comienza
suavemente a sentir la “carga” de trabajo.
Pasa el tiempo y RadioTux se convierte
en un éxito y la demanda comienza a subir
hasta que ya tenemos mil usuarios conecta-
dos simultáneamente, lo que técnicamente
nos implica un consumo de 100 mbits/seg
de ancho de banda y mucho más poder de
procesamiento.
Como administradores de RadioTux ya
nos damos cuenta que el streaming punto
a punto de servir contenido uno a uno es un
poco ineficiente, nos cuesta muchos recursos
y estamos consumiendo mucho ancho de banda
de Internet con el mismo contenido, (aquí es
donde vamos a introducir el primer concepto
de red, el Multicast).
Esta ineficiencia en la retransmisión
del mismo contenido a muchos usuarios fue
prevista por los diseñadores de la red y para
evitarlo existe el Multicast. El Multicast es un
método de transmitir el contenido la única
vez y que le llegue solamente a los usuarios
interesados. A diferencia del Broadcast donde
el contenido se transmite también una única
vez pero le llega a todos los nodos (dentro del
dominio de broadcast), el Multicast tiene la
diferencia de que sólo le llega a los interesados en ese contenido (los que se han registrado como receptores del Multicast).
Para comprender mejor este concepto veremos las siguientes figuras (6, 7 y 8) donde se
ven los 3 casos. Unicast, Multicast y Broadcast.
•
•
•
Unicast: aquí se puede ver el Unicast
donde el servidor dirige los datos específicamente a un solo equipo. Un ejemplo
sería el caso de RadioTux que envía los
datos a cada usuario y en total está repitiendo el contenido varias veces con tal
de cumplir con todos sus usuarios.
En esta otra figura vemos el Multicast,
donde el servidor de RadioTux envía la
información una única vez pero dirigido
a varios usuarios simultáneamente.
Por último tenemos el famoso Broadcast
donde el servidor envía un paquete y le
llega a todos los usuarios de la misma
red (dentro del dominio de broadcast).
Para simplificar los casos les propongo la si-
Figura 4. Pasos para recibir la transmisión
Linux+ 12/2009
36
2009-10-15, 12:57
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
Figura 5. El efecto
guiente analogía. En el punto 1 podemos decir
que es similar a querer mostrar un programa de
TV y darle una TV a cada persona para que lo
vea. Llega un momento que mostrar el programa va a ser muy costoso.
El punto 2 sería como juntar a todos los
que deseen ver el mismo programa alrededor
de un solo TV, por lo cual estaríamos ahorrándonos varios TV. Y sólo los que quieren ver
ese programa se acercan. Por último tenemos
el ejemplo más común que imagino os ha
pasado. Existe un solo TV, somos 5 personas en casa y tenemos que ver ,queramos o
no, el programa que elija solamente uno de
nosotros. Es por esto que el broadcast está
limitado sólo a una parte de la red (Ethernet)
para no comprometer el tiempo de mucha
gente que no desea ver lo mismo.
Bueno ya sabemos los 3 tipos de conexión
disponibles así que como responsables de
RadioTux debemos elegir un método, ¿cual
elegirían? Pues Multicast tiene las características ganadoras, nos ofrece la posibilidad de
sin necesidad de aumentar nuestro ancho de
banda o servidor poder enviar el mismo contenido a todos nuestros usuarios.
Pero mis queridos lectores tengo una
mala noticia, el Multicast es una especie muy
rara y lamentablemente por cuestiones técnicas es muy difícil de proveer un servicio de
streaming por Internet. Es por eso que se utiliza para el streaming (a regañadientes y hasta
que IPV6 se ponga en marcha) el Unicast.
Lamento darles esa noticia pero sucede
que la red de redes al estar compuesta por
miles de routers de diferentes marcas, dueños
y estándares, se hace casi imposible ofrecer el
Multicast de forma correcta (cosa que IPV6
vendrá a remediar).
Sin embargo en el ámbito de una LAN (tu
oficina o quizás tu casa) es muy fácil poder hacer Multicast y ya veremos luego como hacerlo. Incluso redes grandes como la de algunos
proveedores de Internet austríacos y alemanes
ya ofrecen servicios basados en Multicast
(ellos controlan la tecnología, son los dueños
de los routers y cumplen los estándares para
lograrlo) lo que les permite ofrecer Televisión
por Internet de forma muy práctica y sencilla
sin agobiar la red ni los servidores, incluso
venden pequeños aparatos que se conectan a la
red para ofrecer ese servicio (IPTV).
Llegó la hora de proveer nuestros servicios técnicos a LinuxTube. Diremos que LinuxTube es una empresa pequeña que está comenzando a proveer vídeos relacionados con
Linux y nos han encargado la administración
del servidor de streaming bajo demanda.
LinuxTube tiene una página web muy
parecida a Youtube (¡qué coincidencia!) donde
los usuarios buscan vídeos sobre Linux y los
ven en línea. Supongamos que nuestro primer
usuario decide ver el vídeo sobre “Instalación
de CentOS paso a paso”, cuando el usuario hace clic en el vídeo, Flash Player comienza a solicitar el contenido y nuestro servidor de streaming empieza a servirlo por medio de Unicast
(esto significa que le envía el vídeo solamente
a esa persona).
Digamos que este vídeo pesa unos
500MB en formato sin compresión AVI, eso
significa que debemos servir ese contenido
por la conexión de Internet del usuario lo cual
puede llevar un largo rato. En este caso ya no
es una cuestión solamente acerca de la forma
de transmitir el contenido (Unicast-Multicast),
sino también de lo costoso que puede ser en
tiempo y ancho de banda. Un usuario que desee ver un vídeo por Internet difícilmente espere que se descarguen 500MB.
Cuando nos encontramos con esta restricción aparece el otro concepto clave del streaming y en realidad de cualquier transmisión de
contenido: los codecs. Los codecs son una herramienta poderosa que nos permite disminuir
el espacio necesario para almacenar y transmitir
un contenido. Los codecs son necesarios puesto
que la relación entre el ancho de banda de nuestras conexiones con el tamaño de los contenidos
es muy baja, o sea, tenemos películas de 4GB y
conexiones de 4Mbits. Ahí es donde la ingeniería de los codecs hace su magia.
Estoy seguro que han visto alguna vez películas en formato DIVx o Xvid, son películas
a las cuales se las ha convertido de un formato
sin compresión a un formato comprimido utilizando el Codec DivX o Xvid. Como se habrán
dado cuenta las películas tienen una menor
“calidad”, a veces se ven un poco más oscuras
pero nos brindan la posibilidad de llevar una
película de 4GB a 700MB sin perder muchos
detalles. Existen una gran variedad de codecs
dependiendo de la necesidad, por ejemplo, los
mejores que tenemos son el H264 (propietario) y Theora (libre). En el caso de codecs de
sonido ustedes están más familiarizados con el
MP3 el cual es una forma de comprimir y minimizar el espacio utilizado para el sonido. Un
último ejemplo que les puedo dar son los codecs utilizados en telefonía IP como el GSM,
ulaw y el de mejor consumo G729a.
Todos estos codecs realizan la misma
función, toman el contenido, lo analizan y lo
convierten a otro formato descartando con-
¡Ojo!
MP3 y h264 son formatos propietarios
y requieren licencias para su utilización.
Theora y Ogg son las opciones de software libre. ¡Haz uso de ellos!
Figura 6. Unicast
37
www.lpmagazine.org
34_35_36_37_38_39_VLC.indd
37
2009-10-15, 12:58
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
Figura 9. Interfaz Web
hay que tenerlo en cuenta dado que existen
equipos que no lo soportan bien como algunos
móviles o PDA que no les da la capacidad de
procesamiento para reproducir contenido codificado en h264.
Manejando VLC vía web
Figura 7. Multicast
tenido redundante y aprovechándose de las
limitaciones humanas a la hora de disfrutar el
contenido. Por ejemplo el MP3 suele eliminar
ciertos sonidos presentes en la música sin
que sea mayormente perceptible, lo mismo
sucede con los codecs de telefonía IP donde
se eliminan cierta gama de sonidos para que el
contenido a transmitir sea aún menor. Por último, los codecs de vídeo utilizan estas mismas
técnicas para reducir la información tratando
de conservar todos los aspectos relevantes
para la vista humana. Puesto de otra forma, los
codecs burlan los sentidos y se aprovechan de
las limitaciones humanas para que el espacio
ocupado por un contenido sea mucho menor.
En otras palabras la tarea de un codec es
hacer más fácil la transmisión de datos.
Volviendo a nuestro trabajo como técnicos de LinuxTube hemos decidido que vamos
a transmitir la información en un formato comprimido utilizando el codec Theora + Ogg.
Gracias a estos codecs vamos a necesitar menos ancho de banda y vamos a optimizar el
servicio para muchos usuarios.
Cuestiones de codecs
VLC es muy versátil y tiene varias opciones de
interfaz. Por ejemplo tenemos la interfaz gráfica con la cual hicimos estas prácticas, también
existe la interfaz de consola que te permite
reproducir/enviar contenido desde una consola
y también una interfaz web (no muy linda) que
te permite administrar tu VLC remotamente.
Para utilizar la interfaz web solo debemos
ir a VIEW->Add Interface-> “Web Interface”.
Una vez hecho esto podemos ir al Firefox en la
misma máquina y poner http://localhost:8080.
Al hacer esto verán algo como la siguiente
imagen (Figura 9 - Interfaz Web).
Capturando y Enviando
VLC nos permite capturar información de un
hardware como una capturadora de TV y enviar el contenido haciendo streaming. En este
ejemplo vamos a ver cómo hacer para enviar
el contenido de una capturadora de TV.
Los pasos son muy similares al anterior.
Hagamos:
No olviden que las ventajas de los codecs
vienen asociadas con ciertas desventajas. Por
ejemplo el uso de ciertos codecs como el h264
requiere de un poder de procesamiento mucho
mayor que si no lo usáramos. El resultado es
que el usuario al recibir el contenido debe procesar la información para poder reproducirla •
y esto requiere una PC mejor equipada. Esto •
•
•
•
Como pueden ver es sumamente sencillo enviar el contenido de una placa capturadora de
TV por medio de la red. Es por esto que se
puede utilizar VLC para transmitir en la red de
la empresa alguna conferencia que se esté llevando a cabo en ese momento. Podríamos conectar la vídeo cámara a la capturadora y de esa
manera transmitir un evento en vivo.
Figura 8. Broadcast
38
34_35_36_37_38_39_VLC.indd
Clic en Media –> Streaming.
En esa ventana eligen “Capture Device”
(Figura 10).
Despliegan la lista de “Capture Mode” y seleccionan el dispositivo del cual quieren
tomar control.
Hacen clic en Stream.
Luego de este punto pueden seguir los
mismos pasos anteriores para enviar el
contenido por HTTP. Para recibir este
contenido podemos nuevamente utilizar
VLC y observar cómo la captura es reproducida inmediatamente.
Linux+ 12/2009
38
2009-10-15, 12:58
diversión
Linux + VLC se convierten en una estación de transmisión de Audio/Vídeo
mucho para ser sencillo
útil). Si desean entrar a
otro computador deberán
máquinas en el punto 5
localhost).
y verdaderamente
esta página desde
poner la IP de sus
(no deben utilizar
Wireless, Multicast y Servicios
de Anuncios
Figura 10. Elegimos Capture Device
Otra idea que les doy es utilizar VLC •
para transmitir alguna fiesta. Conectando una
webcam que apunte al lugar de reunión y luego
utilizando los pasos anteriores pueden hacer •
una transmisión en vivo del evento.
Transcoding con VLC
Una ventaja que tiene VLC es la posibilidad
de realizar reconversiones al instante. Esto
significa que podemos transmitir un contenido
que originalmente estaba en formato AVI en
formato h264 para optimizar el ancho de banda
necesario. Para comprobar este ejercicio vamos •
a volver a realizar los pasos de streaming como
vimos anteriormente y van a ver y cambiar las
opciones en la sección de Transcoding.
Vídeo Lan Manager
Si les interesa seguir ahondando en el mundo
del streaming les recomiendo que prueben lo
siguiente.
VLM Vídeo Lan Manager es una interfaz
web que permite controlar varios servidores de
VLC transmitiendo en vivo. Te permite hacer
listas de reproducción y te genera un archivo tipo M3U que los usuarios que entren a la página
podrán descargar y conectarse automáticamente a tu equipo de streaming.
En la Figura 11 pueden ver una imagen de
cómo es la interfaz de VLM. Les voy a dar una
pequeña guía sobre cómo utilizarlo.
•
•
•
•
•
•
Ir a la pestaña Servers. Clic en “Add a Server” y completar con el nombre que desees y en la IP le pones “localhost”
Ir a la pestaña “Files”, clic en “Add a File
Channel”. Donde dice URList deben completar con la dirección absoluta de sus
archivos, por ejemplo si desean reproducir
un archivo llamado DBZ.mp3 que se encuentra en su home deben poner entonces
lo siguiente “/home/mat/DBZ.mp3”. De
esa manera VLC encontrará los archivos
a compartir.
Finalizado el punto anterior les aparecerá
una lista de los archivos que van a reproducir. Deben ubicar el icono de “play” en
la columna “Action” y luego les saldrá una
pantalla con opciones que pueden jugar
con ellas o hacer clic en “Program.
Vayan al home y ahí encontrarán un link
que dice “Playlist” que al hacer clic les
permitirá reproducir la programación.
Como vimos anteriormente el Multicast es
una herramienta poderosa para el streaming
pero existe mucho hardware de WiFi que no
soporta bien este estándar Para los que tengan
equipos con OpenWRT es muy probable que
funcione sin mayores cambios. Para utilizar
el Multicast en alguna de sus transmisiones
en el punto 5 del primer ejercicio pueden
utilizar RTP y como IP de destino utilicen
224.255.1.1. Esta es una de las direcciones IP
reservadas para Multicast. No olviden utilizar
la misma IP desde el cliente.
Como último detalle les comento que
existe un servicio de anuncio de contenidos.
Estos servicios son mensajes que puede enviar
y recibir VLC para conocer el contenido que se
esté propagando por la red en ese momento. Si
les interesa conocerlos pueden utilizar la wiki
de VideoLan y buscar SAP Announce o bien
Bonjour. Estos son algunos de los servicios de
descubrimiento de contenidos.
Conclusión
VLC merece mucho más que un artículo,
puesto que aunque es sencillo existen una gran
variedad de usos y escenarios. Les recomiendo
utilizarlo para reproducir contenido multimedia
•
y streaming. Espero que puedan desarrollar algunos de estos ejercicios para que integren a su
arsenal de habilidades el streaming y puedan
De esa forma pueden empezar a jugar con compartir vuestro contenido con quienes quieVLM el cual es muy práctico (aunque le falta ran. ¡Éxitos!
Descargarlo de vww.videolan.org.
Descomprimir y entrar al directorio de
vlma-0.2.0/bin.
Ejecutar en una consola “bash ./vlmad start”.
Ejecutar en otra consola “bash ./vlmaw
start”
Abrir VLC en tu máquina, luego ir a Ver->
Add Interface->Console.
Con Firefox ir a la página http://localhost:
Figura 11. Interfaz de VLM
8080/vlmaw.
39
www.lpmagazine.org
34_35_36_37_38_39_VLC.indd
39
2009-10-15, 12:58
software
Juegos sección llevada por Francisco J. Carazo Gil
Go Ollie!
H
E
ace ya tiempo que terminó el Verano y que volvimos a la rutina. Pasó la época de poder jugar un buen rato al ordenador
y ahora lo que pega más, al menos lo que más me apetece, son juegos sencillos, rápidos y que nos permitan desconectarnos de todo un
rato. Dentro de ese tipo de juegos podemos enmarcar “Go Ollie!”.
La verdad es que dudé en publicar este juego porque es tan sencillo y tan “típico” que por un lado perdía interés, pero tras jugar a él
y comprobar los buenos recuerdos que me traía a los más clásicos juegos de plataformas, me decidí a publicar. Además, es software libre,
concretamente está liberado bajo licencia GPL, y todo su contenido
gráfico está publicado bajo una licencia CreativeCommons, por lo
que tenía una razón más para incluirlo en esta sección. No siempre
los juegos de código libre incluyen arte gráfico no propietario. Go
Ollie! es un sencillo juego de plataformas, en el que controlamos a un
n una clasificación de los 25 mejores juegos para Linux elaborada por “Rangit”, apareció como el juego número 8 y si buscáis en la red clasificaciones de este tipo, también lo encontraréis en
los primeros puestos siempre. No es un juego libre, pero por méritos
propios se encuentra este mes cerrando esta sección.
Se trata de Vendetta Online, un juego de los llamados MMORPG, es decir, Massively Multiplayer Online Role-Playing Game (que
traducido al español sería, videojuego de rol multijugador masivo en
línea) que tanto éxito tienen en la red. Existen algunos MMORPG que
funcionan directamente en el navegador, como pueden ser: Ogame,
Traviant, DarkOrbit... y otros que como es el caso, necesitan la instalación de un cliente. ¿Cuál es mejor? Pues depende, los que funcionan
en navegador son más inmediatos a la hora de jugar pero a la vez tienen
menos posibilidades, mientras que los que necesitan la instalación de
Figura 1. Go Ollie!
Figura 2. Vendetta
gusano que se irá enfrentando a distintas pruebas y misiones, que poco
a poco, se irán haciendo más difíciles. El componente más original del
juego es su jugabilidad. En lugar de usar las típicas flechas del teclado
o cualquier otro método para mover a nuestro jugador, el juego utiliza
el ratón. El método es difícil de explicar y recomiendo que lo prueben
pero básicamente deciros que mientras la pantalla del juego se mueve
nosotros elegimos dónde queremos ir.
Tenemos dos modos de juego. Primero el modo historia, donde
tenemos tres niveles con distintas misiones a superar y segundo el
modo rápido, donde el objetivo es conseguir la máxima puntuación.
Gráficamente comentaros que a pesar de tener una estética propia de
juego de dos dimensiones de plataformas, está todo muy cuidado, desde los escenarios a los jugadores.
Existen versiones tanto para Windows, como para Mac OS y Linux, por lo que podéis recomendarlo a todos vuestros amigos. Los
usuarios de Ubuntu o de otras distribuciones similares, podrán descargarlo directamente de GetDeb sin problema alguno. Siempre queda
también la opción de compilar el código fuente. Podéis también probar
a ver si está disponible en vuestro repositorio. Los paquetes tienen de
nombre: “goollie”.
En definitiva, un juego para “matar” ratos muertos y desconectar
que, probablemente, os recordará a juegos de otros tiempos con el
componente original del movimiento por ratón.
http://www.tweeler.com/index.php?PAGE=goollie_info
un cliente nos proporcionan muchas más opciones, como gráficos
tridimensionales o cualquier otra cosa que permite un juego que está
verdaderamente instalado.
El juego nos sitúa en un futuro muy lejano, donde tras un gran
desastre, un grupo de colonias humanas quedan incomunicadas con el
sistema solar. Pasado el tiempo, sin poder recibir noticias de la Tierra,
se forman tres naciones diferenciadas: Secro, Itani y la llamada UIT.
Cada una de ellas tienen unas características diferenciadas del resto.
Deberemos elegir una de las naciones y comenzar nuestra propia
partida. De primeras el gobierno de nuestra facción nos proveerá de
recursos para poder ser autosuficientes. Además de poseer una trama
argumental muy definida, es un juego repleto de posibilidades y que
sobre todo gustará a los amantes de la estrategia. El juego está muy
centrado en los combates, por lo que es lo normal estar inmersos en
escaramuzas continuamente. El juego sigue evolucionando por lo que
conforme pasa el tiempo, se incorporan novedades que proveen de
más funcionalidad y por lo tanto entretenimiento, al mismo.
Como nota curiosa comentaros que la empresa que está detrás del
mismo, se llama Guild Software y que al menos en un comienzo estaba sólo formada por cuatro componentes, por lo que tiene gran mérito el haberse convertido en todo un referente en su género. Además,
siempre es de agradecer que exista una versión para GNU/Linux,
porque aunque cada vez es más normal, aún no es muy frecuente.
http://www.vendetta-online.com/
NOTA
jugabilidad
gráficos
sonido
NOTA
«««
«««
««
jugabilidad
gráficos
sonido
40
40_Gry.indd
Vendetta
«««««
««««
«««
Linux+ 12/2009
40
2009-10-14, 17:09
41_rekl_Admelix.indd
1
2009-10-14, 18:23
práctica
Retorno al Shell
Retorno al Shell
Daniel Alejandro Benitez
[email protected]
Muchas son las razones que podemos escuchar y dar acerca de los beneficios de saber
operar GNU/Linux prescindiendo de la interfaz gráfica, pero sin lugar a dudas todos
coincidimos en que las utilidades que podemos ejecutar desde la línea de comandos no sólo
son muy poderosas, sino que en ocasiones simplifican las tareas que se realizan desde el
entorno gráfico. Esto puede parecer una exageración, pero los invito a que sean ustedes los
que lo comprueben.
U
na buena forma de empezar es aprendiendo
cómo están organizados los datos en un sistema GNU/Linux. Al hacerlo estaremos en •
condiciones de entender cual es la utilidad
de cada directorio, su importancia y contenido.
•
Estándar de la Jerarquí a del sistema
de archivos (FHS – Filesystem
Hierarchy Standard)
FHS (Filesystem Hierarchy Standard) es un estándar que
define los nombres, la ubicación y los permisos de muchos
tipos de archivos y directorios. Se trata de un documento
que es una referencia para todo sistema compatible FHS.
Sin embargo da lugar a algunas extensibilidades en algunas areas mientras que a otras no las cubre. Esto da cierta
libertad al momento de aplicarlo, de allí que pueden existir
pequeñas diferencias entre las distribuciones GNU/Linux
en lo que a estructura del FHS se refiere. Cabe aclarar que
en GNU/Linux todo es un archivo, esto incluye archivos,
directorios, todo tipo de dispositivo de hardware, particiones de los discos, etc; es decir absolutamente todo.
42
42_43_44_45_46_47_48_49_50_Shell.indd
•
Este estándar habilita:
Al software para predecir la ubicación de archivos
y directorios instalados.
A los usuarios a predecir la ubicación de los archivos
y directorios instalados.
Para mayor información sobre el estándar, dirigirse
a: http://www.pathname.com/fhs/
A continuación vamos a ver una descripción de cada uno
de los directorios más importantes y su contenido.
El directorio raíz (/)
El contenido del directorio raíz debe ser adecuado para arrancar, recuperar y/o reparar el sistema. Todo surge a partir del
directorio raíz (/) y es el único directorio en el nivel superior
del árbol jerárquico de archivos (no hay nada por encima de él).
El directorio /boot/
El directorio /boot/ contiene archivos estáticos requeridos
para arrancar el sistema, tales como el kernel de Linux
Linux+ 12/2009
42
2009-10-15, 13:00
práctica
Retorno al Shell
y los archivos de configuración necesarios montajes de NFS. Recordemos que para los
para dicha tarea. Estos archivos son esenciales medios removibles utilizamos el directorio
/media/. No deben instalar programas en este
para que el sistema arranque correctamente.
directorio.
El directoio /bin/
En este directorio se encuentran archivos
binarios ejecutables del sistema. Entre ellos el
shell bash, las utilidades de configuración del
sistema, utilidades para el manejo de archivos,
entre otros. Los archivos contenidos aquí son
para ser usados por todos los usuarios.
El directoio /sbin/
Aquí encontramos unicamente los ejecutables
esenciales para el arranque, recuperación y reparación del sistema. En su mayoría sólo pueden ser ejecutados por el usuario root.
El directoio /dev/
Este directorio contiene archivos que representan los diferentes dispositivos de hardware
y que son esenciales el correcto funcionamiento del sistema.
El directorio /etc/
aplicación amplia y estática. Un paquete que
coloca archivos en /opt/ crea un directorio
con el mismo nombre del paquete. Estos archivos son guardados de forma tal que se evita que
esten esparcidos por todo el sitema de archivos,
El directorio /proc/
dándole al administrador una forma fácil de deSe trata de un directorio que contiene archivos terminar cuál es el rol que cumple cada archivo
“especiales” que extraen información del ker- dentro de un paquete en particular.
nel o se la envían. Debido a la gran variedad de
datos y a la cantidad de diferentes formas en El directorio /usr/
que este directorio se comunica con el kernel, El directorio /usr/ es para archivos que puesería necesario dedicarle todo un artículo sólo a dan ser compartidos a través de muchas máél. Es por ello que se da una descripción some- quinas. Habitualmente /usr/ se monta como
ra destacando algunos puntos que pueden ser sólo lectura. y en una partición aparte.
útiles. El kernel de Linux tiene dos funciones
primarias: controlar el acceso a los dispositivos El directorio /var/
físicos y establecer como y cuándo los proce- El FHS requiere que Linux sea capaz de monsos interactuarán con estos dispositivos. En los tar /usr/ en sólo lectura, por ello cualquier
archivos contenidos en /proc/ se puede en- programa que escriba archivos log o que nececontrar mucha información importante con de- site los directorios spool/ o lock/ debería
talles sobre el hardware del sistema y cualquier escribirlos en el directorio /var/. El FHS especifica que /var/ es para archivos de datos
proceso que se esté ejecutando actualmente.
Cabe destacar que los archivos a los que variables. Esto incluye archivos y directorios
hacemos referencia son de un tipo llamado ar- spool, datos de administración, de registro, cochivo virtual, y es por esta razón que a menudo rreo local y archivos temporales entre otros.
se hace referencia a /proc/ como un sistema
de archivos virtual. Estos archivos virtuales po- El directorio /sys/
seen cualidades únicas, una de ellas es que la /sys/ utiliza el nuevo sistema de archivos
mayoría tienen un tamaño de 0 bytes. Sin em- virtual sysfs específico del kernel 2.6. El dibargo, cuando se visualiza el archivo utilizando rectorio /sys/ contiene información similar
por ej. el comando cat o more, puede mostrar a la que se encuentra en /proc/.
gran cantidad de información.
está reservado para los archivos de
configuración del sistema y de las distintas
aplicaciones.
Aquí no deben colocarse binarios, que si
bien antiguamente se lo hacía, deberían colocarse en /sbin/ o en /bin/ según corresponda.
Como ejemplo veremos el contenido de
algunos de sus subdirectorios.
En /etc/X11/ hay archivos de configu- El directorio /opt/
ración del servidor de ventanas X, entre ellos Este directorio proporciona un área para guardar habitualmente paquetes de software de una
archivos importantes como xorg.conf.
/etc/skel/ proporciona una forma de
asegurarnos que todo nuevo usuario creado
tenga la misma configuración inicial.
El directorio /etc/ es uno de los más
importantes.
/etc/
El directorio /home/
En /home/ encontramos los directorios de
cada uno de los usuarios del sistema. Cada
usuario posee un directorio personal en donde
El directorio /lib/
El directorio /lib/ debería contener sólo las
bibliotecas (libraries) necesarias para ejecutar
los binarios alojados en /bin/ y en /sbin/.
Estas bibliotecas compartidas son particularmente importantes para arrancar el sistema
y ejecutar comandos.
El directorio /media/
Contiene los subdirectorios utilizados como
puntos de montaje para medios removibles, por
ejemplo CD-ROMs entre otros.
El directorio /mnt/
Este directorio está reservado para sistemas de Figura 1. En la figura vemos el contenido del archivo /proc/cpuinfo que muestra información relacioarchivos montados temporalmente, tales como nada con el procesador
43
www.lpmagazine.org
42_43_44_45_46_47_48_49_50_Shell.indd
43
2009-10-15, 13:00
práctica
Retorno al Shell
guarda su configuración personal, documentos, etc. Sin embargo, según el estándar FHS,
ningún programa debería basarse en esta ubicación.
La lista de directorios es mucho más extensa y aquí mencionamos sólo algunos a modo de introducción.
Otros directorios importantes que encontramos son:
acceder utilizando la combinación Ctrl +
Al utilizar
esta forma mostrará el indicador de inicio de
Sesión (login) donde es necesario ingresar el
nombre de usuario y la contraseña. Introducidos estos datos se carga la configuración se la
cuenta correspondiente y el sistema queda listo
para utilizarse. Para regresar al modo gráfico
presionar Ctrl + Alt + F7.
Generalmente el indicador del sistema
• /root/ es el directorio “home” del admi- (prompt) finaliza con el carácter $ cuando se
nistrador del sistema, es decir el usuario utliza la terminal como usuario normal y con #
root.
cuando se utiliza como usuario root (adminis• /tmp/ contiene archivos temporales.
trador del sistema).
• /lost+found/ es un directorio de archiTrabajar con la terminal nos provee un
vos perdidos.
mecanismo muy poderoso y rápido con el que
se pueden realizar un sin fin de tareas.
Para más información podemos consultar el estándar FHS en: http://www.pathname.com/fhs/. Los comandos
O desde una terminal ingresando la si- Todos los comandos en GNU/Linux son externos al intérprete de comandos, esto significa
guiente orden: $man -hier
que por cada uno de ellos tendremos un archiEl intérprete de comandos,
vo alojado en un determinado directorio deel Shell
pendiendo de su función (ej. /bin/, /sbin/,
El shell o intérprete de comandos es el meca- /usr/bin/).
nismo que permite la comunicación entre el
En general todos los comandos pueden ser
Kernel y el usuario. Su principal función es la ingresados acompañados de una o más opciode tomar las “ordenes” que ingresa el usuario nes. El formato general es :
para enviárselas al Kernel.
Existen muchos shells para Linux, entre comando [opciones] [archivo/
los más conocidos encontramos el shell Bour- directorio]
ne (bash), el shell Berkley C (csh) y el shell
Korn (ksh). Siendo bash el más difundido de A continuación damos una introducción a
los tres y el que se incluye como shell prede- algunos de ellos. Muchos de los comandos
terminado en la mayoría de las distribuciones poseen muchas más opciones de las que se
describen aquí y es por ello que intentamos
GNU/Linux.
* El Kernel o núcleo es el corazón de un enumerar las más comunes, dando al lector
sistema operativo.
Alt + F1 a Ctrl + Alt + F6.
lo necesario para que profundize en aquellos
casos que lo considere necesario.
Nota: El signo $ que se antempone al
comando en los ejemplos simboliza el prompt
y no debe ser tipeado al probar los ejemplos.
Documentación y ayuda
El comando man se encarga de formatear y mostrar las páginas del manual del sistema. Es la
manera más fácil y rápida de encontrar información acerca de cómo utilizar un comando.
La forma más simple de utilizar man es ingresándolo seguido del comando que se desea
consultar. Ejemplo: $ man date
Al darle ingreso a la orden anterior mostrará la ayuda correspondiente al comando
date.
Para avanzar a la siguiente página de la
ayuda bastará con presionar la tecla barra espaciadora o ENTER para desplazarnos línea
a línea. Para salir hay que presionar la tecla q.
El comando man puede ir acompañado de
opciones. Veamos algunos ejemplos:
•
•
•
•
-f: utilizar esta opción equivale al comando whatis,
-k: hace que man cumpla la misma función que apropos,
-h o –help: muestra las opciones que pueden utilizarse con el comando man,
-a: muestra secuencialmente todas las páginas que contienen el comando buscado.
Para más información sobre el uso de man
y opciones podemos ingresar:
$ man man
La Terminal
La Terminal es una forma de manejar el sistema prescindiendo de la interfaz gráfica. Para
ello nos presenta una pantalla en modo texto
donde muestra el “prompt” o indicador del
sistema. Esto significa que el interprete de
comandos está listo para recibir las órdenes del
usuario. No obstante a la hora de introducirlas
debemos tener en cuenta que debemos distinguir entre mayúsculas y minúsculas y que generalmente los comandos van en minúsculas.
Existen dos formas de acceder a una terminal, la primera es utilizando una aplicación
que la emula dentro de un entorno gráfico como son Konsole, la terminal de KDE o xterm
de GNOME. La otra forma es presionando
Ctrl + Alt + F1 con lo que accederemos
a una terminal completamente en modo texto.
Existen seis terminales a las que podemos Figura 2. Aquí vemos el resultado de ejecutar el comando del ejemplo anterior
44
42_43_44_45_46_47_48_49_50_Shell.indd
Linux+ 12/2009
44
2009-10-15, 13:00
práctica
Retorno al Shell
La mayoría de los comandos cuentan con la de esta manera irá directamente a la sección abandone el actual y que pase a serlo aquel
opción -h (o también --help), que muestra en correspondiente.
que se especificó en el comando cd.
Ejemplos:
pantalla la sintaxis del comando junto con sus
Ejemplo:
opciones principales. Esto es útil si ya se co$ pwd
noce la funcionalidad del comando pero no se $ info date
/home/usuario
recuerda alguna opción en particular.
Documentación adicional
Generalmente en todas las distribuciones se Si ejecutamos:
incluye un directorio con documentos que
Si se sabe el nombre del comando podemos pueden ser muy útiles. Su ubicación debería $ cd /usr/share/doc
utilizar whatis que devuelve una descripción ser /usr/share/doc/, de no ser así probar
con /usr/doc/.
Y luego hacemos:
breve del comando consultado.
En algunos casos la información conteniWhatis analizará la descripción de todos
los comandos disponibles en busca de la cadena da se reduce a un simple archivo 'leame' ('read- $ pwd
ingresada. En la información devuelta observa- me') mientras que en otros podemos encontrar /usr/share/doc
remos que algunos comandos van seguidos de información realmente útil.
Comprobamos que luego de ejecutar el comanun número o letra encerrado entre paréntesis,
do cd el directorio actual pasó a ser /usr/
éstos hacen referencia al número de sección del Cómo navegar
share/doc.
manual. También puede ocurrir que devuelva por el Sistema de Archivos
Generalmente al abrir una terminal se parte
más de un resultado para el mismo comando, Al comienzo de éste artículo describimos allo que indica que hay más de un uso para dicho gunos de los directorios más importantes del del directorio home del usuario con el que está
sistema. A continuación veremos algunos trabajando.
comando.
comandos que sirven para desplazarse a traPara facilitar el trabajo, GNU/Linux no obWhatis equivale a utilizar man -f.
ves de ellos. Pero primero hay dos concep- liga a recordar la ruta de acceso al directorio perEjemplo:
tos que debemos tener en claro: qué es una sonal, sino que permite utilizar el carácter ~ para
$ whatis time
ruta de acceso y qué son las rutas de acceso hacer referenciarlo. De esta forma cuando se
absosultas y relativas.
esté en un directorio que no sea el propio, podSi no se está seguro de lo que se desea consulDe una manera simplificada, una ruta de remos regresar al home rapidamente tipeando.
tar y al realizar la búsqueda con whatis o man acceso es el trayecto más corto de directorios
Ejemplo: $ cd ~.
Existe otra manera más eficaz de cambiar
-f no se ha obtenido nada útil, se puede intentar por el que tenemos que desplazarnos desde
utilizar apropos. Este comando analiza las el directorio raíz para llegar a un directorio de directorio y es utilizando los comandos
descripciones de la misma manera que whatis o archivo en el que se está trabajando en ese ins- pushd y popd. pushd cambia al directorio
pero además presenta las correspondencias tante. Cada nombre de directorio se separa con especificado colocando el actual en la pila de
directorios (una pila es un tipo de almacenaparciales con la cadena que se ingresó.
el carácter /.
Todas las rutas de acceso absolutas deben miento de datos). Luego se pueden hacer todos
$ apropos time
comenzar con el carácter / es decir referencian los cambios de directorios necesarios y cuando
al directorio ráiz, mientras que las relativas no; se desee volver al primer directorio bastará con
apropos cumple la misma función que man -k. y se utilizan para indicar que el directorio refe- ingresar el comando popd.
Ejemplos:
renciado es un subdirectorio del actual.
$ man -h
Más ayuda
Info es el formato de documentación del proyecto GNU. Para acceder a esta documentación simplemente tipeamos el comando info
desde la línea de comandos. Esto nos presentará un documento de texto con un índice
de todos los documentos disponibles en este
formato. Cada línea del documento precedida por un asterisco (*) identifica un hiperenlace (que tienen un comportamiento similar
a los de HTML) que nos llevará a la sección
correspondiente; para ello bastará con
ubicarse sobre el item y presionar la tecla
ENTER.
Podemos obtener ayuda acerca del uso de
info presionando '?' y para salir de la aplicación
presionando 'q'.
Otra forma de utilizar info es ingresarlo
seguido del comando que se está buscando,
En qué directorio
me encuentro: pwd
El comando pwd (present working directory
– directorio actual de trabajo) sirve para saber
en qué directorio se encuentra el usuario en ese
momento. Al introducirlo sabrá exactamente
donde se encuentra ubicado.
Ejemplo:
$ pwd
/home/usuario
$ cd /usr/share/doc
$ pwd
/usr/share/doc
$ cd /etc
$ pwd
/etc
$ popd
$ pwd
$ pwd
/home/usuario
/home/usuario
Esto es principalmente útil cuando en el Al hacer popd regresa al directorio desde
prompt no muestra la ruta de acceso.
donde se ejecutó pushd y luego la pila de
directorios se limpia.
Cómo cambiar de directorio: cd
Nota: el comando pwd no es necesario utiEl comando cd permite cambiar del directorio lizarlo, en el ejemplo se lo incluye sólo para
actual a otro especificado, haciendo que se hacerlo más claro.
45
www.lpmagazine.org
42_43_44_45_46_47_48_49_50_Shell.indd
45
2009-10-15, 13:00
práctica
Retorno al Shell
Cómo mostrar el contenido de
un directorio: ls
ls sirve para obtener un listado de los archi-
vos de un directorio. Si no se indica lo contrario mostrará el contenido del directorio
actual.
Sintaxis:
ls [opciones] [archivo..]
A continuación se verán algunas de las opciones más comunes:
•
•
•
•
•
-C - Lista los archivos en columnas, ordenados verticalmente.
-F - Añade detras cada nombre de directorio un '/', y detras cada nombre de un
ejecutable un '*'.
-R - Lista recursivamente los subdirectorios encontrados.
-d - Lista nombres de directorios como
otros archivos, en vez de listar sus contenidos.
-l - Permite visualizar más información
acerca de los archivos mostrados. Al principio puede parecer un poco complicado
pero a continuación damos algunos conceptos para facilitar su comprensión.
mación sobre los atributos de cada archivo.
El primer carácter determina si se trata de
un archivo (en cuyo caso el primer será una
a) o directorio (en este caso el carácter es
una d) . Pueden haber casos donde el primer
carácter sea una l que indica que se trata de
vínculos o nombres de archivos alternativos
para otros archivos o directorios. Los nueve
carácteres restantes estan agrupados en tres
grupos de tres letras que indican si el archivo
es de lectura, escritura y ejecutable para el
usuario, para el grupo y para del resto de los
usuarios.
Luego de este grupo de 10 carácteres
aparece un número que se refiere a los vínculos del archivo. En general es un dato poco
importante para la mayoría de los usuarios.
A continuación aparece el nombre del
propietario y el nombre del grupo al que
pertenece el archivo o directorio. El siguiente
dato es la cantidad de espacio en disco que
ocupa el archivo o directorio. En el caso de
tratarse de un directorio, no se muestra el
espacio que ocupan los archivos contenidos
en él sino el espacio que ocupa el archivo de
datos que controla el directorio. Este valor se
mide en bytes. Despúes del tamaño viene la
fecha y la hora en que se modificó por última
vez.
Para finalizar, en último lugar aparece el
nombre del archivo.
Primer línea del listado muestra el total de
elementos del directorio en cuestión.
Luego vienen las líneas en las que se detalla el contenido del directorio mostrándose •
una línea por cada elemento.
Los primeros 10 carácteres que aparecen
en la parte izquierda corresponden a al infor-
•
- a :De manera predeterminada en la lista mostrada por ls no se incluyen todos
los archivos a menos que especifique la
opción -a (all - todos) , esto hace que en
el listado aparezcan los archivos cuyos
nombres empiecen con un punto ' . ' (por
lo general estos nombres se utilizan para
archivos de control y configuración).
El comando ls tiene más opciones y pueden
consultarse haciendo: $ man ls
Ejemplos:
$ pwd
/home/usuario
$ ls -l -h
$ ls -t
$ ls -l /usr/share/doc/bash
Búsqueda de archivos
Para localizar un archivo es necesario conocer algo sobre él. Puede ser parte del nombre,
la fecha de creación o el tamaño.
El comando find
Si disponemos de algunos de los datos antes mencionados (nombre, fecha o tamaño),
se puede utilizar el comando find, que se
encargará de analizar todo el sistema de archivos en busca de aquellos que se correspondan con el criterio de búsqueda especificado.
Sintaxis:
- h : Utilizada con -l muestra los bytes
ocupados por los arhivos en otra unidad
(Ej. 14K, 13M, 4G). Equivale a utilizar find [path] [opciones]
[cadena a buscar]
la opción --human-readable.
Path: es la ruta de acceso desde la cuál se
comenzará la búsqueda.
Opciones:
•
•
•
•
•
•
Figura 3. Al ejecutar el ejemplo anterior visualizaremos en pantalla algo similar a lo mostrado en esta
figura
46
42_43_44_45_46_47_48_49_50_Shell.indd
-h , --help : muestra la ayuda del comando.
-name : Se realiza una búsqueda por nombre. Distingue entre mayúsculas y minúsculas.
-iname : igual que -name pero NO se
distingue entre mayúsculas y minúsculas.
-ctime n : Muestra los archivos cuyo
status haya sido cambiado en el tiempo
especificado en el sufijo n y está expresado en días.
-print : indica que muestre por pantalla
el resultado de la búsqueda. No suele se
necesario especificar esta opción.
-type c : Donde c puede ser reemplazada
por d si es un directorio, f (file) si se trata
de un archivo o por l si es link simbólico. De esta manera se visualizarán uni-
Linux+ 12/2009
46
2009-10-15, 13:00
práctica
Retorno al Shell
•
•
•
camente los archivos del tipo especificado.
-size n: Para buscar archivos de un tamaño n. Puede ir seguido de alguno de los
siguientes sufijos:
– c para bytes.
– K para kilobytes.
– M para megabytes.
– G para gigabytes.
-user usuario : Restringe la búsqueda
a los archivos del usuario especificado
en 'usuario'.
-group grupo : Restringe la búsqueda
a los archivos del grupo especificado en
'grupo'.
Ejemplos:
$ find /usr/share/doc/ -name '*.html'
$ find / -type f -name 'sound*'
$ find / -ctime 2
$ find ~/ -ctime +5
Sintaxis:
•
grep [opciones] [cadena a buscar]
Ejemplo: $ rm -i *.png
Al dar entrada al comando anterior, boOpciones principales :
rrará del directorio actual todos los archivos
cuya extensión sea .png solicitando confir• -c: Muestra la cantidad de líneas que mación por cada uno de ellos. De no tener los
satisfacen la condición.
permisos necesarios mostrará el mesaje 'per• -i: no se distinguen entre mayúsculas y miso denegado' y el archivo no será borrado.
minúsculas.
Para evitar equivocaciones es convenien• -l: se muestran los nombres de los archi- te utilizar la opción -i siempre que se desee
vos que contienen líneas buscadas.
eliminar más de un archivo.
• -n: cada línea devuelta es precedida por
Cómo crear un directorio:
su número dentro del archivo.
• -s: no se muetsran los mensajes que in- mkdir
dican que un archivo no existe o no es Los directorios son muy útiles para organizar
los archivos. Para crear un directorio debeaccesible.
• -v: se muestran sólo las líneas que NO mos utilizar el comando mkdir.
Sintaxis:
satisfacen el criterio de búsqueda.
archivo...
Ejemplos:
mkdir [opciones] directorio..
$grep -c 'GNU' /usr/share
Opciones:
$ find /usr/share/doc -size 1024k
El comando locate
Este comando es muy fácil de usar. Para
ejecutarlo simplemente hay que incluir el
nombre del archivo a buscar.
locate se ejecuta de forma muy rápida
debido a que no busca el archivo por todo el
sistema de archivos sino que lo hace dentro
de una base de datos dedicada a este fin.
Sintaxis:
/doc/bash/copyright
27
$grep -n 'gnu' /usr/share
/doc/bash/copyright
bash
ftp.gnu.org:
/pub/gnu/bash
La desventaja que tiene el comando locate es
que en caso de no estar actualizada la base de
datos no encontrará lo que se busca a pesar
de existir. En ese caso habrá que utilizar el
comando updatedb para actualizarla.
Ejemplo:
/bash-3.1.tar.gz
•
-m modo, --mode=modo: Crea los directorios con los permisos especificados en
'modo'.
-p, --parents : Crea los directorios padre
que falten para cada argumento directorio. No hace caso de argumentos que correspondan a directorios existentes. Por
ejemplo, si existe un directorio /prueba
y se ingresa mkdir /prueba da error,
pero mkdir -p /prueba no lo da.
-verbose: Muestra un mensaje para cada
directorio creado. Esta opción es útil
cuando se utiliza con --parents.
En este ejemplo muestra que la línea que contiene la cadena ´gnu' precedida por el número
de la misma (7):
Ejemplos:
$grep -n 'GNU' /usr/share
/doc/bash/copyright
$ locate soundcard
•
Al ejecutar el comando anterior devuelve
la cantidad de líneas (27) que contienen la •
cadena 'GNU':
7:
locate [archivo]
-r , -R o --recursive : Borra recursivamente directorios.
Cómo trabajar con archivos
y directorios
Como resultado de la búsqueda anterior devolverá todos los nombres de archivos (y directoElimación de archivos y directorios: rm.
rios) que contienen la palabra soundcard.
El comando rm se utiliza para eliminar tanto
Cómo buscar una cadena
archivos como directorios. Por defecto rm no
de carácteres dentro de
elimina directorios.
un archivo
Sintaxis: rm [opciones] archivo
Sin dudas el comando grep es uno de los más
Opciones principales:
potentes y útites del sistema operativo.
grep recorre el cuerpo de los archivos •
-f: No pide confirmación. No escribe
en busca de la palabra o cadena especificada
mensajes de diagnóstico.
mostrando las líneas que concuerdan con el • -i : Pide confirmación de borrado por
patrón introducido.
cada archivo.
$ pwd
/home/usuario
$ mkdir prueba
En el ejemplo anterior se crea el directorio
'prueba' a partir del directorio actual, es decir
que 'prueba' pertenecerá al directorio 'usuario' que a su vez pertenece a 'home' y éste
al raíz.
$ mkdir -p prueba/archivos_pdf
En este ejemplo se crea el directorio 'archivos_pdf' dentro del directorio 'prueba' que
pertenece al actual; pero en caso de no existir
este último también lo creará para luego crear
'archivos_pdf'.
47
www.lpmagazine.org
42_43_44_45_46_47_48_49_50_Shell.indd
47
2009-10-15, 13:00
práctica
Retorno al Shell
Aquí se copia el archivo imagen.png en otro
llamado lafoto. Si existe un directorio llamado lafoto el archivo se copiará dentro de ese
directorio.
Recordar que el comando pwd no es ne- cp [opciones] archivo
_origen archivo_destino
cesario ingresarlo y simplemente se lo introduce para hacer más claro el ejemplo.
Opciones:
$ mkdir prueba varios
•
Al darle entrada al comando creará los directorios 'prueba' y 'varios' ambos tendrán la
misma jerarquía y pertenecerán al directorio •
actual.
Borrar un directorio:
rmdir (remove directory)
•
Este comando borra uno o más directorios
siempre y cuando estos estén vacíos.
•
Sintaxis:
•
rmdir [opciones]
nombre_directorio...
nombre_directorio: es el nombre del directo- •
rio a eliminar. En caso de que se quiera eliminar más uno, cada nombre deberá ir separado
por un espacio.
•
Opciones:
•
-p : si el directorio incluye más de un
directorio, borra todos comenzando desde el de nivel inferior hasta llegar al de
nivel superior.
Copia de archivos: cp
-i, --interactive: Modo interactivo. Pregunta si se desea sobreescribir un archivo destino existente.
-p: Preserva los permisos, el propietario
y el grupo de los archivos originales,
más la fecha y hora de última modificación y el de último acceso.
-f, --force: Elimina los archivos de destino
que ya existan sin pedir confirmación.
-u, --update: Copia un archivo solamente cuando el origen es más nuevo que el
destino o cuando el destino no existe.
-v, --verbose: Muestra el nombre del archivo que se está copiando a medida que
va procesando.
-b, --backup: Hace copias de respaldo
de archivos que están a punto de ser
sobreescritos o borrados.
-r: Copia directorios recursivamente. Todos los nombres de archivo de origen serán tratados como directorios y se copiarán
recursivamente en el directorio destino.
$ cp imagen.png
imagen2.png
En este ejemplo se copiará el archivo llamado imagen.png a otro imagen2.png. Si el
archivo destino existe será reemplazado por
el nuevo.
$ cp -r /var/log
/samba prueba
Al ejecutar el ejemplo anterior, se crearía
un directorio samba en el directorio prueba
y se copiaría el contenido del directorio /var/
log/samba en el nuevo directorio prueba/
samba.
Cómo mover archivos
y directorios: mv
El comando mv permite mover o renombrar
archivos o directorios.
Si el último argumento nombra a un
directorio existente, mv mueve cada uno de
los archivos a ese directorio. De lo contraEjemplos:
rio, si sólo se dan dos nombres de archivos,
$ cp *.pdf documentos
renombra el primero al segundo. Es un
error que el último argumento no sea un
En el ejemplo anterior copia todos los archi- directorio y se den más de un archivo como
vos de extensión .pdf en el directorio docu- origen .
mentos que pertenece al directorio actual:
Sintaxis:
Este comando permite copiar un archivo en
otro nuevo archivo destino, o bien copiar
uno o más archivos en un único directorio
destino.
$ cp imagen.png lafoto
Sintaxis:
mv [opciónes] archivo
_origen...
archivo_destino
Opciones:
•
•
•
-i: Pide confirmación cuando el destino
existe.
-f, --force: Borra los ficheros de destino
existentes sin preguntar al usuario.
-v, --verbose: Muestra el nombre del
archivo que se está moviendo a medida
que va procesando.
Ejemplos:
$ mv foto1.png
foto2.png
documentos
Figura 4. Observamos en la figura el resultado de ejecutar cal -3 y cal.
48
42_43_44_45_46_47_48_49_50_Shell.indd
En este ejemplo mueve los archivos foto1.
png y foto2.png al directorio documentos
Linux+ 12/2009
48
2009-10-15, 13:00
práctica
Retorno al Shell
conservando los nombres originales de los $cat documento1
documento2
archivos:
Muetra en pantalla, secuencialmente y según •
el orden especificado, el contenido de los
Aquí se mueven todos los archivos de ex- arvhivos indicados:
tensión .pdf al directorio documentos que
•
$cat documento1
pertenece al directorio actual:
$ mv *.pdf documentos
pulse una tecla ilegal mostrará "[Press 'h'
for instructions.]" (Pulse 'h' para obtener
instrucciones).
-p: No realizar desplazamiento. En lugar
del desplazamiento, limpia toda la pantalla y para después mostrar el texto.
-s: Reducir múltiples líneas en blanco
una.
documento2 >
Las siguientes son opciones que se utilizan
dentro del comando more, es decir cuando
El contenido de los archivos especificados se está visualizando el contenido de un
(documento1 y documento2) es grabado en archivo:
documento3:
• Barra espaciadora: avanza a la página
$cat documento1
siguiente.
documento2 >>
• Tecla q: sale del programa more y vueldocumento3
ve a la línea de comandos.
• Tecla s: Pasa a la siguiente línea de
El contenido de documento1 y documento2
texto. Se utiliza desplazarse por el texto
es añadido al final de documento3:
lentamente.
• Tecla f: Avanza toda una página del ar$cat >mitexto
chivo.
• Tecla / <patrón>: Busca y avanza hasta la
Acepta lo que se introduce por el teclado y lo
cadena de texto especificada por patrón.
graba en mitexto (se crea mitexto). Para fina- • Tecla b: retrocede una página del archivo.
lizar se debe presionar <ctrl>d:
• Tecla ? o h: muestra la ayuda para el
comando more.
documento3
$ mv foto1.png foto.png
En el ejemplo anterior se le cambia el nombre
al archivo foto1.png de manera que se su nuevo nombre sea foto.png:
$ mv documentos
mis_documentos
Si el nombre origen es un directorio, se
cambiará el nombre por el especificado en
destino.
En nuestro caso, y asumiendo que el
directorio documentos existe, se le cambia el
nombre de manera que su nuevo nombre sea
mis_documentos.
Cómo visualizar archivos:
cat
Una forma fácil de visualizar el contenido de
archivos es utilizando el comando cat. También puede utilizarse junto con un operador
de redireccionamiento para crear un archivo
que sea el resultado de varios archivos concatenados. cat muestra el contenido de los
archivos cuyos nombres se introduzcan, uno
a continuación del otro sin hacer pausas durante el despliegue de la información. Esto
puede ser un problema cuando se trata de
archivos muy extensos.
Sintaxis:
$cat /etc/passwd
El comando less
En el ejemplo anterior muestra el contenido less al igual que more, permite visualizar el
del archivo passwd que se encuentra en el contenido de un archivo de texto aunque es un
directorio /etc.
visor más versátil y moderno que more. Una
de sus principales diferencias es la capacidad
Visualización de archivos
que tiene less para moverse por el interior de
por páginas: more y less
los archivos que se estan visualizando.
Como dijimos, el comando cat sirve para
Sintaxis:
visualizar el contenido de archivos comodamente cuando no son muy grandes. Pero less [opciones] nombre_archivo
existen otros comandos que han sido especialmente creados para visualizar archivos A continuación se dan algunos comandos
cat [opciones]
extensos desde la línea de comandos, estos que permitirán moverse por el archivo vinombre_de_archivo
sualizado:
son: more y less.
Para utlizar more, solo hay que ingresar
Opciones:
el comando seguido del nombre del archivo. • Barra espaciadora: avanza a la página
siguiente.
Sintaxis:
• -E: muestra el signo $ al final de cada
• Tecla b: retrocede una página.
more [opciones] nombre_archivo
línea.
• Tecla q: Cierra el programa less y vuelve
• -n, --number: numera todas las líneas
a la línea de comandos.
Opciones:
mostradas.
• Flecha arriba / abajo: retrocede o avanza una línea.
• -num: Esta opción especifica un entero • /<patrón>: Busca y avanza hasta la caEjemplos:
que indica el tamaño de la pantalla (en
dena encontrada. Esta búsqueda se reali$cat mitexto
líneas).
za desde la posición en que se encuentre
• -d: more mostrará el mensaje "[Press
situado en ese momento hasta el final
Muestra en pantalla el contenido del archivo
space to continue, 'q' to quit.]" (pulsa esdel archivo.
mitexto.
pacio para continuar, 'q' para salir) y en • ?<patrón>: Busca hacia atrás, desplavez de emitir un pitido cada vez que se
zándose hasta la cadena encontrada.
49
www.lpmagazine.org
42_43_44_45_46_47_48_49_50_Shell.indd
49
2009-10-15, 13:00
práctica
Retorno al Shell
•
Tecla h: Muestra la ayuda para el comanando.
Cómo contar líneas,
palabras y carácteres: wc
y la cantidad de carga que ha tenido que soportar el sistema.
Podemos utilizar el comando wc para saber de
cal: Muestra el calendario en formato
Visualizar partes de un archivo: forma rápida y sencilla cuantas líneas, palab- tradicional.
head y tail
ras y carácteres tiene una archivo. Si se espeEjemplos:
head muestra sólo las 10 primeras líneas de cifica más de un archivo muestra también el
$cal 2007
cada archivo especificado.
total de todas las líneas.
Sintaxis:
Sintaxis:
Mostrará el calendario para todo el año 2007:
head [opciones] archivo1..
wc [opciones] archivo
Opciones:
Opciones:
$cal 04 1998
Muestra el calendario de abril de 1998:
-c: muestra sólo la cantidad de bytes.
$cal -3
-l: muestra sólo la cantidad de líneas.
-m: muestra sólo la cantidad de carácteres.
-w: muestra sólo la cantidad de palabras. Muestra el calendario del mes actual, el ante•
-L: muestra sólo la longitud de la palabra rior y el próximo.
who: Muestra los usuarios que tienen
más larga.
una sesión iniciada en el sistema junto con el
nombre de la terminal de control y la fecha
Ejemplos:
y hora en que iniciaron y la IP desde la que
$wc /usr/share/doc/grub/AUTHORS
están conectados.
54
278 2056 /usr/share/doc/
El comando tail es inverso a head, es decir en
clear: Este comando limpia la pantalla
lugar de mostrar las primeras líneas de cada grub/AUTHORS
de la consola.
archivo, muestra las 10 del final.
free: muestra la cantidad de memoria libre
En el ejemplo muestra la cantidad de líneas y usada del sistema. free muestra la cantidad toEjemplos:
(54), palabras (278) y carácteres (2056) que tal de memoria fisica y de intercambio (swap)
$head /usr/share/doc
contiene el archivo AUTHORS.
presente en el sistema, así como la memoria
/grub/AUTHORS
compartida y los buffers usados por el nucleo .
•
: muestra los primeros N bytes de cada archivo especificado. Si se antepone el signo ' - ' al
número muestra los últimos N bytes.
-n, --lines=[-]N: muestra la cantidad de líneas especificadas por el parámetro N. Si N está precedido del signo ' - ' , mostrará las últimas líneas del
archivo.
-c, --bytes=[-]N
•
•
•
•
•
$wc -w /usr/share/doc/grub/AUTHORS
En el ejemplo se visualizan las 10 primeras 278 /usr/share/doc/grub/AUTHORS
líneas del archivo AUTHORS:
Al darle entrada al comando se visualizará
$head -n15 /usr/share
unicamente la cantidad de palabras que
/doc/grub/AUTHORS
hay en el archivo especificado, 278 en este
caso.
Como en el ejemplo anterior, pero en lugar de
Resumen de otros
mostrar 10 líneas mostrará 15.
comandos útiles
Sintaxis:
file: Este comando realiza una serie de comtail [opciones] archivo1..
probaciones en un archivo para tratar de identificar su tipo. Tras su ejecución este comanOpciones:
do muestra el tipo del archivo e información
acerca del mismo.
• -c, --bytes=N : muestra los últimos N
Ejemplo:
bytes de cada archivo especificado.
• -n, --lines=N: muestra la cantidad $ file /usr/share/doc
/grub/AUTHORS
de líneas especificadas por el paráme/usr/share/doc/grub
tro N.
/AUTHORS: ASCII English text
Ejemplos:
date: Muestra por pantalla el día y la hora. Si
se tiene privilegios de superusuario, también
/doc/grub/AUTHORS
permite cambiar la fecha y hora actuales.
Uptime: Devuelve la hora actual, el núEn el ejemplo se visualizan las 15 últimas mero de usuarios que han iniciado una sesión,
líneas del archivo AUTHORS.
el tiempo que lleva el sistema funcionando
$tail -n15 /usr/share
50
42_43_44_45_46_47_48_49_50_Shell.indd
Conclusión
GNU/Linux dispone de un gran número de
utilidades y debido a esto es imposible explicar cada una de ellas en este artículo. Por
ello, se han tratado de incluir principalmente
comandos que pueden ser útiles para aquellos
usuarios que estan haciendo sus primeras
incursiones en GNU/Linux, pero al mismo
tiempo se han incluido conceptos que consideramos les permitirán construir una buena
base que sirva de sustento para los conocimientos que vayan adquiriendo.
Sobre el autor
Daniel A. Benitez es desarrollador de
software desde hace 20 años, ha trabajado en distintas tecnologías y sistemas
operativos. Su primer contacto con Linux
fue en el año 1995, y a partir del 2000 lo
adoptó como su sistema operativo. Actualmente brinda consultoría a distintas
empresas sobre desarrollo de software, TI
y seguridad informática. Se le puede escribir a la dirección: danielbenitez.itpro@
sion.com
Linux+ 12/2009
50
2009-10-15, 13:00
Pensando en llegar al máximo número de
personas interesadas con la información
de alto nivel, hemos decidido cambiar la
versión papel a la versión electrónica
y a partir del enero 2010 repartirla gratuitamente entre todas las persona que quieran profundizar su conocimiento de Linux
y tecnologías libres.
El nivel y el contenido de la revista no van
a cambiar así como su periodicidad: Linux+
seguirá un mensual.
Para recibir la revista cada mes entrad en
nuestra web: www.lpmagazine.org/es y registrados a nuestro newsletter. Recibiréis la
revista completa en formato electrónico sin
ningún coste.
Esperamos que este cambio sea un buen comienzo del año 2010 y que sigáis
con nosotros el año que viene.
Équipo de LiNUX+
51_rekalma.indd
1
2009-10-23, 14:59
práctica
Introducción a LVM
Introducción a LVM:
guía práctica
Sebastian Pignataro
[email protected]
LVM es una implementación de volúmenes lógicos para el kernel de Linux. Con ellos
podemos agregar particiones en volúmenes lógicos, agrandar o achicar el tamaño
de una partición en caliente, sin reiniciar el sistema ni dejar de prestar servicio.
También nos dará la opción de crear snapshots y muchas cosas más.
E
l propósito de este artículo es el de instruir
de forma rápida, sencilla y práctica a nuevos
administradores al fascinante mundo de lvm.
Éste está dotado de flexibilidad y aprender
a usarlo afianzará nuestros conocimientos como administradores de sistemas, además de simplificar tareas diarias
y futuros inconvenientes con el tratamiento de datos y particiones. Antes de comenzar quisiera aclarar dos puntos. El
primero es que a pesar de que este artículo está pensado para principiantes es de vital importancia tener conocimientos
básicos sobre Linux y particionado de disco. La segunda es
que LVM es un excelente compañero de RAID, si bien en
este articulo no se verán conceptos sobre RAID. Sugiero
utilizar LVM sobre un RAID de tipo 1. Generalmente las
personas se introducen al mundo de la informática en ordenadores personales. Pero, ¿qué pasa cuando nos movemos
entre servidores? Las herramientas y soluciones son totalmente distintas a las que normalmente emplearíamos en un
ordenador personal. Por eso analicemos lo siguiente: si bien
lo que aprenderemos en este artículo será de utilidad para
ser aplicado en servidores, no dejemos de lado la opción de
52
52_53_54_55_56_57_LVM.indd
utilizarlo en un ordenador personal o puesto de trabajo, ya
que nos puede ahorrar ciertos dolores de cabeza al momento
de redistribuir el espacio en disco. Para comprender cómo
puede ayudarnos lvm analicemos estos problemas los cuales yo solucionaría con lvm.
•
•
•
•
•
¿ Qué deberíamos hacer si nuestra partición /home se
queda sin espacio?
¿ Qué solución implementarías ante el problema de generar snapshots de los discos rígidos de un servidor el
cual es accedido por usuarios inexpertos? (borran información sin quererlo).
Ante la situación de tener que agregar o quitar espacio
a una partición, ¿reinstalar todo un sistema es lo más
acertado?
¿Existe alguna manera de brindarle más espacio a determinada partición en caliente? (Sin reinstalar el sistema y -lo que sería mejor- sin reiniciar el sistema).
De tener la necesidad de restaurar un snapshot de nuestra partición principal ¿podríamos hacerlo al vuelo y en
caliente?
Linux+ 12/2009
52
2009-10-14, 17:20
práctica
Introducción a LVM
•
•
¿Al tener varios discos rígidos existe alguna forma de poder concentrar todo ese
espacio como un único disco o una única
partición?
¿Podría espejar discos sin la necesidad de
un raid1?
Para todo esto existe una respuesta o solución
y es lvm. Las siglas lvm quieren decir LOGICAL VOLUME MANAGER implementado
por Heinz Mauelshagen para el sistema operativo Linux. No obstante también lo podremos
encontrar en HP UX y en IBM AIX. Ahora,
¿por qué debería un administrador utilizar lvm?
Porque lo que nos permite hacer lvm es manejar el almacenamiento de nuestro servidor de
una forma muy eficiente, dotándonos de la posibilidad de dimensionar (agrandar o achicar)
el tamaño de nuestras particiones mientras están siendo utilizadas, sin que ello nos detenga
en lo absoluto.
Otra gran utilidad son las snapshots; lvm nos
provee de esta fabulosa herramienta para capturar imágenes de nuestras particiones, creando así un punto de restauración. Estas pueden
ser restauradas sin necesidad de reiniciar el
sistema de archivos. También tendremos la opción de agrupar el espacio de varios discos en
uno solo; de esta forma teniendo 3 discos de
4 GB podemos obtener una única partición de
2 GB. Nuestro sistema operativo sólo nos
mostrará una partición única gracias al nivel
de abstracción de este peculiar software.
Teoría básica y puesta en marcha
Comencemos con la teoría básica ya que será
primordial tener en claro vocablos y conceptos
de este sistema antes de iniciarnos en la práctica. Repasemos los puntos claves o también podríamos definirlo como ventajas que son: el poder redistribuir la carga de datos dimensionados en el disco duro sin tener que detener ningún
servicio que allí aloje datos, permite dar de baja
a un disco o partición defectuosa para evitar
futuros inconvenientes, nos facilita una herramienta llamada snapshots con la cual podemos
hacer copias de seguridad exactas de nuestras
particiones; también consta de otras tantas que
iremos conociendo a lo largo de este artículo.
En lo que se refiere propiamente a la teoría
debemos conocer que en lvm hay tres palabras
mediante las cuales haremos referencia. Phisical Volum0e (PV – Volumen Físico), Volume
Group (VG – Grupo de Volumen) y Logical
Volume (LV – Volumen Lógico). Definamos un
poco estas palabras.
Phisical Volume o PV: lvm usa la palabra PV
para referirse a discos, particiones o cualquier
Listado 1. Ejemplo del particionado de un disco de 80 GB de forma textual, tal y como lo muestra Linux
Command (m for help): n
Command action
e
p
p
extended
primary partition (1-4)
Partition number (1-4): 1
First cylinder (1-9729, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-9729, default 9729): +50G
Command (m for help): n
Command action
e
p
p
extended
primary partition (1-4)
Partition number (1-4): 2
First cylinder (1-9729, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-9729, default 9729): +30G
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Listado 2. El resultado de la salida del comando pvdisplay
[email protected]:/dev/my_LVM# pvdisplay
--- Physical volume ---
PV Name
/dev/sda2
VG Name
my_LVM
PV Size
74.43 GB / not usable 6.62 MB
Allocatable
yes (but full)
Total PE
4763
PE Size (KByte)
16384
Free PE
0
Allocated PE
4763
PV UUID
KSDINc-2BiV-dG7B-qqsO-0KJ3-W8xu-
n011RY
--- Physical volume --PV Name
VG Name
/dev/sdb1
my_LVM
PV Size
Allocatable
PE Size (KByte)
76.69 GB / not usable 654.00 KB
yes
16384
Total PE
4908
Allocated PE
4901
Free PE
PV UUID
7
3QR0Ng-X6Ey-9GJT-UwpV-YLoK-DNzh-yGv8V7
53
www.lpmagazine.org
52_53_54_55_56_57_LVM.indd
53
2009-10-14, 17:20
práctica
Introducción a LVM
Ubuntu, en Gentoo emerge LVM2 o en Fedora
yum LVM2. Finalizada la instalación de las
herramientas pertinentes estaremos listos para
comenzar, cabe destacar que también tendremos un servicio nuevo en /etc/init.d/.
Listado 3. El resultado del comando vgdisplay
[email protected]:/dev/my_LVM# vgdisplay
--- Volume group --VG Name
my_LVM
System ID
Format
lvm2
Metadata Areas
2
Cómo usamos todo
lo aprendido
Es tiempo de aplicar lo aprendido. Comencemos por la creación de una unidad lógica LV
VG Status
resizable
que es donde podremos alojar nuestros datos,
MAX LV
0
ésta consta de tres simples pasos. Lo principal
Cur LV
2
es tener una partición física que será nuestro
Open LV
2
PV o phisical Volume. Por lo cual lo que haMax PV
0
remos sera invocar el comando fdisk seguido
Cur PV
2
del dispositivo que usaremos para la creación
Act PV
2
de nuestro lvm, por ejemplo fdisk /de/sda.
VG Size
151.11 GB
Allí crearemos una partición nueva con la tePE Size
16.00 MB
cla “n”. Luego, presionamos la tecla “p” para
Total PE
9671
indicar que será una partición primaria, y por
Alloc PE / Size
9664 / 151.00 GB
último indicamos con el numero 1 que será la
Free PE / Size
7 / 112.00 MB
primera partición primaria. Después de esto
VG UUID
SxZ3vb-rJZ1-DV3M-Gxpk-17sa-Ruvk-2Jdxk4
resta indicar los parámetros de nuestra partición. Podemos aceptar los parámetros por
dispositivo que el S.O. vea como un disposi- cd /usr/src/linux
defecto (menos el del espacio en disco que lo
tivo de almacenamiento, ejemplo un RAID. menuconfig
indicaremos con un signo de más delante el
Utilizando lvm podemos agrupar varios PV en
numero en Giga bytes y una G mayúscula). Si
Para darle soporte lvm a nuestro kernel ten- nos resulta más sencillo podemos utilizar la
uno o varios VG.
Volume Group o VL: es aquí donde se al- dremos que habilitar lo siguiente.
utilidad cfdisk para esta tarea. Aquí daremos
macenan los volúmenes lógicos LV (Logical
un ejemplo de cómo particionar un disco para
Volume), los cuales podemos dimensionar, [*] Multiple device driver suppot
el uso de lvm con fdisk... fdisk /dev/sda.
agregar o quitar del sistema. Podemos conside- (RAID and LVM)
rar a un VL como una partición virtual o un <*>Logical Volume manager (LVM)
• pulsamos la tecla “n” para crear una nueacuerdo lógico entre un VL y varios PV. Con- support
va partición,
tienen la información que engloba a los volú• presionamos la tecla “p” para una partiUna vez configurado el código fuente basta
menes físicos o PV.
ción primaria,
Logical Volume o LV: estos son volúme- compilar con make, make modules y make mo- • presionamos el número 1 para indicar que
nes los cuales el sistema reconocerá como par- dules_install; luego de configurar grub sólo
será la primera partición de nuestro disco,
ticiones, simple y llanamente. Estos pueden queda instalar las herramientas que utilizare- • pulsamos la tecla “t” que al tener una sola
ser agregados, quitados, e incluso redimensio- mos para gestionar nuestro lvm. Para lo cual
partición automáticamente la seleccionanados al igual que los VG. A diferencia de los invocamos apt-get install LVM2 en Debian/
rá, y especificamos el tipo de partición
VG a estos les podremos dar formato y serán las
particiones donde alojaremos nuestros datos
o el propio S.O. Los LV se alojan en los PV.
Pasemos a la puesta en marcha. Para poder
utilizar lvm sólo necesitamos tener soporte en
el kernel y cargar el modulo correspondiente.
No es necesario parchearlo ya que está incluido
por defecto. Si no tenemos soporte en el kernel para lvm debemos compilar nuestro propio
kernel. Para ello descargamos el código fuente
del kernel usando nuestro método preferido,
wget desde su sitio web, o mediante nuestro administrador de paquetes sea apt, yum o emerge. Nos posicionamos en el directorio correcto
y levantamos nuestro entorno de configuración favorito.
Metadata Sequence No
3
VG Access
read/write
Figura 1. Ejecutando LVM GUI
54
52_53_54_55_56_57_LVM.indd
Linux+ 12/2009
54
2009-10-14, 17:20
práctica
Introducción a LVM
Listado 4. El resultado del comando lvdisplay
[email protected]:/dev/my_LVM# lvdisplay
--- Logical volume --LV Name
/dev/my_LVM/swap
VG Name
my_LVM
LV UUID
uuTYEj-EvI5-okXA-JCx4-X2Kl-AjP2-
hGd6AG
LV Write Access
read/write
LV Status
available
# open
2
pvcreate /dev/ sda1 sda2
LV Size
4.00 GB
Current LE
256
Segments
1
Allocation
inherit
lvcreate
256
mkdir /media/datalvm
auto
Read ahead sectors
- currently set to
Block device
vgcreate -s 16M my_LVM /dev/sda1
/dev/sda2
252:0
mount -t ext3 /dev/my_LVM/data /mnt/
Este procedimiento tendremos que repetirlo
cada vez que queramos crear un Volumen
Lógico. Una vez finalizado este proceso tendremos funcionando un volumen lógico lvm
y dirigiéndonos al directorio /dev/my_LVM y
lanzamos un ls nos mostrara los LV creados.
datalvm
LV Name
/dev/my_LVM/root
VG Name
my_LVM
LV UUID
jDK4z9-M0I5-lRjt-6NV0-lRuL-fn3b-
G1njlQ
LV Write Access
read/write
LV Status
available
# open
1
LV Size
147.00 GB
Current LE
9408
Segments
2
Allocation
inherit
auto
Read ahead sectors
- currently set to
Block device
•
•
•
-n data -L 10G my_LVM
mkfs -t ext3 m1 -v /dev/my_LVM/data
--- Logical volume ---
•
/dev/my_LVM/data, mediante lo cual podemos
asociarla a la hora de montar la partición. Por último nos resta darle formato a la partición con el
comando mkfs y el parámetro -t ext3 para darle
formato ext3 (mkfs -t ext3 /dev/sdx). Posteriormente creamos un directorio donde montarlo
con el comando mkdir y después lo montamos
con el comando mount al igual que lo haríamos
con cualquier otra partición.
Pasos a seguir:
Tips para administrar nuestros
Volúmenes lógicos
256
252:1
que será. En nuestro caso LVM o sea que
teclearemos “8e”,
presionamos <enter> para aceptar los parámetros por defecto,
indicamos con el signo “+” y en número
la cantidad de espacio que deseamos más
la letra M o G dependiendo de si son Giga
bytes o Mega bytes,
con la tecla “p” podremos visualizar el
resultado de este proceso,
desde luego presionamos la tecla “w” para
salvar los cambios.
Una vez que tengamos creadas las particiones
de tipo 8e procederemos a utilizar las herramientas que instalamos para manipular nuestro
lvm. Para ello emplearemos estos tres comandos: pvcreate, vgcreate y lvcreate. Lo que haremos con estos tres comandos será inicializar
los volúmenes físicos, incluirlos en un grupo
de volumen y crear una partición en sí con formato ext3. Para entender mejor los comandos
que utilizaremos usemos un escenario. Supon-
gamos que tenemos 2 particiones, una de 50 G y
otra de 30 G. Queremos crear nuestro lvm en
dichas particiones ya que queremos beneficiarnos de las ventajas del mismo, redimensionar
en el futuro nuestra partición; por ejemplo el
comando pvcreate /dev/sda1 /dev/sda2 creará
dos volúmenes físicos. Luego de haber definido
uno o más volúmenes físicos utilizables por nuestro lvm, lo que sigue es crear un VG (Volume
Group) sobre él o los dispositivos físicos con el
comando vgcreate nombre_del_vg /dev/sdax1
/dev/sdx2. Como podemos ver ya va tomando
color. Existiendo un PV y definido un VG
nos resta crear un LV, que será propiamente
nuestra partición donde alojaremos nuestros
datos luego. Para crear un LV invocamos el
comando lvcreate -L tamaño -n nombre nombre_
del_grupo donde por tamaño debemos reemplazarlo por el tamaño del LV que podremos expresarlo en M (mb) o G (gb) según corresponda. “Nombre” hace referencia al nombre que
llevará el LV, ese nombre será el que va a tener
el archivo /dev/grupolvm/lv. Un ejemplo sería
Bueno hemos concluido con la teoría, la instalación y la puesta en marcha. Pero, ¿qué pasa una
vez que está instalado y listo para usarse? Mejor aún, ¿qué pasa una vez que tenemos datos
dentro de nuestros volúmenes lógicos y queremos beneficiarnos de las ventajas que enumeramos al principio de este artículo? Por eso mismo analizaremos ejemplos que nos permitirán
manipular los LV y obtener información de los
mismos. Comencemos con los comandos básicos para obtener información como pvdisplay,
vgdisplay y lvdisplay. Con pvdisplay se nos mostrará la información correspondiente a cada
volumen físico, desde luego de esta salida en
pantalla lo que más nos importa son las líneas
PV Name, VG Name y PV Size que, como sus
nombres indican, nos mostrarán el nombre del
PV, el nombre del VG y el tamaño del PV. A continuación dejo explícito el resultado de la salida del comando pvdisplay de mi ordenador
(Listado 2).
Lo que sigue es vgdisplay, que recauda información sobre los VG (Volume Group) que
hay en el sistema, esos que creamos con vgcreate y que albergan los LV. Podemos tener uno
o mas VG. Aquí anexo la salida del comando
vgdisplay de mi ordenador. En esta salida los
datos mas interesantes son el VG Name que me
pondrá en evidencia el nombre del VG en este
55
www.lpmagazine.org
52_53_54_55_56_57_LVM.indd
55
2009-10-14, 17:20
práctica
Introducción a LVM
caso my_LVM, el formato ya que hay más de
una versión de lvm (lvm1 y lvm2), VG Size
que nos informará el tamaño completo del
VG; en este caso son 151 GB (logrado uniendo dos discos SATA de 80 GB mediante lvm),
y finalizando Free PE que será el espacio libre en nuestro VG.
Por último lvdisplay, como es de esperar,
muestra la información sobre los LV o volúmenes lógicos; aquí nos será de gran ayuda
saber interpretar esta información. Las líneas
LV Name que es el nombre del LV (en mi
caso SWAP), LV Write Acces que nos informará si podemos escribir en el LV, LV Status
donde nos informa del estado del LV y por
último el LV Size que, como podremos intuir,
nos informa del tamaño del LV. Aquí les dejo
el resultado del comando lvdisplay de mi ordenador de escritorio (Listado 4).
Ahora a lo más divertido... aunque debemos ser prudentes ya que el mal uso de
alguno de estos comandos puede provocar
pérdida de información. Lo que haremos
será dividir en tres la serie de comandos que
aprenderemos, las secciones serán Redimensionar Volúmenes, Eliminar Volúmenes y Migrar los mismos. Por último y como frutilla
de la torta explicaré un poco de snapshots.
Para añadir más espacio a un VG, por
ejemplo agregar otra partición porque compramos un disco adicional y queremos agregarlo al lvm. Primero debemos inicializar el
volumen físico con pvcreate y luego para extender el espacio usamos el comando vgextend.
La sintaxis es la siguiente vgextend Volume_
Group Phisical_Volume, un ejemplo sería el
siguiente:
Figura 2. Salida DF por consola
Extending logical volume web
to 4.00 GB
Logical volume DATA successfully
resized
¡¡¡Es el momento de quitar!!!, para eliminar
un PV de un grupo de volumen usamos el
comando vgreduce. Recuerda que los volúmenes deben estar vacíos ya que perderás
toda la información que en ellos haya. La sintaxis empleada es vgreduce Volume_Group
Phisical_Volume:
donde se encuentran las áreas físicas deseadas
a migrar, y por último Phisical_Volume_destino es el destino físico donde se moverán. De
no especificar este último lvm buscará volúmenes físicos dentro del Grupo de volúmenes
a dónde migrar estas áreas físicas.
Tomemos ejemplos para ver mejor su
funcionamiento.
Aquí lo que hace el comando en cuestión
es migrar todos los volúmenes lógicos albergados en sdb a sdc.:
[[email protected]] $ pvmove /dev/sdb
[[email protected]] $ vgreduce
/dev/sdc
/dev/sdb: Moved: 100.0%
servidores /dev/sda1
Removed "/dev/sda1" from volume
Ahora, si lo que pretendemos es sólo migrar
un solo volumen lógico, por ejemplo data,
En cambio para eliminar Volúmenes lógicos utilizaremos el parámetro “-n” y el volumen
de un VG el comando sería lvremove y la sin- lógico a mover :
taxis que emplearíamos es lvremove LV:
group "my_LVM"
[[email protected]] $ pvmove -n /dev/
[[email protected]] $ vgextend
[[email protected]] $ lvremove /dev/
my_LVM /dev/sdc
my_LVM/data
Volume group "my_LVM"
Do you really want to remove active
successfully extended
logical volume "data"? [y/n]: y
Ahora ya extendimos nuestro VG es momento
de extender nuestro LV. Digamos que tenemos
espacio libre en nuestro VG porque añadimos
nuevos PV, entonces podremos obtener más
espacio ampliando nuestro LV. Para ello
usamos el comando lvextend con la sintaxis
lvextend --size nuevo_tamaño Logical_Volume
Phisical_Volume. Una vez redimensionado el
volumen lógico tendremos que ajustar el sistema de archivos para que emplee el nuevo tamaño del dispositivo con la sintaxis resize2fs
dispositivo nuevo_tamaño.
[[email protected]] $ lvextend --size
4G /dev/mapper/my_LVM/data
56
52_53_54_55_56_57_LVM.indd
my_LVM/data /dev/sdb /dev/sdc
/dev/sdb: Moved: 100.0%
Logical volume "data" successfully
removed
En su versión 2.x lvm está dotado de muy
buenas herramientas para migrar volúmenes
lógicos en caliente, es decir, nos permite migrar PV pertenecientes a un mismo VG. La
herramienta apta para este trabajo es pvmove y
trabaja con la sintaxis pvmove -n Logical_Volume Phisical_Volume_origen Phisical_Volume_destino. El parámetro -n Logical_Volume
indica que solo queremos mover las áreas de
determinado VL; de lo contrario y sin indicar
este comando moveríamos todos los Logical
Volume alojados en el Phisical Volume. Phisical_ Volume_origen es el volumen físico
Una característica importante de lvm es la
posibilidad de tomar imágenes instantáneas
del sistema para tener un sistema de backup
en caliente de nuestro servidor. Este tipo de
volúmenes son de solo lectura. De esta forma
es posible realizar una copia de seguridad del
servidor en caliente sin necesidad de suspender ningún servicio, ejemplo un servidor
web o un servidor ftp. Aclaración: Para poder
crear el snapshot necesitamos espacio libre en
nuestro VG. Para crear un snapshot utilizaremos el comando lvcreate, aunque previamente debimos ver cuánto espacio tenemos libre
en nuestro VG con el comando vgdisplay
que anteriormente explicamos. El spnapshot
podrá ser tan grande como necesitemos, “el
espacio que le asignemos sólo se utilizará
Linux+ 12/2009
56
2009-10-14, 17:20
práctica
Introducción a LVM
para guardar los cambios que puedan llegar •
a ocurrir en el volumen original”. Para que
esto quede más claro crearemos un snapshot.
•
[email protected]:/# lvcreate -L 16G -s
-n dbbackup /dev/my_LVM/base_de_datos
•
Con el comando anterior creamos una instantánea de 16 gb de nombre dbbackup del Logical Volume base_de_datos. Una vez creado
esto y disponiendo de un directorio en /media/
para montar el snapshot, procederemos a montarlo mount /dev/my_LVM/dbbackup /media/
snapshot-bup. Ya montado, podremos utilizar
tar para crear una copia de seguridad de los
datos que cambiaron. Para borrar el snapshot
basta con desmontar el snapshot y correr
el comando aprendido antes lvremove /dev/
my_LVM/dbbackup.
Lista de comandos de referencia (extraídos del sitio de HP):
•
•
•
•
•
•
•
extendfs: Extiende un sistema de archivos:
# extendfs /dev/vg00/rlvol3,
lvmadm: Muestra los límites asociados
a la versión de un grupo de volúmenes:
# lvmadm -t -V 2.0,
lvchange: Cambia las características de
un volumen lógico: # lvchange -t 60 /dev/
vg00/lvol3,
lvcreate: Crea un volumen lógico en un
grupo de volúmenes: # lvcreate -L 100
/dev/vg00,
lvdisplay: Presenta información sobre los
volúmenes lógicos: # lvdisplay -v /dev/
vg00/lvol1,
lvextend -m: Agrega un reflejo a un volumen lógico: # lvextend -m 1 /dev/vg00/
lvol3,
lvextend -L: Aumenta el tamaño de un
volumen lógico: # lvextend -L 120 /dev/
vg00/lvol3,
•
•
•
•
•
•
•
•
•
•
•
lvlnboot: Prepara un volumen lógico para
que sea raíz, de intercambio o de zona de
volcado: # lvlnboot -d /dev/vg00/lvol2,
lvmerge: Combina volúmenes divididos
en un volumen lógico: # lvmerge /dev/
vg00/lvol4b /dev/vg00/lvol4,
lvreduce -L: Disminuye el tamaño de un
volumen lógico: # lvreduce -L 100 /dev/
vg00/lvol3,
lvreduce -m: Disminuye el número de co
pias espejo de un volumen lógico: # lvreduce -m 0 /dev/vg00/lvol3,
lvremove: Elimina volúmenes lógicos de
un grupo de volúmenes: # lvremove /dev/
vg00/lvol6,
lvrmboot: Elimina un enlace de volumen
lógico con el raíz, el espacio de intercambio o de volcado: # lvrmboot -d /dev/vg00/
lvol2,
lvsplit: Divide un volumen lógico reflejado en dos volúmenes lógicos: # lvsplit
/dev/vg00/lvol4,
lvsync: Sincroniza los reflejos de volúmenes lógicos anticuados: # lvsync /dev/
vg00/lvol1,
pvchange: Cambia las características de
un volumen físico: # pvchange -a n /dev/
disk/disk2,
pvck: Realiza una comprobación de la
coherencia en un volumen físico: # pvck
/dev/disk/disk47_p2,
pvcreate: Crea un volumen físico para
utilizarlo como parte de un grupo de volúmenes: # pvcreate /dev/rdisk/disk2,
pvdisplay: Muestra información sobre un volumen físico: # pvdisplay -v /dev/disk/disk2,
pvmove: Traslada las extensiones de un
volumen físico a otro: # pvmove /dev/disk/
disk2 /dev/disk/disk3,
pvremove: Elimina estructuras de datos
del administrador LVM en un volumen
físico: # pvremove /dev/rdisk/disk2,
•
•
•
•
•
•
•
•
•
•
•
•
•
•
vgcfgbackup: Guarda la configuración
del administrador LVM para un grupo de
volúmenes: # vgcfgbackup vg00,
vgcfgrestore: Restaura la configuración
del administrador LVM: # vgcfgrestore -n
/dev/vg00 /dev/rdisk/disk2,
vgchange: Apaga o enciende un grupo de
volúmenes: # vgchange -a y /dev/vg00,
vgchgid: Modifica la identificación de
grupo de volúmenes de un volumen físico: # vgchgid /dev/rdisk/disk3,
vgcreate: Crea un grupo de volúmenes:
# vgcreate /dev/vg01 /dev/disk/disk2 /dev/
disk/disk3,
vgdisplay: Presenta información sobre un
grupo de volúmenes: # vgdisplay -v /dev/
vg00,
vgextend: Extiende un grupo de volúmenes agregando un volumen físico: # vgextend /dev/vg00 /dev/disk/disk2,
vgexport: Elimina un grupo de volúmenes
del sistema: # vgexport /dev/vg01,
vgimport: Agrega un grupo de volúmenes
existente al sistema: # vgimport -v /dev/
vg04,
vgmodify: Modifica los parámetros de
configuración de un grupo de volúmenes:
# vgmodify -v -t -n -r vg32,
vgscan: Analiza los discos de sistema para
los grupos de volúmenes: # vgscan -v,
vgreduce: Reduce un grupo de volúmenes eliminando uno o varios volúmenes
físicos del mismo: # vgreduce /dev/vg00
/dev/disk/disk2vgremove,
vgremove: Elimina la definición de un
grupo de volúmenes del sistema y los discos: # vgremove /dev/vg00 /dev/disk/disk2,
vgsync: Sincroniza todos los volúmenes
lógicos reflejados en el grupo de volúmenes: # vgsync vg00.
Lo que queda en el tintero
Como pueden ver lvm es una herramienta muy
potente y necesaria si queremos ser buenos
administradores de sistemas, serios y competitivos. Es vital saber el uso, la instalación
planificación y puesta en marcha de esta herramienta. Algo que no mencioné es que hay
una herramienta que viene con GNOME particularmente en Fedora la he visto que se llama “Logical Volume Managment”. No dejen
de verla, que nos puede ser de mucha utilidad. Espero les haya gustado el tutorial. Cualquier inquietud o sugerencia pueden escribirme a [email protected] Hasta la próxima.
Figura 3. LVM GUI Mostrando los VG
57
www.lpmagazine.org
52_53_54_55_56_57_LVM.indd
57
2009-10-14, 17:20
soluciones para empresas
Linux en la PYME paso a paso
Linux en la PYME
paso a paso
Santiago Gómez Ruiz
[email protected]
La aventura de iniciar una empresa dista mucho de ser algo relajado o sencillo. Es una
tarea titánica que pocos saben apreciar. Cuando luego alguien pasa por la puerta, entra
a pedir un presupuesto, o algún amigo te pregunta que cómo va el negocio, no pueden
imaginar ni lejanamente el inmenso trabajo, la montaña de papeleo, de estudios, de
formación que has tenido que asumir para poder poner en marcha tu pequeña empresa.
I
nstalar GNU/Linux en los ordenadores de la empresa suele ser la opción más adecuada, pero como
toda tarea relacionada con la construcción de una
Pyme, ha de ser llevada a cabo con mucha planificación y sentido común, o simplemente será un fracaso.
Linux en la empresa, por qué y cómo
Los costes relacionados con la puesta en marcha de una
empresa, por pequeña que esta sea, son siempre muy elevados, y las expectativas de recuperar la inversión son, si
no inciertas, previsibles a un plazo bastante largo.
En este escenario, normalmente un análisis de las necesidades informáticas y las opciones disponibles nos dará
como resultado que la opción más indicada tanto para la
puesta en marcha del negocio como para su mantenimiento a medio y largo plazo será GNU/Linux.
Menores (o inexistentes) costes de licencias de sistema operativo, software de todo tipo que se puede instalar
sin cargo y sin incurrir en ilegalidades, y el poder obtener
un asesoramiento profesional imparcial, que no dependa
de los márgenes que tal o cual producto comercial puedan
58
58_59_60_61_62_63_PYME.indd
revertir en el asesor, son algunas de las razones con mucho
peso para abaratar la instalación inicial de Linux en los
ordenadores de la empresa.
La robustez de los sistemas GNU/Linux, su prácticamente inexistente índice de inoperatividad por cuelgues,
reinicios y tareas de mantenimiento, lo hacen sin duda el
sistema que ofrece más productividad a quien lo usa. Y un
trabajador está para cumplir una tarea, no para dedicarse
a desfragmentar discos.
Su seguridad, respecto a Windows no deja lugar
a dudas. No hay virus. No hay troyanos. No hay que pagar
licencias de antivirus, ni hay que permitir que un software
diseñado para solucionar problemas que el propio sistema operativo debería de impedir (el antivirus), rebaje el
rendimiento de nuestros PC's a la mitad. No hay popups.
No hay constantes actualizaciones de seguridad que nos
obligan a reiniciar día sí y día también.
El aprovechamiento que del hardware hace Linux
suele ser mucho más efectivo que el que hace Windows,
salvo casos muy concretos como algunas tarjetas gráficas.
Esto quiere decir que con un menor coste en hardware
Linux+ 12/2009
58
2009-10-14, 17:46
soluciones para empresas
Linux en la PYME paso a paso
obtendremos mejores resultados. No hay
ninguna distribución de GNU/Linux cuyos
requerimientos de hardware se aproximen ni
remotamente a la mitad de las necesidades de
máquina que tiene Windows Vista para empezar a funcionar.
Por todo esto, que antes de la puesta
en marcha de la empresa debería analizarse
cuidadosamente, nos encontraremos con que
el resultado de nuestro estudio arrojará casi
invariablemente que nuestra opción óptima
es Linux.
¿Significa esto que nos basta con instalar Linux en nuestro negocio para que todo
a nivel informático vaya sobre ruedas? Rotundamente no.
Una de las estrategias tradicionales
de Microsoft ha sido dejarse piratear en el
hogar para así habituar a las personas a utilizar en casa su sistema operativo, y de este
modo condicionar a las empresas a que lo
implanten para evitar gastos de formación.
Nos vamos a encontrar con que la mayoría
de las personas con las que contactemos sólo
sabrán utilizar Windows.
Por ello, y antes de que nosotros mismos o las personas que vayan a trabajar con
nosotros nos encontremos en un entorno de
producción basado en Linux, es importante
que todos nos sintamos confortables con
el sistema. Esto evitará improductividades
y lo más importante: frustraciones. Bastante
arduo e ingrato es poner a funcionar una
empresa como para añadir una gota más de
desencanto.
Para esto se puede optar entre seleccionar el personal entre personas familiarizadas
Figura 2. Factura LUX
con herramientas de software libre (ej: OpenOffice.org), y más específicamente Linux,
o destinar unos días a entrenar personas en
el nuevo sistema. No es lo mismo saber
que tienes un par de días en los que te van
a formar en tu nueva forma de trabajar,
y tus nuevos medios, que arrojarse a un nuevo puesto de trabajo lleno de incertidumbres con el añadido de desconocer el funcionamiento de tus herramientas básicas de trabajo.
Sobre todo, hay que evitar actitudes de
empecinamiento en un software concreto.
En España hemos sufrido la desgracia de que
apenas ha existido competencia válida entre
distintos productos empresariales. Existe la
aplicación universal de contabilidad, que
todos sabemos cual es, dos o tres productos
de facturación que se reparten el mercado,
y lo mismo podemos decir de programas
de elaboración de nóminas.
El caso es que estos productos estrella
que todo el mundo usa suelen funcionar
bastante mal. Todo el que ha tenido que
enfrentarse como técnico a tratar con ellos
ha descubierto que son asombrosamente
chapuceros, están elaborados con tecnología de los primeros 90 (o anteriores, como
ficheros .DBF), y funcionan a base de parchear sobre parche. La única ventaja con la
que cuentan es que mucha gente los conoce, y tiende a evitar lo bueno por conocer.
Pero si se piensa con un poco de serenidad,
no parece un argumento ni sólido ni mucho
menos serio.
De hecho, muchos administrativos no
sólo piensan que no hay nada que no sea
Windows, además creen que sólo existe su
programa de contabilidad, de facturación
y de nóminas. Habría que pararse a pensar
qué puede aportar a nuestra empresa una
persona que se cierre a seguir aprendiendo,
a adoptar nuevas herramientas y en general,
que se niegue al cambio. Desde luego, si
contamos con personas así, nuestro menor
problema será adaptar la empresa a GNU/
Linux.
Productos orientados
a la PYME bajo GNU/Linux
Es el momento de empezar a mojarse. ¿Qué
productos libres y qué funcionen bien bajo
Linux puedo utilizar? En primer lugar, hay
Figura 1. ASPL Fact
59
www.lpmagazine.org
58_59_60_61_62_63_PYME.indd
59
2009-10-14, 17:46
soluciones para empresas
Linux en la PYME paso a paso
una distribución libre y gratuita, promocionada por la Junta de Extremadura, especializada en software empresarial. Su nombre •
es Linex Pyme www.linexpyme.com. Está
basada en Debian, al igual que Linex. No es
mala idea probarla. En cuanto a aplicaciones
individuales, entre otras se pueden conside- •
rar las siguientes.
•
Contalinex
Es una aplicación de contabilidad desarrollada, en el contexto de la distribución LinexPyme. Es plenamente funcional, y utilizada
por muchas empresas en esta comunidad autónoma. Entre sus virtudes se encuentra la capacidad de importar los datos de Contaplus. Eso
no es útil en el caso de una empresa de nueva
creación, pero en el caso de una migración
a GNU/Linux es una herramienta que ahorrará muchísimos dolores de cabeza. Es totalmente multipuesto y multiempresa. Se puede
descargar de www.linexpyme.com.
Galopín
Sencillo programa de facturación y control
de almacén. Está desarrollado por Sinuh,
la comunidad GNU/Linux de Extremadura
(sinuh.org), y se puede descargar de galopin.
sinuh.org. En esta web se resumen las características del producto así:
•
•
•
•
•
•
•
•
•
•
Gestión de artículos por familias y subfamilias,
Gestión de clientes y formas de pago,
Gestión de proveedores,
Partes de trabajo,
Albaranes de clientes y proveedores,
Facturas de clientes y proveedores,
Presupuestos,
Estadísticas de ventas por cliente, producto y/o proveedor,
Todos los listados generados en PDF,
Copias de seguridad sencillas.
módulo textil, de iva soportado, de iva
repercutido.
Pedidos: Generar bolsa (cálculo de com- •
pras respecto a ventas y stocks mínimos), estadísticas, gestión generar, aceptación, retiro, parametrización.
Históricos: Inicios / cierres, de operaciones, de pedidos, de cierres.
Comunicaciones: Actualizaciones de modificaciones de artículos y de almacén
a tiendas, y de los movimientos de las
tiendas al almacén central.
Facturalux/Abanq
Un clásico en estas lides, ha cambiado su nombre por Abanq. Siguen existiendo versiones
gratuitas, pero al ser una aplicación modular, se le pueden añadir módulos a distintos
precios. Según el fabricante, sus funcionalidades son.
•
Área Financiera:
– Módulo Informes: Balance de Pérdidas y Ganancias, Balance de Situación, Balance de Sumas y Saldos, Libro Diario, Libro Mayor, Listado de
Facturas Emitidas, Listado de Facturas Recibidas.
– Módulo Principal: Asientos, Asientos de Ejercicio, Códigos de Balance,
Cambiar Ejercicio, Cerrar ejercicio, Conceptos de Partidas, Cuentas,
Cuentas especiales, Epígrafes, Partidas, Partidas predefinidas, Plantillas,
Regularización del I.V.A., Subcuen-
tas, Subcuentas de clientes, Subcuentas de proveedores.
Área de Facturación
– Módulo Almacén: Almacenes, Artículos, Artículos por agente, Artículos
por proveedor, Artículos por tarifa,
Familias de artículos, Líneas de regularización de stocks, Regularización
de stocks, Stocks, Tarifas, Transferencias de stock.
– Módulo Informes: Albaranes de clientes, Albaranes de proveedores, Facturas de clientes, Facturas de proveedores, Inventario, Inventario valorado, Pedidos de clientes, Pedidos
de proveedores, Presupuestos de
clientes, Recibos de clientes, Resumen de albaranes de clientes, Resumen de albaranes de proveedores,
Resumen de facturas de clientes, Resumen de facturas de proveedores,
Resumen de pedidos de clientes, Resumen de pedidos de proveedores,
Resumen de presupuestos de clientes, Resumen de recibos de clientes.
– Módulo Principal: Agentes comerciales, Bancos, Clientes, Contactos
de clientes, Contactos de proveedores, Cuentas bancarias, Cuentas bancarias de cliente, Cuentas bancarias
de proveedor, Departamentos, Descuentos, Descuentos de clientes, Descuentos de proveedores, Direcciones
de clientes, Direcciones de proveedores, Divisas, Ejercicios fiscales, Em-
Facturlinex
Acompaña a Contalinex en la suite, es un
programa de facturación bastante completo
e integrado con Contalinex. Sus características, según la web del desarrollador www.
puntodev.com, son (resumidamente):
•
•
•
Gestión de Ventas: ventas, cajas, albaranes, facturas, facturación de albaranes.
Archivos: tiendas, usuarios, artículos,
clientes, familias, proveedores, series,
modelos, colores, tallas.
Listados: de tiendas, de artículos, de
clientes, de familias, de proveedores, del Figura 3. Galopín
60
58_59_60_61_62_63_PYME.indd
Linux+ 12/2009
60
2009-10-14, 17:46
soluciones para empresas
Linux en la PYME paso a paso
–
–
presa, Formas de pago, Grupos de
clientes, Imprimir bancos, Imprimir
cuentas bancarias, Imprimir descuentos, Imprimir divisas, Imprimir ejercicios, Imprimir formas de pago, Imprimir impuestos, Imprimir países,
Imprimir series de facturación, Impuestos, Intervalos de fechas, Intervalos de rappel, Países, Plazos, Proveedores, Secuencias de documentos, Secuencias de ejercicio, Series de facturación, Sucursales bancarias,Tipos
de rappel.
Módulo Tesorería: Pagos y devoluciones de clientes, Recibos de clientes, Remesas de recibos, Selección
de recibos de cliente, Volcado a disco
de remesas.
Módulo Facturación: Agrupar albaranes de cliente, Agrupar albaranes
de proveedor, Agrupar pedidos de
cliente, Agrupar pedidos de proveedor, Albaranes de cliente, Albaranes
de proveedor, Facturas de cliente,
Facturas de proveedor, Fecha y ejercicio, Líneas de albaranes de cliente,
Líneas de albaranes de proveedor,
Líneas de facturas de cliente, Líneas
de facturas de proveedor, Líneas de
pedidos de cliente, Líneas de pedidos de proveedor, Líneas de presupuestos de cliente, Pedidos de cliente,
Pedidos de proveedores, Presupuestos de cliente.
Nominalinex
Figura 4. Hacienda
presa pequeña, pero muy completo para
una mediana. Se puede descargar de www.
tinyerp.org. Hay foros en español en http://
es.groups.yahoo.com/group/tiny_erp_es/ y en
http://tinyerp.org/forum/viewforum.php?f=21.
Sus características, según su entrada en
la Wikipedia son: contabilidad analítica, contabilidad financiera, gestión de almacenes/
inventario, gestión de ventas y compras, automatización de tareas, campañas de marketing,
ayuda técnica, y punto de venta.
la cual desarrolla y soporta una solución de
código abierto para negocios del mismo
nombre, la cual ofrece la funcionalidad de
Planeación de Recursos Empresariales, Administración de la Relación con los Clientes
y Administración de la Cadena de Suministro
(derivado de sus siglas en inglés: ERP, CRM,
SCM respectivamente).
El proyecto ADempiere fue creado en
septiembre de 2006 después de las diferencias que se tuvieron entre Compiere Inc., los
desarrolladores de Compiere™, y la comuAdempiere
nidad que se formó alrededor del proyecto.
Según la entrada en la Wikipedia, ADempie- La comunidad consideró que Compiere Inc.
re™ es un proyecto guiado por la comunidad, puso especial énfasis en la naturaleza de
Es la aplicación de LinexPyme diseñada para la elaboración de nóminas. Está adaptada a la Legislación Vigente y contiene tablas de cotización actualizables. Este aplicativo permite gestionar Contratos y bajas de
Trabajadores, Convenios Colectivos, Epígrafes, Tipos de Cotización, Bases de Cotización, Seguros Sociales TC1, TC2 (sólo
contempla en régimen general por el momento) y la comunicación RED se encuentra en desarrollo.
Recilinex
Aplicación de LinexPyme que permite la emisión de recibos bancarios y domiciliaciones de
adeudos en soporte magnético según la norma
19 de la AEB (Asociación Española de Banca)
para la gestión de cobros.
TinyERP
Es un completo software de gestión ERP,
tal vez demasiado abstracto para una em- Figura 5. Creación de una consulta en OpenOffice Base
61
www.lpmagazine.org
58_59_60_61_62_63_PYME.indd
61
2009-10-14, 17:46
soluciones para empresas
Linux en la PYME paso a paso
código abierto del proyecto, en lugar de la
naturaleza comunitaria del proyecto. Después
de una intensa discusión se decidió separarse
de Compiere y dar nacimiento al proyecto
ADempiere.
El nombre del proyecto proviene de una
palabra italiana, la cual significa satisfacer
pero con un contexto adicional de completar,
alcanzar, practicar, realizar las tareas de, o liberar, también significa dar honor, respetar,
lo cual fue considerado sumamente apropiado con lo que el proyecto pretende lograr.
Se puede descargar de www.adempiere.
com. Se trata de un ERP muy complejo y parametrizable, ideal para empresas medianas
tirando a grandes, y absolutamente desproporcionado para las pequeñas.
ASPL-FACT
Basado en la arquitectura de datos ASPL, es
una aplicación de gestión comercial. Según su
web: “ASPL Fact es un nuevo sistema de facturación para GNU/Linux (aunque, en principio, podría compilar y funcionar en cualquier
plataforma para la que glib esté disponible).
stá basado en la Arquitectura AF, y se desarrolla bajo licencia GNU/GPL. El sistema se
descompone en la parte cliente, con interfaz
gráfico de usuario para Gnome 2.0, y la
parte servidor, formada por varios sistemas
servidores que acceden a sus datos a través
de libgda. Para la comunicación entre los
distintos componentes se emplea la Arquitectura AF”.
Se puede descargar de www.aspl.es, y requiere también de mucha parametrización
para su uso, lo que la dota de gran potencia.
Existen muchos desarrollos tanto libres
como propietarios en este campo, por lo que
es difícil hoy en día encontrar una necesidad
empresarial que no se cubra con herramientas
para GNU/Linux.
positivo que disponga de máquina virtual
de Java. Esto incluye, por supuesto, a PC's
con Linux.
Repasando someramente las entidades
públicas que los ciudadanos sufrimos más
frecuentemente, el panorama es bastante
satisfactorio:
•
•
Seguridad Social: Han migrado sus aplicaciones a Java. El Sistema Red, que
es el software por excelencia para tramitar altas, bajas e incidencias de trabajadores es totalmente operativo en
Linux.
Ministerio de Hacienda: Están haciendo un esfuerzo importante. Hoy en
día casi todas las aplicaciones que
este ministerio pone a disposición de
los ciudadanos están migradas a Java,
o bien tienen versión nativa para Linux.
a GNU/Linux es de por sí una garantía de
que en un espacio muy corto de tiempo todas las aplicaciones de comunicación con
el ciudadano servirán en nuestro sistema
operativo. Casos de esto existen muchos: la
Comunidad Autónoma Extremeña (siempre por delante de todas las demás en estos asuntos), la Andaluza, ciudades como
Zaragoza...
Por lo tanto, a este nivel no debería ser
un problema la introducción de Linux en
nuestra empresa.
Requisitos
a tener en cuenta
Si para obtener unas mínimas garantías de
éxito hasta en la actividad más sencilla es
preciso planificarla, cuando se aborda algo
complejo como la informatización de una
empresa, dicha planificación ha de ser
cuidadosa. Hay una serie de puntos que es
muy importante tener en cuenta antes de
Este año tuve una experiencia agridulce en proceder:
ese sentido. Primero descubrí con desagrado que la versión para Linux del programa • Asegurarse de que todas las personas
implicadas entienden y aprueban la
de elaboración del impuesto sobre la renimplantación de Linux.
ta no existía. Escribí al servicio informático correspondiente, y me informaron muy • Un sólo empleado empeñado en sembrar cizaña y frustración puede dar al
amablemente de la manera de acceder a la
traste con la iniciativa. Es importante
aplicación desde un cliente de Terminal Serque estén todos motivados, que entienver. No es exactamente lo deseable, desde
dan las ventajas que les va a aportar en
luego, pero denota interés en ir subsanando
su trabajo diario en términos de fiabilila situación. Desde luego, hace años era
dad y estabilidad.
impensable.
El hecho en sí de que muchas admi- • Hay que ser comprensivos, por lo general, a nadie le gustan los cambios.
nistraciones estén migrando internamente
Las administraciones
públicas
Hasta hace no mucho, tratar telemáticamente
con las administraciones públicas era poco
menos que un infierno. Afortunadamente, la
actitud de éstas ha cambiado notablemente,
aunque difiere bastante dependiendo de la
autonomía.
Muchas administraciones han optado
por migrar sus aplicaciones de comunicación con los ciudadanos a Java. Aunque no
sea el lenguaje más rápido ni menos pesado, parece una decisión bastante razonable,
ya que una aplicación desarrollada en Java
es teóricamente ejecutable en cualquier dis- Figura 6. Creación de un formulario
62
58_59_60_61_62_63_PYME.indd
Linux+ 12/2009
62
2009-10-14, 17:46
soluciones para empresas
Linux en la PYME paso a paso
•
•
Forzar a alguien a utilizar una herramienta que no quiere usar, por muy absurdos que sean sus motivos, es un desastre asegurado. Ante esto sólo hay dos
salidas, convencer a estas personas de
los beneficios que va a obtener, o elegir a otra persona con más flexibilidad
ante los cambios.
Un buen medio de evitar estas situaciones es aportar la formación adecuada.
Verificar que todo el hardware es compatible con GNU/Linux.
Sí, parece mentira que a estas alturas del
siglo aún haya fabricantes de hardware con
semejante nivel de inconsciencia, pero alguno queda. Pueden dar problemas:
•
•
•
•
•
•
•
•
Algunas gráficas en términos de rendimiento, cada vez menos.
Algún adaptador bluetooth de marcas
poco conocidas.
Algún adaptador wireless de marcas poco conocidas.
Hoy en día, cualquier distribución moderna de GNU/Linux contiene más controladores de serie que cualquier versión
de Windows, por lo que este problema
cada vez es menos relevante, y es de suponer que en muy poco tiempo dejará de
existir completamente.
Seleccionar cuidadosamente el conjunto
de aplicaciones que se va a utilizar, descartando que existan funcionalidades que
no se cumplan.
Si tras empezar a trabajar con una aplicación, esta tiene que ser sustituida por otra,
estamos en un mal comienzo. La forma
ideal de hacerlo, también la más incómoda y costosa, es implantar la aplicación en
una instalación de prueba, un laboratorio,
y llevar a cabo todas las actividades que
se preven que se ejecutarán en el transcurso habitual de la vida de la empresa.
No está de más contar con los servicios
de una consultoría.
Pueden aportar conocimientos, experiencia, y planificación. Existen, según la actividad, el tipo de instalación y el nivel
de usuario, dificultades típicas que se
plantean muy habitualmente. Un técnico
experimentado podrá o bien anticiparse
a todo ello, o bien aportar la solución más
adecuada.
bilidad. Fallaba a veces el soporte hardware,
pero esa pesadilla prácticamente ha desaparecido, y lo que nos quedaba era software
orientado específicamente a empresas. Ahora
tenemos ese software, ya lo tenemos todo, ya
podemos informatizar una empresa, prácticamente de cualquier ámbito, sólo con GNU/
Linux y software libre.
Las herramientas se han hecho fáciles al
usuario, ya no existe el fantasma de que sólo
había un puñado de gurús huraños y estrambóticos que conocían línea a línea el kernel.
Se ha impartido formación al respecto, y en
los colegios de muchas regiones de España se
enseña con GNU/Linux.
Sólo nos queda una barrera, y esta es psicológica. Tantos años con Windows, tantas
mentiras, que se van intensificando en la misma medida en que GNU/Linux amenaza la
hegemonía de Windows, han creado un sentimiento de inseguridad respecto a Linux que
tiene que ser superada. Y lo será, no puede ser
de otra manera. No quedan problemas técnicos realmente difíciles.
El software libre no sólo es libre en sí, libera al que lo usa. Es en sí una herramienta
de redistribución de riqueza que permite el
desarrollo tecnológico donde de otra forma
sería casi inabordable. ¿O acaso sería posible
de otro modo que pequeñas regiones puedan
dotar sus administraciones y escuelas de sistemas operativos adaptados completamente
a sus necesidades? El software libre hace que
la dependencia tecnológica de unas sociedades respecto a otras se minimice, que los
recursos de cada región se reinviertan en el
desarrollo de un tejido tecnológico local, en
vez de pagar un peaje a una multinacional.
Instalar software libre, y más concretamente GNU/Linux en nuestra empresa es:
•
•
•
•
Económicamente inteligente a corto,
medio y largo plazo. Desde el principio
es un ahorro, pero cuanto más tiempo
pase, más ahorro supone.
Garantiza la viabilidad futura de nuestras
aplicaciones, ya que no nos ata a ningún
proveedor de software. Con el software
propietario, si la empresa que nos lo vendió desaparece, nos quedamos colgados
con un programa que no se podrá actualizar jamás.
Una inversión responsable con nuestro
entorno local, favoreciendo el desarrollo
de la industria tecnológica española.
Una inversión responsable globalmente,
ya que nuestro apoyo al software libre,
(y una forma de apoyarlo es usarlo), repercute en que éste se perfeccione y facilite
el acceso a más empresas al mismo.
Ya hay muchas empresas que usan software
libre. En la mía no usamos otra cosa. No quedan excusas creíbles. Pásate a Linux.
PUBLICIDAD
Conclusiones
Ya hace tiempo que los entornos de escritorio
GNU/Linux estaban listos por calidad y usa-
63
www.lpmagazine.org
58_59_60_61_62_63_PYME.indd
63
2009-10-14, 17:46
programación
Protegiendo formularios Web con reCAPTCHA
Protegiendo
formularios Web con reCAPTCHA
José María Gómez Hidalgo
[email protected]
La esencia de la Web, y más aún de la Web 2.0, es la interactividad. Se acabaron los tiempos
en los que sólo unos cuantos privilegiados tenían la oportunidad de verter contenidos en la
Web. Hoy en día, cientos de millones de personas alimentan la red con sus comentarios,
fotografías y vídeos, usan redes sociales como Facebook o Tuenti a diario para permanecer
en contacto con sus amistades y compañeros, o para conocer a otras personas, entretenerse
y divertirse. Pero las oportunidades para verter contenidos lo son también para que spammers
y crackers abusen de ellas, difundiendo miles de millones de correos basura, infectando
millones de equipos, y practicando el fraude a gran escala.
P
ara las aplicaciones que permiten a sus usuarios generar contenidos Web, y en general para
la protección de cualquier servicio Web que
permita la entrada de datos de usuarios, ha
surgido el concepto del CAPTCHA. En este artículo se describe este concepto, su origen e historia, sus ventajas e interés, y se plantea como caso de uso la integración del popular reCAPTCHA en un servicio basado en PHP.
La inmensa mayoría de servicios Web que permiten introducir datos típicamente a través de formularios, ofrecen
una oportunidad al abuso automatizado, dependiendo de su
función. Los más habituales son los servicios de valor para
usuarios masivos, como el correo electrónico Web (Webmail), las Redes Sociales, los juegos masivos multijugador
en red, y los blogs. Por ejemplo, si un usuario abusivo es
capaz de construir un sistema que cree de manera automática una cuenta de correo electrónico en Gmail de Google,
puede utilizarlo para generar cientos de cuentas aleatorias
y enviar correo basura desde ellas. O si un usuario es capaz de
inscribir un blog, publicar un post o un comentario de manera automática, puede utilizarlo para generar cientos de entra-
64
64_65_66_67_68_69_Recaptcha.indd
das que enlazan a una página Web que desea promocionar,
adquiriendo por ejemplo una posición muy alta en los re|sultados de una búsqueda Web popular. Incluso un sistema
de encuestas se puede corromper para obtener los resultados deseados. Y hay tantos abusos como aplicaciones.
En 1996, Mori Naor, profesor del Instituto de Ciencia
de Weizmann en Israel, describió una propuesta para abordar la seguridad de los servicios Web en general, y el problema del correo basura en particular, consistente en la realización de un Test de Turing para determinar si el usuario
del servicio es un ser humano o un sistema automatizado
o robot. El Test de Turing es un método para demostrar si
una máquina es inteligente. Fue propuesto por Alan Turing,
uno de los padres de la informática y de la Inteligencia
Artificial, en 1950, y consiste en hacer que un ser humano
X dialogue en lenguaje natural a través de un terminal con
dos máquinas, detrás de una de las cuales se encuentra un
ser humano. Si el humano X no es capaz de distinguir a la
máquina del otro humano, entonces la máquina ha alcanzado una inteligencia comparable con la de los seres humanos,
una Inteligencia Artificial.
Linux+ 12/2009
64
2009-10-14, 17:54
programación
Protegiendo formularios Web con reCAPTCHA
La prueba propuesta por Naor es inversa:
una máquina plantea un test al usuario de una
aplicación Web, de modo que este test sea
fácilmente resoluble para un humano pero
casi imposible de resolver para una máquina.
De este modo, se garantiza que el usuario del
sistema Web es un ser humano, y se previene
el uso masivo, automatizado y abusivo del
servicio. Algunos de los test propuestos son la
identificación del sexo o del estado de ánimo
de una persona en una foto, la identificación
de una cadena, y en general, cualquier problema que sea muy complejo para una máquina
pero muy simple para un humano.
La palabra CAPTCHA hace referencia a
las siglas Completely Automated Public Turing test to tell Computers and Humans Apart
(Prueba de Turing pública y automática para
diferenciar máquinas y humanos). En realidad, este nombre está en proceso (probablemente abandonado) de registro comercial por
parte de la Universidad de Carnegie Mellon,
y aunque identifica aspectos esenciales de
un CAPTCHA, el concepto también ha sido
referido con nombres como Reverse Turing
Test (Test de Turing inverso), o Human Interactive Proof (Demostración interactiva de
humanidad). El primer CAPTCHA fue el
usado por el equipo del motor de búsqueda
Altavista en 1997, para proteger el envío de
referencias Web (nuevas URLs) al buscador.
Los CAPTCHAs proponen, según Luis von
Ahn de la Universidad de Carnegie Mellon, una
ecuación doblemente ganadora (“win-win”):
•
•
Si nadie consigue diseñar un sistema para
que pase automáticamente el reto planteado, se dispone de un sistema seguro frente
a abusos automatizados.
Si por el contrario alguien lo consigue,
se habrá producido un avance tecnológico o científico significativo en algún
Figura 1. De arriba hacia abajo: para impedir
área de la Inteligencia Artificial, el relacomentarios automáticos en Blogger, para evitar la
cionado con el reto planteado.
A fecha de hoy, los CAPTCHAs se han popularizado tremendamente, y ya se utilizan para
proteger la creación de blogs o los comentarios
en los mismos (por ejemplo en Blogger), para
impedir el alta masiva de usuarios en correo
Web (Gmail, Correo Yahoo!), e incluso existen
bibliotecas especializadas para numerosos sistemas Web de gestión de contenidos, tanto genéricos como Drupal, como específicos como
Listado 1. Código HTML para invocar un reCAPTCHA antes de revelar una dirección de correo
jmgo<a href=
"http://mailhide.recaptcha.net/d?k=01zLVKpLwOlZ2k_LQh2DEEzw==&amp;
c=KjhSC__gnO7lffzpYjYjzVNzn3irIdRx4OWYxhR-mPM="
onclick="window.open('http://mailhide.recaptcha.net/d?
k=01zLVKpLwOlZ2k_LQh2DEEzw==&amp;
c=KjhSC__gnO7lffzpYjYjzVNzn3irIdRx4OWYxhR-mPM=', '',
'toolbar=0,scrollbars=0,location=0,statusbar=0,
menubar=0,resizable=0,
width=500,height=300');return false;"
title="Reveal this e-mail address">...</a>@yahoo.es
Listado 2. Código HTML de un formulario simple para enviar un correo
<form method="post" action="sendmail.php">
Correo electrónico: <input name="email" type="text" /><br />
Mensaje:<br />
<textarea name="message" rows="15" cols="40">
</textarea><br />
</form>
<input type="submit" />
Listado 3. Código PHP simple para enviar un correo
creación automática de cuentas en Correo Yahoo!,
y para impedir lo mismo en Gmail
Wordpress (para blogs). En la figura 1 se
muestran algunos de los ejemplos anteriores.
Uno de los hechos que demuestran la popularización de los sistemas CAPTCHA es que
actualmente existen varios como servicios Web,
es decir, que se pueden insertar en una página
o formulario y que invocan de manera remota
a un sistema que muestra el reto y verifica su
corrección. Esta idea fue ya propuesta en 2005
por Tim Converse, de Yahoo!. Por ejemplo,
es muy sencillo introducir el código HTML
necesario para proteger una dirección de correo
electrónico en una página Web y evitar que así
sea recolectado por los sistemas automáticos
que alimentan las listas de direcciones de los
spammers. Esto se puede lograr usando el sistema MailHide del servicio Web reCAPTCHA,
en el que se construye un código HTML que,
empotrado en un página Web, obliga al usuario
a resolver un CAPTCHA antes de revelar una
dirección de correo electrónico. Por ejemplo,
el código generado para proteger la dirección
de correo del autor de este artículo es el que se
muestra en el listado 1.
Este código funciona generando una ventana emergente como las que se muestra en la
figura 2. En el listado se puede observar que
se incluye un hiper-enlace a http://mailhide.
captcha.net que incluye la propiedad onClick,
con un código JavaScript que abre la ventana
emergente con las propiedades del CAPTCHA.
¿Cómo funcionan
los CAPTCHAs?
<?php
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
mail( "[email protected], "Correo de feedback",
$message, "From: $email" );
header( "Location: http://www.ejemplo.es/gracias.html" );
?>
El funcionamiento de un CAPTCHA es conceptualmente muy sencillo:
•
Si el candidato es correcto, se ejecuta la
acción asociada al formulario que protege.
65
www.lpmagazine.org
64_65_66_67_68_69_Recaptcha.indd
65
2009-10-14, 17:54
programación
Protegiendo formularios Web con reCAPTCHA
•
•
•
Se presenta un reto al usuario.
El usuario introduce un candidato a solución para el reto.
•
Si el reto es incorrecto, se puede ofrecer
de nuevo otro reto similar.
Sin embargo, desde el punto de vista operativo, no lo es tanto. Por ejemplo, se suele ofrecer
otro reto al usuario en caso de error, pero se
bloquean las direcciones IP por intentos repetidos (fallidos). El aspecto más complejo es, sin
duda, la generación del reto. Esto debe hacerse
de manera rápida y automática, y el reto debe
ser simple para un usuario y complejo para un
sistema automático. Pero, ¿cómo de simple y
cómo de complejo, según sea el caso? ¿Y qué
hay acerca de las personas con discapacidades,
por ejemplo las personas ciegas?
La efectividad y la seguridad
MailHide
Se pueden tomar otras medidas de la efectividad de un CAPTCHA, como por ejemplo el
tiempo medio tardado por un humano en resolverlo. Sin embargo, ninguna garantiza que
sea suficientemente sencillo y accesible para
la inmensa mayoría de potenciales usuarios
del CAPTCHA.
La seguridad de los CAPTCHAs, desgraciadamente, no sólo se refiere a la capacidad
para construir un sistema que resuelva el reto
usando una técnica “avanzada” que, de alguna manera, dé la razón a la ecuación doblemente ganadora de von Ahn. En los últimos
tiempos se han descubierto formas de ataque
no previstas inicialmente:
La efectividad y la seguridad de los CAPTCHAs se puede medir de distintas formas, aunque la más inmediata es el número de personas
que son capaces de resolverlo (que tiene que
ser cercano al 100%), y el número de éxitos
que tiene un sistema automático al intentar
resolverlo (que tiene que ser cercano al 0%).
Lógicamente, ambos parámetros se contrarrestan: cuanto más difícil se lo ponemos a un •
sistema automático, más difícil se lo ponemos
a un humano (y a la inversa). Además, ninguna
de las métricas es fácil de obtener de manera
precisa:
•
Si se realiza un experimento con una serie de humanos para medir su capacidad
de resolver un CAPCTHA, hay que tener
en cuenta su experiencia con el uso de
computadoras, sus posibles limitaciones
físicas y mentales, sus características raciales o geográficas, etc. Por ejemplo, un
CAPTCHA que exija que se introduzcan
una serie de caracteres alfabéticos que se
presentan en una imagen, puede resultar
un éxito con personas del mundo occi- •
dental, pero será un fracaso absoluto en
Listado 4. Código PHP para mostrar el
reCAPTCHA en el formulario de ejemplo
<?php
require_once('recaptchalib.ph
p');
$publickey = "...";
echo recaptcha_get_
html($publickey);
?>
66
64_65_66_67_68_69_Recaptcha.indd
China o Tailandia (ya que utilizan alfabetos distintos de los occidentales).
Si se está midiendo la efectividad de un
sistema automático para resolver un CAPTCHA, hay que recordar que se mide exactamente la de ese sistema; puede ser que
cualquier otra persona construya otro sistema automático más “inteligente” que sea
capaz de resolverlo con más frecuencia, Figura 2. La ventana emergente que se genera
y por tanto sea más efectivo, rompiendo al pulsar sobre el hiper-enlace que protege una
dirección de correo electrónico con reCAPTCHA
por tanto la seguridad del CAPTCHA.
El ataque a la implementación, que consiste simplemente en lograr que el sistema
dé por válido el CAPTCHA sin verificar
siquiera si hay respuesta. En ocasiones se
han implementado CAPTCHAs que permiten mantener una sesión abierta, por lo
que es posible resolver uno manualmente
y aprovechar la sesión para generar ilimitadas entradas en el formulario que se
protege (por ejemplo, ilimitadas cuentas
de correo en un Webmail o ilimitados comentarios en un blog). Por ello, los CAPTCHAs deben implementarse de manera muy cuidadosa en este sentido, y por
ejemplo hacerlos independientes del estado de la sesión.
El ataque manual masivo, que consiste en
contratar a una serie de humanos para que
vayan resolviendo CAPTCHAs sistemáticamente, mientras un sistema automático
los va usando para violar la seguridad del
formulario. Existen evidencias de que se
han roto CAPTCHAs como el de Gmail
usando personas situadas en países como
China, India, Rusia, Brasil, Argentina y
Nigeria. ¿Parece increíble? Pues Amazon
Web Services vende mano de obra barata
y masiva a través de su servicio Amazon
Mechanical Turk (aunque obviamente no
para este fin).
En conclusión, la seguridad del CAPTCHA es
una cuestión de costes: ¿es más fácil (o menos
costoso) hacer un sistema que acierte en el reto
un número significativo de veces, o resolverlo
manualmente por un determinado coste?
Tipos de CAPTCHAs
Visto lo visto, es comprensible que hayan surgido más y más CAPTCHAs con el fin de ponérselo difícil a las máquinas, y resolver aunque sólo sea en parte los problemas de accesibilidad para personas discapacitadas. En este
sentido, los CAPTCHAs pueden clasificarse
en función del tipo de reto que imponen al
usuario, en las siguientes clases: lingüísticos,
de texto, de imagen, de audio y de vídeo.
Los CAPTCHAs lingüísticos, que consisten en plantear una pregunta en lenguaje natural al usuario. La pregunta puede ser, por
ejemplo, introducir un sinónimo de una palabra
destacada en una frase, o seleccionar el significado correcto de una palabra en una frase
dentro de un conjunto de opciones que se le
ofrecen al usuario. Estos CAPTCHAs se basan
en las dificultades que tienen las computadoras
para procesar el lenguaje humano, y son una de
las primeras propuestas de Naor. Tienen como
ventaja que son muy accesibles para personas
ciegas, aunque las diferencias culturales o de
idioma pueden ser problemáticas. Desarrollar
un CAPTCHA de este tipo se ha probado
muy complejo en el ámbito de la investigación, y creemos que hoy por hoy no hay
ninguno desplegado a escala práctica.
Los CAPTCHAs de texto, que consisten
en presentar al usuario un texto dentro de una
imagen y pedirle que introduzca el mismo. Los
tres CAPTCHAs de ejemplo de la figura 2 son
de este tipo, y también lo es el reCAPTCHA
de MailHide de la figura 1. Este CAPTCHA se
basa en la idea de que el reconocimiento óptico de caracteres es complejo en situaciones de
ruido de fondo en la imagen. Es con diferencia
el tipo más extendido y más atacado, y ha
sufrido múltiples evoluciones a lo largo de la
historia de los CAPTCHAs. A fecha de hoy,
Linux+ 12/2009
66
2009-10-14, 17:54
programación
Protegiendo formularios Web con reCAPTCHA
Listado 5. Código PHP para enviar un correo previa validación del reCAPTCHA
<?php
require_once('recaptchalib.php');
$privatekey = "...";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
die ("No introdujo el reCAPTCHA correctamente. Vuelva atrás e
Figura 3. El CAPTCHA ASIRRA de Microsoft
Research
los CAPTCHAs de este tipo que resisten los
ataques de sistemas automáticos, o bien introducen mucho ruido de fondo (por lo que los
propios humanos tienen enormes dificultades
para resolverlos), o bien presentan distorsiones
y líneas que dificultan la segmentación de la
imagen en caracteres individuales de manera
automática, como en los CAPTCHAs de
Microsoft.
Los CAPTCHAs de imagen, que generalmente consisten en solicitar a un usuario
la selección de una imagen que se ajusta a un
texto o a la inversa. Ejemplos de este tipo de
CAPTCHAs son, por ejemplo, ASIRRA (de
Microsoft Research, se muestra en la figura 3,
tiene cierta implantación), y otros de carácter
más experimental, como los desarrollados por
los autores de reCAPTCHA en Carnegie Mellon, ESP-PIX (figura 4) y SQUIGL-PIX (figura 5). Mientras que ASIRRA sigue aproximadamente el esquema de funcionamiento mencionado (en este caso, seleccionar los objetos
que se ajustan a un texto) y ESP-PIX lo sigue
fielmente (seleccionar la palabra que representa a las cuatro imágenes), SQUIGL-PIX es
bastante más sofisticado: el usuario debe reconocer todas las imágenes asociadas a un
concepto (un ser humano, en el ejemplo de la
figura 5) y además rodearlo de manera apro-
inténtelo de nuevo." .
"(reCAPTCHA devolvió: " . $resp->error . ")");
}
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
mail( "[email protected], "Correo de feedback",
$message, "From: $email" );
header( "Location: http://www.ejemplo.es/gracias.html" );
?>
ximada con una línea. Los CAPTCHAs de
imagen se asienta sobre la base de que la investigación actual está aun bastante lejos de
reconocer automáticamente entidades en imágenes, convirtiendo esta tarea en inabordable
para un programa automático. Sin embargo, la
accesibilidad de estos sistemas es muy dudosa,
y están sometidos a ataques adicionales a causa de, por ejemplo, trabajar sobre bases de datos muy pequeñas de imágenes. Por ejemplo,
el sistema KittenAuth fue violado por simple
descarga de la base de datos y catalogación
semi-automática de las imágenes.
Los CAPTCHAs de audio suelen reproducir una secuencia de letras o números, pronunciadas por distintos hablantes y en condiciones de ruido de fondo, y solicitar al
usuario la introducción de las mismas en un
campo de texto. Un ejemplo de este tipo es el
Figura 4. El CAPTCHA ESP-PIX, de Carnegie Mellon
CAPTCHA de audio de los comentarios de
Blogger, al que se accede al pulsar sobre la
imagen que representa a un discapacitado en el
CAPTCHA de la figura 2. Otro ejemplo, más
sofisticado, es el que incluye la versión de audio de reCAPTCHA (disponible al pulsar sobre el símbolo del altavoz en un reCAPTCHA
usual como el de la figura 1), que solicita que
se escriba toda una frase. Este tipo de CAPTCHAs está basado en la dificultad que actualmente poseen las computadoras para el reconocimiento de voz, aunque existen evidencias
de que algunos han sido rotos. Por otra parte,
también poseen varios problemas de accesibilidad (cuanto más ruido de fondo, más difícil
es para el usuario; más aún, ¿qué pasa si el
mensaje se reproduce en inglés y el usuario
no es angloparlante?).
Los CAPTCHAs de vídeo presentan un
vídeo al usuario y realizan una pregunta sobre
el mismo. Por ejemplo, el de la figura 6 solicita al usuario que introduzca tres palabras que
describen el vídeo (en este caso, el usuario
introdujo “perros”, “disfraz” y “halloween”).
La seguridad de estos CAPTCHAs depende de
la incapacidad de los programas actuales para
realizar, de nuevo, un reconocimiento de entidades, en un vídeo (esto es, una secuencia de
imágenes). Las dificultades de usabilidad son
extremas en este caso, ya que un usuario puede
escribir millones de palabras (que además pueden ser de otro idioma) sin siquiera acercarse
67
www.lpmagazine.org
64_65_66_67_68_69_Recaptcha.indd
67
2009-10-14, 17:54
programación
Protegiendo formularios Web con reCAPTCHA
a la descripción deseada, aunque se admita un
margen de error por medio de un cálculo de
similitud aproximada.
Actualmente, hay más de 90 artículos
científicos dedicados a este tema, en los
cuales se introducen más de 50 CAPTCHAs
distintos, de los cuales se puede encontrar una
buena muestra en, por ejemplo CiteULike. Y
todo esto es sin contar las decenas de servicios Web disponibles con una sola búsqueda
en Google. Y si a uno le gusta programar, hay
decenas de implementaciones libres de CAPTCHAs en todos los lenguajes, incluyendo
PHP, C#, Java, etc.
¿Por qué reCAPTCHA?
En este artículo, nos centramos en describir
cómo instalar reCAPTCHA en tu servicio
Web. Habiendo tantas opciones, ¿por qué
usar reCAPTCHA? Estas son las razones:
•
•
•
•
•
Figura 5. El CAPTCHA SQUIGL-PIX, de Carnegie Mellon
Ahora bien, la que quizá sea la razón más
interesante para usar este CAPTCHA y no
otros es que cumple una función de utilidad
social, y es que se utiliza para digitalizar libros
y periódicos antiguos. Los sistemas OCR (de
Reconocimiento Óptico de Caracteres) actuales cometen muchos errores en esta case de
libros y periódicos, ya que el estado de los mismos, la calidad del papel, etc. son factores de
ruido. En reCAPTCHA, se solicita al usuario
que introduzca dos palabras, una de las cuales
es de control, y la otra proviene de algún texto
difícil de digitalizar. Al introducir ambas, el
usuario está contribuyendo a digitalizar el texto
en cuestión. Y esta es una manera muy útil de
aprovechar los 13 segundos de media que una
persona tarda en resolver un CAPTCHA: si reCAPTCHA está recibiendo más de 10 millones
de respuestas al día (en julio de 2008, ahora
serán bastantes más), se están aprovechando
más de 36.000 horas de esfuerzo mental humano al día para una tarea que ayuda a la comunidad. Los libros y periódicos digitalizados están
disponibles, por ejemplo, a través de Google
Books.
Por cierto, además, reCAPTCHA es gratuito.
Este sistema es uno de los más sencillos
de integrar en un sitio Web , ya que hay
múltiples bibliotecas y ejemplos de código en muchos lenguajes de programación.
reCAPTCHA ofrece múltiples posibilidades de configuración, especialmente de
tema (colores, etc.) y de idioma, e incluye
el español.
Se trata de un CAPTCHA seguro, es decir,
hasta el momento no existen evidencias
de que haya sido roto. Los mecanismos
de seguridad empleados se describen en
profundidad en el artículo de von Ahn en
la revista Science.
Asimismo, es un CAPTCHA muy popular. En en sitio web dicen que hay más de
100.000 sitios que lo usan.
Además, es un sistema razonablemente
accesible, ya que está dotado de una Usando reCAPTCHA en PHP
versión de audio que puede ser útil para Un CAPTCHA es un programa que tiene dos
partes principales; la generación del reto que se
personas discapacitadas.
incrusta en el formulario que se desea proteger,
y la validación de la entrada del usuario para
resolver el reto. Por lo tanto, en primer lugar es
preciso tener un formulario que proteger.
Figura 6. Un CAPTCHA de vídeo, propuesto por
Kurt Alfred Kluever
68
64_65_66_67_68_69_Recaptcha.indd
de texto etiquetada como “Mensaje”, y su dirección de correo en la caja etiquetada como
“Correo electrónico”. El código da lugar a un
formulario como el que se muestra en la figura 7. La parte esencial del código del formulario es la acción, que viene determinada por la
propiedad action de la etiqueta form. Esta acción consiste en llamar a un programa llamado
sendmail.php residente en el mismo directorio que el formulario.
El contenido del programa PHP que envía
un correo se muestra en el listado 3. Se trata de
un programa o script muy simple, que asigna
en las variables $email y $message los contenidos de los campos del formulario con igual
nombre, identificados en el listado 2 con el atributo name de las etiquetas input y textarea,
respectivamente. A continuación, se emplea la
función PHP mail para enviar un correo a la dirección [email protected], con el asunto
“Correo de feedback”, el texto contenido en la
variable $message, y el remitente de la variable
$email. Finalmente, se llama la página situada
en la URL http://www.ejemplo.es/gracias.html
con la función header.
Este formulario ha sido probado con un
servidor Apache y PHP 4.1.
Incorporando reCAPTCHA
Antes de incorporar nuestro reCAPTCHA, necesitamos el plugin de PHP, que se puede descargar desde la propia página de reCAPTCHA.
Este plugin consta de una serie de archivos, de
los que el único importante es recaptchalib.
php (ya que los demás son ejemplos y la licencia). Y ya estamos en condiciones de agregar
El formulario de ejemplo
un reCAPTCHA al formulario. En realidad, se
Para mantener el ejemplo lo más sencillo posi- trata de un proceso muy sencillo, que consta de
ble, y sin que se requieran apenas conocimien- los siguientes pasos:
tos de PHP, planteamos un ejemplo de formulario que se puede usar para enviar un correo • Obtener una licencia de uso de reCAPTcon comentarios al administrador de un sitio
CHA, lo que se puede hacer a través de
Web.
su sitio Web. En la figura 8 se muestra el
El formulario tiene el código HTML que
formulario de suscripción para generar la
se muestra en el listado 2, y que se puede incuenta de usuario, que luego debe generar
crustar en una página HTML cualquiera. El
una clave para cada dominio que controle
usuario puede escribir su mensaje en el área
(como “ejemplo.es”), o para varios a la
Linux+ 12/2009
68
2009-10-15, 13:15
programación
Protegiendo formularios Web con reCAPTCHA
Figura 7. Un formulario sencillo en HTML para
enviar un correo
la clave del reto ($_POST["recaptcha_
challenge_field"]) y la respuesta del
usuario ($_POST["recaptcha_response_field"]). El resultado de la llamada
se asigna al objeto $resp, cuyo valor del
campo is_valid se verifica en el condicional posterior. Si no es válido (ojo a la
negación: !), se finaliza el programa (función die) mostrando al usuario el mensaje “No introdujo el reCAPTCHA correctamente. Vuelva atrás e inténtelo de
nuevo." reCAPTCHA devolvió:”, junto
con el código de error almacenado en el
campo error de la variable $resp. A continuación, se desarrolla el resto del programa como antes.
vez. La clave es en realidad un par de claves, la pública será visible para el usuario
Personalización de reCAPTCHA
pero la privada no, como las siguientes:
– Clave pública: 6LetMQsddgsdffgsdf Como cada sitio Web tiene su propia imagen
gPPZacH4pf-mWvR8YNMH
y estilo, reCAPTCHA ofrece ciertos nive– Clave privada: 6LetMQfdsgVprfGGKe les de personalización en este sentido. Por
ofdfjvSzKtEEenj41j
ejemplo, se puede personalizar el “tema” del
• A continuación, renombramos el archivo reCAPTCHA usando la clave theme de la
del formulario a formulario.php e intro- variable RecaptchaOptions, a través de un
ducimos el código del listado 4 justo antes script de JavaScript que podemos situar en
del código del botón submit en el formu- la sección head del archivo del formulario,
lario. La función require_once carga la formulario.php. Esta llamada se muestra
biblioteca o plugin recaptchalib.php, en el listado 6.
que hemos situado en el mismo directoLas opciones disponibles para la clave
rio que el formulario y el programa de theme son red (rojo, valor por defecto), white
envío del correo. En la asignación de la (blanco), blackglass (cristal oscuro), clean
variable $publickey ponemos la clave (claro) y custom (el autor tiene total control
pública que hemos obtenido. La llamada sobre el aspecto del reCAPTCHA). También
a la función recaptcha_get_html genera se puede personalizar el idioma, usando la clael código HTML que hace que nuestro ve lang con el valor es para el español, o fr
para el francés, y así hasta 8 idiomas soportareCAPTCHA aparezca en el formulario.
• El siguiente paso es retocar el programa dos por el reCAPTCHA de serie. Obviamende envío del correo, para que valide el re- te, el idioma por defecto es el inglés (en).
CAPTCHA. Para ello, lo reescribimos de
la manera en que aparece en el listado 5. Conclusiones
En este script, en primer lugar se carga la Nos gustaría finalizar este artículo agradebiblioteca, y después se solicita al servidor ciendo por su contribución, por un lado, a las
que valide el reCAPTCHA con la función personas que crearon reCAPTCHA (el equipo
recaptcha_check_answer, que pasa co- de Luis von Ahn en la Universidad de Carnemo parámetros la clave privada (que se gie Mellon), y por el otro, a los demás autores
debe haber escrito en la asignación de la de CAPTCHAs gratuitos, ya se provean como
variable $privatekey), la dirección del bibliotecas cerradas o abiertas. Es conveniente
servidor ($_SERVER["REMOTE_ADDR"]), que prestemos mucha atención a la hora de
hacer uso de su trabajo, ya que hay aspectos
Listado 6. Código JavaScript para personalide los CAPTCHAs que pueden debilitarlos
zar reCAPTCHA
(como por ejemplo las validaciones con JavaScript y el manejo de sesiones), por lo que
<script type= "text/javascript">
podría darse el caso de que alguien rompiera
var RecaptchaOptions = {
un CAPTCHA por nuestra culpa. No es un
theme: 'clean'
daño real al CAPTCHA, sino al prestigio de
};
sus autores, que tienen que rebatir que es el uso
</script>
inseguro del mismo el que lo ha propiciado,
y no una debilidad intrínseca del sistema.
Sobre el autor
José María Gómez Hidalgo es Doctor en
Ciencias Matemáticas, y director de I+D
en la empresa de seguridad Optenet. Ha
sido profesor e investigador de la Universidad Europea de Madrid, dirigiendo el
Departamento de Sistemas Informáticos.
Ha liderado varios proyectos de investigación centrados en herramientas de
filtrado de contenidos Web y de filtrado
de correo basura o spam. Dentro de la
seguridad, su especialidad es la aplicación de técnicas de Inteligencia Artificial,
y ha publicado varios artículos científicos, e impartido conferencias nacionales
e internacionales sobre el correo basura
y el filtrado Web. Su página web es http://
www.esp.uem.es/jmgomez, y su blog es
http://jmgomezhidalgo.blogspot.com.
Servicios como reCAPTCHA o como
ASIRRA, que además de funcionar como mecanismos de seguridad, realizan una tarea
social o comunitaria (en el caso del segundo
se trata de la adopción de mascotas abandonadas, a través de PetFinder), son muy de agradecer.
Finalmente, queremos constatar que durante el tiempo de redacción de este artículo
se hizo pública la adquisición de reCAPTCHA por parte de Google. Esto es sin duda
un éxito no desdeñable para este equipo de
investigadores, aunque ignoramos qué puede
deparar al sistema en el futuro.
En la red
•
•
•
•
•
•
Sitio oficial de reCAPTCHA
http://recaptcha.net/
Protección de correo MailHide
con reCAPTCHA
http://mailhide.recaptcha.net/
Amazon Mechanical Turk
http://aws.amazon.com/mturk/
ASIRRA, el CAPTCHA de imagen
de Microsoft Research
http://www.asirra.com/
Biblioteca CiteULike sobre
CATPCHAs del autor
http://www.citeulike.org/user/
jmgomez/tag/captcha
Google adquiere reCAPTCHA
http://googleblog.blogspot.com/
2009/09/teaching-computers-toread-google.html
69
www.lpmagazine.org
64_65_66_67_68_69_Recaptcha.indd
69
2009-10-14, 17:54
seguridad
Evadiendo la seguridad de los captcha
Evadiendo la seguridad
de los captcha
David Puente Castro (blackngel)
[email protected]
A día de hoy, al lado de cada formulario presente en la web se encuentra una especie de
desafío-respuesta que intenta identificar si quién cumplimenta el mismo se trata de una
persona humana o de un sistema automatizado. El único modo de lograr que estos sistemas,
conocidos como “captchas”, se vuelvan seguros, es desechar la idea de que la mayoría de
ellos no pueden ser vulnerados, y eso es lo que estamos a punto de demostrar.
C
hema Alonso, de Informática 64, junto con
sus secuaces, son bastante conocidos a estas
alturas, ya sea por sus conferencias o por el
desarrollo de todos los wargames que de
un tiempo a esta parte llevan realizando. Todos ellos son
gente que, haciendo honor al nombre de su blog, están
bastante asentados en lo que se conoce como “el lado del
mal”, es decir, con amplios conocimientos orientados a las
plataformas de Microsoft.
Es por ello que la mayoría de los retos que han
planteado están basados en tecnologías web así como
ASP.NET, Microsoft SQL Server, el servicio de protocolo ligero de acceso a directorio (LDAP) de la misma
plataforma y demás...
Aun siendo esto así, no evita que todos los retos pudieran ser superados desde un entorno Linux o al menos
de base Unix. Al fin y al cabo, casi todos se basaban en
técnicas de inyección, ya sea SQL, LDAP y otros juegos
intelectuales. Teniendo en cuenta que hasta ahora todos
se habían desarrollado por fases, en las que unos descubrimientos llevaban a otros niveles (las pistas estaban ahí
70
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
para ayudar, o no), la aparición del último reto, el número
9, parecía un caso un poco especial.
Lo especial está en que se centra únicamente en un
aspecto de la seguridad de los entornos web, específicamente el problema que plantea la superación del desafíorespuesta de una imagen “CAPTCHA” para un programa
automatizado. Problema que supuestamente solo debería
poder ser solucionado por un humano.
Cada nivel en el reto presentaba una debilidad y debía
ser encontrada para pasar al siguiente. Claro que siempre
quedaba la posibilidad de implementar alguna clase de
reconocimiento OCR, y con ello poder superar todas las
fases (menos la última que era distinta y se superaba de un
modo muy sencillo), con la misma herramienta.
Durante este artículo nos centraremos en esta última
posibilidad. Si quieres ir calentando motores entra en la
siguiente dirección perteneciente al Reto 9 [1].
Análisis
Cuando empecé a jugar con este juego, como siempre mucho más tarde de que ya hubiera terminado y los premios
Linux+ 12/2009
70
2009-10-15, 14:25
d
seguridad
Evadiendo la seguridad de los captcha
hubieran sido otorgados (el reconocimiento
del Hall of Fame), observé que las primeras
fases estaban hechas para novatos.
¿Cómo puede ser que las 4 primeras
tengan el mismo nivel de dificultad? Es
más, puedo decir que la tercera es más difícil incluso que la cuarta, debido a que en las
pruebas 1, 2 y 4 el valor del texto mostrado
en el Captcha podía ser leído directamente
del código HTML.
Como es sabido, cualquier persona con
un mínimo conocimiento de Perl o algo por
el estilo puede automatizar las peticiones
web, leer los códigos, y realizar un POST
con la información adecuada. Esto es lo que
conocemos habitualmente con el nombre de
“web-scrapping”.
En resumen, si alguien quiere ver como
se puede estudiar y superar cada reto de
forma individual, recomiendo la lectura del
solucionario escrito y detallado por nuestro
amigo Kachakil [2].
Habiendo perdido un poco la gracia,
a uno se le vino a la mente, como no, la
idea de desarrollar una solución global
para todos los niveles. Si generalizamos,
sabemos que en todos los niveles tenemos
una imagen, el Captcha, y que podemos
descargarla. Si tuviésemos la capacidad de
interpretar los caracteres en el contenidos
y enviar el código de regreso a la página,
tal vez tendríamos el premio en nuestras
manos.
OCR viene a nuestras mentes, reconocimiento de caracteres dentro de una imagen,
pero la pregunta es siempre la misma: ¿Cómo? Como bien se ha dicho por ahí, nadie
puede pretender abrir una imagen con un
Figura 1. Aspecto del captcha a estudiar
editor de texto, ya sea hexadecimal o no,
y buscar a lo largo de todos los caracteres
una cadena con el texto del captcha en si,
esto es impensable desde luego.
Listado 1. ocr_captcha.php – parte 1
<?
// que forman la base de datos. De no haber
// ninguno, se al usuario
// que inicie la sesiones de aprendizaje.
// Por defecto se trabaja en el modo normal (no
aprendizaje)
$archivos = fileslist();
// En nombre por defecto de la imagen captcha es
captcha.gif
if ( empty($archivos) && !($mode_learn)) {
$mode_learn = 0;
sesiones de aprendizaje.\n";
print "\nBase de datos vacia. Inicie
print "\nUsage: ". $argv[0] ." [-f CAPTCHA]
$input_code = "";
$file_captcha = "captcha.gif";
[-l CODE]\n";
// Se comprueban los argumentos:
}
Exit;
// [-F] -> nombre de la imagen captcha
$archivos = substr($archivos, 0, strlen($archivos)-
// [-l] -> Código de la imagen captcha en modo
1);
// aprendizaje
if (($argc >= 1) && (($argv[1] == "-l") || ($argv[3]
== "-l"))) {
$mode_learn = 1;
if ($argv[1] == "-l") {
}
$input_code = strtoupper($argv[2]);
elseif ($argv[3] == "-l") {
}
$input_code = strtoupper($argv[4]);
$archivos = explode("," , $archivos);
read_captcha();
function read_captcha()
{
global $file_captcha, $mode_learn;
// Las imágenes de los caracteres
// individuales serán en
}
// principio de 28 x 80 píxeles.
if ($argv[1] == "-f") {
$width = 28;
$file_captcha = $argv[2];
$height = 80;
}
// Abrimos la imagen y comprobamos
// Se obtiene una lista de los archivos
// que existe.
// contiendo los mapas de píxeles
$img = ImageCreateFromGif($file_captcha);
71
www.lpmagazine.org
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
71
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Listado 1a. ocr_captcha.php – parte 1
if (!$img) {
// Guardamos las nuevas imagenes
print "\nEl archivo no existe\n";
}
Exit;
// conteniendo los caracteres
// individuales en el disco duro.
imagejpeg($imgchar1, "chr1.jpg");
imagejpeg($imgchar2, "chr2.jpg");
// Convertimos el GIF a JPG para
imagejpeg($imgchar3, "chr3.jpg");
// trabajar mejor.
imagejpeg($imgchar4, "chr4.jpg");
imagejpeg($img, "captcha.jpg");
imagejpeg($imgchar5, "chr5.jpg");
$newimg = ImageCreateFromJpeg("captcha.jpg"
imagejpeg($imgchar6, "chr6.jpg");
);
imagejpeg($imgchar7, "chr7.jpg");
imagejpeg($imgchar8, "chr8.jpg");
// Limpiamos la imagen, esto es
// convertir el color de los
// Reabrimos dichas imagenes
// caracteres a negro y el fondo a blanco.
// y ejecutamos una funcion que
// intenta averiguar la posicion
$cleanimg = clean($newimg);
// del caracter para aislarlo
imagejpeg($cleanimg, "newcapt.jpg");
// y crear una imagen mas recortada
// el mismo.
// Creamos 8 imagenes individuales
$ch1 = cut_img(ImageCreateFromJpeg
// de 28 x 80.
("chr1.jpg"));
$imgchar1 = imagecreate($width, $height);
$ch2 = cut_img(ImageCreateFromJpeg
$imgchar2 = imagecreate($width, $height);
("chr2.jpg"));
$imgchar3 = imagecreate($width, $height);
$ch3 = cut_img(ImageCreateFromJpeg
$imgchar4 = imagecreate($width, $height);
("chr3.jpg"));
$imgchar5 = imagecreate($width, $height);
$ch4 = cut_img(ImageCreateFromJpeg
$imgchar6 = imagecreate($width, $height);
("chr4.jpg"));
$imgchar7 = imagecreate($width, $height);
$ch5 = cut_img(ImageCreateFromJpeg
$imgchar8 = imagecreate($width, $height);
("chr5.jpg"));
$ch6 = cut_img(ImageCreateFromJpeg
// Dividimos el captcha en 8 partes
("chr6.jpg"));
// de igual ancho (28 pixeles)
$ch7 = cut_img(ImageCreateFromJpeg
// y copiamos cada parte en las imagenes
("chr7.jpg"));
// individuales.
$ch8 = cut_img(ImageCreateFromJpeg
("chr8.jpg"));
imagecopy($imgchar1, $cleanimg,
1, 1,
0, 0, 28, 80);
// Guardamos nuevamente los resultados.
imagecopy($imgchar2, $cleanimg,
1, 1,
28, 0, 28, 80);
#imagejpeg($ch1, "chr1.jpg");
imagecopy($imgchar3, $cleanimg,
1, 1,
#imagejpeg($ch2, "chr2.jpg");
56, 0, 28, 80);
#imagejpeg($ch3, "chr3.jpg");
imagecopy($imgchar4, $cleanimg,
1, 1,
#imagejpeg($ch4, "chr4.jpg");
84, 0, 28, 80);
#imagejpeg($ch5, "chr5.jpg");
imagecopy($imgchar5, $cleanimg,
#imagejpeg($ch6, "chr6.jpg");
1, 1, 112, 0, 28, 80);
#imagejpeg($ch7, "chr7.jpg");
imagecopy($imgchar6, $cleanimg,
#imagejpeg($ch8, "chr8.jpg");
1, 1, 140, 0, 28, 80);
imagecopy($imgchar7, $cleanimg,
// Creamos un mapa de pixeles para
1, 1, 168, 0, 28, 80);
// cada caracter.
imagecopy($imgchar8, $cleanimg,
1, 1, 196, 0, 28, 80);
$datamap1 = createchardatamap
($ch1, "noname");
$datamap2 = createchardatamap
72
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
Linux+ 12/2009
72
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Listado 1b. ocr_captcha.php – parte 1
$nummap7 = count($datamap7);
($ch2, "noname");
$datamap3 = createchardatamap
$datamap8 = explode("@", $datamap8);
($ch3, "noname");
$datamap4 = createchardatamap
($ch4, "noname");
$datamap5 = createchardatamap
$datamap8 = substr($datamap8[1], 1,
strlen($datamap8[1]));
$datamap8 = explode(":", $datamap8);
$nummap8 = count($datamap8);
($ch5, "noname");
$datamap6 = createchardatamap
($ch6, "noname");
// Busca en la base de datos que
$datamap7 = createchardatamap
// archivos (mapas de pixeles)
($ch7, "noname");
// son mas parecidos a los mapas
$datamap8 = createchardatamap
// que acabamos de crear para
($ch8, "noname");
// los caracteres del captcha a analizar.
$datamap1 = explode("@", $datamap1);
$texto .= charletter($datamap1,
$datamap1 = substr($datamap1[1], 1,
"chr1.jpg", 0);
strlen($datamap1[1]));
$texto .= charletter($datamap2,
$datamap1 = explode(":", $datamap1);
"chr2.jpg", 1);
$nummap1 = count($datamap1);
$texto .= charletter($datamap3,
"chr3.jpg", 2);
$datamap2 = explode("@", $datamap2);
$texto .= charletter($datamap4,
$datamap2 = substr($datamap2[1], 1,
"chr4.jpg", 3);
$datamap2 = explode(":", $datamap2);
"chr5.jpg", 4);
strlen($datamap2[1]));
$texto .= charletter($datamap5,
$nummap2 = count($datamap2);
$texto .= charletter($datamap6,
"chr6.jpg", 5);
$datamap3 = explode("@", $datamap3);
$texto .= charletter($datamap7,
$datamap3 = substr($datamap3[1], 1,
"chr7.jpg", 6);
$datamap3 = explode(":", $datamap3);
"chr8.jpg", 7);
strlen($datamap3[1]));
$texto .= charletter($datamap8,
$nummap3 = count($datamap3);
// Borramos las imagenes temporales
$datamap4 = explode("@", $datamap4);
// de los caracteres.
$datamap4 = substr($datamap4[1], 1,
strlen($datamap4[1]));
#unlink("chr1.jpg");
$datamap4 = explode(":", $datamap4);
#unlink("chr2.jpg");
$nummap4 = count($datamap4);
#unlink("chr3.jpg");
#unlink("chr4.jpg");
$datamap5 = explode("@", $datamap5);
#unlink("chr5.jpg");
$datamap5 = substr($datamap5[1], 1,
#unlink("chr6.jpg");
strlen($datamap5[1]));
#unlink("chr7.jpg");
$datamap5 = explode(":", $datamap5);
#unlink("chr8.jpg");
$nummap5 = count($datamap5);
$datamap6 = explode("@", $datamap6);
$datamap6 = substr($datamap6[1], 1,
strlen($datamap6[1]));
if ($mode_learn == 0) {
#print "\nTexto Reconocido:
$texto\n";
$datamap6 = explode(":", $datamap6);
}
$nummap6 = count($datamap6);
$datamap7 = explode("@", $datamap7);
$datamap7 = substr($datamap7[1], 1,
strlen($datamap7[1]));
print $texto;
#print "\n";
}
return;
$datamap7 = explode(":", $datamap7);
73
www.lpmagazine.org
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
73
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Esquemáticamente, el programa, una vez
modificado, realiza lo siguiente:
•
Figura 2. Imágenes de los caracteres individuales
Pregunta: ¿La solución?
Respuesta: Reconocimiento de Patrones.
Si pudiésemos aislar los caracteres del
Captcha, esto es, crear una imagen individual de cada uno, almacenarlas todas en una
base de datos en relación a su carácter real, y
luego establecer un método de comparación,
por norma general deberíamos obtener en un
amplio porcentaje de ocasiones el código
correcto.
Por suerte, buscando información sobre
el tema en la red, encontré un pequeño motor
con una idea bastante aceptable desarrollada
en PHP que cubría mis expectativas para
adaptarlo al reto.
•
•
•
•
Abre la imagen captcha.
– Explicación: Para el reto se trata de
abrir un GIF y convertirlo en JPEG.
La limpia.
– Explicación: Consigue dejar en negro las letras y en blanco el fondo.
Divide.
– Explicación: Crea una nueva imagen
por cada carácter individual.
Creár un mapa de los píxeles.
– Explicación: Un documento incluyendo grupos de tres cifras indicando el valor de los colores rojo, verde
y azul en cada píxel individual.
Compara.
– Explicación: Compara el mapa de
píxeles del carácter actualmente
tratado con todos los mapas pre-
viamente almacenados en la base
de datos. Aquel que presente más
coincidencias es candidato a ser el
correcto.
Debo añadir que una vez acabado el desarrollo, lo probé antes de nada en otra clase de
captchas en donde resulto ser más efectivo
que en el propio reto.
Diseño e implementación
A continuación mostramos en el listado
número 1 la primera parte del código que finalmente diseñé y adapté para la solución del
reto. Iré introduciendo antes de cada función
todos los comentarios que sean necesarios
para comprender su cometido, de modo que
la explicación posterior no tenga que alargarse demasiado y que simplemente teniendo el
código en tus manos y probándolo puedas
manejar todos sus detalles.
Listado 2. ocr_captcha.php – parte 2
$data = explode("@",$data);
function clean ($image)
$data = substr($data[1], 1,
{
strlen($data[1]));
$data = explode(":",$data);
$w = imagesx($image);
$numdata = count($data);
$h = imagesy($image);
for ($x = 0; $x <= $w; $x++) {
for($i = 0; $i <= $h; $i++) {
$rgb = imagecolorat($image, $x, $i);
for ($x=0; $x <= $numdata-1; $x++)
{
if (($data[$x])
$r = ($rgb >> 16) & 255;
!= ($datamap1[$x])) {
$g = ($rgb >> 8) & 255;
$b = $rgb & 255;
$errores++;
if (($g < 50) && ($b < 95)) {
}
imagesetpixel($image, $x, $i,
}
imagecolorallocate($image,
0, 0, 0));
$erroresa[$i] = $errores;
} else {
$erroresb[$i] = $archivos[$i];
imagesetpixel($image, $x, $i,
$errores = 0;
imagecolorallocate($image, 255, 255, 255));
}
$value = min($erroresa);
}
}
}
$key = array_search($value, $erroresa);
}
$letra = base64_decode(str_rot13
return $image;
$letra = explode("@",$letra);
(fileread($erroresb[$key])));
if ($value != 0 && $mode_learn) {
function charletter($datamap1, $file, $pos)
{
learnchar($file,
$input_code[$pos]);
global $archivos, $mode_learn, $input_code;
}
$errores =0;
for ($i=0; $i < count($archivos); $i++) {
$data = base64_decode(str_rot13
}
return $letra[0];
(fileread($archivos[$i])));
74
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
Linux+ 12/2009
74
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
En el listado 2 podremos ver dos de las
funciones más importantes dentro de todo
el código, por un lado la función clean( ) se
encarga de convertir el color de las letras a
negro y el de fondo a blanco. Para ello se ha
estudiado el captcha con GIMP y se ha advertido que por norma general el color verde
de los píxeles que forman los caracteres no
supera el valor 50, y que para el azul suele
estar por debajo de 95.
La función recorre la imagen píxel por
píxel comprobando sus colores verde y azul,
de estar por debajo de los valores citados se
convierten a negro, (0,0,0) en cual quier otro
caso el píxel se convierte en blanco (255,
255,255).
Por otro lado tenemos a charletter( ), una
de las funciones más importantes a la hora de
interactuar con la base de datos. Esta función
toma como primer parámetro el mapa de
píxeles de un carácter individual a comparar
con los mapas de píxeles de todos los caracteres almacenados previamente en la base de
datos. Se va incrementando un contador de
errores que indica el numero de diferencias
entre los mapas, y se tomara como carácter
correcto aquel que tuviera menos errores.
Luego, si se está en modo aprendizaje, se
llama a learnchar( ) para almacenar el mapa
de pixeles del caracter comparado, siempre
y cuando no exista ya uno exactamente igual
en la base de datos (errores == 0).
El listado 3 es totalmente autoexplicativo
si se leen los comentarios agregados al código, son las operaciones relacionadas con los
ficheros de la base de datos.
En el listado 4 podemos ver otras dos
funciones relacionadas con la edición de la
imagen, en concreto con la separación de los
caracteres individuales en gráficos individuales. La función “cut_img( )” no es necesaria
en aquellos tipos de captcha donde todos sus
caracteres se encuentran en la misma linea
horizontal. Su misión es detectar en que línea
comienza el carácter dentro de la imagen
y para ello se base en encontrar una amplia
presencia de píxeles negros (o al revés, donde
no existe gran concentración de píxeles blancos). Una vez obtenida la linea de comienzo,
simplemente se corta la imagen a partir de ahí
con una altura de 28 píxeles.
Por su parte, check_letter( ) es una función
de apoyo a la anterior. Comprueba que la imagen resultante de la función previa tenga al menos una cantidad igual o superior a 70 píxeles
negros. En caso contrario es que nos hemos
equivocado en la línea de comienzo y no hemos recortado el carácter correctamente.
Listado 3. ocr_captcha.php – parte 3
// Lee el contenido de un fichero individual de la base de datos.
function fileread($filename)
{
$filename= "./bd/".trim($filename);
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
}
return $contents;
// Obtiene una lista de todos los archivos presentes en la base
// de datos.
function fileslist()
{
$archivos="";
$dir = opendir("./bd/");
while (false !== ($file = readdir($dir))) {
if(strpos($file,"charmap")) {
$archivos .= $file.",";
}
}
}
return $archivos;
// Aprende un caracter, esto es: Abrir la imagen del caracter
// individual,
// crear el mapa de pixeles y guardar el resultado en un nuevo
// archivo para
// la base de datos codificandolo previamente en Base64 y Rot13.
function learnchar($image,$name)
{
global $width,$height;
$imagen = ImageCreateFromJpeg($image);
$datamap = str_rot13(base64_encode(createchardatamap
($imagen,$name)));
save_datamap($datamap,$name);
n";
print "Nuevo caracter ['$name'] agregado a la Base de Datos\
}
Ya para terminar, el listado 5, con la última
parte del código que es la que realmente crea
la base de datos con los mapas de píxeles de
los caracteres de cada imagen aprendida. El
formato de estos “archivos de conocimiento”
se detalla en los comentarios que preceden
a cada método.
Por tu parte, ya solo te queda unir los cinco listados de código que hemos mostrado y,
o bien seguir el artículo tal y como lo vamos
desarrollando, o utilizar dicho código para
continuar con tus propias investigaciones.
Eres libre de hacer con el cuanto te plazca.
No obstante, vamos a explicar de un modo más sencillo y gráfico como funciona este
código y como realizamos el aprendizaje básico. Os aseguro que con un poco de paciencia es extremadamente sencillo de entender.
Para empezar echa un vistazo a la Figura
1, en ella podemos ver tres captchas distintos
pertenecientes al reto.
Los carácteres tienen todos diferentes
tonalidades de rojo, y el fondo es una especie de azul grisáceo. La función clean( )
crea una nueva imagen siendo los caracteres de color negro y el fondo de blanco (aunque
75
www.lpmagazine.org
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
75
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Listado 4. ocr_captcha.php – parte 4
function cut_img($image)
("chrcut.jpg");
$is_letter = check_letter($rimg);
{
if ($is_letter)
break;
global $width,$height;
else
$rimg = null;
$white_pix = 0;
$has_black = 0;
}
$w = imagesx($image);
$white_pix = 0;
$has_black = 0;
$h = imagesy($image);
for ($x = 0; $x <= $h; $x++) {
}
for ($i = 0; $i <= $w; $i++) {
$rgb = imagecolorat
}
($image, $i, $x);
$r = ($rgb >> 16) & 255;
$g = ($rgb >> 8) & 255;
return $rimg;
function check_letter($image)
{
$b = $rgb & 255;
if (($r == 255) &&
$black_pix = 0;
($g == 255) &&
$w = imagesx($image);
($b == 255)) {
$white_pix += 1;
$h = imagesy($image);
} else if (($r == 0)
for ($x = 0; $x <= $h; $x++) {
&& ($g == 0)
for ($i = 0; $i <= $w; $i++) {
&& ($b == 0)) {
$rgb =
$has_black = 1;
imagecolorat($image, $i, $x);
$r = ($rgb >> 16) & 255;
}
$g = ($rgb >> 8) & 255;
}
$b = $rgb & 255;
if (($r == 0)
if ( ($white_pix < 13) &&
&& ($g == 0)
($has_black == 1) ) {
&& ($b == 0)) {
$init_line = $x - 3;
$black_pix += 1;
$width = 28;
}
$height = 28;
}
}
$imgcut = imagecreate
($width, $height);
if ($black_pix >= 70)
imagecopy($imgcut, $image,
1, 1, 0, $init_line, $width,
else
$height);
imagejpeg($imgcut, "chrcut.jpg");
$rimg = ImageCreateFromJpeg
algún píxel se puede escapar si no cumple con
las condiciones establecidas).
¿Cómo logramos esto? Muy sencillo, en
un primer momento examinamos la imagen
con un programa de edición como por ejemplo “GIMP” y con la herramienta adecuada
observamos el valor de rojo, verde y azul de
los píxeles pertenecientes a las letras. Observamos entonces que tienen en común, y en
este caso descubrimos que los valores de verde
suelen estar siempre por debajo de 50 y los de
azul por debajo de 95. En cambio, los valores
de los píxeles del fondo de la imagen no cum-
76
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
}
return 1;
return 0;
plen estas características, de modo que pode- de lo bien que el programa haya reconocido
mos comparar estos valores con la siguiente la posición exacta de los caracteres.
Si es la primera vez que ejecutamos el
sentencia y transformarlos a negro o blanco
programa, y tenemos la base de datos vacía,
según nos convenga:
nos pedirá que iniciemos algunas sesiones de
if (($g < 50) && ($b < 95)) {
aprendizaje. Para aprender este captcha específico, por ejemplo, tendríamos que llamar al
Luego se crean 8 nuevas imágenes como las programa de la siguiente manera:
que podemos ver en la Figura número 2.
Y finalmente llamamos a cut_img( ) para [email protected]:~/captcha-killer$ php
que detecte la posición real del carácter y re- ocr.php -l OOVFFGOL
corte las imágenes adecuadamente, que quedarán más o menos centradas. Esto depende Y el programa nos respondería:
Linux+ 12/2009
76
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Listado 5. ocr_captcha.php – parte 5
Nuevo carácter ['O']
// Guarda el mapa de píxeles en la base de datos. En nombre del archivo
Nuevo carácter ['O']
agregado a la Base de Datos
estaráB // compuesto por:
1 - Carácter
//
2 - Cadena md5 aleatoria
//
3 - "-charmap.datamap"
agregado a la Base de Datos
Nuevo carácter ['F']
// Esto se hace porque en el proceso de aprendizaje almacenaremos
// no solo un
// mapa de píxeles por cada letra, sino varios, de modo que el motor de
// comparación tenga mas posibilidades de acertar con el carácter adecuado.
function save_datamap($datamap,$name)
{
Nuevo carácter ['F']
agregado a la Base de Datos
Nuevo carácter ['G']
agregado a la Base de Datos
Nuevo carácter ['O']
agregado a la Base de Datos
fwrite($fl,$datamap);
agregado a la Base de Datos
fclose($fl);
// Crea el mapa de píxeles. En resumen el formato es:
//
1 - Carácter
//
2 - @
//
3 - :
//
4 - coordenada x
//
5 - coordenada y
//
6 - color del pixel (0 = blanco, 1 = negro)
//
//
agregado a la Base de Datos
$fl = fopen("./bd/$name-".md5(time()*rand(1,100))."-
charmap.datamap","w+");
}
agregado a la Base de Datos
Nuevo carácter ['V']
//
Por ejemplo: A@:0,0,1:0,1,0:0,2,1:...
function createchardatamap($image,$name)
{
global $width,$height;
$datamap=$name."@";
for ($x=0; $x<=$width; $x++){
for ($y=0; $y<=$height; $y++){
$datamap.=":".$x.",".$y.",".pixelcolor($image
,$x,$y);
}
}
Nuevo carácter ['L']
Y de forma manual podríamos ir descargando captchas con todos los diversos caracteres
e ir aprendiéndolos. Fijate que puedes aprender muchas veces el mismo carácter, ya que
este estará en posiciones distintas, y esto
ayudará a acertar muchas más veces cuando
se hagan las comprobaciones. En nuestro
caso hemos añadido nada más y nada menos
que tres letras “O” a la base de datos y dos
letras “F”. En el momento en que examinemos un captcha que contenga alguna de
estas letras, tendremos muchas más posibilidades de que el programa la interprete
correctamente pues con alguna encontrará
un mayor parecido.
Para detectar el texto de un captcha tan
solo tenemos que indicarle el nombre del
mismo con la opción “-f” o sin ningún parámetro si se llama “captcha.gif” ya que este es
el nombre por defecto.
Lo único que queda por comentar aquí
es esto:
if ($mode_learn == 0) {
}
// Esta función recibe como parámetros una imagen y las coordenadas de un
#print "\nTexto Reconocido:
// píxel. Devuelve 0 si este es blanco o 1 si es negro.
$texto\n";
function pixelcolor($im, $x, $y)
}
{
#print "\n";
$rgb = imagecolorat($im,$x,$y);
$r = ($rgb >> 16) & 255;
$g = ($rgb >> 8) & 255;
$b = $rgb & 255;
if (($r > 55) || ($g > 55) || ($b > 55)){
}
}
print $texto;
return 0;
return 1;
?>
Para un uso normal del programa descomentaríamos las dos sentencias “print” que
hemos comentado (y comentaríamos la
descomentada) de forma que el resultado se
imprima de una forma más amigable.
Yo lo he puesto así de momento, ya que
este programa sera llamado dentro de un script
perl que es el encargado de conectarse a la web
del reto con los valores adecuados y descargar la imagen captcha a analizar.
77
www.lpmagazine.org
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
77
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Listado 6. reto_cap.pl
#!/usr/bin/perl -w
/Niveles/Nivel04/$img");
use LWP::UserAgent;
$request = $ua->request($req);
use HTTP::Cookies;
use HTTP::Request::Common qw(POST);
open(IMAGEN, ">captcha.gif") || die
"No se pudo crear archivo: $!";
my $captcha = "";
my $ua = LWP::UserAgent->new() or die;
print IMAGEN $request->content;
close IMAGEN;
my $cookie = '.ASPXAUTH=FC5BD1B2E0FC8A3C881E698C58A5
CBC87150BC9FB8E9C721D06D6CA
E0D7065844E1F69951595059B340363B8E6A1A433B24A00054D0
$captcha = `php ocr_captcha.php`;
AAE68E380AACEC4164014FFC026
print "\nCaptcha: $captcha\n";
318FA979304EEB7BEF3558BDE7; ASP.NET_SessionId=r4yjfs
2dkckyun55e20ujhbu';
@header = ('User-Agent' => $useragent,
'Cookie' => $cookie, 'Connection' =>
my $useragent = 'Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.9.0.1) Gecko/2008
'keep-alive', 'Keep-Alive' =>
072820 Firefox/3.0.1';
'300', Content => [ __EVENTTARGET =>
"", __EVENTARGUMENT => "", __VIEWSTATE
=> "/wEPDwUKMTEwNjI0MjY0MQ
my @header = ('User-Agent' => $useragent,
9kFgJmD2QWAgIDD2QWAgIBD2QWAgIDD2QWAgI
'Cookie' => $cookie, 'Connection' =>
BD2QWAgIDDw8WAh4ISW1hZ2VVcmw
'keep-alive', 'Keep-Alive' =>
FFWltYWdlbmVzL0dOQlFHT0dHLmdpZmRkGA
'300');
IFHl9fQ29udHJvbHNSZXF1aXJlUG9z
dEJhY2tLZXlfXxYCBSNjdGwwMCRMb2dpblZp
ZXcxJExvZ2luU3RhdHVzMSRjdGwwM
my $url = 'http://retohacking9.elladodelmal.com/
QUjY3RsMDAkTG9naW5WaWV3MSRMb2dpblN0YX
Niveles/Nivel04/Default.aspx';
R1czEkY3RsMDMFEGN0bDAwJExvZ2
luVmlldzEPD2QCBWTuf7wPzWAP7wbywWopu
my $response = $ua->post($url, @header);
9vknBCuhg==",
__EVENTVALIDATION => "/wEWBALp/
my $content = $response->content;
4JbAqyhgvUPArXmppIHArC746EO5duXAU3C
nqKFhQ0c4HrRx+AvpUw=", $txtcaptcha =>
my $x = index($content, "ImgCapcha") + 16;
$content = substr($content, $x);
$captcha, $btenviar =>
"Enviar" ]);
$x = index($content, "style") - 2;
my $img = substr($content, 0, $x);
$response = $ua->post($url, @header);
$txtcaptcha = "ctl00\$ContentPlaceHolder1\
my $res = $response->content;
$txtCaptcha";
$x = index($res, "lbSalida") + 66;
$respuesta = substr($res, $x);
$btenviar = "ctl00\$ContentPlaceHolder1
$x = index($respuesta, "</span>");
\$btEnviar";
$respuesta = substr($respuesta, 0, $x);
while (1) {
print "\n-> $respuesta";
$x = index($res, "ImgCapcha") + 16;
print "\nImage = $img";
$res = substr($res, $x);
$x = index($res, "style") - 2;
$req = HTTP::Request->new(GET =>
"http://retohacking9.elladodelmal.com
78
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
}
$img = substr($res, 0, $x);
Linux+ 12/2009
78
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
Dentro de este script perl se utiliza la
sentencia $captcha = `php ocr.php`; que
retornara el texto detectado para el captcha
recién descargado, y es por eso que solo queremos que imprima el texto del captcha sin
ningún agregado que pueda molestarnos.
Vamos seguidamente a estudiar este
script.
Listado 7. learn.pl
#!/usr/bin/perl -w
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common qw(POST);
Wargame: el reto
my $x = index($content, "ImgCapcha") + 16;
El siguiente script escrito en lenguaje Perl
(ver listado 6) tiene como misión conectarse
a la pagina del Nivel 4 del Reto Hacking 9
de Informática 64, descargando la imagen
captcha que en el mismo se presenta, analizar el texto correspondiente con la ayuda
de ocr_captcha.php (descrito en la sección
anterior), y rellenar el formulario de la citada
pagina hasta conseguir 1000 aciertos.
La dirección es la siguiente: http://retoh
acking9.elladodelmal.com/Niveles/Nivel04/
Default.aspx.
Previamente debemos haber iniciado una
sesión en la página con un navegador normal
y corriente (como Firefox). Luego, con un
plugin como “Tamper-Data” obtenemos los
datos que se envían al rellenar el formulario.
Entre ellos lo más importante es la Cookie, de la cual debemos coger los valores:
.ASPXAUTH y ASP.NET_SessionId, de modo que el script pueda hacer peticiones como
si se tratase del navegador y estuviese bien
autentificado.
A la hora de rellenar el formulario debemos cumplimentar los campos:
$x = index($content, "style") - 2;
•
__EVENTARGUMENT
•
__VIEWSTATE
my $captcha = "";
my $ua = LWP::UserAgent->new() or die;
my $cookie = '.ASPXAUTH=3C562E5B97165AAC052D9AAB19521A
DC91F3ABB160A43427EF120E
5158074C106455D0AFE2421D0058A6CA2C4258523C74ED746C0ABC7
55E3C4378EDD63D67013A41
A2DEA67D45A97096AF4AF6F1A694; ASP.NET_SessionId=
43qmmfrhpgvsffitm3lafmm3';
my $useragent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)
Gecko/2008072820 Firefox/3.0.1';
my @header = ('User-Agent' => $useragent, 'Cookie' => $cookie,
'Connection' => 'keep-alive', 'Keep-Alive' => '300');
while(1) {
my $url = 'http://retohacking9.elladodelmal.com/Niveles/Nivel04/
Default.aspx';
my $response = $ua->post($url, @header);
my $content = $response->content;
$content = substr($content, $x);
my $img = substr($content, 0, $x);
$req = HTTP::Request->new(GET => "http://retohacking9.elladodelmal.com/
Niveles/Nivel04/$img");
•
$request = $ua->request($req);
–> Valor extraído de la página
–> Valor extraído de la página
__EVENTVALIDATION
–> Valor extraído de la página ctl00\
$ContentPlaceHolder1\$txtCaptcha
–> El código del captcha
open(IMAGEN, ">captcha.gif") || die "No se pudo crear archivo: $!";
•
binmode IMAGEN;
print IMAGEN $request->content;
ctl00\$ContentPlaceHolder1\
$btEnviar
–> “Enviar”
close IMAGEN;
my $code = substr($img, 9);
my $salida = `php ocr.php -f captcha.gif -l $code`;
print "\n$salida\n";
print "\n";
}
Pero antes de enviar este formulario debemos
leer el contenido de la página en busca de la
cadena “ImgCapcha” sabiendo que 16 caracteres más allá se encuentra la dirección o nombre de la imagen captcha, que guardaremos
en la variable $img y que descargaremos de
la dirección: http://retohacking9.elladodelma
l.com/Niveles/Nivel04/$img.
Después de enviar el formulario con toda
la información cumplimentada, sólo queda
79
www.lpmagazine.org
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
79
2009-10-15, 14:25
seguridad
Evadiendo la seguridad de los captcha
esperar ir obteniendo las respuestas que son
extraídas de la misma. El script podéis ver en
el listado 6.
El único defecto es que la conjunción de
este script con el programa en php de reconocimiento OCR no trabajan todo lo rápido
que uno desearía, y la necesidad de acertar
1000 captchas en menos de 1 hora hace que
la única solución temporal sea ejecutar ambos
programas desde varios ordenadores al mismo
tiempo.
Pero cabe decir que esto a su vez fue
estupendo para realizar las sesiones de aprendizaje de un modo automático, ya que bastaba
con crear un script que actualizara la página,
descargara la imagen captcha y le pasara al
programa ocr.php el nombre de la imagen leído mediante la opción de aprendizaje “-l”.
El script que aquí presento (ver listado 7)
realiza perfectamente esta tarea, y se ejecuta
en un bucle infinito hasta que el usuario lo
detiene con Ctrl-C.
Recuerda que, al igual que en el script
Aprendizaje automático
“reto_cap.pl”, debes cambiar los valores de la
El nivel 4 de este reto resultó ser bueno variable $cookie por aquellos que se corresy malo al mismo tiempo para comenzar pondan con tu sesión.
con esta opción del reconocimiento OCR.
Por una parte es obvio que podría haberse Conclusión
superado de un modo mucho más sencillo, Como se ha podido ver, puede que no sea
ya que el nombre de la imagen que se po- la implementación más limpia, y además no
día leer en el código fuente de la página utiliza ninguna clase de algoritmo complejo,
solicitada era exactamente el código del pero sí es una solución completamente válida, y tan solo hace falta adaptar el modo de
captcha.
descarga de la imagen en cada nivel respectivo para que funcione correctamente.
Lo correcto hubiera sido intentar programar todas las operaciones en una misma
aplicación y con un mismo lenguaje. Perl en si
mismo puede ser una estupenda opción si se sabe como manejar los gráficos con el, os remito
a una estupenda referencia sobre esto en [3].
Java tampoco sería un lenguaje a despreciar, ya que tiene formas (librerías) increíblemente sencillas para tratar con imágenes
o composición de gráficos, solo que la tarea
de interactuar con una web a modo de webscraping requiere un poco más de paciencia
y estudio.
Sea como fuere, el hacker siempre debe buscar un equilibrio entre eficiencia y
eficacia. Para desarrollos e investigaciones
personales, o con metas de futuro, uno debe
utilizar toda su magia para encontrar el método mas eficiente, pero un reto es un reto,
y para superarlo simplemente debemos hacer
que funcione. ¿No es así?
No obstante todo lo dicho, el objetivo
principal de este artículo era demostrar que
los sistemas captcha basados en imágenes
pueden ser vulnerados con cierta facilidad,
y lo hemos logrado. Pueden dificultar el proceso de reconocimiento agregando más ruido
de fondo o distorsionando más las letras, pero
esto solo provocaría cruzar el umbral en que
un humano es capaz de reconocer los mismos
caracteres, y por tanto llegamos a la conclusión de que utilizar esta clase de captcha
en una web de cierta importancia no es una
opción segura.
En la red
•
Figura 3. Reto Hacking IX de Informática 64
•
•
Figura 4. Graphics Programming with Perl
80
70_71_72_73_74_75_76_77_78_79_80_Hacking.indd
[1] Captcha Killer (Reto 9
Informática 64)
http://retohackin9.elladodelmal.com
NOTA: Es posible que el link del
reto no esté activo por un tiempo
y que en otro momento vuelva
a estarlo, esto ya ha sucedido en
otras ocasiones, y es decisión de
sus administradores el tiempo que
el juego permanece o no on-line.
[2] Reto Hacking IX de
Informática 64
http://www.kachakil.com/retos/
I64_Reto_9.pdf
[3] Graphics Programming with Perl
http://man.lupaworld.com/content/
develop/Perl/Graphics_Programming_With_Perl.pdf
Linux+ 12/2009
80
2009-10-15, 14:25
81_rekl_chicas_linux.indd
1
2009-10-14, 18:24
opinión
La ‘autoformación’ no nos hace expertos en seguridad
La ‘autoformación’
no nos hace expertos
en seguridad
Fernando de la Cuadra,
director de Educación
de Ontinet.com, distribuidor
en exclusiva de las soluciones
de seguridad de ESET
en España
82
82_Opinion.indd
L
a noticia de que un virus informático (técnicamente, un troyano) ha sido propagado en nombre de la policía está en muchos
sitios. Y seguramente muchos usuarios estarán preocupados por los posibles efectos que
cause este troyano.
Hoy en día, troyanos como éste aparecen
por cientos. No es nada nuevo que se intente
instalar un programa que capture contraseñas
y números de tarjetas de crédito. Técnicamente, no aporta absolutamente nada: simplemente es el equivalente a otro ratero de
poca monta robando carteras a turistas en una
ciudad turística.
El gran problema que ha levantado a la
luz el mensaje que animaba a hacer “click”
en un enlace y resultar infectado, es el
miedo de los usuarios. El mensaje afirmaba
que el usuario estaba siendo investigado,
y el mensaje provenía de la dirección de correo “denuncias.pornografia.infantil”, de la
Policía.
El mensaje evidencia un absoluto desconocimiento de los procedimientos judiciales,
ya que nunca se envían citaciones mediante
correo electrónico, y mucho menos se le llama a una citación “CONVOCATORIA DE
ASISTENCIA EN LA AUDIENCIA”. Ni
en castellano las fechas se escriben “agosto
12 de 2009”. Pero a pesar de eso, muchos
usuarios habrán accedido al link que se ofrecía y descargado y abierto el fichero con el
troyano.
¿A qué situación estamos llegando?
¿Por qué un usuario de Internet accede a ese
documento? Quizá un sociólogo pueda dar
una respuesta, pero técnicamente, nos estamos encontrando con una explosión tal de
la Sociedad de la Información que muchos
usuarios no son capaces de digerirlo.
En pocos años hemos pasado, como
mostraba el anuncio de la Agencia Tributaria, de hacer colas para presentar la declaración de la renta a presentarla en 10 minutos
desde casa, confirmando el borrador con el
DNI. O a presentar una denuncia ante la Policía Nacional por Internet, sin esperas. O simplemente, a hacer la compra semanal sin levantarnos de la silla.
Aprovechándose de esto, los creadores
de malware envían, como en el caso del
malware que nos ocupa, una supuesta citación judicial, o un extracto de hacienda, o una
multa de tráfico. Hoy en día no es extraño
que pueda pasar, y quizá algún día, cuando
los sistemas de firma digital estén tan implantados como el correo electrónico, pasará.
Pero no hoy.
Debemos tener muy en cuenta que los
mensajes que circulan por Internet no son todos ciertos, y que la seguridad de nuestro ordenador no atañe solamente a los virus informáticos y a la integridad de la información del
disco duro. Nuestras cuentas bancarias están
en peligro, por algo tan simple como abrir un
mensaje que nos “convoca a la audiencia”.
La formación sigue siendo tremendamente necesaria, y cuando los usuarios dejen de “autoformarse”, podremos conseguir
evitar estafas y que se propaguen bulos diciendo que te regalan un móvil simplemente
por mandar un correo electrónico. O que los
ángeles te visitarán por reenviar 15 veces una
presentación de PowerPoint.
Es mucho más probable que el usuario
vaya a Los Ángeles, California, que los ángeles vayan a él.
Linux+ 12/2009
82
2009-10-15, 11:53
Páginas
recomendadas
83_webamigas.indd
www.diariolinux.com
www.elguille.info
www.gatolinux.blogspot.com
www.opensourcespot.org
www.hispabyte.net
www.linuxdata.com.ar
www.linuxhispano.net
www.pillateunlinux.wordpress.com
www.usla.org.ar
www.mundopc.net
www.picandocodigo.net
www.linuxuruguay.org
91
2009-10-15, 12:41
84_rekl_Concurso.indd
1
2009-10-23, 13:47
Descargar

Linux: lo mejor para los juegos - Fedora-es