Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LM01 PDF
LM01 PDF
Programación de
Konversation
El cliente IRC más fácil
Edición en
Juegos bajo Linux de utilizar Castellano
LINUX MAGAZINE
NÚMERO 01
La nueva versión
de Fedora
en DVD
NÚMERO 1 • P.V.P 4,95 €
REDES
Redes
Enrutado Linux
Cómo dar acceso a Internet a toda una red
doméstica con una sola conexión p68
Herramientas Linux
Correo Seguro
Servidores y clientes de correo con TLS para
transmisión encriptada de mensajes p60
p13
Configuración relajada con DHCP p16
CUPS/SAMBA
Fedora Core 3
TLS/SMTP
Te traemos lo
más nuevo de
Fedora Core 3
MediaWiki
8 413042 594505
p54
p95
WWW.LINUX- MAGAZINE.COM.ES
Linux va a CeBIT
Muestre sus productos y servicios en la sección
especial dedicada a Linux en CeBIT 2005:
Bienve^H^H^H^H^H^H
Estimado Lector de Linux Magazine
www.linuxmagazine.com.es Número 01 3
LINUX MAGAZINE Contenido
NOTICIAS
13 Herramientas de Red
Las máquinas conectadas a la red ofrecen enormes benefi-
Software ................................................................................................6 cios, pero añaden responsabilidades. Desde el momento en
que conectamos
nuestra máquina a
Negocios ................................................................................................8
la red debemos no
solo conocer todo
Linux .........................................................................................................9 acerca de nuestra
máquina, si no tam-
bién sobre la forma
Inseguridades ..................................................................................10
en que ésta se
comunica con el
PORTADA mundo exterior. Las
herramientas están-
dar de Linux nos
Especial Redes ..................................................................................12 pueden ayudar.
Interfaces ............................................................................................33
28 SDL: Juegos Bajo Linux
SDL significa Simple DirectMedia Layer y es una API
Con curses podemos desarrollar interfaces de texto rápidos y multi-plataforma para programar aplicaciones multi-
eficientes media, como los juegos. Aporta una base estable sobre la
que los progra-
Cartas a medida .............................................................................38 madores pueden
Perl puede generar cartas y sobres personalizados para trabajar, sin pre-
envíos masivos en formato PostScript. ocuparse de
cómo se encar-
gará el hard-
La API Pear .........................................................................................42
ware de ren-
PEAR proporciona una API para la conexión a bases de
derizarlo o in-
datos que evita el código redundante.
cluso qué hard-
ware lo ejecu-
Introducción a Python ..............................................................48 tará.
Python es un lenguaje todoterreno, útil tanto en scripts web
como en grandes aplicaciones.
2 Número 01 www.linuxmagazine.com.es
Contenido LINUX MAGAZINE
SYSADMIN
54 MediaWiki
La enciclopedia libre Wikipedia usa el motor Mediawiki para
recopilar un enorme base de datos de conocimiento. Si desea
La Columna de Charly ................................................................53
estrenar su pro- Los mejores trucos y consejos del SysAdmin.
pio wiki, este
software basado Colaboración Online ...................................................................54
en PHP es una Instalamos y configuramos MediaWiki, el motor wiki tras la
buena elección popular Wikipedia
que facilita una
funcionalidad
Correo Seguro .................................................................................60
abundante y
Servidores seguros de correo con TLS
llena de poten-
cia.
La Caja Negra ...................................................................................62
Controla tu sistema con Syslog NG.
LINUX USER
74 Programación XUL
Los desarrolladores de Mozilla crearon el lenguaje XUL para Portales de Enrutamiento .....................................................68
proporcionar un método sen- Con una sola máquina Linux conectada a Internet, podemos
cillo y potente para escribir proporcionar acceso al exterior a toda una red.
interfaces web
de gran atrac- Desktopia: Panelizer ..................................................................70
tivo y funcio- Dota un gestor de ventanas minimalista de un panel de con-
nalidades ex- trol con Panelizer.
traordinarias.
En esta serie
aprendemos
Aplicaciones: Konversation ...................................................72
las bases de la El cliente IRC más sexy para KDE.
programación
orientada a web con Curso de Programación: XUL (I) ..........................................74
esta poderosa her- Un lenguaje sencillo para programar interfaces web.
ramienta.
Educación: WIMS ..........................................................................79
Generación de exámenes personalizados con WIMS.
www.linuxmagazine.com.es Número 01 3
NOTICIAS Software
Software
■ En el Futuro jugamos a Croquet
”¿Qué pasaría si diseñáramos un sistema wwws.sun.com/
operativo e interfaz de usuario con los software/looking_
conocimientos que tenemos hoy en día, glass/). Sin embar-
hasta dónde podríamos llegar?” La go, va más allá
respuesta posiblemente sea hasta el que aquel al no
campo de croquet más cercano. limitarse al aspec- ratoncito (Linux,
OpenCroquet es un proyecto que imple- to visual, permi- Windows y Mac).
menta un nuevo concepto de sistema tiendo, entre otras Se preve que fu-
operativo, el desarrollo del cual viene cosas, que usuar- turas versiones de
liderado Alan Kay, el hombre que nos ios compartan es- OpenCroquet fun-
dio el portátil, la programación orientada pacios de otros simplemente cruzando cionarán como verdaderos sistemas
a objetos y el interfaz de ventanas tan un “portal” y puedan trabajar conjunta- operativos y no requerirán más software
popular hoy en día. El proyecto pretende mente en un mismo documento o com- que el que traigan consigo. Las exigen-
implementar un sistema operativo e partir su tiempo de ocio a través de cias del hardware básico son muy discre-
interfaz totalmente novedoso que unifica avatares igualmente tridimensionales. tas: OpenCroquet funcionará perfecta-
las últimas tecnologías 3D con la De momento, OpenCroquet funciona uti- mente con un Pentium II a 450 Mhz…
ubicuidad de las redes en un todo que lizando como base Squeak, una imple- siempre y cuando venga equipado con
sólo se puede calificar, ahora sí, como mentación de Smalltalk (otro invento de una potente tarjeta gráfica compatible
“ciberespacio”. En la superficie, Kay) orientada a la educación y, por con OpenGL. Visita el enlace de más
OpenCroquet podría parecer similar al tanto, se puede utilizar en todas las abajo para más información. ■
proyecto “Looking Glass” de Sun (http:// plataformas que soporten el interfaz del http://www.opencroquet.org.
■ Palabras Calientes
No, no se trata de otro servicio 906 (o Los linuxeros más recalcitrantes podrán mino de búsqueda potencial. ¿Lees sobre
sea cual sea el prefijo utilizado para decir lo que quieran de esta distro, pero paellas valenciana y te gustaría saber
hablar con señoritas de dudosa moral los impulsores detrás del sistema, con más? Con un clic aparece un menú con-
hoy en día), sino el último invento de su CEO Michael Robertson a la cabeza, textual que te permite buscar en Google
Linspire, antes conocido como Lindows. son un hervidero de ideas. Ésta vez lle- utilizando “paella” como la palabra
van “la experiencia clave, o consultar noticias sobre paellas
Google” hasta la o incluso comprar paellas en Froogle, el
enésima potencia. Si buscador de productos de consumo de
bien Google parece Google… Bueno, ejem, tal vez no sea un
haberse concentrado buen ejemplo, pero ya pilláis la idea. LIS
mucho en la platafor- se basa en el motor de análisis Gecko, el
ma Windows última- mismo utilizado por Mozilla y Firefox,
mente, con su barra pero, según Robertson, “se han realizado
para MSIE, su escrito- muchos cambios y mejoras” para poder
rio solo-Windows y ofrecer funcionalidades extra e incluso
demás, los únicos que integran Hot Words en el cliente de
podrán disfrutar de correo. Otros productos salidas de la fac-
Hot Words, una man- toría Linspire son PhoneGaim que per-
era de buscar en mite realizar llamadas de voz sobre IP de
Google, son los usuar- cliente Gaim a cliente Gaim y
ios de la Linspire MailMinder, un servicio integrado en el
Internet Suite (LIS). cliente de correo de LIS que permite que
Hot Words funciona mensajes recordatorio se envíen en una
convirtiendo cada pal- fecha determinada. Visita el enalce al pie
abra que aparece en la para más información. ■
navegador en un tér- http://info.linspire.com/suite.html
6 Número 01 www.linuxmagazine.com.es
Software NOTICIAS
www.linuxmagazine.com.es Número 01 7
NOTICIAS Negocios
Negocios
■ Hispafuentes y Ceres
La empresa de software libre española
Hispafuentes y la Fábrica Nacional de
Moneda y Timbre-Real Casa de la
Moneda han desarrollado conjuntamente
drivers para tarjeta criptográfica “Ceres”.
■ Novell vs. Ballmer Esta tarjeta abre las puertas a la adminis-
En un documento hecho público a positivamente de tración electrónica y permite acceder a
los medios el 28 de octubre pasado, Linux, y en espe- todos los servicios que, como la Agencia
el vipresidente de Novell, John cial decide omitir Tributaria entre otros, admiten certifica-
Hogan y el senior business analyst, la conclusión, donde dos digitales emitidos por la FNMT que
Barret Coakley desmontan una a una las se dice literalmente: garantizan la autenticación, integridad,
aseveraciones difundidas por Steve “El estudio de TCO confidencialidad y no repudio en las
Ballmer, CEO de Microsoft en un email (Total Cost of Owner- comunicaciones en redes abiertas. Hasta
enviado a clientes y socios de la com- ship) encontró que Linux ofrece sin hoy, esta tarjeta sólo era soportada por
pañía el 27 de octubre en el que Ballmer lugar a dudas ahorros en costes, plataformas Windows de Microsoft,
aseguraba que Windows es más barato, economía en el escalado y ventajas téc- pero, cosa a la que nos tiene acostum-
más rápido y más seguro que Linux. nicas, tal y como pueden atestiguar brados la administración, a partir de
Entre otras cosas, se cuestiona la inde- muchos usuarios satisfechos. Sin embar- ahora, y gracias a Hispafuentes, todos
pendencia de los análisis y la go, los ahorros en costes no son los usuarios de Linux que utilicen naveg-
metodología utilizada. Según revela el automáticos. No se obtienen sin sus adores basados en Mozilla (Mozilla,
documento de Novell, se utilizaron en debidas diligencias y no se aplican nece- Firefox, Netscape, Galeon, etc.), podrán
las pruebas formatos propietarios de MS sariamente a todos los entornos. En últi- beneficiarse de las ventajas de realizar
que Linux tenía que emular con SAMBA, ma instancia, el TCO y ROI (Return On gestiones autentificadas a través de
ingenieros de Redmond realizaron Investment) puede ser más bajo, igual o Internet. La solución se basa en Opensc,
ajustes en el sistema operativo de prueba más alto que los de UNIX o Windows una librería para trabajar con tarjetas
de MS para optimizar los resultados de dependiendo de las circunstancias de inteligentes. La versión desarrollada por
Windows y, sin embargo, no se realizó explotación corporativa individuales”. Hispafuente y la FNMT-RCM en conjun-
ninguna optimización en el sistema Otros aspectos tratados son los de la ción con HispaLinux, aporta soporte
Linux. Asimismo. Hogan y Coakley acu- seguridad, falta de personal cualificado y para tarjetas del tipo PKCS#11, PKCS#15
san a Ballmer de ser demasiado selectivo falta de soporte, todos y cada uno de y manejo de claves y certificados con las
con algunos de los datos publicados en ellos desmantelados por los ejecutivos tarjetas Ceres de FNMT-RCM, lo que, a
un estudio de The Yankee Group titulado de Novell. Concluyen que Ballmer a efectos prácticos, abre las puertas de la
“Linux, UNIX and Windows TCO descontextualizado y manipulado la Administración Electrónica de par en par
Comparison” aparecido en abril de este información ofrecida por estudios “inde- para los usuarios de GNU/Linux. El dri-
mism año. Ballmer no cita ninguno de pendientes” con el fin de influenciar las ver se puede bajar de https://
los muchos apartados donde se habla decisiones de sus clientes. ■ software-libre.org/projects/opensc-ceres/■
8 Número 01 www.linuxmagazine.com.es
Noticias NOTICIAS
Noticias
■ Creciendo Juntos
A estas alturas de siglo ya todo el mundo
está familiarizado con el estudio de
Andago donde se nos cuenta que el uso
del software libre ha aumentado un 39%
en España a lo largo del año pasado.
■ Lexmark lo intenta… ¡Fallaaaa! Esto no debe sorprendernos, máxime
En la eterna partida entre usuarios y con- cuando incluso un medio de comuni-
sumidores contra corporaciones con cación mayoritario basan una campaña
afanes abusivos monopolísticas, el en regalar un CD con Linux a sus lec-
equipo de los consumidores acaba de buena y necesaria dosis de compe- tores. HispaFuentes, por su lado, se
marcar un importante tanto. Ya se sabe titividad al sector. Uno de los jugadores suma a la moción con su propio estudio
que sólo hace falta que una empresa de dicha industria, Static Control donde se afirma que para el 2007 el 25%
aulle “¡Propiedad Intelectual!” para que Components, ni corto ni perezoso, le de los ordenadores a nivel mundial cor-
un ejército de abogados sin nada mejor aplicó la ingeniería inversa al chip y a las rerán una versión u otra de Linux. El
que hacer salga arrastrándose de debajo pocas semanas estaba vendiendo su estudio basa sus conclusiones en la tasa
de las piedras, presto a defender la com- propia versión, el “Smartek”, a fabri- de crecimiento anual, que sitúa a Linux
pañía, el sistemas capitalista y la civi- cantes de toner para que la incorporasen como sistema operativo de mayor crec-
lización moderna tal y como lo concebi- a sus cartuchos. Cómo viene siendo imiento con un índice de expansión del
mos ante la salvaje horda de piratas, habitual, cuando una empresa no puede
usurpadores de copyright y Pedosperos hacer nada en el campo de batalla del
varios que andan a la búsqueda de la mercado, pues se pleitea y punto.
destrucción del mundo. En este caso, fue Lexmark hizo lo propio y arrastró a SCC
la compañía fabricante de impresoras a los tribunales. En un principio,
Lexmark y el artículo de consumo origen Lexmark pareció ganar el tanto, cuando
de la controversia, un… ¿cartucho de un juez, a principios del 2003, falló en
toner? Pues sí, amiguitos y amiguitas, un favor del fabricante de impresoras. Pero
cartucho de toner. En el 2003, el al final ha prevalecido el sentido común 16,6%. Le siguen en segundo lugar
Lexmark tuvo la genial idea de dotar a y en un nuevo fallo de octubre del 2004, Windows (por supuesto) con una tasa de
sus cartuchos de un chip que imple- otro tribunal invalida el primer dicta- crecimiento del 10,5% y el farolillo rojo
mentaba tecnología DMCA (el que se uti- men, alegando que no es de recibo colo- lo componen otros Unices que ven
liza habitualmente para evitar la repro- car dispositivos de DMCA en algo que no descender su implantación a un 4,5%
ducción de medios pirateados e imple- sea un producto con copyright. En con- anual. En lo que se refiere a servidores,
mentado en el sistema Palladium de creto, el fallo reza: “Debemos dejar bien la cuota de mercado será del 58,8% para
Microsoft) para evitar que terceras partes claro que en futuro, empresas como Windows (55,1% en el año 2002), del
creasen clones de sus cartuchos. Como Lexmark no pueden utilizar tecnologías
es bien sabido, existe toda una industria DMCA en conjunción con leyes sobre
dedicada a producir versiones más copyright para crear monopolios de
baratas de consumibles de impresora bienes manufacturados para sí mismos”.
originales, aportando, de paso, una Ámen. ■
■ OpenBSD 3.6
A primeros de noviembre se nuevos interfaces para dis- 32,7% para Linux (23,1% en 2002) y del
liberó la nueva versión de positivos inalámbricos, 5,7% para Unix (11% en 2002), lo que
OpenBSD, la popular ver- Ethernet sobre USB, indica que la implantación de Linux
sión de Unix BSD de código puentes PCI-ISA y afectará bastante más a Unix que al sis-
abierto, para su descarga o sensores varios. En el tema operativo de Microsoft con su
pedido en CD. Aparte de apartado de mejoras, incremento de popularidad. Otra señal
parches y mejoras varias, esta se ha mejorado el de la gradual e imparable implantación
nueva versión soporta SMB en rendimiento y seguridad de Linux en el mercado mundial son las
plataformas i386 y AMD64, se ha en NFS. El catálogo de cifras que se refieren al incremento de
depurado el servidor y clientes software incluye portes para volumen de negocio. El estudio señala
DHCP y se han implementado nuevos más de 2700 aplicaciones y más de 2800 que crecerá de 280 millones de dólares
demonios para vigilar la conexión de paquetes precompilados. Para más infor- (cifra registrada en el 2003) a un apabul-
nuevos dispositivos. Asimismo, se ha mación, dirigirse a http://www.openbsd. lante 3.000 millones de dólares en el
ampliado el catálogo de drivers, con org/es/36.html. ■ 2008. ■
www.linuxmagazine.com.es Número 01 9
NOTICIAS Inseguridades
Inseguridades
una vulnerabilidad en getmail cuando se
configura para correr como root y envía
correo a ficheros maildir/mbox de usuar-
ios locales no de confianza. Un usuario
local malicioso podría explotar una condi-
ción de carrera, o un ataque symlink simi-
■ CUPS 631). El proyecto de Vulnerabilidades y lar y dotar a getmial con la capacidad de
El Common UNIX Printing System Exposiciones Comunes (Common Vulne- crear o sobrescribir ficheros en cualquier
(CUPS) es un sistema de impresión. rabilities and Exposures o CVE - http:// directorio en el sistema. No se debe ejecu-
Álvaro Martínez Echevarria informó de cve.mitre.org) ha asignado el nombre tar getmail como usuario privilegiado ni,
un error en la versión del Protocolo de CAN-2004-0558 a este problema. ■ en la versión 4, utilizar un MDA externo
Impresión de Internet (Internet Pinting Referencia Debian: DSA-545-1 con privilegios de usuarios y grupos
Protocole o IPP) en versiones de CUPS Referencia Gentoo: GLSA 200410-06/cups explícitamente configurados. Todos los
antertiores a 1.1.21. Un atacante podría Referencia Mandrake: MDKSA-2004:097 usuarios de getmail deben actualizar a la
enviar un paquete cuidadosamente Referencia Red Hat: RHSA-2004:449-17 última versión. ■
escrito al puerto IPP, lo que podría provo- Referencia Slackware: SSA:2004-266-01 Referencia Debian: DSA-553-1
car que CUPS dejara de escuchar en ese Referencia Suse: SUSE-SA:2004:031 Referencia Gentoo: GLSA 200409-32/get-
puerto y desencadenar un ataque de mail
denegación de servicio. Para poder ■ getmail Referencia Slackware: SSA:2004-278-01
explotar este error, un atacante tendría getmail es un sustituto fiable de fetchmail
que tener la capacidad de enviar un que soporta Maildir, Mboxrd y envío de ■ Mozilla
paquete UDP al puerto IPP (por defecto, MDAs externos. David Watson descubrió Mozilla es un navegador web de código
abierto, un cliente de correo y grupos de
Políticas de seguridad de la Distribuciones Mayoritarias noticias avanzado, cliente IRC y editor de
Distribuidor Fuente Seguridad Comentario HTML. Se han descubierto recientemente
Debian Info:http://www.debian.org/security/ Los avisos de seguridad actuales se in- varios errores en la suite. Jesse Ruderman
Lista:http://www.debian.org/debian-security-announce/ cluyen en la página de inicio. Los avisos descubrió un error de scripting multido-
Referencia:DSA-…1) se proveen como páginas HTML con minio en Mozilla. Si a un usuario se le
enlaces a los parches. Los avisos también
incluyen una referencia a la lista de
engaña para que arrastre un enlace de
correo. Javascript hasta otro marco o página, se
Gentoo Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para dota al atacante de la capacidad de hurtar
Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de o modificar información sensible de ese
Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la
sitio. Además, si a un usuario se le
Referencia:GLSA:… 1) página principal. Los avisos se presentan
en HTML con códigos para fusionar las engaña para que arrastre secuencialmente
versiones corregidas. dos enlaces a otra ventana (no marco), se
Mandrake Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web le dota al atacante de la capacidad de eje-
Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionadas con
cutar comandos arbitrarios. El proyecto
Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye
de avisos seguridad y referencias a las de Vulnerabilidades y Exposiciones
listas de correo. Los avisos son páginas Comunes (Common Vulnerabilities and
HTML, pero no contienen enlaces a los Exposures o CVE - http://cve.mitre.org)
parches.
ha asignado el nombre CAN-2004-0905 a
Red Hat Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad
Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A
este problema. Gael Delalleau ha descu-
Referencia:RHSA-… 1) continuación los problemas para cada bierto un desbordamiento de entero que
versión de Red Hat se agrupan. Los avisos afecta le código que maneja BMP dentro
de seguridad se proveen como una de Mozilla. Un atacante podría utilizar un
página HTML con enlaces a los parches.
Slackware Info:http://www.slackware.com/security La página de inicio contiene enlaces al
fichero BMP cuidadosamente manipulado
Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. para provocar un cuelgue del programa o
Referencia:[slackware-security]… 1) No existe información adicional sobre que ejecuta código arbitrario cuando se
seguridad en Slackware. visualizase el archivo. El CVE ha asignado
Suse Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de
el nombre CAN-2004-0905 a este proble-
security/index.html seguridad tras un remodelado en el sitio
Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la ma. Georgi Guninski ha descubierto un
download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de desbordamiento de búfer basado en pila
Referencia:SUSE-SA… 1) seguridad para versiones individuales de en las rutinas de muestra de vCard. Un
SuSE Linux se muestran de color rojo en el
atacante podría crear un vCard cuida-
sitio de actualizaciones generales.
Contiene una corta descripción de la dosamente manipulado que podría hacer
vulnerabilidad que el parche soluciona. que Mozilla se cuelgue o ejecute código
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
arbitrario cuando se muestra. El mismo
10 Número 01 www.linuxmagazine.com.es
Inseguridades NOTICIAS
autor ha descubierto otro desbordamiento también descubrió un desbordamiento de alizar sus sistemas para incluir los paque-
de búfer basado en pila en el módulo de entero en el decodificador de imágenes tes nuevos que solucionan este problema.
“Envío de Página”. El proyecto de ICO. Un atacante podría crear un fichero Los nuevos paquetes contienen un parche
Vulnerabilidades y Exposiciones Comu- ICO cuidadosamente manipulado que retroactivo que no es vulnerable a este
nes (Common Vulnerabilities and Ex- hiciera que una aplicación enlazada con tipo de ataques de denegación de servi-
posures o CVE - http://cve.mitre.org) ha gtk2 se cuelgue cuando la víctima abriese cio. ■
asignado el nombre CAN-2004-0902 a el fichero (CAN-2004-0788). ■ Referencia Red Hat: RHSA-2004:451-05
este problema. Wladimir Palant ha descu- Referencia Debian: DSA-549-1
bierto un fallo en la manera en que Referencia Red Hat: RHSA-2004:466-12 ■ XFree86
Javascript interactúa con el portapapeles. Referencia Slackware: SSA:2004-266-02 XFree86 es una implementación de códi-
Un atacante tiene la posibilidad de utilizar Referencia Suse: SUSE-SA:2004:033 go abierto del sistema de ventanas X.
código malicioso de Javascript para robar Aporta una funcionalidad básica de bajo
datos sensibles que han sido copiados al ■ OpenOffice.org nivel para la que están diseñadas los
portapapeles. El proyecto de Vulnera- OpenOffice.org es un conjunto de aplica- interfaces gráficos de usuario (GUIs) com-
bilidades y Exposiciones Comunes ciones para la productividad ofimática pletos tales como Gnome o KDE. Durante
(Common Vulnerabilities and Exposures que incluye programas de escritorio, una auditoría de código fuente, Chris
o CVE - http://cve.mitre.org) ha asignado como procesadores de texto, hoja de cál- Evans descubrió varios fallos de desbor-
el nombre CAN-2004-0908 a este proble- culo, administrador de presentaciones, damientos de pila y un desbordamiento
ma. ■ editor de fórmulas y un programa de dis- de entero en la librería libXpm de X.org
Referencia Red Hat: RHSA-2004:486-18 eño. La empresa Secunia Research infor- utilizada para decodificar imágenes XPM
Referencia Slackware: SSA:2004-266-03 mó de un problema derivado de la manip- (X PixMap). Un atacante que supiera
Referencia Suse: SUSE-SA:2004:036 ulación de ficheros temporales en aprovechar este problema, podría crear
OpenOffice.org. Un usuario local mali- un fichero XPM cuidadosamente manipu-
■ gtk+ cioso podría utilizar este fallo para acced- lado que haría que una aplicación enlaza-
El paquete gtk2 contiene el kit de her- er a los contenidos de los documentos da con la mencionada librería se colgase y
ramientas de the GIMP (GTK+), una libr- abiertos de otro usuario. El proyecto de ejecutase código arbitrario si el fichero es
ería para la creación de interfaces gráficos Vulnerabilidades y Exposiciones Comu- abierto por la víctima. El proyecto de
de usuario para el sistema de ventanas X. nes (Common Vulnerabilities and Vulnerabilidades y Exposiciones Comu-
Durante las pruebas de un fallo anterior- Exposures o CVE - http://cve.mitre.org) nes (Common Vulnerabilities and
mente corregido en QT (CAN-2004-0691), ha asignado el nombre CAN-2004-0752 a Exposures o CVE - http://cve.mitre.org)
se descubrió un error en el procesador de este problema. Se aconseja a todos los ha asignado los nombres CAN-2004-0687
imágenes BMP de gtk2. Una atacante usuarios de OpenOffice.org que actuali- , CAN-2004-0688 y CAN-2004-0692 a
podría crear un fichero BMP cuidadosa- cen sus programas con los paquetes de estos problemas de seguridad de XFree86.
mente manipulado que podría provocar actualización de OpenOffice.org que con- Se descubrió un fallo en el X Display
que una aplicación entrase en un bucle tienen un parche retroactivo para corregir Manager (XDM). XDM abría un socket
infinito y este problema. ■ TCP chooserFd, aún si el parámetro
no respondiese a las entradas del usuario Referencia Mandrake: MDKSA-2004:103 DisplarManager.requestPort estuviera
cuando fuese abierto por la víctima. Referencia Red Hat: RHSA-2004:446-08 establecido como 0. El efecto de esta
El proyecto de Vulnerabilidades y Ex- situación es que permitía el acceso de
posiciones Comunes (Common Vulnera- ■ SpamAssassin usuarios autorizados al ordenador a
bilities and Exposures o CVE - http:// SpamAssassin aporta maneras de reducir través de X, aún si el administrador del
cve.mitre.org) ha asignado el nombre correos electrónicos comerciales no solici- ordenador hubiera configurado XDM para
CAN-2004-0753 a este problema. Durante tados (SPAM) en las bandejas de correo rechazar conexiones. Aunque XFree86
una auditoría de seguridad, Chris Evans entrante. Se ha encontrado un error de versión 4.3.0 no era vulnerable a este
descubrió un desbordamiento de pila en denegación de servicio en versiones infe- problema, Red Hat Enterprise Linux 3
el decodificador de imágenes XPM. Una riores a 2.64. Un atacante malicioso contenía un parche retroactivo que intro-
atacante podría crear un fichero XPM podría crear un mensaje de tal modo que ducía el error. El proyecto de
cuidadosamente manipulado que podría provocaría que SpamAssassin dejara de Vulnerabilidades y Exposiciones Comu-
hacer que una aplicación enlazada con responder. Este ataque de denegación de nes (Common Vulnerabilities and Expo-
gtk2 se cuelgue o posiblemente ejecute servicio podría provocar que sures o CVE - http://cve.mitre.org) ha
código arbitrario cuando la víctima abra SpamAssassin deje de remitir y filtrar asignado el nombre CAN-2004-0419 a este
el fichero. El proyecto de Vulnerabilidades correo. El proyecto de Vulnerabilidades y problema. ■
y Exposiciones Comunes (Common Exposiciones Comunes (Common Referencia Debian: DSA-561-1
Vulnerabilities and Exposures o CVE - Vulnerabilities and Exposures o CVE - Referencia Gentoo: GLSA 200409-34/X
http://cve.mitre.org) ha asignado los http://cve.mitre.org) ha asignado el nom- Referencia Mandrake: MDKSA-2004:099
nombres CAN-2004-0782 y CAN-2004- bre CAN-2004-0796 a este problema. Los Referencia Red Hat: RHSA-2004:478-13
0783 a este problema. El mismo autor usuario de SpamAssassin deberán actu- Referencia Suse: SUSE-SA:2004:034
www.linuxmagazine.com.es Número 01 11
PORTADA Especial Redes
La Enredadera
El ordenador sin conexión es una especie en vías de extinción. Es casi imposible hoy en día concebir una máquina que no
tenga conexión a Internet o a una red local. Estos últimos, con o sin acceso a Internet, agilizan el trabajo en las empresas
E
l correr de aquí para allá con dis- izan en las empresas se hacen por vía taja de que se encuentran disponibles en
quetes era una cosa común hace electrónica. Si bien la mayor parte de las casi cualquier distribución . Y una vez
escasamente pocos años. Puede oficinas están cableadas, los LANs que se tiene la red montada y en fun-
que el lector recuerde haber utilizado inalámbricos hacen su agosto en los cionamiento, se pueden empezar a
floppys para difundir hojas de cálculo, despachos y redes domésticas. Y una vez asignar tareas a máquinas individuales
transportar el último capítulo de la tesis organizado el aspecto físico de la red, es para el beneficio de toda la red, como,
desde el centro de cálculo de la facultad hora de ponerse serios con el software. por ejemplo, estableciendo una máquina
hasta el ordenador en el departamento o Cada máquina en la red necesita una como servidor DHCP o de impresión. ■
para compartir los últimos cotilleos entre dirección única, ha de conocer en que
amigos y compañeros. En la actualidad, red reside y debe saber a que máquina se COVER STORY
los libros de cocina están siendo exilia- ha de dirigir en el caso de que necesite
dos de su recinto tradicional, siendo enviar datos más allá de los límites de la Herramientas de Red .........13
Desde el momento que conectamos una
sustituidos por portátiles; el equipo de red local, al gran mundo mundial de por
máquina a una red, no sólo se exige saber
música es un sencillo cliente que recoge ahí fuera.
como funciona aisladamente, sino como se
MP3s del servidor alojado en el trastero comunica con el mundo exterior. Las her-
y no hace falta ni mencionar Cuestión de Planteamientos ramientas estándar suministradas con Linux
que la mayor parte de las Las opciones son o meticulosamente pueden ayudarnos a ello.
comunicaciones configurar todas y cada una de las
que se real máquinas o montar un servidor especial
Servidores DHCP................16
La adición de nuevas máquinas a una red
que se encargue del trabajo sucio. El significa más trabajo de configuración. Una
esfuerzo extra inicial que supone la solución centralizada que utilice un servidor
segunda solución, suele tener su recom- DHCP que se encargue de la asignación de
pensa a medio y largo plazo, es- direcciones IP y otros valores a los clientes,
pecialmente si la red tiende a seguir cre- cura eficazmente el dolor de cabeza admin-
ciendo y se hacen necesarios cambios istrativo.
en la configuración. Añádase a la SCPM...................................21
mezcla un par de portátiles que se El cambio del entorno operacional de una
conectan aquí y allá y uno llega a sola máquina entraña mucho trabajo de
apreciar una distro moderna que configuración. SCPM le facilita la vida a los
suministra herramientas que usuarios de SuSE al mantener una base de
datos de perfiles con distintas configura-
facilitan la configuración de
ciones.
cambios de topología, como
SCPM de SuSE. Las nuevas CUPS: Impresión en Red ....23
configuraciones tienden a La compartición de una impresora entre
múltiples usuarios puede ayudar a ahorrar
tener problemas en sus
dinero y recursos. Podemos conectar impre-
infancias. En tal caso, las
soras a un servidor CUPS para dar acceso
herramientas estándar
incluso a clientes de Microsoft o Apple.
de Linux pueden ser
de una gran ayuda.
Aunque es habitual RECURSOS
sentirse incómodos
[1] Guía de Interfaz Humano de Gnome:
con las herrami-
http://developer.gnome.org/projects/
entas estándar gup/hig/
en un principio, [2]Freedesktop.org http://freedesktop.org/
tienen la ven-
12 Número 01 www.linuxmagazine.com.es
Herramientas Red PORTADA
Linux en Red
Las máquinas conectadas a la red ofrecen enormes beneficios, pero añaden
Las herramientas estándar de Linux nos pueden ayudar. POR NICO LUMMA
U
n ordenador sin conexión al Como un navegador
mundo exterior parece un paso Web no necesita saber si la
atrás. Si bien los distribuciones información se transmite
de Linux de hoy en día soportan normal- mediante componentes in-
mente la instalación de componentes de alámbricos o mediante
red, los administradores han de asumir líneas FDDI, ni las líneas
su parte de responsabilidad y, en algunos FDDI necesitan saber si los
casos, su formación puede no haber bytes que transporta corre-
cubierto técnicas de redes. En estos sponden a ficheros HTML,
casos lo lógico es obtener el mayor MP3s o vídeos, los exper- Figura 1: Los numerosos datos de obtenidos por “ip addr” incluyen
conocimiento posible sobre lo que nece- tos en redes utilizan un información crítica de la dirección IP actual e “inet” indica la más-
sita un ordenador para conectarse a una modelo basado en capas cara de red.
red. para describir las redes de
Una red puede no responder o una ordenadores. Al margen de que cada el usado, por ejemplo, por los canales de
máquina aislada (por ejemplo un servi- capa se apoya en la capa subyacente, las Real Audio.
dor Web) puede no estar accesible. Los capas son independientes entre sí. En la siguiente capa es donde las cosas
principales distribuidores de Linux La capa aplicación, como su propio empiezan a ponerse interesantes. Aquí
disponen de herramientas que controlar nombre indica, define como las aplica- es donde los paquetes de información
estas situaciones. ciones como buscadores o programas de (independientemente de su contenido)
correo hablan con servidores Web o de son puestos en un cable e intentan bus-
Fundamentos de redes correo. El medio por el cual ocurre esto car la mejor ruta a su destino. Cada
El componente básico de Internet y de depende de cada aplicación. Por ejem- bloque contiene la dirección de su remi-
numerosos sistemas de red local es el plo, el Protocolo de Trasferencia de tente y de su receptor. Cuando se sirve
TCP/IP. Es una combinación del Proto- Hipertexto, HTTP, es usado para Webs, una página, los paquetes de información
colo de Control de Transmisiones y el mientras que el Protocolo de Transferen- pueden utilizar rutas distintas. Tras acep-
Protocolo de Internet, especificando cia de Ficheros, FTP, es usado tar los paquetes, el receptor debe
como se comunican e intercambian habitualmente para la descarga de asegurarse de que los paquetes se
datos los ordenadores en una red. ficheros. pueden reorganizar en el orden correcto.
La capa de transporte está por debajo Al margen del propio Protocolo de Inter-
GLOSARIO de la capa de aplicaciones. Esta capa net, la capa de red contiene otros
DNS: los servidores DNS contienen bases de establece las conexiones entre orde- protocolos como el Protocolo de Control
datos que se pueden usar para emparejar nadores, permitiéndoles el intercambio de Mensajes de Internet, ICMP, para el
direcciones IP con nombres de Internet (y de datos. TCP proporciona un canal de control de mensajes (por ejemplo, de
viceversa). Buscan en sus bases de datos para garantía (para protocolos de aplicaciones error), el Protocolo de determinación de
responder consultas enviadas por buscadores
como HTTP, SSH, POP o SMTP), asegu- Direcciones, ARP, que confronta direc-
y aplicaciones de Internet desconocidas por
sus usuarios. Un usuario que escribe rando que los bloques de información ciones IP con direcciones de hardware
www.google.com está realmente formu- que fallen son retransmitidos. El Proto- (MAC) y, su homólogo, el Protocolo de
lando una consulta cuya respuesta es la colo Datagram (UDP) es otro protocolo Inversión de Direcciones Determinadas
dirección IP 216.239.39.99. Es con esta direc- importante a este nivel que puede trans- (RARP).
ción con el que el buscador abrirá realmente
mitir bloques de información, pero con La capa inferior del modelo OSI es la
la conexión.
perdidas de paquetes. Este protocolo es capa Física. A este nivel estamos intere-
www.linuxmagazine.com.es Número 01 13
PORTADA Herramientas Red
Figura 2:“ip route” proporciona información IP más clara. Figura 3: La máquina receptora, 192.168.1.1, respondió a los 5 pings enviados.
sados en la transmisión de bits y la antiguos puede que solo tengan los enlace por defecto 192.168.1.1. Si aquí
estandarización de de la negociación de comandos ipconfig y route, que propor- no aparece información crítica como la
protocolos con interfaces eléctricas, cionan la misma información, pero en dirección IP o la puerta de enlace puede
mecánicas y de señalización. Esto un formato distinto. Es posible que si el explicar que nuestro ordenador no se
incluye los estándares RS-232 y X.21. sistema no puede localizar estos coman- comporte en la red como debiese. Si éste
Los componentes de red son identifi- dos sea por que estén instalados en es el caso, debemos ejecutar la her-
cados mediante su dirección IP. TCP /sbin, que no es una ruta habitual de ramienta de configuración de nuestro
puede retransmitir paquetes asegurando búsqueda. Si éste es el caso, simple- distribución (por ejemplo YaST for Suse)
que el receptor dispone del conjunto mente debemos añadir la ruta completa y comprobar nuestra configuración.
completo de paquetes. El protocolo de (por ejemplo, /sbin/ip).
aplicaciones en el nivel superior La opción addr indica al comando ip Ping-Pong
depende de este servicio. Sin un que debe mostrar los detalles de nuestro ping es una herramienta de análisis de
conocimiento básico de estas capas, adaptador de red. Si queremos indicar el redes muy simple y tremendamente
muchas de las herramientas de red no número de adaptador debemos incluir la práctica. Transmite un paquete de datos
tendrían mucho sentido. línea eth0 para la primera tarjeta de red, ICMP desde nuestro ordenador a un
eth1 para la segunda y así sucesiva- objetivo, mostrando el tiempo que la
Comprobación del estado mente. Esto mostrará nuestra dirección respuesta tarda en llegar devuelta a nue-
Antes de comenzar a analizar el tráfico IP (192.168.1.245 en la Figura 1), la más- stro ordenador (suponiendo que el
de red es importante comprobar que cara de red (/24), la dirección de receptor responda). La parte final nos
nuestro ordenador esté utilizando la red difusión (192.168.1.255) y el nombre del muestra el número de paquetes ping
adecuadamente. interfaz de la red, eth0. Los datos transmitidos (cinco en la Figura 3),
Dicho de forma sencilla, cada máquina obtenidos con el comando ip route son cuantas respuestas obtuvimos (cinco de
necesita una dirección IP única para ser más sencillos de leer (ver Figura 2). La nuevo) y cuanto tardo el proceso (4002
capaz de comunicarse con otras primera línea muestra la red (la direc- milisegundos). Si algún paquete se
máquinas en la red. La dirección de la ción de la red en nuestro ejemplo es pierde es mostrado en la sección packet
puerta de enlace permite que los paque- 192.168.1.1), la máscara de la red /24, el loss. Si el receptor no se puede alcanzar
tes de datos destinados al exterior interfaz de la red y finalmente el origen no ocurre nada durante un rato, puesto
abandonen la red local. de los datos (src significa origen), o sea, que ping espera respuestas. ping nom-
El comando ip proporciona detalles de la dirección IP (192.168.1.245). La bredehost lanza un ping hacia el receptor
la configuración actual. Los sistemas segunda línea muestra la puerta de hasta que presionamos [Ctrl-c]. En su
Figura 4:“traceroute” muestra la ruta hasta “linux-magazine.com”. Figura 5:“mtr” combina los resultados de “traceroute” y de “ping”.
14 Número 01 www.linuxmagazine.com.es
Herramientas Red PORTADA
Figura 7: ¿Cuantos paquetes van y vienen desde qué dirección? Figura 8:“iptraf” proporciona estadísticas de red detalladas.
www.linuxmagazine.com.es Número 01 15
PORTADA DHCP
de administrarlas.
POR MICHAEL RENNER
N
o importa si se está trabajando diario se encuentran con problemas de nombres, usar diferentes máscaras de
para una empresa, si se está cuando el número de máquinas conec- red o incluso asignar una dirección IP
organizando una party en el tadas a la red crece de forma continua. diferente al router para acceder a redes
campus, si se está montando una red en Cada IP sólo puede ser asignada a una públicas), implicará reconfigurar de
un complejo turístico o simplemente te máquina para evitar conflictos en la red. forma manual cada máquina.
estas montando una red en tu propia Incluso suponiendo que se mantenga Los usuarios de ordenadores portátiles
casa, configurar de forma individual cuidadosamente las asignaciones IP (y también tienen que saber cómo y dónde
cada máquina de la red implica trabajo uno sepa donde está la lista), si se quiere realizar los cambios oportunos para
extra. Desde luego, un administrador de reestructurar la red (añadir un servidor conectarse a la red. Para ser honestos:
sistemas puede asignar direc- ¿Sabes cómo configurar los
ciones IP, máscaras de red, Listado 1: Un simple, pero completo parámetros de red en un
puerta de enlace por defecto y dhcpd.conf MacOS 7.6? y ¿quieres admitir
el nombre del servidor. Pero 01 default-lease-time 3600; que sabes como configurar la
intenta hacer esto mismo con 02 max-lease-time 14400; red en Windows 98? El Proto-
un grupo de gente con distin- 03 colo de Configuración
tos niveles de conocimiento y 04 subnet 192.168.2.0 netmask 255.255.255.0 { Dinámico de Hosts (DHCP)
empezarán a surgir los proble- 05 range 192.168.2.50 192.168.2.69; nos proporciona la respuesta.
mas. 06 option domain-name-servers 194.25.2.129; Para usar DHCP se necesita
Incluso los administradores 07 option broadcast-address 192.168.2.255; configurar una máquina como
de redes más experimentados 08 option routers 192.168.2.1; servidor DHCP. Una vez hecho
y que llevan años adminis- 09 } esto, esta máquina será la
trando redes en su trabajo responsable de establecer los
GLOSARIO
Dirección IP: Cada máquina de red se identi- ción IP oficial que asegura un acceso global, redes dentro de una red más amplia . Las
fica con una única dirección IP de 32 bits. Para hay un rango de direcciones que se han máquinas usan máscaras de bits para
que sea legible se usa la notación punto dec- reservado para su uso en redes privadas. averiguar a qué subred pertenece a partir de
imal, donde cada segmento de la dirección es Máscara de red: La máscara de red se usa la dirección IP. En el cuadro 1 se muestra un
un número entre 0 y 255. Además de la direc- para definir los límites de segmento las sub- ejemplo.
16 Número 01 www.linuxmagazine.com.es
DHCP PORTADA
GLOSARIO
Servidor de nombres: Un servidor de nom- local. Un servidor WINS es un servidor de nombres
bres de dominio proporciona la traducción Servidor de Fecha/Hora: Proporciona la de propósito especial. Si se tiene un gran
de los nombres de hosts simbólicos (por fecha y hora correctas en una red. El tiempo número de máquinas Windows en la red, el
ejemplo linux-magazine.com) a una direc- oficial en el Reino Unido es medido desde la servidor WINS puede impedir que se produz-
ción ip (por ejemplo 62.245.157.219) y línea del meridiano de Greenwich. En can broadcasts no previstos. El proyecto
viceversa. DNS es un sistema de base de España, se pueden utilizar los servidores Samba proporciona soporte para WINS.
datos jerárquico distribuido que no requiere hora.oxixares.com y slug.ctv.es. Además de Broadcast: El broadcast se usa para alcanzar
que cada servidor de nombres conozca cada estas fuentes, hay un gran número de servi- múltiples hosts sin necesidad de saber nada
nombre de host, sino que permite a una dores de fecha/hora, más o menos precisos, de ellos. Una broadcast ahorra ancho de
máquina consultar a otras máquinas. en la Web. banda en el caso de necesitar comunicar con
Puerta de enlace por defecto: Es un router en WINS: Es el Servidor de Nombres de Internet un gran número de máquinas, pero típica-
una red local al que se le envían los paquetes de Windows, que relaciona los nombres Net- mente, este tipo de transmisión produce
cuyo destino no tiene una dirección de red BIOS de las máquinas con sus direcciones IP. sobrecarga en la red y debe ser evitado.
www.linuxmagazine.com.es Número 01 17
PORTADA DHCP
documentado, así que, siguiendo las Queremos que el servidor dhcpd asigne El resto de las entradas son usadas por
instrucciones proporcionadas por el IPs en el rango 192.168.2.50 hasta el servidor dhcpd para su propio uso
mismo programa, deberíamos ser 192.168.2.60. También vamos a hacer uso interno. Véase la Tabla 1.
capaces de modificar los valores de los de un domain-name-server para estable-
próximos ejemplos de manera que refle- cer un servidor de nombres y routers para Asignaciones permanentes
jen nuestro propio entorno. Conviene especificar la puerta de enlace. Si no se Si se desea usar DHCP en la red,
tomarse un rato para pensar en el tiene un servidor de nombres en la red, suele haber siempre unas cuantas
número de máquinas que necesitamos usaremos el proporcionado por el provee- máquinas que necesitan una IP estática.
mantener al mismo tiempo en la red. Si dor de Internet (ISP). Después de todo, no tiene sentido tener
estamos organizando una party, un cen- Fijémonos en las llaves que encierran que adivinar la dirección del router o del
tro de asistencia técnica al cliente, o la definición del segmento de red. Cada servidor multimedia para poder acceder
similar, será un número bastante grande. entrada en el archivo de configuración a él.
Para una red doméstica típica tendremos debe terminar con un punto y coma. El archivo /etc/dhcpd.conf se usa para
menos de diez máquinas. las asignaciones de las máquinas
El ejemplo en el Listado 1 es para un Libremente configurable clientes. dhcpd evalúa la dirección MAC,
red considerada pequeña, ya que supone De forma genérica, podemos decir, que que es única, para ser capaz de identi-
que no más de 20 máquinas van a estar existen dos clases de entradas en el ficar y asignar las direcciones correctas a
conectadas a la red al mismo tiempo. archivo de configuración: las que cada máquina que la solicite.
empiezan por la palabra clave option y el La dirección MAC está impresa en los
Dirección IP, máscara de resto. Las opciones (ver Tabla 2) son adaptadores de red PCMCIA y en los
red y dirección de red. pasadas a las máquinas clientes desde el conectores USB Wireless. Si no se es
aAdemás de la dirección IP, la configuración servidor DHCP. Si las máquinas clientes capaz de leer la etiqueta del NIC, se
de un dispositivo de red consta de la direc- pueden o no utilizar esta información, puede consultar la dirección MAC con
ción de broadcast y de la máscara de red. La dependerá del sistema operativo que se ifconfig para los sistemas operativos
máscara de red se usa para subdividir la red tenga instalado. Los administradores basados en UNIX o ipconfig para los de
en subredes más pequeñas. Para compren- podrían querer definir scripts donde esta Microsoft. El listado 2 muestra un ejem-
der la relación entre la dirección IP y la información sea procesada. plo de una máquina Linux cuya
máscara de red, se necesita inspeccionar los
bits a bajo nivel. Para ello, se toman cada Listado 2: Usando ifconfig para descubrir
uno de los números decimales que aparecen
entre los puntos y se escriben en su repre-
la dirección MAC
sentación binaria equivalente: 01 renner@lyra:~$ /sbin/ifconfig eth0
255=1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+ 02 eth0 Link encap:Ethernet HWaddr 00:02:2D:34:90:85
1*2^1+1*2^0 03 inet addr:10.32.130.79 Bcast:10.32.135.255
Así pues, la máscara 255.255.255.0 en for- Mask:255.255.248.0
mato punto decimal se convierte en la 04 UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500
máscara de red en binario: Metric:1
11111111.11111111.11111111.00000000 05 RX packets:15695 errors:0 dropped:0 overruns:0 frame:0
Desde luego, esto no representa mucha 06 TX packets:10988 errors:204 dropped:0 overruns:0 carrier:0
complejidad matemática, ya que se pueden 07 collisions:0 txqueuelen:100
pasar los números de una base a otra fácil- 08 RX bytes:5201433 (4.9 MiB) TX bytes:1559490 (1.4 MiB)
mente. Los 24 unos son interesantes, la red 09 Interrupt:10 Base address:0x100
es referenciada como /24 (barra 24).
Aplicando la misma técnica, podemos ver
que la dirección IP 192.168.2.3 equivale a: Tabla 2: Valores Clientes
11000000.10101000.00000010.00000011 Entrada (sin option) Parametro Significado
routers IP o nombre de host Router o puerta de enlace para acceder a Internet.
La dirección de red es el resultado de aplicar
domain-name-servers IP o nombre de host Servidor de Nombre de Dominio.
la operación AND a nivel de bits entre la
host-name Nombre de host Nombre del host cliente.
dirección IP y la máscara de red. Esta
operación deja un 1 si la IP y la máscara son 1: ntp-servers IP o nombre de host Servidor de tiempo para sincronizar el tiempo.
netbios-node-type 1,2,4,or 8 (recomendado) Resolución de nombres de Windows. 1 significa broadcast,2 unicast,
11000000.10101000.00000010.00000000
4 modo mixto (primero broadcast, luego intenta unicast) y 8 modo
La dirección de red en formato punto deci- híbrido,primero unicast antes de intentar broadcast.
mal es 192.168.2.0 netbios-name-servers Nombre de host Servidor WINS para la resolución de nombres de Internet
Como la dirección IP cero está reservada de Windows.
para la propia red y hay otra dirección reser- domain-name Nombre de dominio Nombre del dominio de la red.
vada para broadcast ( típicamente .255), la nis-domain Nombre de dominio Nombre del dominio NIS.
red del ejemplo puede albergar hasta 254 nis-servers IP o nombre de host Servidor NIS.
máquinas. subnet-mask Máscara de red Máscara de red del segmento de la red.
18 Número 01 www.linuxmagazine.com.es
DHCP PORTADA
dirección MAC o de “hardware” es tratando de buscar. En algunos casos IP estática que la relacione en el archivo
00:02:2D:34:90:85. puede ser útil referirse a una base de de configuración dhcpd:
Suponiendo que el servidor DHCP ha datos especial [2] que relacione las direc-
asignado a esa máquina una dirección IP ciones MAC asignadas a cada fabricante host lyraA{
arbitraria; dhcpd mantiene un registro de de tarjetas de red (ver Figura 1), cosa hardware ethernetU
direcciones asignadas y periodos de asi- que acelera la identificación. 00:02:2D:34:90:85;
gnación en /var/lib/dhcp/dhcpd.leases. Después de descubrir la dirección fixed-address lyra.mtr.mynet;
Otra opción sería hacer un ping a hardware, se puede añadir la dirección }
todos los hosts de la red para provocar
una respuesta de los mismos. Una vez Listado 3: Usando ping y arp para descubrir
realizado, con el comando arp -a se la dirección MAC
puede averiguar los hosts y sus direc-
01 renner@lyra:~$ ping -c3 192.168.2.0
ciones MAC (Ver listado 3). Primero hay
02 PING 192.168.2.0 (192.168.2.0): 56 data bytes
que hacer ping, ya que la tabla arp está
03 64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=0.2 ms
formada por todas las direcciones MAC
04 64 bytes from 192.168.2.52: icmp_seq=0 ttl=64 time=3.5 ms (DUP!)
de todos los hosts conocidos dentro de la
05 64 bytes from 192.168.2.53: icmp_seq=0 ttl=64 time=4.2 ms (DUP!)
red, incluyendo sólo las direcciones de
06 64 bytes from 192.168.2.62: icmp_seq=0 ttl=64 time=4.7 ms (DUP!)
aquellas máquinas que se han comuni-
07 [...]
cado recientemente con su ordenador.
08 renner@lyra:~$ /usr/sbin/arp -a
09 ? (192.168.2.1) at 00:03:E3:00:18:F1 [ether] on eth0
Pero, ¿Qué dirección MAC
10 ? (192.168.2.52) at 00:30:05:55:02:ED [ether] on eth0
elegimos? 11 ? (192.168.2.53) at 00:0C:6E:1F:32:C4 [ether] on eth0
Sin embargo, aún se necesita averiguar
12 ? (192.168.2.62) at 00:30:05:55:03:7F [ether] on eth0
que dirección MAC es la que estamos
GLOSARIO
Unicast: Cada cliente recibe una copia de un pleta las entradas en los ficheros de configu- bytes. La dirección MAC está grabada dentro
fichero de un servidor. Las conexiones punto ración en las máquinas clientes, por ejemplo, de cada dispositivo Ethernet y permite que el
a punto de este tipo son fáciles de configurar, /etc/passwd, /etc/groups o /etc/hosts. Un dispositivo pueda ser identificado de forma
pero producen una gran carga en el servidor archivo llamado /etc/nsswitch.conf especifica unívoca.
si hay un gran número de clientes en la red. si el servidor NIS debe suministrar informa- Imagen Boot: Es un kernel de Linux o Unix
NIS: Es el Servicio de Información de la Red, ción para los archivos de configuración y, si es que puede ser descargado de la red y ejecu-
que proporciona la distribución de las config- así, que clase de información. Un servidor tado. Se usa en sitios donde las máquinas no
uraciones en la misma. Un servidor NIS DHCP proporciona detalles del servidor NIS tienen discos y que montan el directorio raíz
central suministra información sobre los de la red local. del sistema (/) a través de la red. Las imá-
nombres de usuarios, las contraseñas, los Dirección MAC: O Control de Acceso al genes de boot en la red permiten instalar
directorios home, las asignaciones a grupos y Medio, o de manera más simple, la dirección grandes números de ordenadores sin la
los nombres de hosts. El servidor NIS com- Ethernet, es un número hexadecimal de seis necesidad de usar CDs, floppies,…
www.linuxmagazine.com.es Número 01 19
PORTADA DHCP
20 Número 01 www.linuxmagazine.com.es
Especial Redes PORTADA
Cambio de entorno
La modificación de la configuración
distintas configuraciones.
L
inux está invadiendo el mundo de requeridos para adaptarlos a diferentes serán aplicados por el perfil. Por ejem-
los portátiles. Los equipos portátiles entornos con un solo comando. Como plo, SCPM sólo guardará la
son especialmente propensos a los alternativa, sólo se tiene que seleccionar configuración de la impresora si
cambios de entorno. Normalmente se un perfil al arrancar. pertenece al grupo impresora. Si no se
conecta el portátil con un cable a la red o El módulo gestor de perfiles YaST (con marca este recurso, la impresora no se
se usa una WLAN de vez en cuando. interfaz gráfica), que está localizado en verá afectada por un cambio en el perfil,
Otras veces el portátil no se conecta a el grupo System, ayuda a configurar sino simplemente mantendrá la configu-
nada. Aunque en la oficina se conecte el SCPM (ver Figura 1), pero también se ración actual.
portátil a una pantalla externa, en casa puede usar el gestor de perfiles yast2 Cuando se instala SCPM se crean unos
probablemente se use la propia pantalla para lanzar la herramienta directamente. cuantos grupos de recursos predefinidos.
del portátil. Suse Linux viene con SCPM, Los perfiles existentes se muestran en Estos grupos cubren la mayoría de las
el gestor de perfiles del sistema, para la ventana principal del gestor de per- configuraciones e incluyen configura-
ayudar al equipo a adaptarse a estos files. Se puede añadir un nuevo perfil o ciones básicas de red (network), el
cambios. modificar la configuración de uno exis- servicio NTP para la sincronización de
tente. El botón de Options permite fecha y hora a través de Internet (ntpd),
Ajuste de los Perfiles cambiar o crear grupos (ver Figura 2). el cortafuegos (SuSEFirewall2), el monta-
SCPM guarda una colección completa de La configuración actual se usa como dor automático autofs, que montará los
configuraciones (conocidos como per- una plantilla cuando se crea un nuevo discos de forma automática. Si esta
files) del sistema para distintos entornos, perfil. SCPM crea un directorio con el selección no es del gusto del usuario, se
permitiendo restaurarlas cuando sean nuevo perfil en /var/lib/scpm/profiles/ y pueden definir nuevos grupos.
necesarios. Los perfiles no sólo almace- copia los ficheros de configuración para Desafortunadamente, la pantalla de
nan los ficheros de configuración, los grupos indicados en este directorio. información en la ventana principal del
también almacenan información adi- módulo YaST no es de fiar. Insiste en que
cional, tales como si los servicios Grupos el gestor de perfiles está deshabilitado,
específicos están activos o no. Esto hace Los administradores pueden usar los independientemente de su estado actual.
posible realizar todos los cambios grupos para especificar servicios que Si se activa el perfil no debe causar
www.linuxmagazine.com.es Número 01 21
PORTADA Especial Redes
Figura 1: YaST2 ayuda a configurar SCPM. Figura 2: Módulo SCPM de YaST2 - configuración.
ningún daño ya que SCPM no sobre- gar el perfil que se quiera la próxima vez datos (ver Listado 1). El comando load
scribe ninguna base de datos existente ni que se arranque. es muy importante aquí, ya que carga la
ningún perfil. A no ser que se le indique base de datos actual para editarla. Si se
explícitamente con una sobrescritura en Configuración desde la línea produce un fallo en la carga de la base de
la línea de comandos. de comandos datos actual y se guarda la configuración
No hay más o menos límite para Aunque YaST2 hace el trabajo de config- actual, la base de datos en uso será
expandir las capacidades del gestor de urar SCPM, arrancar continuamente sobrescrita con un fichero que contiene
perfiles, se le puede indicar al SCPM que YaST para cambiar el perfil es un sólo estos cambios.
lance scripts con un pre-arranque y un engorro. La línea de comandos propor- Aunque se sobrescriba la base de
post-arranque o una pre-parada y post- ciona otra alternativa. Se debe estar datos por error, SCPM guarda las tres
parada cuando se cargue o descargue un seguro de tener privilegios de root - ya últimas versiones de la base de datos en
perfil (ver Figura 3). que, se va a modificar la configuración el directorio /var/lib/scpm/scdb. La base
Cuando se selecciona un perfil difer- del sistema - y usar unos cuantos coman- de datos actual se denomina scbd.db, las
ente, SCPM primero ejecuta los dos dos para acelerar esta tarea. La Tabla 1 copias de seguridad tienen unos cuantos
scripts de parada y avisa en caso de cam- proporciona una lista de los comandos caracteres aleatorios añadidos al nom-
bios no salvados. Acto seguido lanza los más comunes. Por ejemplo, scpm switch bre.
scripts de pre-arranque, recuperando los ISDN activa el perfil llamado ISDN. Para realizar una copia de seguridad
ficheros de configuración del nuevo per- Los cambios sólo pueden aplicarse al del perfil creado sólo se necesita el
fil y los aplica al sistema. SCPM perfil actual, no importa si se usa YaST2 fichero de la base de datos, scdb.db. Para
comprueba si el servicio se está ejecu- o la línea de comandos, el efecto es el almacenar todos los ficheros de configu-
tando y se asegura de que se haya mismo. Para hacerlo así, primero se cam- ración a la vez, se necesita copiar el
aplicado el estado indicado. El último bia la configuración tal y como se hace directorio /var/lib/scpm/profiles/ en un
paso del proceso es llamar al script post- habitualmente. Cuando se tenga todo lugar seguro. ■
parada. funcionando al gusto
Si se especifica un perfil cuando se de uno, simplemente
arranque la máquina, se puede poner el se llama a scpm save
parámetro PROFILE= profile_name en el para salvar los cambios.
menú de inicio que llama Suse para lan- SCPM mostrará los
zarlo con la configuración requerida. El cambios uno a uno y
script /etc/init.d/boot.scpm se asegura de preguntará para confir-
que esto funcione. mar antes de salvarlos
Si se cambia regularmente el perfil al en el perfil.
arrancar, se añadirán unas cuantas Si se necesita cambiar
entradas con parámetros del kernel pre- los ficheros de configu-
configurados a la configuración del ración que SCPM ignora
cargador (YaST2: System / Bootloader debido a la configu-
Configuration). Para hacer esto, se añade ración, se puede real-
una nueva sección con la configuración izar cambios manual-
por defecto del kernel y simplemente se mente en modo in-
cambia el parámetro PROFILE para car- teractivo con la base de Figura 3: Opciones de configuración para los perfiles.
22 Número 01 www.linuxmagazine.com.es
CUPS PORTADA
EL ABC de la Impresión
Compartir una impresora entre
Microsoft.
BY TIM SCHÜRMANN
L
os ordenadores desfasados que han Primeros pasos documentación de CUPS nos propor-
sido reemplazados por nuevos Dos pasos son necesarios para ejecutar ciona más información al respecto. Ver
equipos son ideales como servi- CUPS en un red. Primero necesitamos [2].
dores de impresión en red. No sólo se configurar los ordenadores a los que las No es necesario modificar nuestras
recicla así equipos considerados obsole- impresoras están conectadas. Estas aplicaciones para usar CUPS. Nuestros
tos, sino que un servidor de impresión máquinas pueden ser equipos de programas interactuaran con CUPS de
no solo permite a múltiples usuarios sobremesa normales o servidores dedica- forma natural (es el caso de aplicaciones
compartir una impresora, si no que dos que no necesitan GUI. Las distros KDE) o usaran lo que se ha dado en lla-
además un ordenador dedicado a la actuales instalarán CUPS habitualmente mar comandos de impresión del sistema
impresión descarga parte del trabajo de como parte de la configuración original o V o Berkley. Estas son las herramientas
nuestro equipo, permitiéndole procesar proporcionarán herramientas de configu- de la línea de comandos lp y lpr. CUPS
sus propias tareas a la velocidad máxi- ración que podemos utilizar tras termi- proporciona versiones compatibles de
ma. En algunas redes domésticas, distin- nar la configuración general. Este último estos programas. Estos comandos sim-
tos usuarios enviaran trabajos a impreso- tipo normalmente configura CUPS para ples son útiles si necesitamos enviar un
ras diferentes. Mientras el padre puede que se ejecute al iniciar el sistema. Si archivo a un servidor remoto usando
mandar una carta a la impresora láser los nuestro sistema no dispone de CUPS o sólo la línea de comandos. El manual de
niños pueden estar mandando las fotos queremos actualizar la versión podemos usuario del software CUPS [2] propor-
de su última fiesta de cumpleaños o descargarnos el código fuente desde la ciona detalles al respecto de estos
imásgenes descargadas de Internet a la web de CUPS [1]. comandos.
impresora de inyección. Esto no es muy Antes de CUPS, las distribuciones
diferente del escenario que vemos en solían trabajar con sistemas menos Configuración basada en
algunas empresas donde los Sistemas potentes como BSD o LPRng. Ambos son Navegadores.
Comunes Unix de Impresión (Common difíciles de integrar en un entorno de Al contrario que los antiguos sistemas
Unix Printing System ó CUPS) permiten red. Si tenemos una distribución antigua LPRng, CUPS está perfectamente adapta-
el acceso a cualquier impresora de la red deberíamos considerar reemplazar el sis- do a las redes al estar basado en el Proto-
a clientes de Linux, Microsoft y Apple. tema de impresión antiguo por CUPS. La colo de Impresión de Internet (Internet
www.linuxmagazine.com.es Número 01 23
PORTADA CUPS
Figura 1: La anotación “Allow” permite al ordenador con la dirección IP Figura 2: La página de bienvenida del interfaz web del demonio CUPS.
192.168.0.16 acceder la web remotamente. Suponemos que la configuración de privilegios de accesos correcta.
Printing Protocol, IPP [3]). IPP es una con el nombre del anfitrión de nuestro From 192.168.0.16 permitimos al orde-
extensión del Protocolo de Transporte de ordenador CUPS. localhost se reserva nador con dirección ip 192.168.0.16
Hiper - Texto (Hyptertext Transport Pro- para la máquina local. CUPS no permite acceder al interfaz. Por motivos de
tocol, HTTP), usado para transferir pági- el acceso externo a la configuración por seguridad no se recomienda permitir el
nas Web a través de Internet. Un orde- defecto, por lo que debemos lanzar el acceso con contraseñas en blanco. La
nador, conocido como cliente en el navegador localmente en el sistema que FAQ de CUPS [4] proporciona una visión
lenguaje CUPS, envía datos de impresión estemos configurando. Si deseamos per- general sobre los privilegios de acceso.
al servidor CUPS. El demonio cupsd, que mitir el acceso externo debemos editar el El interfaz Web permite a los usuarios
se está ejecutando en segundo plano, archivo de configuración /etc/cups/ configurar y gestionar CUPS (ver Figura
acepta los datos y realiza algunos proce- cupsd.conf. Buscaremos secciones que 2). También podemos ver los trabajos de
sos adicionales antes de enviar los datos empiecen por <Location /...> y finali- la cola de impresión y administrarlos,
a la salida de la impresora. En otras pal- cen por</Location> (ver figura 1). cancelándolos, parándolos y rearrancán-
abras, cupsd es el núcleo del sistema Las etiquetas de localización con- dolos, si tenemos los permisos necesa-
CUPS. tienen detalles respecto a como CUPS rios. El comando lpstat nos proporciona
Podemos acceder al demonio a través debe controlar el acceso a varias sec- algunas funcionalidades. Si nuestra dis-
de nuestro navegador web escribiendo ciones. <Location /> se refiere al menú tribución tiene un programa de configu-
http:// localhost:631. Simplemente debe- principal y <Location /admin> al obje- ración para establecer impresoras es
mos reemplazar localhost en esta URL to Administration. Añadiendo Allow preferible usar este programa. Por ejem-
24 Número 01 www.linuxmagazine.com.es
CUPS PORTADA
plo, Suse Linux tiene la herramienta faz. Al interfaz al que los documentos de seleccionar el interfaz al que nuestra
YaST. Existe una alternativa basada en la una cola de impresión serán enviados se impresora está conectada, el modelo de
línea de comandos, lpadmin, que tiene define por el Identificador de Recursos la impresora y, finalmente, el filtro
pocas opciones adicionales a las men- Uniformes (Uniform Resource Identifier, GhostScript apropiado.
cionadas hasta ahora [2]. Si no nos gusta URI). La notación tiene un aspecto simi- Los siguientes pasos suponen que
ninguna de estas opciones podemos lar al nombre de una página Web: paral- CUPS ha sido configurado correctamente
optar por uno de los muchos programas lel:/dev/lp0 por ejemplo para el primero en cualquier ordenador (servidor) al que
de configuración de terceros. Las ver- puerto paralelo, o usb:/dev/usb/lp0 para ha sido conectado la impresora.
siones más nuevas de KDE tienen com- el primer puerto USB. El comando lpinfo Podemos imprimir una página de prue-
ponentes para estar tareas. Los encon- -v nos proporciona una lista de los inter- bas en la ventana del visualizador pul-
traremos en el centro de control bajo faces disponibles. Volveremos al asunto sando Printers|Print Test Page.
Hardware|Printers (ver figura 3). de los URI más tarde.
Usaremos el interfaz Web en los sigu- Para crear una nueva cola de impre- Configuración del cliente
ientes ejemplos. El acceso Printers en el sión seleccionaremos Administration en El segundo paso es configurar los
interfaz nos da acceso a la lista de la cola nuestro visor web y pulsaremos Add equipos que compartirán nuestra impre-
de impresión (figura 4). Printer. Entonces introduciremos su sora (los clientes). Hay numerosas for-
Cada cola tiene un nombre y especifi- nombre en el apartado name. El número mas de hacerlo, si bien hay un factor
caciones individuales. Podemos asignar máximo de caracteres es de 127. La sigu- común, el demonio CUPS cupsd, que
múltiples colas a una impresora o inter- iente pantalla nos indica que debemos necesita estar ejecutándose como una
Figura 5a: Configuración de impresoras remotas en Suse Linux 8.2. Primero le Figura 5b: … a continuación introducimos el nombre del anfitrión y el
decimos a YaST que queremos acceder a una impresora remota que usa IPP… recordatorio del URI para completar la configuración.
www.linuxmagazine.com.es Número 01 25
PORTADA CUPS
26 Número 01 www.linuxmagazine.com.es
CUPS PORTADA
de impresoras desde este momento (ver En el caso de preferir el controlador de problema a impresoras compartidas por
figura 8). impresión original se hace necesario equipos que corren Windows de
Si examinar parece no funcionar debe- configurar una nueva cola de impresión Microsoft. Nuestra distribución debe
mos comprobar la configuración del en nuestro servidor CUPS. Selec- configurar el back-end correctamente. Si
host. Puede que necesitemos añadir cionamos el dispositivo raw como el no es así, haremos “su” para acceder a
/etc/hosts para que la retransmisión fun- modelo de impresión. Esto indica a root e introduciremos el siguiente
cione. CUPS que debe enviar los datos comando ln -s 'which smbspool' /usr/
entrantes directamente al puerto de sali- lib/cups/backend/smb. Esto nos permite
Integración de sistemas da. Debemos saber que los ordenadores configurar la impresora como cualquier
Apple y Microsoft sin los controladores originales no serán otra en el servidor CUPS. En lugar de
Podemos integrar cualquier sistema capaces de generar resultados útiles en una dirección del tipo ipp://... usaremos
operativo que soporte IPP. Esto incluye nuestra impresora. una entrada como smb://workgroup/
la versión 10.2 o superior de MacOS X.c Los servidores Samba 2.2 o superior server/sharename. Si la impresora está
Si tenemos MasIS el prcedimiento que automáticamente exportan el contro- conectada a un equipo con NT o Win-
debemos seguir es comprobar Printer lador apropiado cuando un cliente Win- dows 9x con contraseñas necesitaremos
Sharing de la configuración del sistema dows intenta imprimir. De la forma que suministrarlas: smb://user:password@
en Services. Esto nos mostrará las im- se usa en los siguientes ejemplos, cup- workgroup/server/sharename.
presoras como Shared printers en el saddsmb solo puede soportar contro-
diálogo de impresión. Versiones de Opciones para Expertos
MacOS más antiguas necesitan el pa- Este articulo solo trata de cómo configu-
quete netatalk. Es un requisito in- rar CUPS en una red. El siguiente paso
despensable el añadir una entrada será su configuración para funciones de
para cada nueva impresora en el archi- acceso y seguridad. Por ejemplo CUPS
vo de configuración papd.conf. En nos permite asignar cuotas y contraseñas
[5] disponemos de más detalles. Lo de impresión. Esto puede que no sea útil
más importante es asegurarnos de en la red de nuestra casa a no ser que
que tenemos el archivo PPD correcto tengamos una cara impresora láser a
desde /etc/cups/ppd para cada impre- Figura 8: Tras completar la configuración, el dial- color. Los administradores deben revisar
sora: ogo de impresión de KDE debe tener un a lista de con detenimiento la documentación.
las impresoras remotas y sus detalles. La opción del menú Classes también
Description:MyPrinter@MyServer:\ nos proporciona opciones útiles. Un
:pr=|/usr/bin/lp -d MyPrinter:\ ladores Adobe [6] PostScript o contro- “class” es un grupo o categoría de impre-
:op=deamon:\ ladores desde su propia pagina de inicio. soras. Cuando un trabajo de impresión
:pd=/etc/cups/ppd/MyPrinter.ppd: Los controladores Adobe están dis- es enviado, CUPS imprime el trabajo en
ponibles solo como archivos EXE. la primera impresora libre del grupo. De
Windows 2000/XP también dispone de Primero necesitaremos ejecutar progra- nuevo, un interfaz Web proporciona un
soporte IPP. Cualquier otra versión nece- mas como Winzip para extraerlos a una simple método de configurar grupos
sita la versión 2.0.6 o superior de Samba. máquina Windows. Debemos guardar usando Classes.
Debemos añadir las siguientes 2 líneas a los controladores en el directorio /usr/ La documentación proporcionada por
la sección [Global] del archivo de config- share/cups/drivers. Los nombre de los nuestro distribuidor puede que contenga
uración smb.conf: printing = cups y archivos deben ser escritos en mayús- información útil en la búsqueda de prob-
printcap name = cups. Las distribu- culas. lemas. Si no es el caso encontraremos
ciones actuales deben tener esta configu- Ahora debemos modificar la configu- información detallada respecto a CUPS
ración por defecto. Los clientes de Win- ración Samba para permitir al servidor en [2]. Los archivos de protocolo dentro
dows necesitan un controlador de impre- de archivos exportar controladores de de /var/log/cups también pueden con-
sora capaz de generar Post-Script como impresión. La documentación de Samba tener indicaciones útiles. ■
el Apple LaserWriter. proporciona información al respecto.
cupsaddsmb -U root -a exportará nues- RECURSOS
GLOSARIO tras impresoras. Estos llevará nuestros
[1] Proyecto CUPS: http://www.cups.org
IPP El Protocolo de Impresión de Internet fue controladores al servidor Samba. Debe-
[2] Documentación CUPS: http://local-
creado por el Grupo de Trabajo de Impresión. mos saber que cupsaddsmb utiliza la
host:631
Si bien esta basado en HTTP 1.1, utiliza el cuenta de root para copiar los archivos
puerto 631 en lugar del 80. De hecho, los 2 con el programa smbclient. Debemos [3] IPP: http://www.pwg.org/ipp/
protocolos están tan relacionados que las asegurarnos, por tanto, de que Samba [4] CUPS FAQ: http://www.danka.de/print-
implementaciones IPP pueden ser accedidas permite el acceso a esta cuenta. pro/faq.html
de forma nativta a través de HTTP. La URI de Samba dispone de un nuevo back-end [5] Netatalk: http://netatalk.sourceforge.net
la impresora será en este caso HTTP://server-
CUPS llamados smbspool que permite a [6] Adobe: http://www.adobe.com
name:631/... en lugar de IPP:// servername/...
equipos Linux acceder sin ningún tipo de
www.linuxmagazine.com.es Número 01 27
DESARROLLO SDL
Creación de un juego
S
DL significa Simple DirectMedia rango de conjuntos de características (ya que probablemente sea la forma en
Layer y es una API multi- desde primitivas gráficas básicas, hasta que se entenderá mejor), aunque se
plataforma para programar apli- redes y soporte para tipografías True puede escribir aplicaciones SDL en
caciones multimedia, como los juegos. Type (TTF). La mayoría de estas librerías muchos otros lenguajes, como PHP,
Aporta una base estable sobre la que los han sido enviadas por usuarios finales y Ruby, Perl, Java y LISP. Principalmente
programadores pueden trabajar, sin pre- no forman parte del paquete principal de nos concentraremos en las característi-
ocuparse de cómo se encargará el SDL. Esto no es un problema en sí cas de SDL y cómo usarlas para producir
hardware de renderizarlo o incluso qué mismo, pero si el propósito principal es un juego. También destacaremos las
hardware lo ejecutará. usar SDL para trabajar desarrollando áreas del desarrollo del juego que
SDL está disponible bajo la licencia para varias plataformas, el desarrollador requiere más trabajo de nosotros los pro-
LGPL (Licencia Pública General Menor), habrá de asegurarse de que las librerías gramadores ¿De acuerdo? ¡Bien!
y como tal no requiere que el código que pretende utilizar se encuentran Comencemos…
fuente de la aplicación que se base en disponibles para las plataformas con las
ella sea publicado. que vaya a trabajar, ya que no todas Gran Bola de Fuego
Actualmente existen buenas imple- están completamente soportadas. La primera tarea es descargar e instalar
mentaciones de SDL para Linux (i386, La herencia de Windows en SDL es SDL. La versión actual estable es la
PPC, y PS2), BSD, Windows, Macintosh muy evidente dentro de la API, tanto es 1.2.7, y está disponible desde [3] como
OS 9/X, Solaris, Irix y BeOS. así que mucha de la terminología (y un archivo tar comprimido con gzip.
muchas de las funciones) son muy pare- Además de distribuirse el código fuente,
Acceso versus Emulación cidas a sus equivalente en DirectX. A están disponibles dos versiones binarias
La API SDL está compuesta de cinco pesar de ello, no se emula Windows de
subsistemas distintos: vídeo, audio, ninguna manera. En cambio, cada lla- Cuadro 1: Drivers
CDROM, entrada de joystick y tempo- mada a la API gráfica de SDL, por SDL no está limitado a X11 como dispositivo
rizadores. Cada uno apunta a un área de ejemplo, utiliza directamente el contro- de salida.También puede usar dga, fbcon ¡y
desarrollo diferente y puede ser inicial- lador desde el sistema operativo hasta aalib! Para hacer uso de estas carac-
izada y usada independientemente de anfitrión, bastante distinto a lo que sería terísticas, debemos asegurarnos de que el
los demás. Además, SDL fomenta el uso un sistema emulado. dispositivo apropiado se compila dentro de
SDL (lo cual requerirá otro ./configure, make,
de librerías que puedan suministrar En Windows, esto implicaría el uso de
make install del paquete). Entonces podrá
nuevas funcionalidades a la API básica. DirectX. Bajo Linux, se utiliza una de las
usar la variable de entorno SDL_VIDEO-
Las dos librerías más comunes son librerías del dispositivo de gráficos,
DRIVER para indicar que dispositivo quiere
SDL_mixer (que proporciona un mejor como X11 o DGA. También está sopor- usar. Por ejemplo:
manejo de audio) y SDL_Image, que pro- tado el control MTR (Memory Type
export SDL_VIDEODRIVER=aalib
porciona soporte para una amplia Range Register, [2]) aplicaciones aceler-
./explore
selección de formatos de ficheros gráfi- adas a pantalla completa (véase el
Puede encontrar una lista de los dispositivos
cos, incluyendo, GIF, JPG, PNG y TGA. Cuadro 1: Dispositivos).
suministrados con SDL tecleando:
El sitio principal de SDL [1] lista 109 libr- La API de audio puede reclutar los ser-
./configure -help | grep U
erías diferentes, actualmente en vicios de OSS, ESD o aRts para
enable-video
producción, suministrando un amplio suministrar música y efectos de sonido.
28 Número 01 www.linuxmagazine.com.es
SDL DESARROLLO
diferentes: Ejecución, runtime, y desar- Todos los programas SDL pueden tarde, deberíamos comenzar siempre con
rollo (development). Naturalmente, la comenzar con una de estas lineas: un SDL_Init, porque incluye la inicial-
última proporciona mejores facilidades ización de otros componentes que
de depuración, lo cual es más útil para #include "SDL.h" SDL_InitSubsystem no tiene. Muestras de
nosotros, como desarrolladores. De todas estos componentes podrían ser: Las
formas recomiendo trabajar con las o: hebras son inicializadas, el ultimo
fuentes ya que esto nos permite un código de error es borrado y el paracaí-
mejor ajuste y el uso completo de un #include "SDL/SDL.h" das es (opcionalmente) desplegado
depurador para introducirnos en el mis- (véase Cuadro Paracaídas).
mísimo código de SDL. Esto no solo es La primera es preferible por motivos de
útil en el seguimiento de errores, tam- portabilidad en varias plataformas, SDL_Init(SDL_INIT_VIDEO | U
bién puede ser muy iluminador. aunque esto requerirá que se añada el SDL_INIT_AUDIO);
El archivo tar.gz se desempaqueta de directorio SDL a la lista de rutas inclu-
la manera habitual: idas que gcc buscará. Todas las demás Es exactamente igual a:
cabeceras de archivos SDL están incor-
tar xfz SDL-1.2.7.tar.gz poradas dentro de ésta para así limitar el SDL_Init(SDL_INIT_VIDEO);
mantenimiento. También necesitamos SDL_InitSubSystem
Y se instala con el proceso igualmente enlazar la librería principal de SDL (lib- (SDL_INIT_AUDIO);
familiar: SDL) dentro de nuestra aplicación. Al
principio solo usaremos las funcionali- Por ahora, solo necesitamos el subsis-
./configure dades de está librería. Según pase el tema de vídeo, por tanto lo
make tiempo y nuestros requisitos crezcan, inicializaremos y comprobaremos si hay
make install añadiremos otras librerías. Hasta errores. SDL adopta el estándar de usar
entonces, los dos requisitos de más valores negativos para indicar un código
Por defecto, esto colocará las librerías arriba pueden satisfacerse en la linea de error. El valor de este número indica
necesarias y los archivos incluidos en comandos con: el error concreto.
/usr/local/lib y /usr/local/include/SDL SDL también suministra la función
respectivamente, aunque esto puede gcc -I/usr/include/SDL -lSDL U SDL_GetError que devuelve el nombre
cambiarse en el proceso de inicio con: test/testsprite.c textual del ultimo error. Pero debe ser
llamado inmediatamente, porque si la
./configure -prefix=/poner/sdl/U Si cambia las rutas de librerías e inclui- subsiguiente función SDL falla, el ante-
algunsitio/encualquierotraparte dos, se puede usar el programa sdl-config rior error se perderá.
para obtener esta información (véase Cerrar el sistema es tan simple como
Además de suministrar dispositivos adi- Cuadro SDLCONFIG). llamar a la función SDL_Quit.
cionales, debería tener pocos motivos
para repetir el proceso ./configure ya que El Mundo en Nuestras Manos void exRelease(void)
SDL es fácil de configurar y muy estable, Nuestra primera incursión en la progra- {
e invariablemente funciona a la primera. mación con SDL será la pantalla de SDL_Quit();
El paquete SDL también contiene un “bienvenida” del juego. Con esto abar- }
extenso juego de páginas de manual caremos un número de conceptos
(sección 3) detallando los parámetros e fundamentales, tal como superficies, Cuadro 2: SDLCONFIG
indicadores de cada función. blitting (de blit: Block Image Transfer) y
sdl-config es un pequeño programa que
actualización de pantalla.
viene empaquetado con SDL y su función es
Arriba con ese muro Cada estructura y función SDL básicamente informar o prefijar, el lugar de
El paquete SDL viene con un pequeño comienza con el prefijo SDL_. Además la instalación de SDL.También se puede usar
conjunto de pruebas que permiten com- envolveremos estas funciones dentro de para dar los indicadores correctos tanto al
probar la integridad de cada subsistema. las nuestras (todas precedidas con ‘ex’) compilador como al enlazador.
Lo encontraremos en el directorio test, y para encapsular mas funcionalidad y $ sdl-config
funcionará nada más terminar la insta- suministrar un lugar común donde Usage: sdl-config [--
lación, siempre que haya salido todo reunir el código del juego y el de SDL. prefix[=DIR]] [--exec-
bien. En el caso de que surjan proble- Esto ayudará en la depuración. prefix[=Dir]] [--version]
mas, buscaremos los mensajes de error La primera etapa es inicializar SDL. [--cflags] [--libs][--static-
que cada prueba envía a la linea de Hay dos funciones para hacer esto, libs]
comandos, ya que pueden indicar si son SDL_Init y SDL_InitSubSystem. SDL_Init $ sdl-config -libs
problemas con el hardware o la configu- puede inicializar uno (o más) subsis- -L/usr/local/lib -Wl, -
ración. Si la maquina es capaz de temas y debería ser la primera función rpath, /usr/local/lib -lSDL -
ejecutar un escritorio, debería estar a la SDL en un programa. Aunque podemos lpthread
altura de cualquier tarea con SDL inicializar subsistemas adicionales más
www.linuxmagazine.com.es Número 01 29
DESARROLLO SDL
30 Número 01 www.linuxmagazine.com.es
SDL DESARROLLO
Además está el parámetro final que , int height, int depth, Uint32U Una forma mucho más fácil es dibujar
permite redimensionar la ventana Rmask, Uint32 Gmask, Uint32 U las imágenes con GIMP y salvarlas como
(SDL_RESIZABLE), quitarle el marco Bmask, Uint32 Amask); un BMP. Entonces se puede cargar la
(SDL_NOFRAME) o soportar renderizado imagen, correctamente formateada y
OpenGL (SDL_OPENGL). A menudo, SDL_Surface *SDL_CreateRGBU copiarla dentro de una flamante superfi-
el primer impulso con un juego es SurfaceFrom(void *pixels, int U cie. SDL permite esta generosa
hacerlo a pantalla completa (SDL_ width, int height, int depth, U funcionalidad con una simple función
FULLSCREEN). int pitch, Uint32 Rmask, Uint32U llamada:
Pero nos quedaremos con una versión Gmask, Uint32 Bmask, Uint32 U
en ventana ya que es más fácil trabajar Amask); SDL_Surface *SDL_LoadBMPU
con ella. Además, es posible hacer que la (const char *file);
máquina se vuelva inutilizable si se está Esto se utiliza raramente por que tiene
ejecutando el juego a pantalla completa, que escribir cada pixel de la imagen SDL solo provee soporte a archivos BMP
desde donde no es siempre posible con- (en el formato correcto) directamente dentro de la librería estándar. Aunque
mutar a otro escritorio virtual y matar el dentro de la superficie. Además, normal- SDL_image suministra soporte para
programa. Esto también ocurre si se mente hay una gran cantidad de muchos otros formatos, nuestro juego se
tropieza con un punto de ruptura en el pixels. limitará a BMPs y hará uso de varias
depurador o se nos olvida aportar algún
mecanismo para abandonar el juego. Cuadro 5: Carga de profundidad
Recordemos que, al igual que un depu-
rador, el paracaídas de SDL captura varias Cuando la profundidad de bit es distinta de tabla se llama la paleta (la cual usa 24 bits
8, los datos del pixel se almacenan en un completos para almacenar la información de
señales (como Ctrl+C) y, por tanto, éstas
“formato empaquetado”. Esto se llama así color) y puede ser configurada con las fun-
no están siempre disponibles.
porque el color se representa con tres ciones SDL_SetColors y SDL_SetPalette.
Cada superficie que se crea (y eso números, uno para cada uno de los compo- Aunque hoy en día ha decaído en lo que se
incluye a la pantalla) debe ser liberada nentes rojo, verde y azul que se empaquetan refiere a la programación de juegos, gracias a
con la función SDL_FreeSurface, una vez juntos (en un simple Uint o Uint32) para este formato, se puede mantener la produc-
que ha dejado de usarse: mostrar el color. Con una profundidad de 24 ción de gráficos de alta calidad en hardware
bits (a veces llamado Color verdadero), cada muy limitado.También se pueden producir
SDL_FreeSurface(pScreen); uno de los componentes RGB ocupa 8 bits. muchos efectos interesantes (y muy rápidos)
Esta es la resolución más alta que probable- cambiando los colores en la paleta sin hacer
Mis Posesiones Terrenales mente necesitemos, pero normalmente es cambios en cada pixel sobre la pantalla. El
Además de la pantalla, necesitamos excesiva para la mayoría de los juegos. mayor problema con las superficies de 8 bits
Desafortunadamente las cosas se vuelven paletizadas es que solo se dispone de 256
algunas superficies de nuestra pro-
más complicadas con el más común de los colores específicos para toda la imagen. Si el
piedad, dentro de las cuales podremos
formatos empaquetados. Me refiero al color fondo usa un juego de 256 colores y el per-
dibujar nuestro gráficos. Hay dos formas de 16 bits. En este caso los componentes RGB sonaje principal usa otro diferente, entonces
principales de crear nuestras propias usan 5, 6, y 5 bits para cada color o ¡5, 5 y 6 o SDL cambiará automáticamente algunos de
superficies. La primera es crear la super- 6, 5 y 5! El formato exacto de la superficie los colores. Si bien esto no es algo demasiado
ficie manualmente con una de las puede variar dependiendo de donde esté malo, los resultados pueden ser impredeci-
siguientes funciones: almacenado y que tarjeta gráfica se esté bles y por lo tanto hará que el trabajo
usando. La orden también puede variar si se artístico sea un poco menos impresionante.
SDL_Surface *SDL_CreateRGBU está usando un PowerPC, por ejemplo, La otra cara de la moneda, sin embargo, es
Surface(Uint32 flags, int widthU debido a la cuestión de la orientación de los que mover datos de 8 bits es el doble de
datos (endian). Sin embargo, esto no es algo rápido que mover datos de 16 bits y, por
de lo que debamos preocuparnos, ya que
Cuadro 4: Funciones de desde SDL se convierten los formatos
tanto, es a menudo un truco empleado para
dispositivos de mano (PDAs, móviles, etc.).
vídeo automáticamente durante una transferen- Para asegurar la compatibilidad en varias
Estas funciones pueden suministrar alguna cia de bloque o blit. Si se necesita plataformas, los tipos estándar de C como
idea útil sobre que modos de vídeo son posi- comprender el formato interno (tal como short e int, no se usan. En su lugar, SDL define
bles con SDL. Las páginas de manual tienen veremos más tarde en esta serie) es agrad- los suyos propios, que son usados por toda la
prototipos completos y una explicación de able saber que SDL suministra la función API. Estos tipos pueden cambiarse sobre
estas funciones. SDL_MapRGB para ayudarnos. En verdad, nuevas plataformas para asegurar que un
SDL_GetVideoinfo Recupera información acerca este problema con el formato de los paque- Uint16, por ejemplo, es siempre de 16 bits.
del hardware de vídeo. tes también se manifiesta con el modo de
typedef unsigned char Uint8;
SDL_VideoDriverName Da el nombre del dispositivo de color de 24 bits, pero es menos pronunciado.
typedef signed char Sint8;
vídeo. Las reglas cambian cuando se especifica una
profundidad de bit de 8. En vez de separar los typedef unsigned short Uint16;
SDL_ListModes Enumera todas las resolucio-
nes de pantalla disponibles. 8 bits dentro del componente RGB, cada typedef signed short Sint16;
SDL_VideoModeOK Determina si un modo especi valor (desde 0 a 255) referencia a una tabla typedef unsigned int Uint32;
fico de vídeo está disponible. separada que indica el color actual. Esta typedef signed int Sint32;
www.linuxmagazine.com.es Número 01 31
DESARROLLO SDL
superficies cargadas de esta manera. cualquiera de las dos superficies, fuente cie pantalla que hemos configurado no
Cada superficie retendrá un juego de grá- o destino. Esto es muy útil, ya que es la imagen que se visualiza en la ven-
ficos específico: Uno para el telón de podemos dibujar gráficos en posiciones tana. Esa imagen se controla por el
fondo, otro para el jugador, otro para el tales como (-4, -2) o (600, 450), lo cual dispositivo (tal como X11), no por SDL.
enemigo, etcétera. permite dividir suavemente nuestros grá- A fin de ver la imagen, debemos decirle
La imagen final del juego, por tanto, se ficos por el borde de la pantalla. SDL a SDL que actualice el dispositivo con el
construirá a partir de muchas copias de resuelve como representar la porción vis- gráfico de nuestra superficie. Para hacer
superficies a superficie (recordemos que ible óptimamente. esto usaremos la función SDL_
la pantalla es solo una superficie), UpdateRect.
aunque gobernadas por la lógica del SDL_Rect srcrect = U
juego. Este proceso de copiado se llama {600, 450, 64, 64}; void SDL_UpdateRect(U
blitting y es la abreviatura de BLock SDL_Surface *screen, Sint32 x, U
Image Transfer. Solo transferiremos bloques desde 600, Sint32 y, Sint32 w, Sint32 h);
450 a 639, 479 aunque la extensión sea
El Baile del Blit 663, 513. Si se quiere transferir en Sólo un pequeña porción rectangular de
Podemos transferir bloques (blits) entre bloque la superficie entera (como hici- la pantalla es actualizada (lo cual es nat-
dos superficies cualquiera y eso incluye mos en la pantalla de bienvenida) uralmente más rápido que si
desde una superficie a sí misma. Tam- entonces pasaremos srcrect como NULL. actualizamos toda la superficie). Como
bién podemos transferir bloques desde Solo usamos las coordenadas x, y de alternativa, podemos elegir pasar ceros a
una porción de una superficie, a una por- dstrect refiriéndonos a la esquina supe- cada uno de los parámetros y actualizar
ción diferente de otra superficie. La rior izquierda del área de destino, todo el área de golpe. Por ejemplo:
única limitación es que el tamaño de porque no somos capaces de estirar y
ambas porciones (la fuente y el destino) transferir bloques. Pasando NULL como SDL_UpdateRectU
deben ser del mismo tamaño. La valor dstrc le diremos a SDL que (pScreen, 0, 0, 0, 0);
operación de transferencia de bloques se comience la transferencia de bloque
puede (si ambas superficies están en desde (0,0). Si la extensión del bloque Ahora hemos transferido algunos blo-
memoria de vídeo) ejecutar por hard- transferido excede la superficie de des- ques a nuestra pantalla y provocado la
ware, lo cual es increíblemente rápido. tino la imagen se recortará normalmente. actualización del monitor y así actu-
No todos los dispositivos gráficos, no Esta área recortada puede ser limitada alizarlo con nuestra propia imagen. De
obstante, soportan la aceleración por artificialmente con: esta manera, si añadimos un pequeño
hardware, así que para un breve recorda- retraso, completaremos nuestra primera
torio, véase el cuadro Dispositivos. void SDL_SetClipRect(U pantalla.
Hay una sola función para hacer trans- SDL_Surface *surface, U Producir un nivel del juego o person-
ferencias de bloques. Es única así que es SDL_Rect *rect); ajes animados, es simplemente una
sencillo de recordar: cuestión de mas transferencias de blo-
Y cualquier futura transferencia de ques, en más lugares, desde más
int SDL_BlitSurface(U bloque a esa superficie solo ocurrirá den- superficies. No implica nada más que lo
SDL_Surface *src, U tro del área especificada en el que ya hemos visto. Desafortunada-
SDL_Rect *srcrect, U rectángulo. Como dije más arriba, mente, hay buenas y malas manera de
SDL_Surface *dst, U pasando NULL como puntero SDL_Rect, hacer esto. El próximo mes le daremos
SDL_Rect *dstrect); le estamos diciendo a SDL que use el un vistazo a las buenas maneras,
área completa de la superficie, lo que mostraremos como las superficies
Desde esta función no se dispone de la efectivamente eliminara el área recor- pueden ser usadas para crear la pantalla
capacidad de estirar o rotar la superficie; tada. Esta característica nos permite del juego ¡y daremos vida a algunos de
para esto deberemos recurrir a mantener un área de la pantalla pura y los malos! ■
cualquiera de las librerías SDL_gfx [4] o sagrada, sin tener en cuenta que compo-
SGE [5]. Como el estirar bitmaps con- nentes del juego intenten transferir INFO
sume mucho tiempo de proceso no lo bloques allí, protegiendo información tal
[1] SDL: http://www.libsdl.org
usaremos en nuestro juego, ya que esta- cómo la puntuación, o el número de
[2] Memory Type Range Register: http://
mos aspirando a la máxima velocidad. vidas.
www.linuxvideo.org/user/mtrr.txt
Por tanto generaremos nuestros gráficos
al tamaño exacto que necesitemos. ¡Bienvenidos! [3] Descargas de SDL: http://www.libsdl.org/
SDL_Rect es una estructura simple Así que ahora podemos cargar una ima- download-1.2.php
para indicar el tamaño del área que quer- gen en una superficie y transferir un [4] Librería SDL_gfx: http://www.ferzkopp.
emos transferir, tomando como x, y, la bloque de esa superficie a otra superficie net/~aschiffler/Software/SDL_gfx-2.0/
anchura y la altura. SDL cortará (tal como la pantalla). A fin de ver como [5] Librería SGE: http://www.etek.chalmers.
automáticamente nuestras coordenadas queda nuestro trabajo, debemos dar a se/~e8cal1/sge/index.html
internamente si excedemos los límites de conocer una revelación más. La superfi-
32 Número 01 www.linuxmagazine.com.es
Interfaces DESARROLLO
Interfaces Simples
Tal vez uno de los principales motivos para utilizar un interfaz de texto sea uno que dicta el sentido común de la
economía. Más o menos nuestra máxima podría rezar así:“¿Para qué más?”. Efectivamente: ¿para qué? ¿Qué necesidad
tiene un almacén de piezas de recambio de automóviles de un Pentium VII a un millón de gigaherzios con pantallas de
plasma de tropocientos pixels y mogollomiles de colores? Tal vez sería más realista escoger máquinas más básicas,
incluso de las consideradas obsoletas, e invertir lo que se ahorre en hardware (y software, como después veremos) en
M
ucho más práctico, digo, es
tener una pantalla en blanco y
negro, con buen contraste, un
ordenador sencillito. Sinceramente, los
interfaces amigables con muchos col-
orines e iconos de diseño están
sobrevalorados. No sólo eso, sino que
pueden inducir a confusión. Si se piensa
racionalmente, muchas aplicaciones (la
mayoría) no necesitan de interfaz grá-
fico. Perfectamente podrían apañarse
con un interfaz de botones, menús y
ventanas basadas en texto. Amén de
resultar menos exigente con el hardware,
también serían más claros y más sencil-
los de utilizar. Precisamente para Aplicándose a la tarea un bucle while que se encargase de
desarrollar interfaces para aplicaciones Tal vez la manera más racional de enfo- procesar los tecleos y pasarlos a la clase
de estas características existe curses, una car el desarrollo de la aplicación (al application y, al final, cuando se pulsase
librería que facilita enormemente la menos es la que funciona para mí) es el la tecla que precipitase la salida del
creación de ventanas, menús y widgets de concebirlo desde arriba hacia abajo. bucle, se llamase al destructor del objeto
en terminales de texto. Por supuesto que Es decir, piensa en como quieres que se y todo se recogiese limpia y ordenada-
las librerías curses están disponibles para vea y ya te encargarás del trabajo sucio mente. Sencillo. El corazón de dicha
la mayoría de los Unixes, incluyendo después. Normalmente esto implica clase se puede apreciar en el Listado 1.
Linux y suelen incorporarse con casi empezar con la función main() y No es muy impresionante ¿verdad? Eso
todas las distribuciones e incluso existen reducirlo a unas pocas llamadas – y es por que la mayor parte del “trabajo
versiones para otras plataformas lo que cuando digo unas pocas, quiero decir sucio” se lleva a cabo en window, que al
asegura, hasta cierto punto, la portabili- unas poquísimas. Si la función main() ser heredado por application, recibe una
dad del código (véase [1]). En este puede contener como mucho 10 líneas llamada a su constructor cuando se crea
primer capítulo destinado a curses de código, es que vamos bien. Después un objeto application. Y es en el con-
vamos a ver como emplear la librería vamos implementando clases de las más structor de window donde se inicializa
imbuida en la infraestructura de una generales a las más específicas, siendo toda la infraestructura de curses,
aplicación desarrollada en C++. Una estas últimas las que de verdad interac- preparándola para mostrar las ventana.
advertencia: el C++ no es el entorno túan con las librerías específicas, curses Se puede apreciar la herencia de window
natural de curses y, al menos en un caso, en este caso. Así que, yo ¿cómo quería por parte de application en el fichero de
no conseguiremos unas compilaciones que se viese? Pues quería que en main() inclusión application.h, no listado en
cien por cien limpias (es decir, sin adver- se inicializase un objeto x de una clase, este artículo, pero que puede ser descar-
tencias), si bien esto es más bien un llamémosle application, y que esa clase gado desde la web de la revista en [2].
problema del compilador g++ que del se ocupase de mostrar la ventana princi- Un poco más adelante volveremos sobre
código de muestra o de un defecto de pal de la aplicación, colocara los menús la clase window. Volviendo al construc-
curses, como después veremos. etc. El resto de main() se ocuparía con tor de application, lo primero que se
www.linuxmagazine.com.es Número 01 33
DESARROLLO Interfaces
hace es realizar una llamada al macro de utos. Ver [2]). Fijémonos que window aplicación vamos a ocupar todo el termi-
fabricación casera makeString() que cuenta con dos constructores sobrecar- nal visible. Por ello, al invocar al
sirve para convertir una cadena con un gados. Uno, el que no tiene parámetros, constructor de la ventana de fondo de la
número de argumentos opcionales en sirve de constructor cuando se crea un aplicación en el constructor de applica-
una sola cadena tipo string que se uti- objeto application y crea el entorno tion, utilizamos el alto y ancho máximo
lizará como título (asignado, pues, a la curses. Este constructor se llamará una disponible al arrancar el programa. De
propiedad de la clase title). Veremos más sola vez por aplicación y monta la ven- hecho, lo primero que se hace en este
sobre este macro en la sección Parámet- tana stdscr, el “contenedor” de todas las segundo constructor es crear una ven-
ros Indefinidos más abajo. Lo siguiente demás ventanas. En el código se aprecia tana con la función curses newwin() y
es abrir una ventana con la que podamos como usa los métodos estándar de ini- asignar el puntero que devuelve al atrib-
trabajar. Esta ventana será la del fondo, cializar la pantalla y librería de curses uto w_Handle. Este atributo nos será útil
la madre de todas las subsiguientes ven- utilizando (initscr()) y como se activa el más adelante para referirnos a cada una
tanas y donde se alojará el menú mapeado del teclado (keypad(), esto de las ventanas cuando contemos con
principal del programa. La llamada es un sirve para que las teclas de función, cur- más de uno. A continuación, proce-
método de la clase window, heredada sores, etc. devuelvan caracteres que el samos el título de la ventana de manera
por application y que veremos en la sigu- programa pueda procesar, permitiendo, similar que hacíamos en el constructor
iente sección. El destructor de la clase por ejemplo, que si el usuario pulsa la de application y establecemos al atributo
contiene una única instrucción, end- tecla F1, se active el sistema de ayuda, frame para dibujar (o no) un marco
win(), la función de curses utilizado etc.). A continuación, deshabilitamos la alrededor de la ventana. Lo siguiente es
para recoger la basura y para devolver la secuencia de Nueva Línea + Retorno de asignar la ventana a un panel. Los pane-
terminal al estado que tenía antes de la Carro cada vez que se produce una sal- les en curses añaden propiedades a las
llamada a initscr(). De momento es todo ida con la llamada a nonl() y le decimos ventanas permitiendo que estas se apilen
lo que necesitaremos para salir elegante- a la aplicación que ha de capturar las por capas y se solapen de manera consis-
mente de curses. pulsaciones en cuanto se produzcan sin tente. Para entendernos, sería muy difícil
esperar a un carácter de nueva línea con tener ventanas de diálogos, ventanas
Abriendo la Ventanas el procedimiento cbreak(). Esto último móviles y ventanas apiladas sin que
En la siguiente capa de nuestra apli- nos permitirá procesar cada tecleo del estas participaran de las funcionalidades
cación, estaría la clase que administraría usuario como es debido, activando que les atribuyen los paneles. La conver-
cada una de las ventanas que se fuesen alguna funcionalidad del programa si sión de una ventana “normal” en un
creando, incluyendo la principal. Esta pulsa un tecla de un carácter no imprim- ventana panel es tan sencilla como se ve
capa viene representada por la clase win- ible o colocando una letra en la ventana en el listado: basta invocar a la función
dow, la implementación de la cual se apropiada si el usuario desea escribir curses new_panel() con el handle de la
puede ver en el Listado 2 (o al menos algo. Por fin, evitamos que se visualicen ventana a convertir. La función devuelve
parte. Se han dejado fuera los métodos inmediatamente las entradas desde el un handle al panel creado que
get y set correspondientes a varios atrib- teclado con la función noecho(). De esta guardamos en el atributo p_Handle para
manera, podremos capturar los tecleos y referencias futuras. Luego llamamos al
Listado 1: application.cpp procesarlos como nos convenga en el método de la clase putTitle() (que se ve
contexto de la aplicación. Todas estas un poco más abajo en el listado). Éste
01 #include "application.h"
funciones pertenecen a la librería de método, como su nombre indica, coloca
02
curses y su uso es bastante estándar en el título de la ventana en el ángulo supe-
03 application::application(bool
el arranque de cualquier aplicación que rior izquierdo y, de paso, dibuja el marco
frame=TRUE,string
utilice el paquete. El segundo construc- para la ventana. El siguiente método,
app_Name="Untitled"...)
tor, window::window( int wide = showPanels(), también perteneciente a la
04 {
COLS,int high = LINES, int posX = 0,int clase window, muestra el panel lla-
05 makeString(app_Name);
posY = 0, bool frame = TRUE, string mando a update_panels() (que actualiza
06 title=app_Name;
win_Name = "Untitled"...), sirve para el aspecto del panel) y doupdate() (que
07
crear las ventanas con las que podremos actualiza la pantalla con la nueva infor-
08 window
interactuar. Si nos fijamos, el constructor mación), ambas funciones perten-
app_window(COLS,LINES,0,0,TRU
de la clase application utiliza este con- ecientes a la librería curses. El método
UE,title);
structor para generar el fondo visible de putTitle() a su vez invoca al método
09 }
la aplicación, con un marco (establecido wWrite(), que es el método de la clase
10
por el parámetro frame) y de un tamaño encargado gestionar el paso de cadenas a
11 application::~application()
igual a la del terminal donde se las ventanas de curses. Recibe tres o más
12 {
mostrará. El tamaño de la terminal se parámetros: los dos primeros establecen
13 endwin();
establece en líneas (LINES) y columnas la posición x e y de la cadena (tercer
14 }
(COLS), siendo estas dos variables gen- parámetro) que se montará junto con los
15
eradas por curses a la hora de inicializar parámetros indefinidos que le siguen. La
16 // ... Y 'gets' varios
el motor y para la ventana principal de la función mvwprintw(), perteneciente a la
34 Número 01 www.linuxmagazine.com.es
Interfaces DESARROLLO
Listado 2: window.cpp
01 #include "window.h" 42 }
02 43
03 window::window() 44 void window::showPanels()
04 { 45 {
05 w_Handle=initscr(); 46 update_panels();
06 keypad(stdscr, TRUE); 47 doupdate();
07 nonl(); 48 }
08 cbreak(); 49
09 noecho(); 50 void window::wWrite(int px, int py, string
10 } my_String...)
11 51 {
12 window::window(int wide=COLS,int high=LINES,int 52 if (has_Frame)
posX=0,int posY=0,bool frame=TRUE,string 53 {
win_Name="Untitled"...) 54 px++;py++;
13 { 55 }
14 w_Handle=newwin(high,wide,posY,posX); 56 makeString(my_String);
15 57 mvwprintw(w_Handle,py,px,my_String.c_str());
16 makeString(win_Name); 58 wrefresh(w_Handle);
17 title=win_Name; 59 showWindow();
18 has_Frame=frame; 60 }
19 61
20 p_Handle=new_panel(w_Handle); 62 void window::showWindow()
21 63 {
22 putTitle(); 64 nodelay(w_Handle,TRUE);
23 showPanels(); 65 wgetch(w_Handle);
24 } 66 nodelay(w_Handle,FALSE);
25 67 showPanels();
26 68 }
27 void window::closeWindow() 69
28 { 70 void window::drawFrame()
29 delwin(w_Handle); 71 {
30 refresh(); 72 wborder(w_Handle, ACS_VLINE, ACS_VLINE,
31 } ACS_HLINE, ACS_HLINE, ACS_ULCORNER, ACS_URCORNER,
32 ACS_LLCORNER, ACS_LRCORNER);
33 void window::putTitle() 73
34 { 74 }
35 int px=1,py=0; 75
36 if(has_Frame) 76 int window::wGetch()
37 { 77 {
38 drawFrame(); 78 return(wgetch(w_Handle));
39 px=0;py=-1; 79 }
40 } 80
41 wWrite(px,py,title); 81 // Gets y sets varios aquí
librería curses, es la encargada de colo- cadena, llamamos wrefresh() que datos desde el teclado. Bueno, más bien,
car la cadena en la ventana indicada por refresca la ventana que acabamos de si no se intentaba conseguir una entrada
el handle que se le pasa. Nótese como, a modificar, que no la pantalla. El refresco desde el teclado. Por ello lo único que
pesar de que la mayoría nosotros esta- de la pantalla para que se puedan ver las hace esta rutina es anular la espera para
mos acostumbrados a referirnos primero modificaciones se produce en el método una entrada (nodelay()), leer el búfer de
al eje de las x y después al eje de las y, showWindow(), que llamamos a contin- entrada (wgetch() – normalmente dicho
curses lo hace a la inversa, más bien uación. El método showWindow() es un búfer estará vacío, puesto que no espera
porque cuando hablamos de terminales parche en la ya larga tradición de los a que el usuario teclee nada) y volver a
de texto, es habitual hablar primero de famosos parches de Paul C. Brown. activar la espera de entrada para, a con-
líneas (componente vertical) y después Nació cuando me dí cuenta de que curses tinuación, actualizar los paneles
de columnas (componente horizontal) no me actualizaba satisfactoriamente las llamando a showPanels(). Sin este pro-
en ese orden. Después de colocar la ventanas si no había una entrada de cedimiento, los paneles no se actualizan
www.linuxmagazine.com.es Número 01 35
DESARROLLO Interfaces
hasta una nueva entrada por parte del que acepta, además de una serie de que fuera iterando sobre la lista de argu-
usuario y no se mostrarán de motu pro- parámetros definidos, un número mentos hasta que o (a) se leyese hasta el
pio cosa como los títulos o el borde. En indefinido de otros parámetros. Hay número de argumentos preestablecido o
cuanto a drawFrame(), su nombre lo varias maneras de leer los parámetros (b) se llegase hasta el argumento que
dice todo: dibuja un marco alrededor de indefinidos a variables. Una sería la de fuese igual al argumento definido como
la ventana utilizando para ello la rutina pasar como argumento definido el el último. Ambos métodos ofenden mi
curses wborder() y los valores pre- número de argumentos indefinidos. Otra sentido de la estética de la progra-
definidos de curses para la barra vertical la de incluir como definido un argu- mación, ya que ¿qué pasa si ni el mismo
(ACS_VLINE), tanto para el borde mento que fuese igual al último de los programador sabe cuantos argumentos
izquierdo, como para el derecho; la barra argumentos indefinidos. En ambos casos van se indefinidos? Yo opto por el
horizontal (ACS_HLINE) para el borde crearíamos un bucle (en el primer caso método (c), que consiste en que todos
superior e inferior ; y los gráficos de las un bucle for y en el segundo uno while) los argumentos se vuelcan en una lista
esquinas ACS_ULCORNER (de tipo va_list) y se van
(esquina superior Listado 3: va.h leyendo e integrando en el
izquierdo), ACS_ argumento plantilla. Esto no
01 #include <stdlib.h>
URCORNER (esquina su- sería un problema si no fuera
02
perior derecho), ACS_ porque con curses, el uso de
03 #define makeString(return_String) \
LLCORNER (esquina infe- 04 { \
una cadena de longitud
rior izquierdo), ACS_ 05 char *fmt; \ indefinida (tipo char *cadena)
LRCORNER (esquina infe- 06 if ((fmt=(char*) genera un fallo de seg-
rior derecho). Por fin, el malloc(sizeof(char)*return_String.length()))==NULL)\ mentación. En concreto, si
método wGetch() se en- 07 printf("ERROR: Memoria insuficiente");\ utilizamos una cadena de lon-
carga de recoger las 08 else \ gitud indefinida *buf en un
entradas procedentes del 09 { \ programa C o C++ “normal”
teclado referidas a la ven- 10 strcpy(fmt,return_String.c_str()); \ (es decir, que no cargue libr-
tana para que puedan ser 11 va_list args; \ ería “raros” como curses) no
procesadas. 12 char *p; \ pasa nada:
13 int n, size=10; \
Parámetros 14 if((p = (char*) malloc(size)) == NULL)\ function ejemplo2U
indefinidos 15 printf("ERROR: Memoria insuficiente");\ (char *plant, ...)
Conviene explicar en un 16 else \ {
aparte lo referente a las 17 { \ char *buf;
funciones con parámetros 18 while(1) \ va_list args;
indefinidos. Estas fun- 19 { \ va_start(args, plant);
ciones permiten que 20 va_start(args,fmt); \ vsprintf(buf,plant,args);
funcionen, por ejemplo, 21 n=vsnprintf(p,size,fmt,args); \ va_end(args);
el socorrido printf() de C. 22 va_end(args); \ return(buf);
Si nos fijamos en como 23 if (n < size) \ }
funciona, si hacemos 24 { \
25 break; \ El código anterior funcionará
printf("Tengo %iU 26 } \ sin ningún problema. Pero con
muñeca vestida deU 27 else \ curses, si se utiliza una cadena
%s...",1,"azul"); 28 { \ de longitud indeterminada y
29 size = n+1; \ después se utiliza sprintf() o
devolverá la cadena 30 if((p = (char *) realloc(p,size)) == vsprinf() con una plantilla y
NULL)\
“Tengo 1 muñeca vestida varios argumentos, el resul-
31 { \
de azul...” y compro- tado es el dichoso error de
32 printf("ERROR: Memoria Insuficiente");\
bamos que a printf(), que fallo de segmentación, uno de
33 break; \
no es más que otra fun- los errores más irritantes que
34 } \
ción de las librerías tiene la insidiosa costumbre de
35 } \
estándar de C, puede aparecer en el momento de la
36 } \
recibir tantos parámetros ejecución, después de una
37 } \
como gustemos… siem- compilación exitosa. Otra pega
38 return_String=p; \
pre y cuando el primero un tanto engorrosa es que
39 free(p); \
sea el que indique el for- va_start() y va_end() han de
40 free(fmt); \
mato del mensaje a estar en la misma función que
41 } \
mostrar. Eso es por que 42 }
recibe los parámetros in-
printf() es una función definidos, por tanto veréis la
36 Número 01 www.linuxmagazine.com.es
Interfaces DESARROLLO
www.linuxmagazine.com.es Número 01 37
DESARROLLO Perl
38 Número 01 www.linuxmagazine.com.es
Perl DESARROLLO
esto algo muy poco habitual en un cio del campo dirección, si no que Trabajo Manual vs
programa de composición. El origen del indicamos la posición de la esquina Automatizado
sistema coordeandas es la esquina derecha inferior del bloque de texto. Esto La línea 23 interpreta cualquier línea que
inferior izquierda de la página. Los nos asegura que el bloque siempre comienza con el símbolo # y un espacio
valores positivos del eje x arrancan acabará en la misma posición al margen en blanco como comentarios. Esto es
desde la izquierda y se extienden hacia de las variables que usemos o la larga muy útil si solo queremos imprimir algu-
la derecha y los valores positivos de y que sea la dirección. nas entradas. Facilita muchísimo la tarea
van incrementando de valor de abajo En cuanto al programa, el código de poder “comentar” y excluir todas las
arriba, tal y como nos enseño nuestro ejemplo que se muestra en el listado 1 entradas que queramos evitar imprimir-
viejo maestro de matemáticas en nuestro define una constante Sender (línea 14). con el símbolo #. El comando split de la
colegio de secundaria. PostScript usa Ésta lee los datos de un archivo .csv e línea 24 divide líneas donde aparecen
puntos pica o PostScript, que miden imprime un sobre como los mostrados comas separadoras. map elimina las
aproximadamente 1/3 de milímetro. en las figuras 2 ó 3 para cada dirección comillas dobles. Como la sustitución
Como ejemplo de lo que se puede con- que encuentre. s/"//g; no devuelve una cadena como
seguir con PostScript, los siguientes resultado válido, $_; simplemente se
comandos imprimirán el nombre John Importación desde Windows añade.
Doe en el recuadro de la dirección de un $ADDR_CSV en la línea 13 especificamos La línea 27 crea un objeto
sobre: el nombre del archivo de direcciones que PostScript::File que usa la palabra clave
debe tener la misma estructura que el landscape para rotar el formato de la
0 setgray 401.95 156 moveto mostrado en la figura 2. El comando para página. reencode => 'ISOLatin1Encod-
/Helvetica-iso findfont enviar un archivo PostScript a nuestra ing' proporciona soporte para todos las
18 scalefont setfont impresora se define en la línea 17 caracteres Latin1. El formato del sobre se
(John Doe) show ($PRINT_CMD). Si deseamos hacer una fija en Envelope-DL. Si necesitamos un
prueba sin malgastar papel sustituiremos formato diferente para utilizar un sobre
Empezando en la esquina izquierda infe- "lpr" por "ghostview" para enviar sobres de distinto tamaño no tendremos
rior del sobre, nos iríamos casi 402 virtuales para que se visualicen en nues- ninguna dificultad para modificar el
puntos hacia la izquierda y 156 hacia tra pantalla. archivo. Un sobre DIN A6 tienen unas
arriba para imprimir las letras que ven El código de la línea 19 abre el archivo medidas aproximadas de 10.47 centímet-
entre los paréntesis en la fuente especifi- de direcciones y el bloque while que ros de alto por 14.81 centímetros de
cada (Helvetica-iso) y con el tamaño comienza en la línea 22 se repite con las ancho. Para que esto se aplique en nue-
especificado (18 puntos) y de izquierda a entradas que son analizadas usando stro porgrama, utilizaremos el siguiente
derecha del papel. expresiones regulares. En lugar de esta bloque de código:
Para empezar a programar con Post- técnica podríamos haber usado el
Script bajo Perl, CPAN proporciona los módulo CPAN Text::CSV_XS, aunque my $ps = new PostScript::File(
módulos PostScript::File y PostScript:: esto podría haber sido excesivo para las landscape => 1,
TextBlock para simplificar el asunto. El direcciones de nuestro ejemplo, pues son reencode => 'ISOLatin1Encoding',
primero sirve para insertar la cabecera extremadamente simples y no tienen width => cm(10.47),
PostScript de la siguiente manera: complicaciones como comillas o comas height => cm(14.81),
embebidas. );
%!PS-Adobe-3.0
www.linuxmagazine.com.es Número 01 39
DESARROLLO Perl
LISTADO 1: SOBRE
001 #!/usr/bin/perl 040 “Helveticaiso”, 10, 12); 076 text => $text,
002 ############################ 041 my ($code) = $b->Write($bw, 077 size => $size,
003 # sobre - Papel de impresión $bh, cm(2), 078 leading => $leading);
sobres 042 $ps->get_width() - cm(2)); 079
004 # Mike Schilli, 2003 043 $ps->add_to_page($code); 080 return(tb_width($text,
(m@perlmeister.com) 044 $font, $size),
005 ############################ 045 # Destinatario 081 tb_height($text, $leading),
006 use warnings; 046 my $to = “$first 082 $b);
007 use strict; $last\n$str\n\n$city\n”; 083 }
008 047 ($bw, $bh, $b) = 084
009 use PostScript::File; textbox($to, 085 ############################
010 use PostScript::TextBlock; 048 “Helveticaiso”, 18, 20); 086 sub cm {
011 use File::Temp qw(tempfile); 049 ($code) = $b->Write($bw, 087 ############################
012 $bh, 088 return int($_[0]*72/2.54);
013 my $ADDR_CSV = 050 $ps->get_height()- $bw - 089 }
“mailaddr.csv”; cm(2), 090
014 my $SENDER = q{Steven 051 $bh + cm(2)); 091 ############################
Sender, 052 $ps->add_to_page($code); 092 sub tb_width {
015 9 Sender Street, 053 093 ############################
016 San Francisco, CA 94107}; 054 # Imprimir a archivo 094 my($text, $font, $size)= @_;
017 my $PRINT_CMD = “lpr”; temporal 095
018 055 (my $base = $tmp_file) =~s/ 096 $font =~ s/-iso//;
019 open FILE, $ADDR_CSV or \.ps$//; 097
020 die “Cannot open $ADDR_CSV”; 056 $ps->output($base); 098 my $max_width = 0;
021 057 099
022 while(<FILE>) { 058 # Enviar a impresora 100 for(split /\n/, $text) {
023 next if /^\s*#/; 059 system(“$PRINT_CMD 101 s/[äÄöÖüÜß]/A/ig;
024 my @addr = split /,/, $_; $tmp_file”) and 102 my $w =
025 @addr = map { s/”//g; $_; } 060 die “$PRINT_CMD $tmp_file: 103 PostScript::Metrics::
@addr; $!”; stringwidth(
026 061 104 $_, $font, $size);
027 my $ps = PostScript::File- 062 # Borrar 105 $max_width = $w if $w >
>new( 063 unlink “$tmp_file” or $max_width;
028 landscape => 1, 064 die “Cannot unlink 106 }
029 reencode $tmp_file: $!”; 107
=>‘ISOLatin1Encoding’, 065 } 108 return $max_width;
030 paper => “Envelope-DL”, 066 109 }
031 ); 067 ############################ 110
032 068 sub textbox { 111 ############################
033 my ($tmp_fh, $tmp_file) = 069 ############################ 112 sub tb_height {
034 tempfile(SUFFIX => “.ps”); 070 my($text, $font, $size, 113 ############################
035 $leading) = @_; 114 my($text, $leading) = @_;
036 my($last, $first, $city, 071 115
$str) = @addr; 072 my $b = PostScript:: 116 my $lines = 1;
037 TextBlock->new(); 117 $lines++ for $text =~/\n/g;
038 # Remitente 073 118
039 my($bw, $bh, $b) = 074 $b->addText( 119 return $lines*$leading;
textbox($SENDER, 075 font => $font, 120 }
40 Número 01 www.linuxmagazine.com.es
Perl DESARROLLO
www.linuxmagazine.com.es Número 01 41
DESARROLLO Pear
Cobertura Total
Si se escribe código en un lenguaje de alto nivel, como PHP, se asegura su fun-
único servidor de bases de datos? ¿Qué pasa con las plataformas que no
L
a respuesta a esta preguntas está vidas sean más fáciles gracias a las
contenida en las palabras “API abstracciones. Cada función, expresión y
Genérica“. Haciendo uso de una API sentencia abstrae algún detalle especí-
genérica, nuestro código puede fun- fico del hardware del procesador al
cionar con diferentes servidores de bases programador por medio del lenguaje C. Aunque
de datos sin necesidad de tener que Esto se conoce como abstracción de bajo la may-
modificar los archivos de código fuente. nivel. oría de estos
Los desarrolladores de PHP son muy Otro ejemplo de abstracción se pro- parámetros son
conscientes de esta ventaja y, en los últi- duce cada vey que interactuamos con opcionales, la migración de código entre
mos años se han dirigido esfuerzos a una base de datos a través de cualquier bases de datos es aún más ardua. Toda
solventar la carencia de la que adolecía motor SQL. La programación de bases de conexión, consulta y manejo de errores
PHP en este área. Este mes, en nuestra datos por medio de SQL es una abstrac- debe ser reescrito para ajustarse a la
sección dedicada a PHP, Steven Goodwin ción de alto nivel. La base de datos (ya nueva base de datos cada vez que se
presenta PEAR:DB. sea MySQL, PostgreSQL u Oracle) puede desee utiliyar un sistema de almace-
funcionar de cualquier forma, ajustarse a namiento y su correspondiente motor
Arte Abstracto cualquier algoritmo y hacer uso de diferentes. Esto no sólo supone una
PEAR::DB es un módulo de PHP que per- cualquier archivo. Pero usando un modficiación en lo que se refiere al
mite el control de una base de datos sin lenguaje genérico (SQL) con el que nombre de la función sino que también
necesidad de especificar ningún servidor comunicarnos, no necesitamos preocu- cambia la estructura y el formato de los
de bases de datos en concreto. Esto sig- parnos más por los aspectos específicos. argumentos. Otro problema es que los
nifica que el mismo código se puede Al contrario, podemos dedicar nuestro códigos de error devueltos por el motor
utilizar para acceder a MySQL y Oracle, tiempo a tareas más importantes, como varían de sistema sitema, lo que hace
por poner un ejemplo. Así pues, ¿cómo crear consultas select e inner joins efi- que sean difíciles de interpretar. La solu-
funciona? Gracias a la abstracción, que cientes. ción a todos estos dilemas, ya la hemos
permite hacer una generalización de un Esta abstracción no se extiende a la mencionado, consiste en abstraer la fun-
sistema, o de una API, de modo que los forma en que programamos las bases de ción database_connect de la base de
detalles queden ocultos. La mayoría de datos, ya que cada una de ellas tiene su datos específica y usar una llamada a
nosotros usamos abstracciones (a propia API. Esto se ve en PHP, donde se una API genérica. Esto debe hacerse para
menudo sin darnos cuenta de ello). puede empezar un diálogo con una base cada función específica de la base de
Incluso los programadores de C, supues- de datos MySQL llamada fredbloggs datos. Desafortunadamente, si pre-
tamente los tipos más duros del mundo usando, tendemos crear la APi nosotros mismos,
del desarrollo software, hacen que sus esta tarea supone mucho trabajo
$db = Pero, al fin y al cabo, estamos
Acerca de Pear mysql_connect("localhost",U hablando de código libre, con una comu-
"myuser", "mypass"); nidad de desarrolladores muy activa, y
PEAR son las siglas de PHP Extension and
mysql_select_db("fredbloggs"); las buenas noticias son que alguien ya lo
Application Repository (aunque algunos
ha hecho por nosotros. Hay un par de
prefieren sustituir Application por Add-on) y
mientras que PostgreSQL necesita, APIs de bases de datos para PHP. El obje-
es una biblioteca de funciones de código
PHP, similar a CPAN de Perl. Además del tivo de este artículo es PEAR::DB, uno de
módulo para el manejo de bases de datos $db = los muchos módulos PEAR (ver cuadro
(DB), también hay código para el manejo de pg_connect("host=localhostU Acerca de PEAR) disponible en [1]. Está
HTML, autenticación y criptografía. dbname=fredbloggs user=myuserU bajo desarrollo constante e incluye a
password=mypass"); algunos miembros del equipo del núcleo
42 Número 01 www.linuxmagazine.com.es
Pear DESARROLLO
www.linuxmagazine.com.es Número 01 43
DESARROLLO Pear
específicos del servidor de base de datos dantes de desarrollo (para controlar la Entonces, tendremos que adaptar nues-
e incluye el tipo de base de datos (lla- cantidad de mensajes de depuración pro- tras funciones existentes para usar el
mado phptype, ej. mysql) y cualquier ducidos). Como estas opciones pueden nuevo objeto y sus funciones miembros
opción específica dada por dbsyntax. variar entre consultas específicas, no las asociadas. Esto no es difícil, ya que
Una lista de phptypes se muestra en la incluiremos dentro del DSN. Por el con- tienen nombres muy parecidas a las ver-
Tabla 2. El ejemplo citado de dbsyntax es trario crearemos un array detallando las siones originales de MySQL pero
el nombre de un driver específico opciones y lo pasaremos como argu- siguiendo las convenciones de nombres
cuando se usa una conexión ODBC (ej. mento a la función DB::connect de forma de PEAR. Así pues, mysql_query se con-
access, db2, mssql). Esto no es difícil de separada. vierte en query, por poner un ejemplo.
determinar, pero afecta más a los usuar- Las funciones básicas aparecen en el Lis-
ios de Windows que a nosotros, por ello // Recordar que estas variablesU tado 3.
no tenemos que profundizar más en este han de ser declaradas de formaU
tema. global Al grano
La segunda parte del DSN contiene $dsn = "$dbbackend://$dbuserU Como todas las peticiones a la base de
todo aquello que es dependiente de la @$dbhost/$dbname"; datos pasan por el controlador
base de datos, como el nombre del host, $options = array('debug' => 2); PEAR::DB, el código tiene que tener la
el puerto, el nombre del usuario y la con- $db =& DB::connect($dsn,U habilidad de cambiar y modificarse en
traseña. Como en la típica función $options); las peticiones. Esto se hace en aras de
mysql_connect, no todos los parámetros una mayor portabilidad. Y podemos
son obligatorios y pueden ser omitidos si Tenemos la posibilidad de realizar modi- darle más o menos opciones haciendo
no son necesarios. Por ejemplo: ficaciones en estos parámetros en uso del método setOption que ya hemos
cualquier momento con la utilización de visto con anterioridad. Este método per-
mysql://www-data@localhost/tv la siguiente función: mite establecer un número diferente de
opciones conforme a las necesidades que
Naturalmente, nuestro código final alma- $db->setOption('debug', 0); precisemos.
cenará todos estos parámetros en un Estas opciones normalmente están
archivo genérico dbase.inc, como se En el caso de que la conexión no falle para facilitar la portabilidad a costa del
mostró antes. El DSN no tiene por qué por algún motivo (echaremos un vistazo rendimiento, y dependen de una manera
ser especificado por una cadena. Tam- a las posibilidades del manejo de errores muy específica de cada aplicación. Otro
bién puede ser definido por un array más adelante), tendremos un objeto de uso al que se pueden aplicar es para per-
(como se muestra en el cuadro DSN base de datos llamado $db que se uti- mitir la coexistencia de código antiguo
como Array), haciendo ligeramente más lizará en todas las llamadas a esta base dentro de PEAR::DB. Dentro del
rápida la inicialización ya que no se ha de datos en concreto. Por ejemplo, para desarollo con bases de datos, la conevn-
de analizar la cadena. cerrar la conexión después de su uso, sión dicat que la mayoría de los nombres
El DSN nos permite especificar las haremos: de tablas aparecen en minúsculas. Si una
opciones de inicialización usando un aplicación está intentando obtener filas
método inspirado en una URL $db->disconnect(); usando una mezcla de mayúsculas y
?opcion1=valor1&opcion2=valor2. minúsculas, por ejemplo, entonces estos
Hay varias opciones disponibles, Tabla3: Soporte de provides nombres se convertirán de forma
incluyendo tanto características prácticas automática a minúsculas.
Cadena Funcionalidad
de conexión (uso de SSL) como ayu-
prepare Pre-comprueba la consulta SQL
$db->setOption('portability',U
pconnect Conexiones persistentes
Tabla 2: Bases de Datos transactions Activa el soporte de transac-
DB_PORTABILITY_LOWERCASE);
soportadas ciones
Nombre Palabra reservada limit Limita las consultas select Esto elimina las sorpresas que pueden
dBase dbase surgir cuando un trozo de código
FrontBase fbsql desconocido se ejecuta y da un error de
InterBase ibase Tabla 4: Diferencias entre ejecución. Otras opciones pueden verse
Informix ifx versiones de SQL en la Tabla 1.
Mini SQL msql Base de Dato Sintaxis SQL Los valores por defecto para estas
Microsoft SQL Server mssql DB2 select * from table fetch first 10 opciones tienen como objetivo mejorar
MySQL mysql rows only el rendimiento, pero está a la elección de
MySQL >=4.1 mysql4 Informix select first 10 * from table uno determinar cuales se deben estable-
Oracle 7/8/9 oci8 Microsoft SQL Server select top 10 * from table cer en la aplicación. Hay también
ODBC odbc MySQL select * from table limit 10 definiciones para DB_PORTABILITY_ALL
PostgreSQL pgsql Oracle 8i select * from (select * from y DB_PORTABILITY_NONE que permiten
SQLite sqlite table) where rownum <= 10
el activar todas las opciones o desacti-
Sybase sybase PostgreSQL select * from table limit 10
varlas respectivamente.
44 Número 01 www.linuxmagazine.com.es
Pear DESARROLLO
www.linuxmagazine.com.es Número 01 45
DESARROLLO Pear
46 Número 01 www.linuxmagazine.com.es
Pear DESARROLLO
Info que proporciona información sobre ciales, de manera que se pueda ejecutar
Example Interface Files cada columna del resultado, como es su múltiples veces con los datos diferentes
01 $tableinfo = nombre y tipo. Esto no es sólo útil mien- contenidos en dichas variables. Ver lis-
$result->tableInfo()); tras estamos depurando el programa, tado 6.
02 for($col=0; $col < sino incluso para crear aplicaciones de El método executeMultiple se evalúa a
$result->numCols(); $col++) { bases de datos generalizadas. Podemos la consulta SQL,
03 print colorear cada columna según su tipo, o
$tableinfo[$col]['name']." es resaltar algún campo clave. Para ver INSERT INTO channels (station,U
un ".$tableinfo[$col]['type']; como funciona esto, ver listado 4. name, channel) VALUES (6,
04 } Además del nombre y del tipo, se "Video",U
puede consultar la longitud de cada 0);
columna, flags (que indiquen si son INSERT INTO channels (station,U
ayudas para el manejo de datos, como claves primarias) y el nombre de la name, channel) VALUES (7,U
son numRows y numCols. tabla, usando la sintaxis apropiada. "PS2", 39);
Aunque la mayoría de las API soportan
print "La consulta selectU las consultas select, hay aún algunos executeMultiple se parará al primer error
produjo ".$result->numRows()U problemillas a solventar con otros tipos que ocurra. Para evitar esto, se necesi-
. " filas"; de consultas como los insert. Un método tará ejecutar cada consulta cada vez con
print "La consulta selectU interesante es affectedRows. Este el método execute. Por ejemplo,
produjo ".result->numCols()U método, como podrá se adivinar,
. " columnas"; devuelve el número de filas que han sido foreach ($data as $row) {
afectadas por una consulta insert, delete $db->execute($generic, $row);
Los resultados de estas consultas son o update. Hay también soporte para }
bastante autoexplicativas, y pueden ser generar IDs únicos usando funciones de
deducidas de la propia consulta select. secuencia, nextID, que es útil para Conivene siempre recordar que el array
Cuando la consulta es generada generar claves únicas, algo no soportado de datos empieza a indexarse desde cero.
automáticamente, podemos evitar tener de forma nativa en MySQL. Por ejemplo: En la mayoría de los casos se podrá ver
que contar las columnas manualmente. una mejora en la velocidad cuando
Podríamos usar estos valores para iterar // Obtención de un nuevo ID. varias entradas se introduzcan en la base
sobre los resultados. $id = $db->nextID('sequence'); U de datos de una vez. Este beneficio pre-
Hay también un método llamado table- // La secuencia será creada deU supone que la base de datos soporta esta
no existir característica de forma nativa, algo que
Listado 5 : assertExtension no siempre sucede.
Otra característica útil es el método de
01
if(DB::assertExtension("oci8")
clase (declarado static) assertExtension. Conclusión
Este método, siendo de clase, no Con PEAR::DB en el arsenal, se pueden
)
requiere de una instancia de la clase atacar la mayoría de las bases de datos,
02 print "Usamos Oracle si
base de datos para ser invocado e indi- sin tener que preocuparse de característi-
tenemos que...";
cará que características están incluidas cas no soportadas o de funciones no
03 if
en la instalación actual. En su forma disponibles. Usando las funciones y el
(DB::assertExtension("mysql"))
más útil, se puede determinar que bases amplio rango de métodos disponibles,
04 print "Usamos MySQL porque lo
de datos están instaladas en el sistema y podemos escribir en PHP buenas aplica-
entendemos mejor...";
seleccionar la más adecuada para usarla ciones para múltiples plataformas sin
en la aplicación. Ver Listado 5. preocuparnos de las minucias de la
Listado 6: Preparando una A pesar de su nombre, esto no es una batalla y así pues, podremos concen-
consulta aserción tal y como se suele entender trarnos en pensar en las estrategias para
tradicionalmente en programación, ya ganar la guerra. ■
01 $generic =
que no imprime ningún error y no tiene
$db->prepare("INSERT INTO
channels (station, name,
que cumplirse ninguna condición. Sim- INFO
plemente indica si una extensión existe o [1] PEAR: http://www.pear.php.net [2]
channel) VALUES (?, ?, ?)");
no. ADOdb: http://php.weblogs.com/adodb
02 $data = array (
Antes de terminar, mencionaremos de [3] Metabase: http://freshmeat.net/
03 array(6, "Video", 0),
pasada la pareja prepare y execute. pre- projects/metabase/ [4] PHPlib:http: //
04 array(7, "PS2", 39)
pare prepara (valga la redundancia) una phplib.sourceforge.net/ [6] Manula de
05 );
consulta para una ejecución repetida PEAR: http://www.pear.php.net/manual/
06 $res =
precompilándola en tokens. La consulta en/installation.cli.php [7] Como Escribir
$db->executeMultiple($generic, Código SQL Portable: http://php.weblogs.
estará preparada para admitir distinta
$data); com/portable_sql
información en unas variables espe-
www.linuxmagazine.com.es Número 01 47
DESARROLLO Python
Lenguaje Todoterreno
{
printf("Hola Mundo");
}
P
ara empezar, debemos saber por estén desarrolladas, o bien podremos Además se puede combinar con otros
qué Python es interesante, por qué compilarlo obteniendo un Bytecode al múltiples lenguajes de programación.
es tan famoso y cada vez es más igual que java. Es portable y nos permite Podemos mezclar en nuestras aplica-
utilizado. Mirando un poco por Internet, ejecutar nuestros programas en ciones Python y Java (Jython), por ejem-
se pueden encontrar multitud de aplica- cualquier sistema operativo y/o arquitec- plo. O Python con C/C++, lo cual hace
ciones que nos muestran un poco las tura teniendo previamente el intérprete que resulte mas potente si cabe. Python
capacidades de este lenguaje de alto instalado en nuestro ordenador. Realizar también cuenta con una amplia bibliote-
nivel. Primero, Python es un lenguaje un programa bajo este lenguaje, segura- ca de módulos que, al estilo de las bib-
orientado a objetos, esto no significa mente nos costaría entre la mitad o la liotecas en C, permiten un desarrollo
que lo sea exclusivamente, podemos uti- cuarta parte del tiempo que tardaríamos rápido y eficiente.
lizarlo como queramos, aunque es mas en desarrollar el mismo programa en C/ La sencillez de Python también ayuda
natural utilizar su implementación de la C++ o Java esto hace que sea muy a que los programas escritos en este
OOP. Además, es libre y gratuito pudi- potente. Veamos una breve comparativa lenguaje sean muy sintéticos. Como
endo descargar el intérprete y su código con otros lenguajes: podemos ver en la comparativa anterior,
fuente. Nos permite programarlo como Hola Mundo en C. la simplicidad llega a ser asombrosa y
script, lo que posibilita ver el código solo hemos escrito un simple ejemplo. Si
fuente de aquellas aplicaciones que así main () este programa ya supone ahorrarte unas
48 Número 01 www.linuxmagazine.com.es
Python DESARROLLO
líneas de código, con una sintaxis tan Esto es importante porque, mientras la En lo que se refiere al tema de los
sencilla y ordenada podemos imaginar norma en la mayoría de los lenguajes es bucles en Python es algo especial. Puede
que un programa de 1000 lineas en Java, dejar al programador la decisión de la que estemos acostumbrados a los bucles
en Python podrían ser alrededor de 250. manera en que deben ser formateados tipo C:
Muy bien, ¿pero como se usa? los archivos fuente, en Python es obliga-
torio seguir una metodología. En Python for(int a = 1; a < 10; a++)U
Uso todo se hace de una sola manera, es printf("%d\n",a);
Para empezar a matar el gusanillo, parte de su filosofía: Solo Hay Una
podemos ir haciendo algunas pruebas Manera de Hacer Las Cosas. Sin embargo, en Python, se toma un
interesantes. Vayamos al intérprete Comencemos con lo más simple en todo enfoque funcional prestado de otros
Python. Para esto, basta con escribir lenguaje, la asignación a una variable: lenguajes como Lisp o Haskell. Se utiliza
‘python’ en cualquier shell en cualquier una función especial llamada range que
versión de Linux que tenga instalado el cantidad = 166.386 genera una lista de números:
intérprete (si no lo tienes instalado,
hazte con la última versión en [1]). Lo primero que hay que apreciar es que range(1,10)
Entonces podemos probar el “Hello no se usa el ;. Esto es una característica
World”: de las muchas que hacen a Python difer- generará una ristra de números del 1 al
ente. Una instrucción acaba con el 9. De manera que podemos utilizar una
>>> print 'Hello World' retorno de carro, aunque el ; se puede función range para crear un bucle for en
Hello World utilizar cuando tenemos dos sentencias Python de la siguiente manera:
están en la misma línea:
Simple, ¿verdad?, ahora podemos probar for i in range(1,10)
a utilizar algunas variables: cantidad = 166.386; pesetasU
= 3000 Este bucle iteraría con i desde 1 a 9,
>>> suma = 15 + 16 ambos inclusive. La versión del bucle
>>> Como es un lenguaje dinámico no hay while en Python es más normal…
>>> print 'el resultado de laU que declarar el tipo de las variables, pero
suma es: ', suma una vez han sido definidas, lo que se while(<I><condición><I>)
el resultado de la suma es: 31 hace asignándoles un valor, éstas
guardan su tipo y no lo cambiarán a lo al igual que if…
Es recomendable trastear un poco con largo de la ejecución del programa.
esto, antes de ponernos a programar algo Tenemos a nuestra disposición los oper- if (<I><condición><I>)
más complicado, ya que de esta manera adores de siempre (+, -, *, /, etc) y una
es más sencillo hacerse con la sintaxis vez que sabemos como manejarlos y ¿Por qué no hay puestos cuerpos de
mucho mas rápidamente viendo los como asignar las variables, podemos ejemplo en esos bucles? Pues porque
resultados de cada prueba. realizar algo útil, pero lineal. Para que la ahora viene otra novedad. En Python no
Veamos ahora alguna propiedad ejecución no sea lineal necesitamos los se usan las famosas { y } de C, Java y
interesante de Python. Los ficheros en bucles y los condicionales. otros lenguajes. Se decidió, y no a todo
Python, no tienen por que llevar exten-
sión ninguna aunque seguramente quer-
remos tenerlos diferenciados del resto de
nuestros ficheros. Para ello se utiliza la
extensión .py o bien .pyw. Imaginemos
que tenemos un ejemplo ejemplo.py, al
permitirnos usarlo como script, podemos
indicarle la ruta del intérprete en el ini-
cio (#!/usr/bin/python en nuestro caso)
y dándole permisos de ejecución (en este
caso, chmod +x ejemplo.py) obtenemos
un programa listo para correr
./ejemplo.py.
#! /usr/bin/python
print 'Hello World'<C>
www.linuxmagazine.com.es Número 01 49
DESARROLLO Python
50 Número 01 www.linuxmagazine.com.es
Python DESARROLLO
www.linuxmagazine.com.es Número 01 51
DESARROLLO Python
sin sentido pero con estructuras que sí lo plo alguna noticia de política de un crearemos un diccionario de la siguiente
tengan. Puede parecer algo muy compli- diario digital o alguna parrafada de forma:
cado, pero no lo es tanto si usamos la cualquier weblog de moda. En nuestro
técnica de las cadenas de Markov. La caso, hemos escogido parte de la intro- >>> dict['La', 'gente'] =U
idea es comenzar con las dos primeras ducción a la obra maestra de la ['está']
palabras, ver si esa combinación se Literatura española, “El Ingenioso >>> dict['La',U
repite en el texto, hacer una lista con las Hidalgo, Don quijote de la Mancha”. 'gente'].append('opina')
palabras que siguen a alguna de las ocur- Este programa es especialmente intere- >>> dict['La', 'gente']
rencias de esa combinación, elegir una sante y didáctico porque nos permitirá ['está','opina']
palabra al azar de las que las suceda y utilizar las estructuras de datos que
reemplazar la primera por la segunda y Python implementa, en particular en los Vamos haciendo esto de manera sucesi-
la segunda por la palabra escogida. De diccionarios y las listas, para generar una va con todos los conjuntos de dos pal-
esta manera vamos generando un texto tabla donde los índice serán cadenas de abras adyacentes y obtendremos un dic-
que, aunque carece de sentido, normal- texto. cionario en el que muchas entradas ref-
mente se corresponde con la estructura Veamos como funciona. Lo primero es erenciarán a una lista de más de un ele-
de un texto normal aunque disparatado. ir introduciendo en el diccionario dos mento, cuantas más haya mejor.
Para hacer las pruebas es recomend- prefijos como índice y las palabras que La magia aparece cuando generamos
able conseguir un texto de gran tamaño, les siguen en el texto dentro de una lista el texto, puesto que lo que hacemos es
en textos pequeños no surtirá tanto efec- referenciada por ellos. Eso es un dic- comenzar por imprimir las dos primeras
to nuestro programa. En el proyecto cionario con dos palabras como índice palabras y cuando existan varias posibil-
Gütenberg podemos conseguir infinidad que contiene una lista: idades para esa combinación (como con
de textos clásicos de enorme tamaño en el ejemplo de ‘La’ y ‘gente’), escogere-
ASCII. Pero somos conocedores de que DICCIONARIO[ palabra 1,U mos aleatoriamente entre ellas.
no todo el mundo entiende el idioma palabra 2] -> LISTA[palabra,...] Imaginemos que escogemos ‘opina’,
anglosajón, así que en lugar del proyecto entonces escribimos ‘opina’ por la pan-
Gütenberg podemos coger cualquier O sea, si tenemos las palabras “La gente talla y buscamos en la entrada de dic-
texto que queramos modificar, por ejem- está … La gente opina” en nuestro texto, cionario ['gente','opina'] y así sucesiva-
mente, hasta llegar a no_palabra. Para
Listado 4: markov.py genera un texto no-tan-aleatorio entender mejor el funcionamiento del
01 #!/usr/local/bin/python 23 w1 = w2 programa, te recomendamos que copies
02 24 w2 = palabra
el código fuente y le pases unos ejemplos
(por ejemplo con cat texto.txt |
03 #Importamos dos módulos 25
./markov.py) para que veas los resulta-
04 26 # Fin de archivo
dos. Después podemos intentar realizar
05 import random 27 dict.setdefault((w1, w2), []
cambios en el programa, por ejemplo, en
06 #utilizado para escoger un ).append(no_palabra) lugar de utilizar 2 palabras como índice
elementos 28 del diccionario podemos probar con 1 o
07 #aleatorio de una lista 29 # GENERAMOS LA SALIDA con 3, y también con el tamaño del texto
08 30 w1 = no_palabra que se le pase. Con un poco de experi-
09 import sys 31 w2 = no_palabra mentación es posible conseguir resulta-
10 #permite acceder a algunas 32 dos muy interesantes. ■
clases 33 # puedes modificarlo
11 #utilizadas por el intérprete 34 max_palabras = 10000 RECURSOS
12 35 [1] Decargas de Python
13 no_palabra = "\n" 36 for i in xrange(max_palabras): http://www.python.org/download/
14 w1 = no_palabra 37 nueva_palabra =
15 w2 = no_palabra random.choice(dict[(w1, w2)])
José María Ruíz está realizando el
16 38 Proyecto Fín de Carrera de Ingeniería
17 # GENERAMOS EL DICCIONARIO 39 if nueva_palabra == Técnica en informática de Sistemas y
LOS AUTORES
52 Número 01 www.linuxmagazine.com.es
Charly ADMINISTRACIÓN
Monitor de Procesos
Simplemente no es factible estar pendiente de cada uno de los procesos. Esto
A
fortunado el administrador de sis- configure, make, make install, que un proceso, el demonio compilador
temas que reconoce un problema suponiendo que los módulos de Perl de C distribuido, Distccd en este ejem-
desde su inicio antes de que las Sys::Syslog, File::Basename, Getopt:: plo, utilice más de 5 mbytes de memoria
líneas de atención al cliente estén en Long and Config::IniFiles estén instala- principal. Mi nuevo fichero de configu-
serios problemas. dos. Instálalos de CPAN si te falta ración pswatch.conf será como sigue:
Esto es cierto en asuntos clave como alguno.
los requerimientos de memoria de fun- El siguiente paso es crear el fichero de [(/usr/sbin/)distccd?]
cionamiento de procesos de mi servidor. configuración. Para probar la her- trigger = $vsz > 5000
Se me ocurren numerosas cosas que ramienta, quiero que monitorice los # Output size in Kbytes
hacer mejor que estar pendiente de cada procesos mingetty y que anote en un action = echo "El procesoßß
proceso todo el día, a pesar de que el archivo de registro si ocurren más de tres $command está ocupando $vszßß
nombre de la aplicación parezca sugerir procesos. Mi fichero de configuración, KB de memoria"
lo contrario. /etc/pswatch.conf, para esta tarea tiene el
La solución es PS-Watcher [1], una siguiente aspecto: Podemos especificar cualquier otro
herramienta que analiza la tabla de pro- comando en lugar de echo. Por ejemplo,
cesos, filtrándola mediante la aplicación [(/sbin/)?mingetty?] puede desear mandar un correo elec-
de expresiones regulares almacenadas en trigger = $count > 3 trónico al administrador.
el fichero de configuración. Este fichero action = echo "$countßß Como PS-Watcher repite la alerta cada
también especifica como PS-Watcher $command procesos en ejecución" pocos minutos, en función del parámetro
debe reaccionar ante la ocurrencia o no -**sleep N, a pesar de que puede ha-
de determinadas expresiones. Puedo A continuación ejecutamos PS-Watcher cerlo, no sería una buena idea mandar
indicarle a PS-Watcher que termine un como un demonio en Segundo plano: mensajes al teléfono móvil, o al menos
proceso que utiliza demasiada RAM, no es una idea que yo considere opor-
monitorizando a la vez los procesos hijos ps-watcher --config /etc/ßß tuna. La página principal contiene
generados por otro. pswatch.conf --log /var/log/ßß numerosas pistas y ejemplos. ■
El programa, escrito en lenguaje Perl pswatch.logs
viene como tarball de 114 kbytes que se Recursos
instala mediante el proceso estándar de El demonio cuenta el número de proce-
[1] PS-Watcher:http://ps-watcher.
sos mingetty activos cada cinco minutos. sourceforge.net
SYSADMIN Si estos comienzan a dispararse, aparece
WikiMedia .....................................54 un mensaje del estilo de “4 procesos
mingetty en ejecución” en /var/log/ Charly Kühnast es un
Vemos como se comparte conociemientos administrador de sis-
pswatch. Si es necesario, se puede incre-
con el motor wiki de la Wikipedia temas bajo entorno
mentar el intervalo por defecto desde Linux en el centro de
EL AUTOR
TLS sobre SMTP ...........................60 cinco minutos a 15 minutos especifi- datos de Moers, cerca
La solución inteligente para la encriptación cando el comando -sleep 900. del Rin, el famoso río
de correo Alemán. Sus tareas
Creciendo Juntos incluyen asegurar la
Syslog ...............................................62 seguridad y disponibilidad del cortafue-
La herramienta fuente de información del Veamos un ejemplo de una aplicación gos y el mantenimiento del DMZ (zona
adminitrador de sistemas más práctica. Quiero que PS-Watch desmilitarizada).
anote en un archivo de registro cada vez
www.linuxmagazine.com.es Número 01 53
ADMINISTRACIÓN Wikipedia
Edición Colectiva
La enciclopedia libre Wikipedia usa el
y llena de potencia.
W
iki, la palabra de moda en recopilar ejemplos de tareas comunes de el navegador. Los corchetes era todo lo
todos los medios, significa programación entre un grupo de desar- que se necesitaba para realizar un enlace
rápido en hawaiano y la tec- rolladores, los wikis se han establecido con una cadena de texto dentro. Si la
nología wiki basada en web se ha como una manera de colaborar en red página ya existía, el enlace se crea; si no,
establecido de manera extraordinaria- casi universal. La idea de Cunningham se facilita el acceso al usuario a una caja
mente rápida. Desde que Ward era sencilla: desarrollar un motor qur de edición donde podía crear una nueva
Cunningham tuvo la idea en 1995, cuan- permitiese modificar cada página wiki, página con el encabezamiento adecuado
do estaba buscando un método para un HTML generado dinámicamente, en (ver figura 1). Una sintaxis fácil y com-
prensible aligera el trabajo de formateo.
Un viaje al mundo de los wikis Tecleando un asterisco al comienzo de
Aunque se desarrollo especialmente para la proyecto Wikibooks en http://www. una linea creamos un listado; el texto
Wikipedia, Mediawiki no se limita a las enci- wikibooks.org no está relacionado con la enmarcado entre signos de igual, se con-
clopedias. Además de la Wikipedia, la comu- Wikipedia en en lo que a contenidos se vierten en un encabezado. Actualmente
nidad Wikipedia lanzo el Wikcionario refiere, pero proporciona material de hay mas de 100 motores wiki [1].
(Wiktionary) http://www.wiktionary.org en enseñanza libre para asuntos diversos. El Mediawiki [2] es un ejemplo muy popu-
diciembre del 2002. Este diccionario propor- proyecto puede convertirse en un archivo
lar. Suministra la tecnología subyacente
ciona una definición inglesa y la traducción a central para planes de lecciones para la
un cierto número de lenguajes para cada pal- enseñanza universitaria. para la enciclopedia Copyleft, Wikipedia,
abra. El modelo wiki es ideal para este tipo de el modelo a imitar para la mayoría de
Enciclopedia de Propaganda
tareas ya que permite a usuarios de todo el otros wikis (vea el cuadro “Un viaje al
Una lista de los Mediawikis esta disponible
mundo proporcionar las traducciones. mundo de los wikis”). En su primer año,
en Wikipedia [10]. Algunos notorios ejemplos
Citas y libros de texto de la enciclopedia de propaganda son, Wikipedia uso usemod wiki [3], que esta
Wikiquote http://www.wikiquote.org es una Disinfopedia http://www.disinfopedia.org. El escrito en Perl. Pero la tarea demostró
colección por categorías de frases celebres coautor de Mediawiki Evan Prodromou tiene ser un desafío excesivo para usemod,
(citas),Wikisource http://www.wikisource.org en marcha una guia de viajes llamada que amenazo con colapsarse bajo la
añade material de investigación original Wikitravel en http://www.wikitravel.org, y el carga de miles de artículos y visitantes.
para complementar la Wikipedia. El material autor de la base de conocimiento sobre soft-
Esto llevo a los wikipedistas a desarrollar
pertenece tanto al dominio publico, como ware de fuente abierta, Openfacts esta
obras publicadas bajo licencias libres. El disponible en http://openfacts.berlios.de/. el motor Mediawiki en PHP, apoyado por
una base de datos MySQL. La habili-
54 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN
Selección de lenguajes
Wikipedia permite mas de 50 lenguajes.
Es uno de los wikis mas ampliamente
traducidos. Esto nos permitirá crear un
wiki en árabe, chino, japones, hebreo,
hindú, ruso o vietnamita, incluyendo el
soporte de Unicode. Para usar estos
lenguajes el operador del wiki simple-
mente necesita configurar las variables
$wgInputEncoding y $wgOutputEncoding
a UTF-8. El guión de instalación crea 3
usuarios MySQL diferenciados y con dis-
tintas funciones. A cada uno de estos
usuarios se les asigna privilegios de base
de datos. Mediawiki utiliza la cuenta de
usuario $wgDB para las operaciones nor-
males de base de datos, mientras que el
usuario SQL $wgDBsqluser solamente
tiene privilegio de lectura. Esta cuenta
se usa para una página especial que
permite a los operadores del sistema
Figura 1: La ventana de edición de Mediawiki tiene una barra de herramientas Javascript para ayudar a (sysops) realizar consultas SQL, para,
los principiantes con las tareas de formateo. Los corchetes dobles indican un enlace a otra página. por ejemplo, localizar y dar la bien-
venida a los usuarios que se han regis-
dades de PHP son útiles si se necesita el toolkit Imagemagick, o añadir la trado recientemente. El operador del
configurar y modificar un wiki. Pero biblioteca gd desde la versión actual wiki también puede añadir la cuenta
aunque no se sepa PHP, Mediawiki nos de PHP. Imagemagick permite muchos de usuario de administrador MySQL
permitirá configurar un wiki que fun- mas formatos de archivo que gd. $wgDBadminuser y poner contraseña al
ciona correctamente y que sea fácil de El script install.php en el directorio raíz archivo AdminSettings.php. Esta cuenta
usar. del programa comenzará la instalación. tiene privilegio de escritura y es usada
Pero antes de instalar, necesitara ejecu- por los guiones para tareas de insta-
Estable o experimental tar algunos tareas de configuración. lación y mantenimiento. Para instalar el
Mediawiki, como casi todos los proyec- El administrador debe copiar los ejemp- wiki, hay asegurarse de ser root y teclear
tos de código abierto, está disponible en los de configuración, LocalSettings.sam- php install.php. Algunas distribuciones
2 sabores. La versión estable está ple y AdminSettings.sample, a Local llaman al interprete de ordenes php4
disponible como descarga desde la pági- Settings.php y AdminSettings.php. El antes que php. Entre otras cosas, el
na de inicio en [2]. La versión en desar- cuadro 1 muestra las variables Local guión nos pedirá la contraseña del
rollo puede funcionar, pero contiene fun- Settings.php que deben ser configu- administrador (root) de MySQL y creará
ciones experimentales y puede plantear radas. la base de datos, las tablas y los usuarios
problemas de estabilidad. Se puede
descargar con CVS:
cvs -d:pserver:anonymous@cvs.ßß
sourceforge.net:/cvsroot/ßß
wikipedia login
cvs -z3 -d:pserver:anonymous@ßß
cvs.sourceforge.net:/cvsroot/ßß
wikipedia co phase3
www.linuxmagazine.com.es Número 01 55
ADMINISTRACIÓN Wikipedia
AddType
application/x-httpd-phpßß
.php .phtml
<Directory Figura 3: El modo de vista diff resalta las diferencias entre dos versiones, mostrando que se ha modifi-
"/path/to/ßßuploaddirectory"> cado y borrado. Los operadores (Sysops) pueden apuntar y hacer clic para restablecer las versiones
AllowOverride None previas.
AddType text/plain .htmlßß
.htm .shtml los enlaces a ./LocalSettings.php en los base de datos que ya existe,debemos vig-
php_admin_flag engine off archivos phtml con el enlace a ilar que el nombre de la tabla no entre en
</Directory> LocalSettings.php y añadimos la nueva conflicto con tablas ya existentes, ya que
ruta al include_path en el archivo Mediawiki no utiliza un prefijo y se
Necesitamos habilitar algunas variables php.ini. Hay que notar que en la actual podrían sobreescribir base de datos que
globales para el directorio de guiones. versión inestable, que para cuando esto ya tuviéramos. Importaremos las tablas
Debemos asegurarnos de que la configu- salga al quisocos, será la estable, los desde tables.sql e indexes.sql en el direc-
ración de las directrices del directorio archivos .phtml están desaprobados. Si torio de mantenimiento:
php_value register_globals sea 1. Como tarbajamos con la última versión y este
alternativa, podemos modificar el archi- es el caos, copiaremos index.php y redi- mysql -u root -p databasenameßß
vo php.ini, el cual suele residir en /etc o rect.php al nuevo directorio del servidor < filename,sql
en /etc/php4. web y copiaremos el resto de ficheros
.php a un directorio seguro desde el que Necesitaremos un conjunto mínimo de
Consolidación se puedan añadir. configuraciones en LocalSettings.php;
El guión de instalación copia todos los omita el usuario SQL e ignore
archivos PHP al directorio del servidor Instalación manual AdminSettings.php. Por supuesto que
web. Y esto es una de las cosas que más Si no se tiene acceso de administrador debe disponer de un usuario principal de
hay que vigilar, ya que cuantos mas (root) al servidor, o si falla el guión de la base de datos. Copie cualquier archivo
guiones con acceso externo tengamos. , instalación, podemos instalar Mediawiki .php y .phtml de los directorios includes,
mayor sera el riesgo de que un atacante manualmente. El primer paso es crear languages, stylesheets e images al direc-
pueda conseguir acceso a las funciones una base de datos. Si utilizamos una torio principal del servidor. Puede ejecu-
internas. Esto es particularmente im-
portante para register_globals, como Tabla 1: Configuración Básica
parámetros de URL que le autorizan a Variable Entorno local.
configurar variables de guiones internos. $IP Ruta local en el servidor donde esta copiando el wiki,por ejemplo >c>/var/www/wiki
Solo son realmente importantes los $wgServer Elemento de dirección del servidor antes de la primera barra,por ejemplo http://www.
archivos que puedan estar almacenados mywiki.com
en el directorio del servidor Web, esto es, $wgScriptPath Subdirectorio con los archivos PHP,por ejemplo wiki; dejaremos esto en blanco (“”””) si
los archivos están en el directorio principal
cualquier cosa terminado con .phtml,
$wgEmergencyContact Dirección de email del administrador que se mostrará en caso de problemas
imágenes y hojas de estilo. Lo mejor es
$wgDBserver Nombre de la base de datos MySQL
mover cualquier archivo terminado en
$wgDBuser y $wgDBpassword Usuarioa MySQL para el acceso normal a la base de datos
.php a un directorio distinto de document
$wgDBsqluser y $wgDBsqlpassword Usuario MySQL para consultas SQL vía interfaz Web; solo tiene acceso de lectura
root después de la instalación. Después
$wgLanguageCode Código de dos letras para el idioma a usar,por ejemplo es para español
de mover los archivos, reemplazaremos
56 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN
tar en su navegador el archivo un usuario en sysop, developer o editor, usuarios polémicos y tenaces bloqueán-
wiki.phtml con la ruta elegida en el paso por ejemplo: doles sus direcciones IP. Desafortuna-
anterior para acceder a la página del damente, los usuarios no registrados con
recién instalado Mediawiki. De un vista- USE Databasename; conexiones telefónicas temporales (dial-
zo al entorno y pruebe las características UPDATE SET user_rights='sysop' U up) cambian constantemente sus IPs.
del software (mire el cuadro Mediawiki WHERE user_name='nombreusuario'; Por esta razón, una IP se bloqueará, de
101). Si el servido web no reconoce manera predeterminada, durante sola-
phtml, renombre el archivo index.php. La versión de desarrollo ahora tiene un mente 24 horas (opción $wgIPBlock
En ese caso también necesitara editar las tipo de usuario bureaucrat. Los Expiration). En general, la desfiguración
variables $wgScript y $wgRedirectScript. burócratas usan una página especial es una cuestión sobrestimada. Las cues-
Hay un ejemplo en DefaultSettings.php. para designar otros usuarios como oper- tiones sociales son más espinosas ¿Que
adores (sysops). Para hacer esto, el tipo de páginas y que tipo de conducta
Privilegios de usuario usuario necesita privilegios de operador permitirá el wiki? Definitivamente los
La mayoría de los wikis permiten a los y burócrata. Un historial de cambios nos operadores tienen la necesidad de con-
usuarios anónimos editar sus páginas. permite supervisar los últimos acontec- vertir algunas de estas cuestiones a
Esto plantea la cuestión acerca de como imientos en nuestro wiki. Mediawiki políticas de uso. El operador del wiki
el operador del wiki maneja el contenido facilita una funcionalidad diff que resalta deberá definir cuidadosamente las
indeseable o incluso la desfiguración. las diferencias entre dos revisiones (ver opciones predeterminadas,en la estruc-
Mediawiki tiene unos cuantos mecanis- la Figura 3). El historial de cambios tura $wgDefaultUserOptionsEn dentro
mos de defensa. Puede restringir la lec- graba las modificaciones en una página del archivo Language.php o sus equiva-
tura o edición de contenidos a grupos de para volver directamente a la versión lentes locales. Opciones tales como
usuarios específicos. Los indicadores original. El historial de versiones nos quickbar (0 = sin barra de navegación ,
$wgWhitelistEdit y $wgWhitelistRead en permite recargar versiones previas y sal- 1 = barra de navegación a la izquierda,
LocalSettings.php le ayudaran a realizar- varlas de nuevo, si fuese necesario. Por 2 = a la derecha) son importantes. edi-
lo de esa manera. La estructura (array) ultimo, los usuarios tienen la función tondblclick abrirá la ventana de edición
$wgWhitelistAccount define los grupos User contributions que les permite ver cuando se hacer doble clic sobre la pági-
que tienen accesos de lectura o escritura: todo el contenido creado por un usuario na. showtoc genera una tabla de con-
especifico. Los operadores pueden tenidos por cada página que tenga mas
$wgWhitelistAccount=array(U" deshacer entradas desde esta lista, per- de tres encabezados y showtoolbar
user" => 0, "sysop" => 1, U mitiéndoles la reparación de desfigura- habilita la caja de herramientas de
"developer" => 1) ciones en cuestión de segundos. Si se Javascript en la ventana de edición (mire
origina una controversia sobre el con- la Figura 1). La opción editsection pre-
Estos ajustes restringen las modifica- tenido de una página, el operador puede senta un enlace Edit junto a cada
ciones a operadores (sysops) y desarrol- temporalmente proteger la página. Los encabezamiento. Esto permite la edición
ladores. Lo siguiente añadirá un nuevo administradores pueden censurar a los directa de una sección especifica y es
usuario llamado editor: particularmente
cómodo para páginas
$wgWhitelistAccountU largas, reduciendo la
=array("editor" =>U necesidad de navegar
1,"user" => 0U por la ventana de edi-
"sysop" => 1,U ción. Por el contrario
"developer" => 1) los enlaces de este
tipo pueden estropear
Habiendo creado el tipo de su diseño. Si se
usuario, el operador puede habilita la opción
proseguir asignando privi- editsectiononrightclick,
legios de lectura o escritu- hacer clic con el
ra mediante la configu- botón derecho sobre
ración del valor en el un encabezado tendrá
campo de la base de datos el mismo efecto. Esto
user_rights del usuario a provocó alguna vez el
editor. En el momento de fallo de Konqueror en
escribir esto, Mediawiki nuestro laboratorio.
no posee una herramienta
genérica de gestión de Espacio para los
privilegios, esto significa nombres
que hay que formular con- Figura 4: Viendo los cambios recientes en el wiki con la piel CologneBlue. El enlace Recent Wikipedia hizo frente
sultas SQL para convertir a Changes dirige directamente al modo de vista diff de la página actual. rápidamente a la
www.linuxmagazine.com.es Número 01 57
ADMINISTRACIÓN Wikipedia
cuestión de separar información sobre el este espacio de nombres supone el para editar todos los elementos de texto
wiki, políticas o discusiones sobre los valor de la variable $wgSitename en del software dentro del wiki, ayudando
artículos de la enciclopedia. Por ejemplo, DefaultSettings.php. La FAQ de la Wiki- de ese modo a las traducciones. Los
hay un articulo sobre las FAQs y una FAQ pedia esta almacenada en [[Wikipedia: nombres de las variables de texto se
oficial de Wikipedia. Para separar acer- FAQ]]. Esto resuelve el conflicto referido almacenan en Language.php.
tadamente las dos, Mediawiki introduce anteriormente, pero hace las cosas difí-
los denominados espacios de nombres ciles para los sitios pequeños. Si, por Atajos para bloques de texto
(namespaces), los cuales son defini- ejemplo, se borran los espacios de El contenido de cualquier página creada
ciones en Language.php o su traducción nombres 4 y 5 de la estructura en este espacio de nombres puede ser
local. Por omisión, estos son el espacio $wgNamespaceNamesDe en el archivo incrustado en cualquier punto dentro del
de nombres principal, el espacio de nom- LanguageDe.php, también serán retira- wiki. Por ejemplo, para proporcionar un
bres de debates múltiples, un espacio de dos del interfaz de usuario. Una carac- texto de bienvenida predeterminado,
nombre para imágenes, un espacio de terística que Mediawiki mantiene creamos una página llamada MediaWiki:
nombres para páginas de usuario, un después de la migración desde usemod greeting. {{msg:greeting}} desplegará el
espacio de nombres especial y un espa- es la subpágina. Por ejemplo, un articulo contenido de la página en otras páginas.
cio de nombres Mediawiki muy especial. llamado Linux puede tener una subpági- Cualquier cambio en la página
Los artículos fuera del espacio de nom- na llamada Linux/Consejos Kernel. La Mediawiki es inmediatamente aplicado a
bres principal siempre tendrán un prefi- página Consejos Kernel tendrá automáti- cualquier otra página que utilice
jo. [[Discussion:Mainpage]] apunta hacia camente un enlace de vuelta a Linux. {{msg}} para su acceso. La orden
la página de debate al que pertenece a la Las subpáginas pueden ser habilitadas {{subst:greeting}} añade el texto en la
página principal, [[User:Troll]] es la pági- individualmente para un espacio de localización actual pero sin la caracterís-
na personal perteneciente al usuario nombres mediante la configuración de la tica de la actualización automática.
Troll. Si no se ha propuesto poner en variable $wgNamepacesWithSubpages. Observese que en las páginas del espacio
funcionamiento un wiki gigantesco, El espacio de nombres Mediawiki se de nombres Mediawiki no están permiti-
podemos ahorrarnos al problema del habilita a través de $wgUseDatabase dos los caracteres no estándar o espacios
meta espacio de nombres. Por omisión, Messages, que autoriza a los usuarios en sus cabeceras. Como cada texto del
58 Número 01 www.linuxmagazine.com.es
Wikipedia ADMINISTRACIÓN
Próximamente: Wikitex
Aún no está en la versión oficial, pero
véase [7] para un primer vistazo a la
interfaz Wikitex escrita por Peter
Danenberg. Esta permitirá a Mediawiki
hacer uso de numerosos motores en el
futuro. Por ejemplo GNU Lilypond [8], el
cual traduce una simple sintaxis en una
elegante hoja pautada de música, varios
macros Latex que generan formulaciones
matemáticas y químicas o tableros de
Figura 5: El interfaz Wikitex permite a Mediawiki mostrar partituras de música, formulación químicas y ajedrez que ilustran el discurrir de una
matemáticas o incluso juegos de ajedrez. Haciendo clic sobre las notas se generara automáticamente partida (ver la Figura 5). Al principio
un archivo midi. puede que los nuevos usuarios encuen-
tren la mayoría de las características algo
programa se recupera desde la base de tiempo tales como una lista de los artícu- confusas. En el caso de tener alguna pre-
datos, se puede usar esta característica los mas largos. Sin duda alguna es lógico gunta o para resolver dudas, la comu-
solamente en combinación con mem- habilitar la opción de cache de página, nidad Mediawiki, que es tan solícita
cached (descrita más adelante). $wgUseFileCache. Esto servirá páginas como lo son la mayoría de las comu-
HTML estáticas a los usuarios anónimos nidades de desarrollo de pryectos de
Manejo de un wiki y de este modo facilitará un considerable software libre, estará encantada de echar
Una vez configurado y en marcha, aumento del rendimiento. Si uno está una mano, por tanto, se recomienda
Mediwiki da pocos quebraderos de dispuesto a dedicar algo de tiempo y aprovechar los canales de las que se
cabey. Ejecutar Mediawiki durante un esfuerzo en la puesta a punto de su wiki, dispone. Conviene apuntarse a la lista de
largo periodo de tiempo es de hecho con- puede intentar memcached [6] y zlib. correo mediawiki-l [9] y también visitar
siderablemente menos estresante que Memcached reduce los accesos a la base el canal de IRC #mediawiki en irc.freen-
lograr instalarlo adecuadamente. En un de datos mediante el almacenamiento ode.net. ■
mundo perfecto, el operador del wiki temporal de los datos de usuario y la
solamente necesitará asignar privilegios información vinculada. Zlib comprime INFO
de operador (sysop) y desarrollador. Para las revisiones de páginas antiguas. Esta [1] Lista maestra de motores wiki: http://c2.
hacer una copia de seguridad de la base opción supone que se ha compilado PHP com/cgi/wiki?WikiEngines
de datos se aconseja mysqldump o con las opciones --enable-sockets y --with [2] Mediawiki: http://www.mediawiki.org
phpMyAdmin. Cuando importamos -zlib. Podemos escribir <?phpinfo()?>
[3] Wiki Usemod: http://www.usemod.com
grandes conjuntos de datos tales como en una página PHP de prueba para
[4] Manual Mediawiki: http://meta.
artículos de la Wikipedia en [5], eje- averiguarlo.
wikipedia.org/wiki/
cutaremos el guión maintenance/rebuil- MediaWiki_User%27s_Guide
dall.php en el directorio de instalación. Memcached
[5] Volcado SQL de la Wikipedia: http://
Como próximo paso, para evitar pregun- El demonio deberá ejecutarse en segun- download.wikimedia.org
tas del tipo Que enlazo aquí y otras do plano con las opciones -d -l 127.0.0.1
[6] Memcached: http://www.danga.com/
dudas por el estilo. Mediawiki tiene -p 11000 -m 64 habilitadas. Esto asigna memcached
un número de opciones de puesta a 64 MBytes de RAM como memoria cache
[7] Prueba de Wikitex: http://wikisophia.org
punto, hay ejemplos en DefaultSettings. para aplicaciones locales. Memcached
[8] Lilypond: http://lilypond.org/web
php. Asegurese que copia las modifica- no facilita características de autentifi-
ciones en LocalSettings.php para evitar cación. Los usuario locales tienen acceso [9] Lista de correo del proyecto: http://mail.
wikipedia.org/mailman/listinfo/
sobreescribirlas durante una actual- sin restricciones. Conviene evitar la eje-
mediawiki-l
ización. Mediawiki tiene la opción cución de memcached en un sistema con
[10]Proyectos que usan Mediawiki: http://
$wgMiserMode para wikis de gran exten- múltiples usuarios locales. Sin un fire-
meta.wikimedia.org/wiki/
sión. Habilitando la opción se desactivan wall o el parametro -l, los usuarios exter- Sites_using_MediaWiki
las consultas que consumen mucho nos pueden acceder al servidor y cap-
www.linuxmagazine.com.es Número 01 59
ADMINISTRACIÓN SMTP
Agentes Secretos
L
os mensajes de correo electrónico el uso de sólidos métodos de
son como una postal - cualquier encriptación se convierte en una prueba Esta solución ofrece adicionalmente la
“cartero” los puede leer. Si bien la de definitiva en contra de todos esos ventaja de ser libre de mantenimiento
mayoría de los administradores de sis- “criminales” que demandan confiden- tras la configuración inicial del servidor.
temas escrupulosos evitarán leer el cialidad en sus mensajes de correo. Si tanto el cliente y el servidor de correo
correo privado de otras personas, al Sine embargo, cada vez más provee- “hablan” TLS, ellos negociarán un inter-
menos en teoría, los privilegiados posee- dores de correo están intercambiando el cambio seguro sin necesidad de
dores de la contraseña root, autorizados corre por medio túneles TSL (Transport intervención exterior. Para permitir esto,
o no (pienso en los hackers), de una Layer Security - Seguridad de la Capa de ambos ordenadores intercambian certifi-
máquina usada para remitir o almacenar Transporte) encriptados en lugar de al cados durante el saludo inicial
correo tendrán acceso a los mensajes. descubierto, previniendo por tanto facilitando la identificación mutua. Es
Los servicios secretos de todo el mundo ataques de búsqueda. Hay otras razones como si cada ordenador le muestra su
aclaman exultantes a los padres (y para seguir la tendencia de alejarse de pasaporte al otro. Por motivos prácticos,
madres) fundadores de Internet, que los mensajes transmitidos en texto libre, solo será necesario que se autentifique el
fueron tan confiados que concibieron la usando SSH en lugar del venerable pro- receptor principal en el entorno del
transmisión de todo tipo de datos a tocolo telnet o el protocolo https para correo, no habiendo diferencia entre si el
través de la red de forma transparente. páginas web que piden datos personales. receptor es otro servidor de correo o el
Encriptar, por ejemplo con GnuPG y La introducción de una política que programa de correo del usuario. Como el
PGP, es el equivalente electrónico de un impone el uso de correo encriptado en cliente ya puede confiar en el servidor,
sobre en el mundo real. Sin embargo, los una empresa con distintas sedes puede las dos máquinas acuerdan un algoritmo
métodos anteriores plantean un prob- provocar ciertos inconvenientes: ¿Qué y una llave secreta de encriptación se uti-
lema: si un país niega a sus ciudadanos ocurre si una tercera persona necesita lizarán para codificar el tráfico
el acceso a métodos seguros de acceder al correo posteriormente? ¿Qué resultante.
encriptación - típicamente argumen- ocurre con las claves utilizadas por una
tando que es en ayuda de la lucha contra persona de la empresa que deja de traba- GLOSARIO
el crimen - el protocolo de transporte de jar en ella, o con su correspondencia
https: Si bien puede que sorprenda saberlo,
correo, SMTP (Protocolo de Transporte encriptada? Como la encriptación nor- pero https no es un protocolo independiente.
de Correo Simple), se convertirá en un malmente solo se utiliza para prevenir La comunicación entre buscadores y servi-
delator. El contenido de mensajes encrip- que datos sensibles crucen la red al des- dores en sitios Web que usan URLs https sigue
tados con PGP o GnuPG descubiertos en cubierto, un sistema de encriptación que estando basada en el “Hypertext Transfer
la red no pueden ser leídos, pero funcione en el servidor y que sea trans- Protocol”HTTP (Protocolo de Trasferencia de
podemos observar cuales han sido parente para los usuarios, como SMTP/ Hiper Texto), pero encapsulado en un túnel
TLS.
encriptados y cuales no. De esta forma, TLS es una buena solución.
60 Número 01 www.linuxmagazine.com.es
SMTP ADMINISTRACIÓN
www.linuxmagazine.com.es Número 01 61
ADMINISTRACIÓN Syslog
La Caja Negra
El registro de los eventos del sistema es un reto para cualquier administrador. Y
CHRISTIAN SCHMITZ
los más difundidos es Syslog-NG (Syslog espiar los mensajes y conseguir el acceso
de próxima generación) que se lanzó a la información privilegiada.
bajo licencia GPL. Muchas distribu- • Configuración poco flexible
ciones Linux ya han adoptado Syslog- La configuración de Syslog usa un sis-
NG. Otras alternativas disponibles son tema poco flexible con 20 posibles orí-
Reliable Syslog, en su primera imple- genes y 8 prioridades. Esto puede ser un
mentación, SDSC Secure Syslog [5] y obstáculo en grandes redes o para servi-
Syslog Sign. El último todavía está en dores con múltiples servicios.
fase beta. • Uso inconsistente de orígenes y pri-
oridades
Problemas con BSD Syslog Para la mayoría de las aplicaciones los
S
yslog permite a los administradores El servicio syslog tradicional se presentó administradores no tienen una opción
obtener información de registro en en Septiembre de 1983 en la Universidad para administrar mensajes bajo un ori-
sus sistemas de manera uniforme de California (Berkeley). No tenía docu- gen específico. En algunos casos se
para toda la red. Realizando la tarea de mentos de diseño y el software estaba puede establecer una opción cuando se
guardar, analizar y procesar los archivos pobremente documentado. Pasados 18 compila la aplicación, pero en tiempo de
de registro fácilmente, pero lo que la años BSD Syslog se terminó de docu- ejecución hay realmente pocas opciones
gente espera de los registros del sistema mentar en el RFC 3164 [7]. disponibles.
ha cambiado en los últimos años y el ser- Syslog se ha convertido en un estándar • No registra el origen de la fuente
vicio Syslog tradicional simplemente no de facto. El servicio es fácil de configu- Cuando un mensaje pasa por distintos
lo puede ofrecer. Syslog-NG [1] cubre rar, usando un fichero de configuración servidores de registro es imposible des-
este hueco. central llamado syslog.conf. Pero hay cubrir la fuente del mismo. Syslog no
Los registros tradicionalmente se usan unas cuantas buenas razones para no almacena el FQDN (Fully Qualified
para comprobar la salud del sistema. estar satisfecho con la funcionalidad de Domain Name) del host. Cada host que
Muchos administradores ni siquiera se syslogd: propaga un mensaje modifica la direc-
molestan en mirar los registros a menos ción IP registrada.
que se encuentren con un problema en el Falta de métodos de • Uso de transferencia de mensajes no
sistema. Pero hoy, es también una autenticación orientado a la conexión (UDP)
cuestión de mejorar la fiabilidad, esto es, Syslogd no puede distinguir entre distin- Syslogd solo puede usar el protocolo
usar el sistema como una alerta tem- tos hosts. Si el servicio se lanza con la UDP para transferir los mensajes. Si un
prana para impedir que las cosas vayan a opción -r, acepta mensajes UDP en el paquete se pierde por problemas en la
peor. La integridad de los mensajes de puerto 514 sin importar cual es su ori- red el mensaje nunca llegará al destino.
un sistema es también ahora más impor- gen. Esto permite a los atacantes invadir
tante que nunca, ya que permiten a los el servidor de registro con paquetes UDP Syslog-NG
administradores levantar defensas o transmitir mensajes manipulados. Existen grupos de desarrolladores que
basadas en datos reales. Los admin- Aparte de utilizar la funcionalidad de un están trabajando para eliminar estos
istradores también buscan habitual- firewall simple, no hay forma de proteger problemas y desarrollando un sistema de
mente más flexibilidad en la configu- al servidor de registros. registros (ver los cuadros “Syslog-Sign” y
ración y en el manejo de las redes. • Mensajes en texto claro “Reliable Syslog”). Actualmente Syslog-
Han salido varios proyectos que inten- Syslog siempre usa texto claro (texto no NG es el mejor de ellos. Este desarrollo
tan conseguir este objetivo de mejorar el cifrado) para transmitir mensajes a se basa en el servicio Syslog tradicional
servicio del Syslog tradicional. Uno de través de la red. Esto permite fácilmente al que se le han añadido nuevas carac-
62 Número 01 www.linuxmagazine.com.es
Syslog ADMINISTRACIÓN
SHA-1 DSA/DH
PRI Header Message N Hash
Private
SHA-1 DSA/DH Key
PRI Header Message N+1 Hash
Other Messages
SHA-1 DSA/DH
PRI Header Message N+M Hash
SHA-1 DSA/DH
Hash
Figura 1: Syslog-Sign aplica una función hash a cada mensaje que se envía. Después transfiere un paquete con todos los valores hash de un grupo de mensajes,
notificándolo al administrador de la transmisión además de las firmas de los mensajes.
terísticas sin sacrificar la compatibilidad TCP para proporcionar más fiabilidad en redirigir los mensajes. El controlador file
con el RFC 3164. Aunque actualmente la entrega de mensajes. En este caso, la se encarga de klogd, por ejemplo leyendo
carece de características tales como la herramienta usa el puerto 514 por defec- los mensajes del kernel desde
firma digital y encriptación, los desarrol- to. Aunque actualmente el puerto 514 /proc/kmsg.
ladores están intentando añadir la está reservado para rlogin. Si quiere que Cada uno de estos controladores tiene
encriptación en una versión futura. los dos funcionen al mismo tiempo una o más opciones, que pueden especi-
Actualmente se necesita stunnel [4] para habrá que reconfigurar el servidor. ficarse entre paréntesis seguido del nom-
manejar la encriptación. Muchas distribuciones incluyen bre del controlador, por ejemplo, TCP y
Syslog-NG puede cambiarse de UDP a actualmente Syslog-NG. Si se quiere usar UDP necesitan saber el número de puer-
el sucesor de Syslog en SuSE, hay que
Syslog-Sign escribir la siguiente línea en /etc/syscon- Reliable Syslog
Syslog-Sign es una extensión del RFC 3164 fig/syslog y relanzar el servicio. Reliable-Syslog [8], que está especificado en
[7] que mantiene la compatibilidad hacia el RFC 3195, usa BEEP (Block Extensible
atrás con el BSD Syslog. Como sugiere su SYSLOG_DAEMON='syslog-ng' Exchange Protocol) para transferir los men-
nombre, este nuevo desarrollo usa la firma sajes. Este protocolo del nivel de aplicación
digital para proteger los mensajes de ser El archivo de configuración central, está basado en TCP. Está orientado a la
manipulados por un atacante. En el /etc/syslog-ng/syslog-ng.conf, es ligera- conexión y tiene mecanismos de autenti-
arranque, cada host crea un par de claves mente más complejo que el tradicional cación y verificación.Y proporciona protec-
asimétricas que son usadas para firmar cada ción contra ataques.
del syslogd. En vez de incluir original y
grupo de mensajes. Luego el host transmite Usa dos tipos de formato de mensajes: El
priority, contiene el llamado logpaths
el grupo de mensajes al servidor de registro modo RAW que es compatible con el estilo
que está formado por source, filter y des-
en un único mensaje (véase la figura 1). Este del servidor syslog RFC 3164.Y el modo
método es particularmente útil para prote-
tination.
COOKED que usa un formato de mensaje
ger los mensajes almacenados. Como Hay ocho controladores fuente difer-
XML. Los mensajes COOKED además alma-
mantiene la compatibilidad con el RFC 3164, entes (véase Tabla 1). El controlador
cenan atributos adicionales como direc-
Syslog-Sign usa UDP para transmitir los internal es obligatorio. Syslog-NG usa ciones IP, FQDNs y tipos de dispositivos. La
mensajes. Los mensajes se pueden perder esta fuente especial para transmitir men- longitud del mensaje puede ser arbitraria.
por la red y al no estar encriptados en sí mis- sajes que tienen que ver con el propio SDSC (San Diego Supercomputer Center)
mos, un atacante espiando la red podría servicio. usa una implementación de Reliable-Syslog
acceder a información privilegiada. con la licencia BSD-licensed Secure Syslog
La verificación de la clave aun no está clara. Fuentes [5]. Está versión es compatible con el BSD
Un atacante podría ser capaz de distribuir Cuidado: Los controladores file y pipe no Syslog. Requiere de las bibliotecas
claves manipuladas ya que Syslog-Sign uti- deben confundirse con las acciones de Roadrunner BEEP, OpenSSL, Glib2 y Pkg-
liza un mensaje normal para distribuir la Config. Además de los perfiles RAW y
syslogd, file y pipe. Syslog-NG los usa
clave pública. Aún se está trabajando en una COOKED, también soporta el perfil llamado
como fuente desde las cuales el servicio
implementación para FreeBSD [6] Security Profile.
lee mensajes y no como destino a los que
www.linuxmagazine.com.es Número 01 63
ADMINISTRACIÓN Syslog
Las funciones de filtro (véase la Tabla mensajes del kernel desde /proc/kmsg.
Tabla 1: Controladotes
2) pueden conectarse usando operadores La próxima seccion crea una fuente de
fuentes booleanos (and, or, not y paréntesis). red:
Fuente Descripción Para aplicar un filtro el resultado de la
internal Controlador para el propio
operación debe ser true. Algunas fun- source remote {
servidor de mensajes. Obligatorio.
ciones de filtros pueden manejar expre- tcp(
unix-stream Abre un socket Unix específico en
modo SOCK_STREAM y se queda a
siones regulares como opciones. ip(192.168.0.24) port(3333)U
la escucha de mensajes. Los destinos especifican donde y por max-connections(10)
unix-dgram Abre un socket Unix en modo qué medios un mensaje debe ser redirigi- );
SOCK_DGRAM y recibe mensajes a do y procesado. Tal y como en las };
través de él. fuentes hay disponibles un número de
file Abre el fichero especificado. controladores de destino, cada uno de Esta fuente se referencia como remote; y
pipe, fifo Abre el pipe especificado y lee mensajes.
los cuales pueden tener distintas su controlador es tcp. Syslog-NG ahora
udp Escucha mensajes en un puerto UDP.
opciones. La Tabla 3 proporciona una escuchará los mensajes en el puerto TCP
tcp Escucha mensajes en un puerto TCP.
lista de controladores disponibles. 3333. Incluso si el ordenador tiene múlti-
sun-stream Abre el dispositivo de flujo especificado
(sólo Solaris)
Syslog-NG llama al controlador una ples direcciones IP el servidor sólo
sola vez y lo mantiene ejecutándose escuchará en 192.168.0.24. La opcion
hasta que el servicio recibe la señal max-connections está establecida en 10;
to en el que escuchar y file necesita el SIGHUP y termina. Esto hace que el con- el ordenador aceptará un máximo de 10
nombre del archivo. Los sistemas Linux trolador sea muy eficiente. Si Syslog-NG conexiones concurrentes al Syslog-NG.
usan el controlador unix-stream local- se lanzase por un programa externo por No es necesario especificar una única
mente; el controlador usa un socket de cada mensaje entrante un atacante fuente para los mensajes remotos.
dominio Unix orientado a la conexión. podría lanzar múltiples procesos que Muchos administradores crean una
Cada conexión abierta requiere su propio sería similar a un ataque tipo DoS contra fuente individual que maneja todos los
proceso, un hecho que un atacante el sistema. controladores. Dicho esto, fuentes sepa-
podría explotar para realizar un DoS Syslog-NG también tiene un número radas suministraran una estructura más
(ataque por denegación de servicio). de opciones globales. Por ejemplo, limpia.
max-connections puede impedir esto chain_hostname y sep_hostname especif-
especificando un número máximo de ican como Sislog-NG debe manejar los Selección de Mensajes
conexiones concurrentes al servicio sys- nombres de host cuando pasa un men- Ahora a por los filtros. Nuestro primer
log. Está establecido a 10 por defecto. El saje a través de múltiples servidores de ejemplo maneja mensajes cuyo nivel de
manual de referencia [2] contiene una registros. Esto permite a los admin- registro corresponde a los valores warn,
lista completa de los controladores istradores descubrir donde se originó el err, crit:
fuente. mensaje. El manual de referencia [2]
contiene una lista completa de opciones filter warning {
Filtros y Destinos globales. level(warn, err, crit);
Los filtros describen como Syslog-NG };
debería manejar los mensajes que recibe Ejemplo de Configuración
de las diversas fuentes. Éste es uno de Para ilustrar la estructura de Esta regla simple, que aplica los filtros
los puntos fuertes del nuevo sistema de syslog-ng.conf la siguiente sección mues- basados en las prioridades, es bastante
registro. Los administradores pueden tra un archivo de configuración simple
usar filtros para ordenar los mensajes y dividido en secciones. Si está interesado Tabla 3: Controladores
pasarlos a los destinos apropiados. en hacer un archivo más complejo puede destinos
consultarlo en [3]. Destino Descripción
Tabla 2: Funciones filtro file Escribe el mensaje al archivo especificado.
Filtro Descripción source local { pipe, fifo Pasa el mensaje al pipe especificado.
facility Se refiere a los mensajes que origina la internal (); unix-stream Reenvía el mensaje al socket Unix
utilidad especificada. unix-stream("/dev/log"); SOCK_STREAM.
level, priority Se refiere a los mensajes con la file("/proc/kmsg"); unix-dgram Reenvía el mensaje al socket Unix
prioridad especificada. SOCK_DGRAM.
};
program Filtra los mensajes donde el campo udp Envía el mensaje al puerto UDP
nombre del programa contienen la especificado.
expresión regular especificada La fuente especifica aquí está identifica- tcp Envía el mensaje al puerto TCP
host Filtra los mensajes donde el campo da por su nombre local y comprende un especificado.
nombre de host contiene la expresión número de fuentes locales. Los contro- usertty Envía el mensaje a la consola especificada
regular especificada. ladores fuentes son internal (obligatoria- por el usuario,si el usuario está conectado.
match Aplica la expresión regular especificada mente) y el controlador unix-stream, los program Lanza el programa especificado y envía
al mensaje entero. cuales usan el archivo de dispositivo un mensaje a la entrada estándar de
filter Llama a otra regla de filtro. programa (Stdin).
/dev/log y el controlador file que lee los
64 Número 01 www.linuxmagazine.com.es
Syslog ADMINISTRACIÓN
común al tradicional syslogd. La mayor originado por la utilidad authpriv, y tro hasta el destino. Es una regla que
ventaja de la variante Syslog-NG es el todos los avisos del Kernel. El filtro email engloba el nombre de la fuente, un filtro
uso de las expresiones regulares. Una sólo permite pasar los mensajes del sis- y un destino. La primera de las sigu-
introducción a esta técnica la podemos tema de correo. ientes reglas lee mensajes desde la
encontrar en diversos libros de Perl, así fuente local y manda las entradas que
como en la documentación para el pro- Los Destinos coinciden con la regla de filtro konsole al
grama Logsurfer [9]. Esta herramienta Todo lo que necesitamos ahora son unos destino konsole. La segunda regla alma-
automática de análisis de archivos de cuantos destinos a los que mandar los cena los mensajes del sistema de correo
registro hace un uso intensivo de las mensajes. La siguiente entrada de con- local en /var/log/mail.
expresiones regulares y proporciona una figuración le dice a Syslog-NG que escri-
referencia de 50 páginas. ba los mensajes al archivo de registro 01 log {
Veamos una expresión regular /var/log/mail (nombre de destino: email) 02 source(local);
extremadamente simple que busca todos o a la consola /dev/tty10. 03 filter(console);
los mensajes que tienen algo que ver con 04 destination(console);
FTP, que se cumple si la cadena ftp destination email { 05 };
aparece en cualquier parte del mensaje: file("/var/log/mail"); 06
}; 07 log {
filter ftp { match("ftp"); }; 08 source(local);
destination console { 09 filter(console),
Y aquí tenemos otra regla de filtro que file("/dev/tty10"); 10 destination(email);
sólo permite a los mensajes críticos }; 11 };
pasar y que también es útil para la salida
a TTY10. La salida por consola no Una ruta de registro describe la ruta Si un host necesita reenviar los mensajes
debería ser muy verbosa: completa desde la fuente, a través del fil- recibidos a través de la red desde una
fuente a otro host de registro,
filter console {U simplemente hay que configu-
level(err) andU rar un destino apropiado para
not facilityU Syslog-NG.
(authpriv) orU
level(warn) andU destination loghost {
facility(kern); udp(ip(172.16.0.33)
}; port(514));
};
filter email {U
facility(mail)U; log {
}; source(remote);
filter(ftp);
El filtro console usa fun- destination(loghost);
ciones, valores y expre- };
siones booleanas. Esta
regla trata cualquier men- Figura 3: El servidor Syslog de Kiwi Enterprises permite a los administradores Lo importante es que el servi-
saje de error que no se ha incluir ordenadores con Windows en su configuración de registros. dor de registro, loghost, esté
www.linuxmagazine.com.es Número 01 65
ADMINISTRACIÓN Syslog
escuchando el puerto 514 definido por la options { se está preparado para realizar un traba-
dirección IP 172.16.0.33 en su archivo de keep_hostname(no); jo extra [4]. Si se precisa integrar las util-
configuración. Este método de conver- chain_hostname(yes); idades de encriptación, autenticación y
sión de direcciones puede ser extremada- sync(0); no repudio, se debe ver SDSC Secure
mente útil (Véase la figura 2). }; Syslog. Sin embargo, este servidor
requiere más mantenimiento.
Opciones Globales La opción sync especifica el número de Sin duda, Syslog-NG es el más comple-
Para completar el archivo de configu- líneas que Syslog-NG guardará en la to, ya que se puede configurar para
ración, ahora hace falta poner las caché, antes de escribirla en el archivo. soportar su infraestructura con muy
opciones globales, que se colocan al Un número alto aumentará el rendimien- poco esfuerzo. ■
principio del archivo. Alguna de las to, pero incrementará el riesgo de perder
opciones especifican como Syslog-NG los mensajes si el sistema cae. Syslog y Windows
manejará los nombres de hosts de los El listado 1 contiene un archivo de Muchas redes tienen PCs Linux y Windows.
mensajes, cuando redirigir los mensajes configuración. Éste ilustra como de Bajo circunstancias ideales, una solución
a otro servidor de registro. Habilitando avanzado es Syslog-NG con respecto a centralizada de registro debería admitir
keep_hostname> se le dice a Syslog-NG los conceptos de flexibilidad y escalabili- ambos sistemas. Sin embargo, se requiere
que mantenga los nombres existentes. dad, en comparación con su predecesor. software extra para permitir que los sis-
Si se deshabilita keep_hostname, temas Windows envíen y reciban mensajes
Casi Perfecto syslog.
chain_hostname (alias: long_hostname)
decide lo que hacer con el nombre. Sin el Las funciones filtros permiten a los El servidor de Syslog de la empresa Kiwi
http://www.kiwisyslog.com es un ejemplo
encadenamiento (chain_hostname), el administradores hacer los registros a
de programa que proporciona este servicio.
servidor de registro insertará su propio medida, para reflejar las infraestructuras
Soporta Windows 9x, NT, 2000 y XP. Además
nombre, con encadenamiento añadirá su de redes complejas. La configuración es
de la versión gratuita, hay una versión com-
nombre al nombre ya existente. Esto per- clara a pesar de su flexibilidad. Incluso ercial con funcionalidades ampliadas.
mite a los administradores trazar la ruta se puede compensar la carencia de utili-
La versión gratuita es adecuada para simple-
de los mensajes hasta su origen. dades de encriptación y autenticación, si mente añadir máquinas Windows a los
entornos syslog de Linux. Se configura por
Listado 1: Configuración Syslog-NG medio de una interfaz gráfica y se puede
lanzar tanto como un servidor de registro
01 # Opciones Globales
como un cliente. Como Syslog-NG, el soft-
02 options { keep_hostname(no); chain_hostnames(yes); sync(0); };
ware de Kiwi puede usar TCP o UDP para
03
enviar los mensajes. Además tiene algunas
04 # Fuentes bonitas, aunque superfluas, florituras como
05 source local { internal(); unix-stream("/dev/log"); gráficos de barras de colores y otros gráficos
file("/proc/kmsg"); }; estadísticos.
06 source remote { tcp(ip 192.168.0.24) port(3333)
max-connections(10);};
07 RECURSOS
08 # Filtros [1] Pagina de inicio de Syslog-NG: http://
09 filter warning { level(warn, err, crit); }; www.balabit.com/products/syslog_ng/
10 filter email { facility(mail); }; [2] Manual de Syslog-NG: http://www.
11 filter ftp { match("ftp"); }; balabit.com/products/syslog_ng/
12 filter console { reference/book1.html
13 level(err) and not facility(authpriv) [3] Configuración de ejemplo: http://www.
14 or level(warn) and facility(kern); campin.net/syslog-ng.conf
15 }; [4] Syslog-NG encryption howto: http://
16 venus.ece.ndsu.nodak.edu/~jezerr/linux/
17 # Manda mensajes críticos a TTY10 secure-remote-ogging.html
18 destination console { file("/dev/tty10"); }; [5] Secure Syslog por SDSC: http://security.
19 log { source(local); filter(console); destination(console); }; sdsc.edu/software/sdsc-syslog/
20 [6] Syslog-sec: http://sf.net/projects/
21 # Escribe mensajes de correo a un archivo syslog-sec/
22 destination email { file ("/var/log/mail"); }; [7] RFC 3164,“The BSD Syslog Protocol”:
23 log { source(local); filter(email); destination(email); }; http://www.ietf.org/rfc/rfc3164.txt
24 [8] RFC 3195,“Reliable Delivery for Syslog”:
25 # Redirige los mensajes a otra red http://www.ietf.org/rfc/rfc3195.txt
26 destination loghost { udp(ip(172.16.0.33) port(514)); }; [9] Logsurfer: http://www.cert.dfn.de/eng/
27 log { source(remote); filter(ftp); destination(loghost); }; logsurf/
66 Número 01 www.linuxmagazine.com.es
Bienvenidos a Linux User
Ésta es la sección dedicada a la presentación de software interesante y útil que nos ayuda
en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar
software estándar de una manera más eficiente, adquiriremos valiosos
conocimientos y descubriremos apasionantes nuevas aplicaciones.
Portal de acceso
Si tenemos nuestra propia red con uno o dos ordenadores y buscamos una
L
os routers se utilizan para intercam- Change… para modificar la configu- dispositivos y pulsamos Edit en la
biar datos entre redes. En el caso de ración de una tarjeta previamente config- barra de herramientas. Alternativa-
una pequeña red, el sistema Linux urada. Entonces, seleccionamos la tarje- mente podemos elegir New para crear
que se ejecuta en nuestro ordenador ta de red de nuestra red de la lista que una conexión nueva.
puede realizar esta tarea de forma ade- aparece y pulsamos Edit. 2. Nos aseguramos de que la opción
cuada. Por supuesto, suponemos que 7. Pulsamos en Routing - y verificamos Make this connection the default route
tenemos una conexión a Internet y una que la casilla Enable IP Forwarding está (Establecer esta conexión por defecto)
conexión a la red local en el mismo orde- marcada (ver figura 2). en la sección Advanced está marcada
nador. Este taller nos muestra la manera En las pruebas que realizamos en la (ver figura 3).
de configurar nuestro ordenador Linux redacción, esto no fue suficiente para 3. Salvamos los cambios y salimos del
para que nos ofrezca capacidades de acabar la configuración. Debimos iniciar programa.
enrutado. la sección Security and Users de nuestro Necesitamos hacer una visita rápida a la
YaST2 y el módulo Firewall (Cor- línea de comandos para activar la redi-
SuSE Linux tafuegos). Aquí encontramos la opción rección IP. La configuración para Red
Si tenemos instalado SuSE para permi- Forward Traffic and do masquerading Hat Linux 9 y 8.0 es:
tirnos acceso a Internet, los siguientes (Remitir Tráfico y hacer enmascaramien- 1. Abrimos una consola: la forma más
pasos adicionales serán necesarios para to), que debimos marcar como activa. rápida de hacerlo es pulsando [Alt-F2]
configurar el ordenador como una puerta y escribiendo konsole.
de enlace estándar: Red Hat Linux 2. Asumimos privilegios de superusuario
1. Arrancamos YaST2 e introducimos Los pasos de configuración en Red Hat escribiendo su, en la línea de coman-
nuestra contraseña. Linux son algo más complejos. Debido a dos y pulsamos [Enter] y escribiendo
2. Pulsamos sobre Network Devices que la herramienta GUI no nos permite la contraseña de root.
(dispositivos de red) en la versión SuSE habilitar la redirección IP, necesitamos 3. Comprobamos que el modulo NAT
Linux 8.2 o Network/Basic (red/básico) acceder a la línea de
en SuSE Linux 8.1. Ahora debemos comandos para este
seleccionar un dispositivo adecuado: paso. Primero inici-
módem, RDSI, ADSL o tarjeta de red. amos la herramienta
3. Pulsamos Configure… (configurar) redhat-config-net-
para añadir una conexión de Internet, o work (redhat-config-
Change (cambiar) para reconfigurar una uración-red) pulsan-
existente. do en el menú K,
4. Debemos asegurarnos de marcar la Systems Settings
casilla Default Route en IP_Details dentro (configuración del
del diálogo de configuración (ver figura sistema) y finalmente
1). Network (redes). Tras
5. Salvamos la configuración y volve- introducir la con-
mos a Network Devices o Network/Basic. traseña debemos
6. Ahora debemos comprobar la con- seguir estos pasos:
figuración de Network card para asegu- 1. Seleccionamos una
rarnos de que el transporte IP esté habili- conexion de Inter-
tado. Para hacer esto, pulsamos net de la lista de Figura 1: Conversión del ordenador en un router.
68 Número 01 www.linuxmagazine.com.es
Portal LINUX USER
www.linuxmagazine.com.es Número 01 69
LINUX USER Desktopia
Panelizer
Aplicaciones a Raya
Los gestores de ventanas simples ofrecen una serie de ventajas en comparación con los entornos de escritorio más com-
plejos: exigen pocos recursos, son rápidos y sumamente configurables. Desafortunadamente, la mayoría carecen de un
I
ndependientemente de lo contento
que uno esté con sus actuales
gestores de ventanas, la mayoría de
los usuarios Linux echarán de menos
una pequeña característica, un panel lat-
eral con reloj y menú. Los paquetes inte-
grados de entornos de escritorio como
GNOME y KDE proporcionan un panel
por defecto, pero los individualistas en la
comunidad Linux deben encontrar
primero el panel adecuado.
Panelizer [1], un programa de Fabien
Couyant, puede significar el final de la
www.yukonhostels.com
búsqueda. Se ejecuta en la mayoría de
gestores de ventanas y proporciona una
serie de agradables extras como un mon-
itor de correo y applets para montar dis-
positivos o monitorizar tráfico de redes
al margen de las funciones básicas.
Increíblemente, la aplicación ocupa tan evitar perdernos en el proceso. ROX, que ya disponen de un panel, nece-
64kbytes, ocupando solo 236 kbytes si se Después de gestionar adecuadamente sitan otro.
activan todos los applets disponibles. las numerosas dependencias, podemos
empezar a compilar Panelizer. Des- Simple, ordenado y
Instalación compleja. comprimimos el archivo- 0.5.tar.gz (que funcional.
No existen paquetes precompilados del podemos descargarnos desde [1]) con Tras completar el proceso de instalación
panel, por lo que debemos utilizar nue- tar -xzf panelizer-0.5.tar.gz. A contin- podemos ejecutar el panel escribiendo
stro compilador. Aparte de la librería uación cambiamos al nuevo directorio de panelizer &. La figura 1 muestra la con-
GTK versión 1.2.0 o superior (excepto Panelizer que hemos creado. Puesto que figuración estándar, si bien no muestra
gtk-2.x) y libxml, necesitaremos el el programa no dispone de archivo de mucho. Pulsando la flecha de la izquier-
paquete de desarrollo del Panelizer y, configuración, será necesario usar un da minimizamos el panel, dejando solo
por supuesto, un compilador. Como el editor de texto para añadir nuestras pref- un botón a la vista. Pulsando la aspa
GUI de Panelizer fue desarrollado uti- erencias al archivo Config.mak. No negra cerraremos el panel. Si bien esto
lizando glade, necesitaremos tener insta- obstante, los útiles valores por defecto nos permite un ahorro de espacio signi-
lado este paquete antes de poder compi- (como la instalación en /usr/local) hacen ficativo, es muy posible que necesitemos
lar el panel. El gestor del paquete glade que la personalización no sea impre- algo más de funcionalidad que un botón
suele tender a instalar numerosas libr- scindible. con calendario y reloj. El icono del editor
erías GNOME adicionales localizadas Ya podemos lanzar el compilador de texto no guía hacia el editor de la con-
normalmente en el CD de instalación. escribiendo make, e instalar escribiendo figuración (Figura 2). Lo primero que
Afortunadamente, éstas solo make install. Como alterna- debemos decidir es que queremos que
son esenciales para compilar tiva, también podemos in-
Panelizer, por lo que el soft- Figura 1: Primera ejecu- stalar Panelizer como un GLOSARIO
ware puede ser borrado ción de Panelizer. ROX applet [2] utilizando el
Punto de Montaje: directorio donde el archi-
después de la compilación. Es comando roxinstall. Si bien
vo del sistema de un volumen esta unido al
una buena idea tomar nota de todos las en la teoría esto es una buena opción, árbol local de archivos del sistema.
librerías añadidas al instalar glade para uno se pregunta porque los usuarios de
70 Número 01 www.linuxmagazine.com.es
Desktopia LINUX USER
www.linuxmagazine.com.es Número 01 71
LINUX USER Schlagwort
Konversation
¡Habla conmigo!
¿Por qué deambular por ahí en busca de compañía cuando hay una sala de chat
BY STEFANIE TEUFEL
S
i pagas mucho en tú factura de No hay paquetes disponibles para en la red IRC más importante, IRCNet, y
teléfono y casi no aprovechas tú SuSE 8.1 y algunas otras distribuciones, después introducir el canal KDE pulsando
tarifa plana, en lugar de usar el pero tras descomprimir el paquete #kdeusers. Tras abrir la ventana de con-
teléfono conversa con tus amigos lejanos konversation-0.12.tar.gz desde /usr/- versación que aparece podemos selec-
mediante el teclado. El servicio IRC, local/kde/bin, la configuración estándar, cionar Settings/Konversation Configure
abreviatura de "Internet Relay Chat" configure; make; make install funcionará para volver al diálogo de configuración.
(Conversación Transmitida por Internet) perfectamente. Este procedimiento su- Para conectarnos a servidores chat de
es ideal para esto. pone que los paquetes KDE3 y Qt3-Dev y otras redes IRC debemos pulsar el acceso
Para casi cualquier tema existe una las herramientas estándar de compi- New Server (Nuevo Servidor) en la figura
sala de conversación apropiada o canal lación están instaladas. 1 y escribir los detalles del servidor en la
IRC disponible. Y si no está disponibles Para arrancar el programa, podemos ir ventana de la figura 2 (p. ej.: Freenode
puedes crear uno adecuado al tema que al acceso Internet/Konversation en el [2]). Al mismo tiempo podemos selec-
te interese discutir. Para hacerlo, todo lo menú K o escribir konversation & en la cionar un canal para conectar de forma
que necesitamos es un cliente IRC y ventana terminal de nuestra elección. Si inmediata con el nuevo servidor. Este
conexión a cualquiera de los muchos el programa lo compilamos nosotros, pequeño truco nos puede ahorrar mucho
servidores IRC disponibles en Internet. Si hay que introducir la ruta correcta. tiempo más adelante. Si deseamos
bien hay muchos clientes de IRC La ventana principal (figura 1) es el conectarnos a un servidor específico
disponibles, vamos a tratar sobre centro de comandos donde configu- cada vez que iniciemos el programa
Konversation [1], un programa KDE real- raremos el programa de acuerdo a nues- debemos marcar la casilla del servidor
izado con este propósito que destaca tras necesidades concretas. El punto de deseado en Server List.
sobre el resto por su facilidad de uso. entrada, una caja de diálogo llamada La anotación Identity (Identidad) en la
"Extra Gear" (http://extragear.kde. Server list (Lista de Servidores) se utiliza lista de selección a la izquierda de la
org/) es una colección de programas para gestionar los
sueltos de KDE que por distintas razones diversos servidores
no están incluidas en el paquete Core IRC.
KDE. Puede ser descargado desde http:// Desafortunadamente,
konversation.sourceforge.net/. Al igual aquí es donde trope-
que el código fuente, también hay diver- zamos con uno de los
sos paquetes RPM para los distribu- únicos defectos del pro-
ciones más conocidas, desde Debian grama. A diferencia de
hasta SuSE de las que puedes elegir. programas similares,
Programas como rpm, kpackage o dpkg y los desarrolladores de
apt pueden facilitarnos el proceso de Konversation no pro-
instalación. porcionan una lista de
las redes IRC más pop-
APLICACIONES ulares y los datos de Figura 1: Nuestra ventana al mundo IRC
72 Número 01 www.linuxmagazine.com.es
Schlagwort LINUX USER
www.linuxmagazine.com.es Número 01 73
LINUX USER XUL
Programación XUL
De todas las invenciones de los últi-
A
pesar de que joyas como el otras cosas. Al margen de las políticas de crea un entorno donde los cambios más
Sinclair C5, la moto tipo Chopper, las guerras de navegadores, la incompe- dinámicos de la página son los más difí-
el refresco Tab Clear o Microsoft tente implementación de estándares y ciles de realizar, dándole a la Web una
FoxPro se hayan quedado en el camino, los intentos de censura por parte de cier- clara sensación de “pesada”.
hay algunos productos y tecnologías que tos políticos americanos, la Web ha
se han mantenido. Una de esas tec- demostrado ser un medio atrayente al Introducción a XUL
nologías es la Web. Hay pocas dudas al que el acceso se supone. Hay veces que La dependencia de HTML y su esperada
respecto de que la Web ha causado un puedo oír por ahí la frase “¿Cómo que no funcionalidad de búsqueda es realmente
gran impacto en la forma en que nos tienes Internet?” (enunciada en tono de una piedra de toque del problema que
comunicamos, compramos o hacemos asombro). Al margen de la popular- acabamos de describir. A pesar de que
ización de la Web, sus limitaciones son tecnologías como el HTML Dinámico
Jono Bacon is a evidentes. La más visible es el hecho de (DHTML) y el Modelo de Objetos de
writer/journalist, con-
que la interfaz entera debe ser reinventa- Documentos (DOM) han aparecido para
sultant and developer
based in England. Jono da cada vez que se desarrolla un sitio atacar el problema, éstas necesitan un
EL AUTOR
has been actively web. Además, la interfaz debe ser recar- poco de mimo para hacerlas funcionar
involved with Linux gada cada vez que se realiza un cambio conjuntamente. Los desarrolladores del
since 1998 and has
en la página por muy pequeño que sea. popular buscador Mozilla tuvieron una
worked on a number of
different projects including KDE, Esto es ineficiente no solo por el hecho idea diferente. Con grandes dosis de dis-
KDE::Enteprise, KDE Usability Study, de que HTML redundante necesita ser cusiones y diseño, los programadores
Kafka and Linux UK.You can find his enviado y recibido una y otra vez entre trabajaron juntos hasta crear el Lenguaje
website at http://www.jonobacon.org.
el servidor y el navegador, si no porque de Interfaz del Usuario de XML (XUL)
74 Número 01 www.linuxmagazine.com.es
XUL LINUX USER
www.linuxmagazine.com.es Número 01 75
LINUX USER XUL
Gestión de la composición
Figura 2: Gestor de diseño horizontal. En nuestro primer ejemplo que el segun- Figura 3: Combinación de gestión del diseño hori-
do Botón está debajo del primero. Este es zontal y vertical.
el comportamiento predeterminado de
<button id="button1" label=ßß los componentes cuya distribución no a continuación un ejemplo de gestión
"Primer Botón"/> está especificada. Si bien esto es válido que nos permite disponer nuestros
<button id="button2" label=ßß para páginas sencillas, este método de botones:
"Segundo Botón"/> posicionar componentes no es suficien-
temente flexible. Aquí es cuando se <hbox>
Las líneas del código son muy similares, necesita usar un gestor de distribución. <button id="button1" label=U
pues solo los atributos id y label (etique- La gestión de la distribución es algo "Primer Botón"/>
ta) tienen diferentes contenidos. El atrib- común en la mayoría de los compo- <button id="button2" label=U
uto id se comporta de la misma manera nentes GUI como Qt y GTK. El único req- "Segundo Botón"/>
que el equivalente <window> que uisito es que pongamos nuestros compo- </hbox>
usaremos para referenciar la etiqueta nentes dentro de unos controles invisi-
más tarde. El atributo etiqueta contiene bles que nos coloquen nuestro controles La forma en que funciona la etiqueta
el texto que realmente aparece en el visibles de una manera determinada. La <hbox> es colocando horizontalmente
Botón. Alguno se preguntará que está mayoría de herramientas contienen for- los componentes entre las etiquetas
haciendo la barra invertida (/) en la eti- mas horizontales y verticales de com- <hbox> y </hbox> más cercanas. Los
queta. Al contrario de lo que ocurre en posición. Esta forma estandarizada de resultados de este código los podemos
algunas formas de HTML, donde gestionar las formas se ha transferido a ver en la figura 2.
podemos dejar sueltas etiquetas por ahí, XUL y consecuentemente tenemos las El otro tipo de gestión de la composi-
XML es muy estricto sobre el marcaje etiquetas <hbox> y <vbox>. Veamos ción es la etiqueta <vbox>. Esta etique-
76 Número 01 www.linuxmagazine.com.es
XUL LINUX USER
www.linuxmagazine.com.es Número 01 77
LINUX USER XUL
78 Número 01 www.linuxmagazine.com.es
Educación LINUX USER
www.linuxmagazine.com.es Número 01 79
LINUX USER Educación
este sentido puede revolucionar la puede utilizarlo o contribuir, es que En el cuadro 1 se pueden leer noticias
dinámica de los controles de un Centro respeta los estándares definidos por los sobre la traducción de las actividades.
educativo; como explica Gang Xiao, no creadores de la web (el consorcio W3C) Las posibilidades de utilización de
es necesario que a todos los examinan- y por tanto funciona con cualquier nave- WIMS escapan al espacio disponible en
dos se les haga las mismas preguntas gador, en cualquier sistema operativo. esta sección. En este primer artículo
ocultas hasta ese momento, simultánea y WIMS lo creó y lo desarrolla Gang vamos a realizar un repaso general de
sincronizadamente, vigilando que no se Xiao, un profesor de matemáticas chino sus capacidades y de las actividades
copien. Porque WIMS permite generar que enseña en la Universidad de Niza, disponibles, con algunos ejemplos de
un conjunto enorme y redundante de Francia; tiene licencia libre (GPL). uso; expondremos primero cómo puede
preguntas, de manera que a cada exami- Georges Khaznadar ha preparado paque- utilizarse en remoto y detallaremos
nando se le asigne aleatoriamente un tes binarios para Debian y contribuye después cómo se instala en un orde-
subconjunto equivalente a los otros sub- decisivamente a su documentación y nador. En el próximo número trataremos
conjuntos. Sólo así se logra la objetivi- divulgación. Existe una red de servidores la creación de una clase virtual, de
dad en la selección de preguntas que se WIMS por todo el mundo, y recopila- actividades nuevas con Createxo y Mod-
le hace a cada alumno[2]. ciones de ejercicios y actividades de tool y lo que en la terminología de WIMS
Y las actividades no tienen que ser de licencia libre. La velocidad de desarrollo se conoce como documentos y cursos.
matemáticas o química, comprobaremos y de incorporación de módulos y traduc-
que con WIMS podemos crear activi- ciones es muy rápida: mientras escribo Conectarse a un servidor
dades de conocimiento del medio o de este artículo se ha pasado de la versión Para probar WIMS no hace falta instalar-
idiomas. Otra gran ventaja de WIMS, 3.42 a la 3.44, y probablemente cuando lo en nuestro ordenador: bastan una
además de ser libre y de que cualquiera esté en los quioscos la versión sea otra. conexión a Internet y un navegador.
80 Número 01 www.linuxmagazine.com.es
Educación LINUX USER
Podríamos utilizar alguno de los espejos comprenden con un ejemplo, aquí va atexo. Advierto que en la interfaz inglesa
españoles, pero vamos a conectarnos uno. aparecen además ‘Quick popup tools’ y
con el servidor principal para estar ‘Sheets of exercises’. Seleccionamos
seguros de contar con la versión más Ejemplo de uso matemático cualquiera de las categorías y dejando el
actualizada, y seleccionaremos la inter- Aunque decíamos que no hace falta ser cuadro de texto en blanco nos apare-
faz en español pinchando en la bandera matemático para sacarle partido a cerán todas las actividades clasificadas
española. WIMS, está hecho por un matemático y por orden de popularidad.
Tecleamos http://wims.unice.fr/wims/ se nota. WIMS incluye una interfaz a Podríamos buscar por tipos de acti-
fr_home.html en nuestro navegador y aplicaciones matemáticas (PARI, Maxi- vidad (es muy llamativo ver los ejer-
obtenemos una página similar a la de la ma, Octave, Yacas, GAP[3]) que permite cicios interactivos, con animaciones
figura 1, salvo que en francés. Aparecerá utilizarlas directamente. Y la mayor que lamentablemente no pueden pre-
al pie de página la versión (3.45a es la parte de los ejercicios y actividades los sentarse en el formato papel de esta
versión actual, al 5 de noviembre) y la han creados profesores universitarios de revista) o por palabras clave pero vamos
fecha de compilación. Tras seleccionar el matemáticas. Afortunadamente ni son a aprender a buscar por niveles edu-
español como idioma (podemos elegir todos ni tienen porqué serlo. cativos. La tabla 1 nos permitirá com-
además inglés, francés, chino o Comenzaremos por aprender a usar el prender la clasificación de Gang Xiao de
holandés) lo primero que nos llamará la buscador. Lo primero que nos llamará la los niveles educativos, que no corre-
atención probablemente es la mezcla de atención son las categorías en que están sponde exactamente con los niveles
lenguas. Porque, y es una peculiaridad clasificadas las actividades: ‘Actividades españoles.
de la aplicación, nos aparecen todas las wims‘ (módulos completos de activi- Vamos a buscar actividades para
versiones de cada módulo, en todas sus dades), ‘Lecciones y referencias‘ (el nom- bachiller, digamos nivel H3. Pondremos
traducciones. bre no miente), ‘Calculadores‘ (traduc- en el buscador la cadena ‘levelH3’. La
Pero vamos a explorar la interfaz. Nos ción de ‘Online calculators‘, ‘herramien- salida de la figura 2 nos muestra que el
fijaremos primeramente en el menú de tas de cálculo en línea’ en las palabras de sistema encuentra cincuenta actividades;
opciones situado sobre las banderas, los franceses), ‘Ejercicios interactivos‘, elegimos para examinarla una actividad
donde vemos que podemos acceder a ‘Recreativas matemáticas‘ y lo que recibe en español, ‘Sistemas lineales 2x2’, y se
páginas de ayuda, configurar preferen- la extraña traducción de ‘Ejercicios reser- nos presenta una página que nos permite
cias, etc. También podemos ver una línea vada‘ y que no son más que ejercicios configurar la actividad. Pinchamos en ‘Ir
de enlaces dedicados a la creación y uti- simples creados en el formato OEF al trabajo’ y el motor de generación nos
lización de clases virtuales. Pero en este (Online Exercise Format, donde el ‘reser- proporciona aleatoriamente un ejercicio;
momento nos interesa sobre todo el bus- vada’ es una mala comprensión de ‘clas- incluso podemos cambiarlo por otro
cador de actividades. Como las cosas se sified’) con la herramienta de WIMS cre- equivalente. El que ha aparecido, figura
3, en esta ocasión está parcialmente tra-
Tabla 1: Niveles educativos en la clasificación de Gang Xiao ducido. Una cuestión es importante en
este momento: la solución del ejercicio
E1 … E6, N cursos de Educación Primaria + Primer ciclo de Secundaria
H1 … H6, N cursos del Segundo Ciclo de Secundaria + Bachiller (la sigla corresponde a High School)
se hará con papel y lápiz, que no van a
U1 … U4, N cursos de Universidad (Undergraduate)
ser sustituidos por la tecnología; ésta se
G, Graduate:Licenciado,con o sin el grado de licenciatura utiliza para almacenar y seleccionar al
R, Research, nivel de investigador azar actividades de carácter equivalente.
Y para crearlas.
www.linuxmagazine.com.es Número 01 81
LINUX USER Educación
82 Número 01 www.linuxmagazine.com.es
Educación LINUX USER
Figura 7: Configuración del ejercicio de conjugación Figura 8: Ejemplo de ejercicio de idiomas Kuadros.
imágenes mediante el uso del ratón mentales que pueden utilizarse en otros actividades, y aprenderemos algunos
(‘Arithmetic Tables’ o ‘EOF Flags’, donde niveles traducidos o tienen un valor detalles de uso avanzado.
hay que asignar a un país su bandera); o, comunicativo evidente si se usan sin tra- Hasta pronto. ■
mediante el uso de java y javascript, ducir (estoy pensando en ejercicios
cualquier tipo de ejercicio interactivo como ‘OEF Clock’). RECURSOS
(ver ‘Elliptic billard’ o ‘Moving Comet Como podemos ver en la figura 7 ten- [1] El sitio web canónico de WIMS es http://
Shoot’). La limitación de espacio nos emos gran flexibilidad a la hora de elegir wims.unice.fr. Allí podemos encontrar las
impide recoger los ejemplos citados, verbos y tiempos que conjugar; la figura fuentes del programa, módulos, docu-
pero animamos al lector a que visite 8 nos muestra un ejemplo de uso. Cómo mentación…
cualquier servidor y los evalúe; insisto podemos adaptar este ejercicio, cómo [2] Existen live-CDs (CDs vivos, de esos que
especialmente en que ejercicios como podemos crear nuestra propias activi- funcionan directamente desde el CD sin
‘EOF Flags’ o una variación de él son dades, es material para el siguiente tener que instalar los programas en el
disco duro) con WIMS, por ejemplo
perfectamente utilizables en primaria y número.
KNOWIMS (http://wims.unice.fr/
primeros años de secundaria. knowims/).
Un último ejemplo nos está permitido. Conclusión
[3] En el repositorio experimental de la
Ahora la ausencia de traducciones va a En este primer capítulo dedicado al soft- Guadalinex 2004 disponemos de la ver-
ser una ventaja: un idioma se aprende en ware educativo, hemos hecho un repaso sión 3.28, pero podemos descargar los
ese idioma, del mismo modo que a tocar general de las capacidades de WIMS y paquetes .deb de prueba de la versión
la guitarra se aprende tocando la guitar- comprobado que puede utilizarse en 3.40, de developer.ofset.org.
ra. Podemos encontrar un ejercicio (no multitud de circunstancias; también [4] El documento más completo para apren-
muy imaginativo, es verdad) para la hemos aprendido a instalarlo si lo con- der a manejar WIMS es El libro de WIMS,
enseñanza del francés (se llega a él bus- sideramos adecuado. En el próximo de Georges Khaznadar. Está traducido al
español: http://libro-wims.software-libre.
cando conjugaison o verbes y se llama número aprenderemos a crear clases vir-
org.
‘OEF Conjugaison’) y otros ejercicios ele- tuales y a desarrollar nuestras propias
GLOSARIO
End User Licence Agreement, Acuerdo de culos en teoría de los números (factoriza- podría decir que es útil en la simplificación y
aceptación de la licencia por el usuario final. ciones, teoría algebraica de los números, cur- normalización de expresiones formales.
La lectura detallada de cualquiera de ellos es vas elípticas…) y que incluye funciones para Octave es un lenguaje de alto nivel (compat-
muy instructiva sobre cómo el software priv- el cálculo con otras entidades matemáticas ible con Matlab) creado para el cálculo
ativo limita los derechos de los usuarios. como matrices, polinomios, etc. Su uti- numérico.Yet Another Computer Algebra
El desarrollo del razonamiento y la lización en un ejercicio creado con WIMS es System (Yacas) es un lenguaje de álgebra
demostración en términos matemáticos trivial, veamos un ejemplo recogido de la computacional muy flexible y con una sin-
puede seguirse en On Public-Question Tests, FAQ (http://wims.auto.u-psud.fr/wims/faq/ taxis muy similar a la de Mathematica. El sis-
de Gang Xiao, mayo de 2004 (http://wims. fr/logiciel.html.También se presentan ejem- tema Groups, Algorithms and Programming
unice.fr/paper/pqt.pdf). En sus términos un plos de utilización de las otras aplicaciones.): (GAP) está especializado en la teoría de los
public-question test es una prueba cuyas pre- \text{f = pari(factor(20! + 1))} grupos.
guntas pueden publicarse previamente a su El paquete wims_3.28-6.1 no ha pasado a
Maxima es un sistema de álgebra computa-
realización. Sarge porque una de sus dependencias,
cional muy completo y de código libre, que
PARI es un sistema muy utilizado de álgebra permite la manipulación simbólica de poli- texgd, tiene un error crítico (a release critical
computacional creado para optimizar los cál- nomios, matrices, funciones racionales… Se bug en la jerga de Debian).
www.linuxmagazine.com.es Número 01 83
LINUX USER grep
De Cacería en el
Disco Duro
Los eruditos de la Edad Media hubiesen vendido sus almas a
comando del shell grep nos puede ayudar a encontrar esa cita
L
as cosas que no seamos capaces de en la línea de comandos y grep nos nos mostrará todas la veces que la pal-
recordar las debemos guardar en mostrará los pasajes apropiados del abra blanco aparece en la obra maestra
nuestro ordenador, reza una máx- archivo. Si la búsqueda contiene espacio de Melville (ver figura 1). El asterisco
ima del usuario informático. debemos utilizar comillas. Por ejemplo: significa “cualquier grupo de letras”. El
Ésta no es una mala idea, pero, a diferen- interfaz cambiará esta expresión por el
cia de lo que ocurre con la memoria grep "Jardín del Edén" nombre de cualquier archivo en el direc-
humana, que normalmente recuperará la biblia.txt torio actual que empiece por los carac-
información almacenada de forma teres moby..
fidedigna (excepto en los exámenes Debemos prestar atención y esperar Si los archivos en los que deseamos
finales, por supuesto), no siempre es tan fallos cuando usemos caracteres espe- buscar están distribuidos por diversos
fácil encontrar información en nuestro ciales: *, ? y ! tienen un significado directorios debemos añadir la opción r
disco duro. Podemos perder mucho especial para la línea de comandos. para indicarle a grep que busque en una
tiempo en encontrar un archivo del que Otro grupo de caracteres (., *<C>, carpeta completa:
hemos olvidado su nombre o dónde fue ^<C>, $ y \) no se interpreta por
almacenado. Incluso el saber exacta- grep tal cual. En su lugar, la her- grep -r blanco Melville/obras/
mente que archivo contiene la ramienta supondrá una expresión reg-
información que buscamos puede ser de ular. El lado positivo es que esto nos buscará blanco en el directorio obras y
poca ayuda en caso de archivos de texto permite construir búsquedas muy en los subdirecorios que cuelguen de él.
grandes. potentes y complejas, si bien es posi-
El comando del shell grep, que localiza ble que prefiramos evitar estos carac- VISIÓN GENERAL DE GREP
cadenas de texto en ficheros es útil en teres con grep hasta que nos sinta- Comando Acción
ambos casos. En la situación más simple, mos a gusto con la herramienta. grep patrón fichero búsca en un archivo un patrón
podemos ejecutar grep con la tecla de grep patrón *.htm busca en todos los archivos en
búsqueda y el archivo a buscar. grep nos Si no sabemos que archivo contiene un directorio que acaban con el
mostrará todas las líneas en el archivo el texto que buscamos, podemos eje- sufijo .htm
especificado que contengan el texto bus- cutar grep con un comodín. La obra grep -r patrón realiza una búsqueda recursiva
directorio en un directorio y sus subdirectorios.
cado. Imaginemos que deseamos buscar "Moby Dick" del autor Herman
grep -i patrón ignora la diferencia entre
en el archivo biblia.txt el texto “Jardín Melvilla está compuesta de una colec-
fichero mayúsculas y minúsculas.
del Edén”. Debemos escribir ción de archivos de texto.
grep -A n muestra las siguientes n líneas tras
la línea que contiene la búsqueda.
grep Edén biblia.txt grep blanco moby.*
84 Número 01 www.linuxmagazine.com.es
grep LINUX USER
. ~/.bashrc
Libro de Direcciones
grep es tremendamente flexible. Una de
mis aplicaciones favoritas para grep es
un sencillo libro de direcciones.
Todo lo que necesitamos son los
comandos grep, alias y cat y un fichero
de texto donde podamos almacenar los
nombres, números de teléfono y las
direcciones de correo electrónico y de
Figura 1: El libro “Moby Dick” de Melville está subdividido en una serie de archivos de texto. El comodín correo ordinario de nuestros amigos,
“moby.*” indica a grep que busque en todos los archivos del directorio. conocidos y parientes. Una entrada
puede ser como:
Debido a que los gurús del shell suelen
El Trio: ps, grep y kill. ser notablemente perezosos, necesita- Charly Pingüino
grep no es sólo útil para búsquedas de mos encontrar un método para no tener +12345 678
texto filosóficos y teológicos, si no que que escribir este comando cada vez que tux@linux.org
puede ser combinado con otros coman- lo requiramos: en otras palabras, necesi- C/del Polo Sur
dos del shell. Si la respuesta de un tamos un alias. Los alias definidos deben Villatux, Antártica
comando produce mucho texto, grep ser guardados en el archivo .bashrc en el
puede ser utilizado escribiendo tras la directorio raíz. Este archivo se ejecuta Ahora debemos salvar el archive como
instrucción el carácter “|” y grep cada vez que abrimos un shell de direcciones en nuestro directorio raíz y
texto_a_buscar para filtrar el resultado y comandos interactivo. Usaremos nuestro añadir el siguiente alias a .bashrc:
mantener solo las partes en las que esta- editor de texto favorito para abrir el
mos interesados. Un caso típico es en el fichero, por ejemplo kwrite ~/.bashrc & alias tel="cat ~/direcciones |ßß
que usaríamos grep para cerrar un pro- o vi ~/.bashrc en el escritorio, dependi- grep -i -A 4"
grama que se ha bloqueado. endo de nuestras preferencias. Debido a
El comando ps ax nos muestra los pro- que vi no es sencillo, veamos algunos El comando cat nos muestra el contenido
cesos activos. Podemos usar grep para comandos simples. Si escribimos G le del archivo direcciones. El carácter |
aplicar un filtro y encontrar solo el pro- indicamos a vi que debe ir al final del envía este resultado a grep. La opción -i
grama que estamos buscando, Mozilla archivo. Entonces podemos escribir o garantiza que la búsqueda no diferencia-
por ejemplo: para cambiar el editor al modo de intro- rá entre mayúsculas y minúsculas.
ducción de datos. A diferencia de los Finalmente, -A 4 indica a grep que debe
> ps ax | grep mozilla comandos a y i, o indica a vi que inicie la mostrar las 4 líneas siguientes a la
2500 ? S 1:40 /usr/lib/ßß inserción en la línea donde está situado primera coincidencia con la búsqueda.
mozilla-1.3/mozilla-bin el cursor. De nuevo
5645 pts/4 S 0:00 grep mozilla Ahora podemos introducir nuestro
alias en la última línea de .bashrc. En . ~/.bashrc
grep nos muestra dos coincidencias que lugar de pss podemos usar cualquier otro
contienen Mozilla: el buscador y el pro- nombre fácil de recordar pero evitando analizará sintácticamente de nuevo
pio grep. La parte que nos interesa para usar el nombre de un comando exis- nuestro archivo de configuración. En el
cerrar el programa aparece al principio tente: futuro, solo necesitaremos escribir tel
de cada línea: el ID del proceso. Ahora nombre en el shell para recuperar
podemos escribir kill 2500 para cerrar el alias pss="ps ax |ßß la dirección de la persona que busque-
programa deseado. grep" mos. ■
www.linuxmagazine.com.es Número 01 85
LINUX USER LaTeX
Tipografía Profesional
para Todos
Actualmente, todo el mundo tiene ordenadores personales e incluso el usuario más principiante sabe lo que es un
procesador de textos. Pero todo aquél que escribiera un libro en el periodo, digamos, de 1455 a 1985, elaboraba un manu-
scrito que luego mandaba “a imprenta”. La imprenta era un lugar misterioso de donde, por arte de magia, aparecía un
ejemplar impreso donde antes sólo había un montón de cuartillas emborronadas. POR MIGUEL ATENCIA
E
s difícil entender hoy en día el dades que vamos cometiendo. Si no Si al ejecutar el programa latex sale algo
impacto que suponía para un autor queréis complicaros la vida, ignorad a parecido a lo de arriba, ya podemos
ver su obra impresa. LaTeX es el los puristas. pasar directamente a probarlo. Para salir
moderno sustituto del maestro tipógrafo. del prompt con los dos asteriscos, sim-
Con un ordenador personal y una impre- El primer documento LaTeX plemente pulsaremos Ctrl-C. Si no ten-
sora, podemos obtener resultados con el Lo primero es tener LaTeX instalado para emos Latex instalado, podemos instalar-
mismo aspecto profesional que propor- hacer todas las pruebas que vamos lo desde el CD de nuestra distro favorita
ciona una imprenta, tanto si escribimos sugiriendo y las que se os ocurran. mediante un programa de gestión de
un libro de 700 páginas como si hacemos LaTeX y Linux se llevan bien, de hecho, software, ya sea rpm, Kpackage o
un trabajo escolar que incluye gráficos y LaTeX nació en el mundo Unix, la especi- cualquier otro. Como último recurso, se
fórmulas matemáticas. En lo que sigue, ficación es pública y la mayoría de las puede descargar de la Comprehensive
daremos algunas razones por las que distribuciones son de código abierto. Por Tex Archive Network [1] o del mirror
resulta preferible utilizar LaTeX en lugar lo tanto, es muy posible que LaTeX ya español en [2]. Aquí encontraremos la
de un programa de autoedición o un esté en el sistema. Para estar seguros distribución teTex, que es la más
procesador de textos. Nuestro objetivo es hagamos una prueba. En la línea de portable de las distintas que existen.
que todos seamos capaces de obtener comandos escribimos: También podemos encontrar en CTAN
resultados brillantes con LaTeX lo antes [3] alguna documentación sobre Latex,
posible (veréis que no es tan difícil) y $ latex la mayoría en formato… Latex. Esto es
posiblemente algún purista de LaTeX se This is TeX, Version ... uno de los principales problemas de
moleste en señalar todos las irregulari- ** Latex: en general, la ayuda es bastante
Figura 1: Aspecto de un documento básico en Latex. Los márgenes y tipos de Figura 2: Aspecto de un documento básico en OpenOffice. El resultado es
letra están ya ajustados a una presentación profesional menos profesional
86 Número 01 www.linuxmagazine.com.es
LaTeX LINUX USER
pobre. Con la distribución teTex se pro- saje bastante incomprensible. El texto observamos el resultado. A la vista de
porciona una ayuda muy básica, en for- anterior podemos guardarlo, por ejemp- este ejemplo, alguien podría preguntar si
mato info, que puede verse ejecutando lo, con el nombre hola.tex y ejecutamos no habríamos hecho lo mismo con un
info latex. Existen excelentes libros sobre desde la línea de comandos: procesador de textos, como OpenOffice.
Latex en cualquier librería especializada La respuesta es sí, pero con algunos
pero no es imprescindible comprarse un $ latex hola inconvenientes. Para empezar, podemos
libro para obtener resultados brillantes comparar el aspecto de nuestro fichero
en Latex. Supongamos que todo ha ido bien e DVI (Figura 1) con la previsualización de
LaTeX no tiene interfaz de usuario, ya ignoramos la ristra de mensajes que OpenOffice (Figura 2). Esto es subjetivo,
que no es un programa interactivo, sino salen. Con esto hemos completado con pero a mí me parece que el aspecto del
que se ejecuta desde la línea de coman- éxito nuestro primer documento Latex. documento DVI es mucho más profe-
dos. Esto será muy fácil de entender para Ahora bien, ¿qué hemos sacado en claro? sional, más parecido a un libro “de ver-
el que haya programado en algún Si hubiéramos compilado un programa, dad”. Naturalmente que en OpenOffice
lenguaje (no en un entorno visual): habríamos obtenido un ejecutable. Al se puede imitar el aspecto de Latex
LaTeX es como un compilador. Por tanto, ejecutar Latex correctamente, obtenemos eligiendo los tipos de letra adecuados,
prepararemos el documento LaTeX en un fichero DVI, que significa algo así márgenes, etc. Pero me parece intere-
nuestro editor preferido. Algunos edi- como “fichero independiente del disposi- sante comparar los documentos que se
tores tienen facilidades que ayudan a la tivo”. Un fichero DVI es como un PDF y, obtienen con un mínimo de esfuerzo.
escritura de documentos LaTeX. Por al igual que un PDF, necesita un progra- También resulta ventajoso Latex al usar
ejemplo, si se usa el entorno gráfico ma para visualizarlo. Todas las distribu- documentos en texto plano:
KDE, Kate reconoce los comandos LaTeX ciones de Linux decentes incluyen el
(aunque no todos) y los representa con xdvi pero, además, en el menú de gráfi- $ ls -al hola.*
distintos colores. De esta forma, cos del entorno KDE (o ejecutando kdvi) ... 5238 sep 19 12:42 hola.sxw
podemos detectar errores de sintaxis disponemos del KDVI, que resulta ... 74 sep 19 12:33 hola.tex
antes de “compilar”. También se mucho más cómodo. En cualquier caso,
recomienda vim, con la ventaja de que visualizamos nuestro fichero hola.dvi y ¡El documento Latex es 70 veces más
funciona incluso sin entorno gráfico.
Muchos intrépidos utilizan emacs o Listado 1: libro.tex
Xemacs, por las posibilidades de person- 01 % Clase de documento
alización que tienen. Si alguien tiene la 02 \documentclass[a4paper]{report}
desgracia de verse obligado a utilizar 03 % Paquetes adicionales
Windows, la mejor combinación es el 04 \usepackage[spanish]{babel}
editor WinEdit (de pago, aunque muy 05 \usepackage[latin1]{inputenc}
barato) con la distribución MiKTeX. Si 06 % Fin del preámbulo. Comienza el documento
estamos acostumbrados a un procesador 07 \begin{document}
de textos, tal como el de OpenOffice, 08 % Página de títulos
podemos seguir usándolo tranquila- 09 \title{El maestro de los collares}
mente y disfrutar de las facilidades 10 \author{J.R. Talco}
habituales (el corrector ortográfico, el 11 \maketitle
sistema de autocompletado, etc.). Eso sí, 12 % Fin de los títulos. Comienza el texto normal
hay que guardar el documento como 13 \chapter{De los jovis}
texto plano y se perderá cualquier forma- 14
to que se introduzca. 15 Este libro trata principalmente de los jovis, y el lector
Ya estamos preparados para el primer descubrirá en
documento Latex, que será el embrión 16 sus páginas mucho del carácter y algo de la historia de este pueblo...
de nuestra gran obra, el best-seller con 17
que nos haremos famosos. Escribamos 18
en el editor el siguiente texto: 19 No obstante, muchos querrán saber desde un principio algo más de
este pueblo
\documentclass[a4paper]{book} 20 notable y quizás a algunos no les haya dado la gana comprarse el libro
\begin{document} 21 anterior...
Hola, mundo 22
\end{document} 23 Los jovis son un pueblo complicado pero muy joven, cada
vez más
Al que sea totalmente inexperto en 24 numeroso. Amaban la guerra, el follón y la caza...
Latex, le recomiendo copiarlo con cuida- 25
26 % Fin del documento
do, porque si se comete algún error,
27 \end{document}
probablemente Latex lanzará un men-
www.linuxmagazine.com.es Número 01 87
LINUX USER LaTeX
Figura 3: Aspecto del documento en OpenOffice. El resultado impreso arras- Figura 4: Extracto de un documento completo en Latex, que introduce
trará todas las imperfecciones cometidas al teclear, al ser un programa automáticamente cabeceras de capítulos, página de títulos y demás detalles
WYSIWYG de formato
pequeño! Baste decir que mi tesis doc- rafo con tabuladores y otras no, algunas guntarnos nuestra opinión. Para apren-
toral de casi 200 páginas, con cientos de palabras están separadas con más de un der a hacer nuestros propios documen-
fórmulas y más de 20 figuras, cabe en un espacio, algunos párrafos están separa- tos, cada vez más perfeccionados, estu-
disquete y la escribí en un Pentium 1. dos con dos saltos de línea, etc. Como se diaremos en detalle nuestro “programa”
Intentad hacer eso mismo con observa en la Figura 3, el resultado no es Latex.
OpenOffice, no hablemos ya de MS muy estético, así que luego habrá que En primer lugar, la sintaxis de Latex es
Word. Por último, la facilidad de manejo: pagarle a un tipógrafo para que haga la bastante simple: todas las instrucciones
Latex tiene fama de ser muy difícil de composición… o podemos usar Latex. empiezan con un backslash (la barra
usar, asequible sólo para matemáticos y Vamos a introducir el texto en la “plantil- hacia atrás \), seguidas del nombre de la
demás gente de mal vivir. Bueno, ya la” del apartado anterior, aunque le instrucción. La mayoría de las instruc-
hemos visto que no es para tanto. Esto es añadiremos algunos detalles, quedando ciones requieren especificar uno o más
como todo, lo básico e imprescindible es como el Listado 1. parámetros, aunque para algunas basta
simple, después podemos ir complicán- Sólo queda ejecutar latex y ver el escribir su nombre, por ejemplo \maketi-
dolo todo lo necesario. Incluso resultado (ver la Figura 4). Im- tle. Los parámetros opcionales, que se
podríamos usar el documento que presionante, ¿verdad? Aparte de corregir pueden omitir, van entre corchetes tras el
hemos hecho como plantilla y escribir en el espaciado, la tabulación y la justifi- nombre de la instrucción, mientras que
el “hueco” entre \begin{document} y cación, uno puede preguntarse de dónde los parámetros que son obligatorios en
\end{document}, sin aprender nada más ha salido la palabra “Capítulo” o la fecha una instrucción se escriben entre llaves,
de Latex. En realidad, esto de usar plan- actual en la página de título, o quién ha al final de la instrucción. Hay básica-
tillas hechas por otros es un pecado que, definido los márgenes. Todos esos mente dos clases de instrucciones: los
más o menos, cometemos todos los detalles de formato están a cargo de mandatos simples y los entornos. Estos
usuarios de Latex. Cuando empecé a Latex, que los resuelve a la perfección, últimos son los que se definen con una
usar Latex, me aconsejaron que jamás aunque también es verdad que sin pre- pareja de instrucciones \begin ... \end.
empezara un documento desde En el documento anterior, sólo
cero, siempre debía partir de Tabla 1. Algunas opciones de la hay un entorno: el entorno doc-
una plantilla hecha por otro. He instrucción \documentclass ument, que debe existir en todo
seguido este consejo y no me ha Opciones Significado Opción por defecto documento Latex. Natural-
ido del todo mal. 10pt / 11pt / 12 pt Tamaño de letra 10 pt mente, sólo puede haber un
oneside / twoside Impresión a doble cara twoside en book,oneside en report y entorno document, pero si
Capítulo I… article alguien está preparado para
Ha llegado el momento de openright / Empezar capítulos en openright en book,openany afrontar la gestión de errores de
empezar nuestro libro/trabajo/ openany página impar Latex, puede probar qué pasa
artículo/carta o lo que a cada en report cuando se incluye más de uno.
uno le dicte la inspiración. onecolumn / Texto en una o onecolumn Lo que hay dentro del entorno
twocolumn dos columnas
Como estamos bajo el influjo de document es propiamente el
titlepage / Salto de página tras titlepage en book y
las musas, no es el momento de contenido de nuestro documen-
notitlepage los títulos
fijarnos en detalles de formato: to, como su propio nombre
report, notitlepage en article
unas veces empezamos el pár- indica, mientras que lo anterior
88 Número 01 www.linuxmagazine.com.es
LaTeX LINUX USER
a \begin{document} es el preámbulo, ejemplo, cambiamos la clase a book en que recargar el documento DVI porque
donde se definen algunas características nuestro documento, el único cambio se ha recompilado el fuente Latex.
generales del documento. Como ya se aparente es la introducción de una pági- Las otras dos líneas del preámbulo de
habrá adivinado, se pueden introducir na en blanco después del título. ¿Por qué nuestro documento son instrucciones
comentarios en cualquier punto, comen- aparece esta página? Porque, en un libro, \usepackage, que cargan paquetes adi-
zando la línea con el símbolo %, de todos los capítulos empiezan en una cionales. La posibilidad de extensión de
forma que estas líneas no afectan en página impar, es decir, en la página de la Latex con paquetes externos es lo que le
nada al documento impreso. derecha, tal como la vemos si manten- da una enorme potencia a Latex. Para
emos el libro abierto. Para que esto sirva cualquier cosa que queramos hacer,
El preámbulo del documento para algo, tenemos que imprimir el doc- seguro que alguien ha hecho ya el corre-
La primera instrucción del documento es umento a doble cara. En cambio, si cam- spondiente paquete y sólo tendremos
la instrucción \documentclass: biamos a la clase article, se elimina la que encontrarlo. Incluso podemos
página de portada con el título. Además, encontrar clases enteras para propósitos
\documentclass[a4paper]{report} se pierde el formato del título del capítu- específicos, distintas de book, report y
lo porque, en realidad, un artículo no article. Además, hay algunos paquetes
Esto define la “clase” del documento. En puede tener capítulos, sino “secciones”. tan útiles que se han convertido en parte
Latex hay predefinidas tres clases de uso Volveremos a esta cuestión pronto, al de la distribución estándar de Latex.
general: book, report y article. Existen estudiar la estructura del documento. Veamos cuáles son los dos paquetes que
también las clases letter (para cartas, con Habiendo seleccionado la clase de hemos incluido en nuestro documento,
una gestión muy potente de etiquetas nuestro documento, se pueden configu- empezando por babel. Es gracias a la
para hacer envíos masivos de cartas per- rar diferentes variantes, dando parámet- línea…
sonalizadas) y slides (¡se pueden hacer ros opcionales en la instrucción \docu-
presentaciones con Latex!) pero tienen mentclass. Por ejemplo, en nuestro docu- \usepackage[spanish]{babel}
muchas instrucciones específicas y mento hemos especificado que el
requieren un estudio especial. No hay tamaño de papel es A4, con la opción …como Latex ha sabido escribir
grandes diferencias entre book, report y a4paper. Podíamos también haber elegi- “Capítulo”. Para aprender idiomas, basta
article, más que en cuestiones de forma- do a5paper (14,8 x 21), letterpaper (la cambiar spanish por german o serbian y
to. En principio, la clase book está pen- opción por defecto: 8,5 x 11 pulgadas) o observar la fecha y el título del capítulo.
sada para libros o documentos muy lar- incluso otros más exóticos, pero es poco Los códigos de las lenguas oficiales de
gos, la clase article se orienta a artículos probable que se necesiten. Incluyo otras España, además de spanish, son basque,
de revistas, más cortos y con la clase opciones, cuyo significado es autoex- catalan y galician. ¿Adivináis cuál es el
report, que estaría en un punto interme- plicativo, en la Tabla 1. Obsérvese que idioma por defecto si no se carga babel?
dio entre las otras dos, se hacen informes con estas opciones se puede cambiar el Por cierto, al hacer cambios de idioma y
técnicos. Seguramente, para hacer un comportamiento por defecto de una recompilar, puede que se nos produzca
trabajo escolar, la clase más adecuada clase. Por ejemplo, se puede usar la clase un error. Se debe a que Latex guardó
sea report, de todas formas, lo más book sin página de títulos (notitlepage), algunas características del documento en
recomendable es probar con las tres para o la clase report empezando los capítulos un fichero auxiliar, que ahora ya no
decidir cuál se adapta más a las carac- en página impar (openright). Eso no resulta coherente con el documento.
terísticas de nuestro trabajo. Si, por quiere decir que todas las combinaciones Para evitar el error y garantizar que par-
tengan sentido, por ejemp- timos de cero en cada compilación, basta
Tabla 2. Algunas instrucciones y lo, es absurdo usar open- con borrar este fichero que, en nuestro
entornos usuales en Latex. right u openany en la clase caso, se llamaría libro.aux.
Instrucción Uso article, que no tiene capítu- El otro paquete que hemos cargado en
\begin{center} Justificación centrada (se puede cambiar center por los. Lo mejor es probar el preámbulo es inputenc, al escribir la
... flushright -derecha-o flushleft -izquierda-) hasta dar con el aspecto línea:
\end{center} deseado. Especialmente
\begin{enumerate} Relación numerada (se puede cambiar
recomiendo la opción \usepackage[latin1]{inputenc}
\item …. enumerate por itemize -viñetas-) …
\item …
twocolumn: con una sola
\end{enumerate} palabra, obtenemos el dis- La utilidad de este paquete es tanta, que
\footnote{Nota} Nota al pie eño en dos columnas típico casi no se puede explicar con palabras:
\label{etiqueta} Marca una posición para referenciarla de periódicos o revistas.
\ref{etiqueta} Referencia a una posición marcada Por cierto, al hacer todas RECURSOS
$…$ Fórmulas matemáticas en el texto estas pruebas, notaréis una [1] Comprehensive Tex Archive Network:
\begin{equation} Fórmulas matemáticas en una línea aparte, de las principales ventajas http://www.ctan.org [2]Mirror español de
... con número de ecuación de la mayoría de los progra- CTAN: ftp://ftp.rediris.es/sites/ftp.dante.
\end{equation} de/tex-archive/systems/linux [3]Ayuda de
mas visualizadores de
_{texto} Texto en subíndice. ¡ Sólo en fórmulas ! Latex dentro de CTAN: http://www.ctan.
ficheros DVI: el propio pro-
^{texto} Texto en superíndice. ¡ Sólo en fórmulas ! org/tex-archive/info
grama detecta cuándo tiene
www.linuxmagazine.com.es Número 01 89
LINUX USER LaTeX
begin{document} podemos escribir: Entre dos párrafos hay que dejar una mos. Posteriormente, estudió
línea en blanco. Para comenzar un matemáticas y consagró su vida a la
enseñanza y a la ciencia. No
\title{El maestro de losU nuevo capítulo, basta dar una nueva
obstante, sigue en contacto con el
collares instrucción \chapter y, además dentro de
mundo de la informática, pues no ha
\\[0.5 cm] {\small TresU cada capítulo, es posible ir definiendo
podido aún librarse de desatascar
collares para los príncipesU estructuras cada vez más pequeñas: \sec-
impresoras y formatear ordenadores.
feos sobre la tierra tion, \subsection y \subsubsection.
90 Número 01 www.linuxmagazine.com.es
buenas razones
5 para suscribirse
3 Linux Magazine es algo más que una revista de Linux. Linux Magazine patrocina grupos,
congresos, proyectos y eventos relacionados con el Software Libre. Suscribiéndote a Linux
hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.
Magazine garantizas que podamos seguir apoyando el Software Libre allá donde haga
falta.
W W W. L I N U X M A G A Z I N E . C O M . E S / S U B S
Formulario
Suscripción
Sí Dirección Facturación
Número Inicial
Zona
Modo de Pago
Dirección Envío
Condiciones
Proyectos COMUNIDAD
Proyectos en Marcha
El software libre incluyes un abanico tan amplio de aplicaciones que puede ser difícil encontrar la herramienta perfecta.
En esta sección, escogemos lo mejor de la cosecha. Este mes miramosel suministrador de servicios IPv6 Sixxs, un ISP que
ofrece conexión al Internet IPv6 gratis para así promocionar el protocolo. POR MARTIN LOSCHWITZ
A
pesar de que aún existen esto sólo cuesta 15 créditos). A los
bastantes direcciones IP usuarios se les otorga 5 créditos por
para los Estados Unidos, cada semana que permanece accesi-
las voces de alarma ya llevan ble su punto final IPv6. Después de
tiempo sonando en otras partes una semana se dispone de suficientes
del mundo, especialmente en créditos para solicitar una subred
Japón. Los pesimista auguran que completa, que también cuesta 15
las direcciones IPv4 (Internet Pro- créditos. Después de otra semana, se
tocole Versión 4, la versión puede añadir un servidor de nombres
actual), con sus cuatro billones para registros de búsquedas inversas
de direcciones, se quedará sin en la subred.
www.linuxmagazine.com.es Número 01 93
LINUX MAGAZINE Eventos
Eventos Seleccionados
LinuxWorld Expo FOSDEM 2005 LinuxPark CeBIT 2005
Fecha: 14–17 Febrero Fecha: 26–27 Febrero Fecha: 10-16 Marzo
Ciudad: Boston, MA, EE.UU. Ciudad: Bruselas, Bélgica Ciudad: Hannover, Alemania
Sitio Web: Sitio Web: Sitio Web:
www.linuxworld www.fosdem.org www.cebit.de/
expo.com homepage_e
Calendario de Eventos
Evento Fecha Ciudad Sitio Web
21C3 – Chaos Communication Congress 27–29 Diciembre Berlín, Alemania www.ccc.de
OSDL Enterprise Linux Summit 31 Enero –02 Febrero Burlingame, CA, EE.UU. www.osdllinuxsummit.org
SAINT 2005 31 Enero–04 Febrero Trento, Italia www.saint2005.org
CodeCon 4.0 11-13 Febrero San Francisco, CA, EE.UU. www.codecon.org/2005
Southern California Linux Expo 12 Febrero Los Angeles, CA, EE.UU. www.socallinuxexpo.org
LinuxWorld Conference & Expo 14-17 Febrero Boston, MA, EE.UU. www.linuxworldexpo.com
UKUUG LISA/Winter Conference 24-25 Febrero Birmingham, R.U. www.ukuug.org/events/winter2005
FOSDEM 2005 26-27 Febrero Bruselas, Bélgica www.fosdem.org
Solutions Linux 01-03 Marzo París, Francia www.solutionslinux.fr
Linux Park CeBIT 2005 10-16 Marzo Hannover, Alemania www.cebit.de/homepage_e
O’Reilly Emerging Technology Conference 14-17 Marzo San Diego, CA, EE.UU. conferences.oreillynet.com/etech
Novell BrainShare 2005 20-25 Marzo Salt Lake City, UT, EE.UU. www.novell.com/brainshare
YAPC::Taipei 2005 26-27 Marzo Taipei,Taiwan taipei.pm.org
LinuxWorld Conference & Expo, Canada 18-20 Abril Toronto, Canadá www.linuxworldcanada.com
MySQL Users Conference & Expo 2005 18-21 Abril Santa Clara, CA, EE.UU. www.mysql.com/news-and-events/users-
conference
linux.conf.au 18-23 Abril Canberra, Australia conf.linux.org.au/
3rd International Linux Audio Conference 21-24 Abril Karlsruhe, Alemania www.zkm.de:81/lac
Información de Contacto
Director Para el Resto del Mundo Si bien se toman todas las medidas posibles para
Paul C. Brown Brian Osborn garantizar la precisión del contenido de los artículos
Coolaboradores ads@linux-magazine.com publicados en Linux Magazine, la editorial no se
Paul C. Brown, Miguel Atencia, Juan Rafael Fernán- Tel.: (+49) 6509 910 495 hace responsable de imprecisiones aparecidas en la
dez, Pedro Orantes, José María Ruíz Fax.: (+49) 6509 910 497 revista. Asimismo, Linux Magazine no comparte
Director Editorial necesariamente las opiniones vertidas por sus
Traductores colaboradores en sus artículos. El riesgo derivado
Paqui Martín Vergara, Paul C. Brown, Jesús Reyes Paul C. Brown
del uso del DVD y el material que contiene corren
Delgado, Antonio Rueda. Director de Producción por cuenta del lector. El DVD es estudiado escrupu-
Maquetación Hans-Jörg Ehren, losamente para confirmar que está libre de virus y
Judith Erb, Elgin Grabe, Klaus Rehfeld hjehren@linux-magazine.com errores.
Diseño de Portada Subscripciones: www.linuxmagazine.com.es/
Pinball, info@pinball-werbeagentur.de magazine/subs
Copyright y Marcas Registradas © 2004 Linux New
Publicidad Precios Subscripción Media Spain, S.L. Linux New Media Spain S.L. prohíbe
www.linuxmagazine.com.es/pub/ (12 números + 1 DVD cada 3 números) la reproducción total o parcial de los contenidos de
Para España España: 49,50 € Linux Magazine sin su permiso previo y por escrito.
Paul C. Brown Resto del Mundo: 74,46 € Linux es una Marca Registrada de Linus Torvalds.
pbrown@linuxmagazine.com.es Tel.: (+34) 951 010 556
pbrown@linuxnewmedia.es Fax.: (+34) 951 010 516 Impreso en Alemania
Tel.: (+ 34) 951 010 556 subs@linuxmagazine.com.es
Móvil.: (+ 34) 655 036 836 Linux Magazine
Fax.: (+ 34) 951 010 516 Impresión: Dierichs Druck + Media GmBH
Linux New Media Spain,
Jillian Kay, S.L. Avda. Juan López Peñalver, 21 Distribución: SGEL
jkay@linuxmagazine.com.es 29590 - Campanillas Málaga
Tel.: (+ 34) 952 402 877 ESPAÑA
Móvil.: (+ 34) 630 624 926 info@linuxnewmedia.es
Para Alemania, Austria y Suiza Tel.: (+34) 951 010 556
Osmund Schmidt Fax.: (+34) 951 010 516
anzeigen@linux-magazine.com www.linuxmagazine.com.es - España
Tel.: (+49) 6335 9110 www.linux-magazine.com - Mundo
Fax.: (+49) 6335 7779 www.linux-magazine.de - Alemania
94 Número 01 www.linuxmagazine.com.es
Humor LINUX MAGAZINE
Hechos Patentes(P)
E
l parlamento de la Comunidad estar de la sociedad, las actividades
Económica Europea ha llevado a humanas se dividen en “patentables
cabo un espectacular salto hacia básicos no gravables” (PBNGs) y
delante en lo que se refiere a jurispru- “patentables elaborados gravables” (o
dencia relacionada con las patentes: tras PEGs). Patente no gravable es aquella
un acuerdo unánime en la votación que se considera de “necesidad fisiológi-
sobre la nueva Ley de Patentabilidad de ca básica” y se adjudican al estado. Para
Actividades (LPA), se amplia el marco cada “patente gravable”, el patentente
legal de la patentabilidad para englobar (individuo, organización o empresa que
en él, no sólo productos, procesos e pretenda registrar una patente) ha de
ideas, sino todas y cada una de las activi- solicitar y abonar una licencia de uso de
dades humanas. una de las actividades PBNG. A contin-
“Con esta medida” declaró el presidente uación, según el tipo de actividad que se
Comisión en Pro de la Patentibilidad de desee patentar, tendrá que solicitar una o
las Actividades Humanas (CPPAH), varias licencias que elaboran sobre cada actividades de una manera consistente
Adolfo Fetuccinni “pretendemos impul- uno de los PEGs cedidas a las entidades son las grandes corporaciones empresar-
sar la estancada actividad económica en privadas que las solicitaron en su día. iales (Microsoft, I0BM, Sun) y organis-
nuestra comunidad y ponernos un paso Estas entidades pueden, libremente, mos sin ánimo de lucro (SGAE, RIAA)
por delante de otros áreas económicas otorgar o denegar licencias sobre sus que ya han demostrado en el pasado su
competitivas” dijo, en clara alusión a los patentes, cederlas gratuitamente o por responsabilidad civil para con el bien
Estados Unidos. Además, para que la un canon y, en este último caso, estable- social de la mayoría de los ciudadanos.
aplicación práctica de la ley no se vea cer libremente la cuota de la misma Sin embargo, debido a problemas con
impedida por obstáculos burocráticos, se según sus propios criterios. Por ejemplo, patentes solicitadas, ésta es la última
crea el modelo de la “patente rápida”, imaginemos que una empresa pretenda columna de esta sección, así como el fin
donde a una corporación solicitante se le patentar el “andar a pasitos cortos y de de la mayor parte de la industria de la
exime de tener que demostrar la puntillas a lo Chiquito de la Calzada”. comunicación tal y como la conocemos,
propiedad intelectual sobre la actividad a Primero tendría que obtener licencia de ya que, si bien la actividad de pensar se
patentar: su propiedad sólo será exami- la patente nº EU34362-22-9008176788 incluye bajo el epígrafe de “actividad
nada si es contestada por un organismo genérica para “desplazamiento motor patentada no gravable”, la actividad de
oficial u otra empresas, abriendo de paso frontal bípedo”. A continuación tendría expresar lo que uno piensa es actividad
nuevas vías de negocio basadas en mod- que solicitar la licencia de la actividad de patentada gravable… y tú intenta
elos litigantes y estimulando la contrat- “Andar” propiamente dicha (patente nº difundir tus ideas por algún medio, ya
ación de abogados, un sector éste en AC0997-22-8989943812, cedida a sea impreso©(P), electrónico® o por palo-
clara recesión. Las actividades re- “Andares y Caminares, C.B.”), la de ma mensajera™(P), y es que te funden los
gistradas como patentes rápidas son “Pasos Cortos” (patente nº AC0997-22- plomos™, colega™. ■
gravables a partir del día en que se solici- 2851734788, cedida a la misma entidad
tan. que la anterior) y la de “Puntillas” GLOSARIO
La LPA, revolucionaria por su atre- (patente nº MG0743-22-3260762311,
impatente (adj.) dícese de persona física o
vimiento, establece que toda actividad cedida a “The Motion Group, Spain legal que no tiene ningún patente a su nom-
humana es susceptible de ser patentada. S.L.”). Este mecanismo así establecido bre. Ejemplo de uso:“Ya sé que no es cosa de
Sin embargo, en aras de asegurar el bien- impide el abuso del sistema. Aunque los risa, pero ahí donde lo ves, es impatente™(P)”.
PBNGs son relativamente asequibles patentado (sust.) persona física o legal que
Ejemplos de Actividades (entre unos 600 y 800 euros, en según acumula gran cantidad de patentes a su
Humanas Patentadas que países de la unión), los gravámenes nombre. Ejemplo de uso:“Está forrado. Es
públicos y privados en los que se pueden todo un patentado®”.
No gravables Gravables prepatente (adj.) dícese de aquel/la que se
incurrir por la acumulación de licencias
Sentir Escozor Rascarse opone al estado de patentabilidad total y
Comer Cocinar,Masticar,Deglutir
de patentes hace impracticable una
añora tiempos anteriores. Ejemplo de uso:
Defecar Hacerlo en un inodoro
“avalancha” de patentes por parte de
“Cuando te comportas de una manera tan
individuos privados desaprensivos y con
Limpiarse prepatente™®© no hay Dios(P)™ que te
Sentirse Estafado Manifestarlo pocos escrúpulos. De hecho, las únicas aguante”.
entidades que pueden aspirar a patentar
www.linuxmagazine.com.es Número 01 95
DVD Fedora Core 3
Fedora Core 3
Durante años, Red Hat fue con diferencia la distribución Linux
E
n este sentido, Red Hat siempre eración de distribuciones que vivimos ios a los ofrecidos oficialmente por Red
trato con mimo a sus usuarios: hoy en día, y durante mucho tiempo, se Hat.
inventó el sistema de paquetes dividieron las nuevas distros que iban A pesar de los llantos de los más
rpm, el cual facilitaba enormemente la apareciendo en Debian-based y Red Hat- agoreros, Fedora prosperó. Hoy en día
instalación de software y que ha sido based. De entre estos últimos podemos siempre ocupa algún puesto entre los
adoptada por una amplia variedad de distinguir distros tan populares como: cinco primeros del ranking de las distros
distribuciones, desde Mandrake hasta Mandrake, SuSE y, hoy en día, Fedora. más populares. Es un sistema operativo
SuSE. Desde hace ya algunas versiones, De hecho, Fedora es la distribución maduro, estable y llena de recursos.
se ha adoptado el sistema de instalación heredera más directa de Red Hat. Cuenta, no sólo con el apoyo de Red Hat,
Anaconda, que reduce sensiblemente el Cuando Red Hat anunció en el 2003 que sino con el apoyo de una comunidad
estrés que suponía hasta entonces la no iba a seguir produciendo su versión amplia y experta, lo que garantiza su
instalación de Linux en una nueva gratuita de su sistema operativo, sino supervivencia mucho más que lo que
máquina, y que la gente de Debian están que iba a concentrar sus esfuerzos en la pueda hacer una compañía privada.
pensando en incorporar a su propio sis- comercialización de soluciones empre- Y Linux Magazine te lo trae en DVD.
tema. Y desarrollaron mil y un asistentes sariales de pago, muchos usuarios se ras-
para ayudar al usuario a configurar, ajus- garon las vestiduras mientras se pregunt- Instalación
tar y poner en funcionamiento todas las aban que iban a hacer ahora. Tal fue la Como ya mencionamos en la sección
características del sistema. consternación, que pocos prestaron su anterior, Fedora cuenta con el instalador
Tanta fue su influencia en los primeros debida atención a la segunda parte del gráfico Anaconda para facilitar la insta-
años de Linux que, a partir de la prolif- comunicado de prensa donde se explica- lación del sistema en el disco duro.
Figura 1: Podemos elegir el perfil del SO que vayamos a instalar Figura 2: Elección de la franja horaria
96 Número 01 www.linuxmagazine.com.es
Fedora Core 3 DVD
Una vez elegidos detalles como el Características Stateless Linux no será de utilidad para
idioma, tipo de instalación (“Personal”, Fedora conserva el preciosismo y ele- grupos de usuarios donde cada uno tiene
“Estación de Trabajo”, “Servidor” o “A gancia de los escritorios heredados de unas necesidades muy específicas y
Medida” - ver Figura 1), tipo de teclado, Red Hat, pero si hay alguna cosa que dis- diferenciadas de las de los demás o
zona horaria y locales (ver Figura 2) y tingue el nuevo Fedora Core de otras dis- donde se tenga instalado hardware muy
ratón, pasamos a particionar el disco tribuciones, es en el apartado de los asis- divergente, pero nos podemos imaginar
duro (de ser necesario). Como en tentes. Fiel a la tradición de Red Hat de el ahorro de coste, de tiempo y recursos
cualquier distribución moderna, Ana- acercar Linux al usuario, Fedora Core 3 humanos que supone el uso de Stateless
conda utiliza para este proceso, una her- implementa asistentes para (casi) todas Linux en entornos como un centro de
ramienta visual que permite establecer las funcionalidades que queramos con- soporte telefónico con centenares de
exactamente el qué y el cómo vamos a figurar en nuestro equipo, desde impre- puestos, donde todas y cada uno de las
distribuir las particiones en nuestro soras a escáners en red y dispositivos máquinas ha de ser exactamente igual y
disco duro. Una vez realizadas las deci- inalámbricos. Por supuesto, que los más tener la misma configuración que la del
siones, pasamos a seleccionar los paque- expertos siguen pudiendo abrir una ter- vecino. Algo que hará a los golosos del
tes (si no deseamos que Fedora instale minal y correr vi o Emacs para acceder a software relamerse de anticipación:
los escogidos por defecto - ver Figura 3) los archivos de configuración si así lo Fedora Core 3 no sólo soporta la insta-
y Anaconda empieza a copiarlos al disco desean. Esto sigue siendo Linux después lación nativa de paquetes rpm, sino que
duro (ver Figura 4). de todo. Otra de las características más viene preparado para enlazar con
Una vez acabada la instalación de interesantes del nuevo Fedora es el que depósitos de software empaquetados en
paquetes, es el momento de dotar al se refiere al apartado denominado formato apt y YUM. Esto significa que, si
usuario root de una contraseña y de Stateless Linux. Bajo esta bastante oscu- no encontramos la aplicación que bus-
crear usuarios de privilegios más bajos ra denominación, se esconde un proyec- camos en el formato nativo de Fedora
para el trabajo del día a día en la to que hará las delicias de todo admin- (improbable), siempre podemos echar
máquina. A continuación podemos con- istrador de sistemas que tenga varias mano al vasto número de paquetes apt
figurar el hardware, estableciendo res- máquinas a su cargo y quiera mantener disponibles para Debian y todos sus
olución y número de colores de la pan- una instalación sincronizada e idéntica clones. ■
talla, configuración de red y configu- en cada una de ellas. Con las herramien-
ración de impresoras. tas Stateless Linux proporcionadas por Requisitos del Sistema
A continuación establecemos como Fedora Core, un administrador de sis-
Procesador: Ordenador Pentium o equiva-
deseamos arrancar el sistema (LILO ha temas puede realizar una instalación en
lente; 200 MHz o mayor para sistema en
sido eliminado, sólo queda GRUB, lo que una máquina “maestra” y repetir esa modo texto; 400 Mhz Pentium II o mayor
simplifica las cosas para los usuarios misma instalación en tantas máquinas para sistema en modo gráfico.
noveles. Y si grabamos el gestor de quiera con un mínimo esfuerzo. No sólo
Memoria: 64 MB mínimo para sistema en
arranque el MBR, disquete, o donde sea) eso, sino que las máquinas esclavo modo texto; 192 MB mínimo para sistema
y el sistema rearranca. Si todo ha ido nunca tendrán que ser actualizadas o en modo gráfico.
bien (y no hay ningún motivo para pen- reconfiguradas individualmente. En vez
Hard Disk: 620 MB para instalación mínima
sar que no haya sido así), tendremos el de eso, se actualiza el “maestro” y todos a medida; 1.1 GB para instalación servidor; 2.3
nuevo sistema en pleno funcionamiento los cambios realizados en esta máquina GB para sistema de escritorio personal; 6.9
y podremos disfrutar de todo el potencial se aplican automáticamente a las GB instalación a medida completa.
de esta estupenda distribución. máquinas “esclavo”. Se entiende que
www.linuxmagazine.com.es Número 01 97
PRÓXIMO NÚMERO Número 2
Próximo Número
Especial Hardware Linux User
¿Un ordenador silencioso en la sala de en un completo centro de entreten- Seguiremos con nuestro cursos de XUL y
estar? ¿Es posible? Si pensamos que un imiento. Sin embargo, el ruido de los presentaremos nuevas aplicaciones y
ordenador ya es mucho más que un ventiladores y discos duros y lo poco herramientas que nos harán la vida más
ordenador, no sólo ha de ser posible con estético de sus carcasas pueden ser un fácil. Continuaremos nuestra serie sobre
la tecnología moderna, sino que es impedimento para colocarlo en el salón LaTeX, ahondando en su utilidad para
deseable. Acoplándole tarjetas de tele- de nuestra casa. Pero Linux Magazine te representar ecuaciones e imágenes.
visión, reproductores da la solución: un amplio reportaje Seguiremos conociendo la línea de
y grabadores de donde se hace un repaso a todos los dis-
DVDs, altavoces positivos que pueden convertir tu PC en
y demás hard- un equipo que no desentone con el sofá
ware se y las cortinas. No sólo eso, sino que des-
convierte cubrirás como explotar tu cámara digital
bajo Linux, que impresora más te con-
viene y como sacarle el máximo a tu
grabadora de DVDs.
Desarrollo
En la sección dedicada a la progra-
mación, continuaremos con la segunda
parte de la creación de un juego y vere-
mos como ampliar nuestro interfaz
utilizando la librería curses. Ten-
dremos otra aplicación PHP con el
que jugar y más interesantes comandos para que todos puedan
scripts realizados en Perl y aprovechar el poder de las instrucciones
Python. del shell.
SysAdmins Noticias
Los administradores de sis- También traeremos las noticias más can-
temas podrán aprender los dentes del mundo Linux, un calendario
diversos métodos para filtrar de eventos completo, información sobre
contenido web a través de un los últimos avances en el kernel e inse-
proxy, distribuir correo de man- guridades de las aplicaciones e
era eficiente por medio de un información sobre los proyectos más
cluster y detectar intrusiones en el interesantes que se llevan a cabo en el
sistema con Sleuthkit. campo del Software Libre.
© 2004 Red Hat, Inc. All rights reserved. “Red Hat,” the Red Hat “Shadowman” logo, and the products listed are trademarks or registered trademarks of Red Hat,
Inc. in the US and other countries. Linux is a registered trademark of Linus Torvalds.