DVD
Linux Mint lleva encabezando el
“Top 100” (DistroWatch) desde
hace ya algunos meses, siendo la
primera distro comunitaria, no apoyada
por ninguna empresa en particular, que
consigue mantenerse consistentemente
en este puesto en mucho tiempo.
A pesar de basarse en Ubuntu, Linux
Mint está siguiendo su propio camino en
muchos aspectos. Por ejemplo, deci-
diendo no implementar Unity, sino una
versión muy modificada de Gnome3,
con un aspecto muy similar a Gnome2.
Esta decisión se basa en el hecho de que
los desarrolladores consideran que se
facilita la transición de un concepto de
escritorio a otro. También trae de serie
otro escritorio llamado MATE (en honor
da la tradicional bebida uruguaya), que
es un fork para seguir desarrollando
Gnome2.
Por la cara B traemos OpenSUSE 12.1,
una de las distros tradicionalmente gran-
des que incluye muy interesantes nove-
dades. Por citar dos, y aparte de los nue-
vos escritorios KDE 4.7 y Gnome 3.2,
OpenSUSE es la primera en implementar
gestión de color para estos escritorios,
una tecnología habitual en plataformas
Mac y que unifica el aspecto de color en
todos los dispositivos. También viene
con Snapper, una tecnología basada en el
nuevo sistema de ficheros Btrfs que per-
mite ver y volver a versiones de archivos
anteriores sin tener que implementar
aplicaciones específicas para esa tarea. �
LINUX MINT “LISA”
Y OPENSUSE 12.1Este DVD es de dos caras, aunque
funciona igual que un DVD conven-
cional, es decir, el lector siempre lee
la cara que está hacia abajo. Para evi-
tar confusiones, la etiqueta de cada
distro está en la cara opuesta a la de
sus datos. Por tanto, para empezar a
usar LinuxMint 12, la etiqueta con la
palabra “LinuxMint” tiene que estar
hacia arriba, y viceversa para usar
OpenSUSE.
DVD de Dos Caras
¿DVD DEFECTUOSO?
Si crees que tu DVD está en mal estado, escríbenos a
[email protected] para diagnosticarlo o para que
te enviemos uno nuevo.
3Número 78W W W . L I N U X - M A G A Z I N E . E S
[1] Sitio de LinuxMint: http:// linuxmint.
com/
[2] OpenSUSE en Castellano: http://
www. opensuse. org/ es/
RECURSOS
Este DVD contiene dos caras, con
LinuxMint 12 por un lado y OpenSUSE
12.1 por el otro.
LinuxMint viene en versión “Live” y de
instalación, por lo que puede ser arran-
cada y probada sin instalar nada en el
disco duro. OpenSUSE sólo viene en
versión de instalación.
Para empezar a usar tu Linux, inserta el
DVD en el reproductor y rearranca el
ordenador. Si no aparece el menú del
DVD, tienes que ajustar la BIOS para
arrancar desde el disco. Para hacerlo,
normalmente has de pulsar una tecla
durante las primeras fases del arran-
que del ordenador (habitualmente F2 o
Supr), buscar el menú que permite
cambiar la secuencia de arranque de
dispositivos y colocar el lector de DVDs
en el primer lugar de la secuencia. Pos-
teriormente se guardan los cambios y
se sale de la herramienta de
configuración para que se reinicie el
arranque. Como cada BIOS es dife-
rente, recomendamos consultar la
documentación del fabricante para
realizar esta operación.
Arranque
EDITORIAL
4 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Uno de las subtramas más intere-
santes de 1984 de George Orwell
sigue los esfuerzos del partido
en el poder para crear un diccionario
definitivo de la lengua inglesa que
corresponda con la ortodoxia del régi-
men. Cabe preguntarse por qué es tan
importante la elaboración de un diccio-
nario para un régimen íntegramente dic-
tatorial y por qué es tan importante para
Orwell, que llega a dedicarle un apén-
dice en el libro.
Orwell sostiene que el control del len-
guaje es crítico para el control de los
pensamientos. No en vano tenemos un
diálogo interior que se expresa con pala-
bras. De hecho, el esfuerzo de los acadé-
micos del régimen totalitario descrito en
el libro es eliminar palabras y reducir
acepciones para dejar un lenguaje de uti-
lidad puramente transaccional, que
impida que las voces dentro de nuestras
cabezas puedan expresar ninguna forma
de disensión.
Desafortunadamente, no es sólo en la
distopía Orwelliana donde se busca la
eliminación de vocablos, y es doble-
mente desafortunado que no sea sólo el
estado el que se encarga de ese sucio tra-
bajo. Ahora mismo, la palabra “libre”
está siendo objeto de un ataque concer-
tado y premeditado para su descrédito y
eliminación del contexto de la industria
del software. Se pretende cambiar por el
de “abierto”, mucho más manipulable,
algo que permite que, de manera similar
al término “neutralidad”, pueda ser
retorcido para que signifique todo o nada
y, a menudo, ambas cosas a la vez.
Nunca oirás ninguna de las grandes
corporaciones de software (o hardware)
hablar de nada que no sea “código
abierto”, ni siquiera a las consideradas
como las más amigables con la tecnolo-
gía. Ni Intel, ni IBM, ni Oracle, ni Google
se atreven a usar “Software Libre” en sus
notas de prensa o descripciones de pro-
ductos. Es una medida preventiva:
“libre” es un término demasiado poco
ambiguo.
Abierto, por otro lado, es otro cantar.
Hace unas semanas asistí a una confe-
rencia de un representante de Microsoft
que pretendía vender la moto de lo
“abierto” de la empresa sin que ninguna
de las políticas que mencionó contem-
plara el mostrar ni una línea de código
de sus productos. Unos días después un
profesor de universidad me confesaba
que no se atrevía a utilizar el término
“Software Libre” en una encuesta por-
que no era “políticamente correcto”.
Si éste es el caso, lo mojigata ñoñería
de lo PC debe ser descartada definitiva-
mente de una vez por todas. Asociar la
liberación de código con algo ofensivo es
totalmente injustificable y demostraría
que a los censores modernos les mueven
las mismas motivaciones que a los anti-
guos: el control y los intereses.
Curiosamente, la disputa sobre el uso
de la palabra “libre” no trasciende fuera
del ámbito TI. Es más, no trasciende
fuera del ámbito TI que tenga que ver
con el software libre. Es cierto que el tér-
mino “código abierto” fue acuñado en el
seno de la comunidad (por razones que
ahora parecen triviales si se compara con
el daño que puede ocasionar), pero tam-
bién es cierto que ha sido apropiado por
agentes que no tienen ningún interés en
que el modelo al que originariamente
describe (en principio y a efectos prácti-
cos, idéntico al del Software Libre) per-
dure. Tal y como demuestra la campaña
de Microsoft “Building Bridges” citada
arriba, considerándose completa la pri-
mera fase consistente en denigrar el tér-
mino “libre”, la segunda, consistente en
redefinir “abierto”, ya está en marcha.
Pero, insisto, es dentro de la comuni-
dad y, sobre todo en la industria del Soft-
ware Libre, donde el debate “libre” ver-
sus “abierto” más se disputa. A la mayo-
ría de las empresas a las cuales la tecno-
logía podría servir les da igual un tér-
mino u otro, en la mayoría de los casos
ni siquiera saben la diferencia entre free
software y freeware, y en ese contexto la
palabra libre es de todo menos “sucia”.
No puede ser de otra manera. El
empresario que alegue que “no le
importa la libertad”, está cayendo en
una falacia similar a la del empresario
que declara que “una empresa sólo está
para hacer dinero”. Si volvemos a
Orwell, uno de los fundamentos de la
tiranía es la ausencia de libertad, y según
Christopher Hitchens, una definición de
tiranía es que es aquel régimen en el que
las leyes o se basan en principios arbitra-
rios, son en sí arbitrarias, se aplican de
manera arbitraria, son imposibles de
cumplir, o una combinación de todo lo
anterior. Aplicado al tema que nos
ocupa, un principio arbitrario es, por
ejemplo, que diferentes ciudadanos, por
mor de su extracción social, sexo, raza o
credo, tengan diferente trato ante la ley.
Imagina por ejemplo que a los gitanos o
mujeres, por citar a dos colectivos que
han sido tradicionalmente discriminados
en España, no se les permitiera regentar
un negocio. Una aplicación arbitrara de
la ley es que uno, por ser familiar de un
alto funcionario por ejemplo, pueda
optar a un licencia de obra que se
deniega a los demás.
Por tanto, las tiranías, es decir los regí-
menes donde los ciudadanos no disfru-
tan de libertad, son intrínsecamente
corruptos, y una buena vara para medir
el grado de libertad de una sociedad es
medir su corrupción: a más corrupción,
más represión. La correlación entre
corrupción y tiranía es fácilmente com-
probable empíricamente: no tenemos
más que examinar los índices de percep-
ción de corrupción publicadas por Trans-
parency International. Su lista muestra
que, mientras que hay alguna democra-
cia que suspende en el ranking, no hay
ninguna dictadura que apruebe.
Hay cínicos que alegarán que las dicta-
duras, aunque “malas” para el indivi-
duo, son buenas para los negocios, y
probablemente estén pensando en
China. ¡Oh, sí, China! Puede que la falta
de libertades fundamentales funcione a
nivel de país (aunque no siempre:
véanse Corea del Norte o Ruwanda),
pero permite que dude que este régimen
autocrático en el que, siguiendo la defi-
nición de Hitchens, las reglas son arbi-
trarias y la vasta mayoría de la población
vive en un estado de semi-esclavitud, y
siendo uno de los países con mayor
NO LO DIGAS…
Continúa en página 89 ���
corrupción del mundo, sea un modelo sos-
tenible para el desarrollo económico a largo
plazo. Desde luego, como siempre ocurre
en estos sitios, los negocios funcionan muy
bien para quienes participan en la corrup-
ción del sistema, pero no se puede construir
un mercado saludable a base de chanchu-
llos, soborno, estafas, negociaciones a
puerta cerrada, nepotismo, apadrinamiento
y falsificación de estadísticas.
En esa economía no rige la industria los
emprendedores más competentes, sino los
que más políticos tienen comprados. Y su
fuerza es la fuerza bruta, la de la explota-
ción sistemática y deshumanizante de sus
semejantes. Eso funcionará durante algún
tiempo, pero es un sistema inestable abo-
cado al fracaso.
Este es el quid de la cuestión: una econo-
mía, para ser consistentemente próspera ha
de ser estable. No es casualidad que las eco-
nomías con legislaciones más justas, más
cimentadas en los derechos fundamentales
y en el sentido común, es decir, más libres,
suelan ser economías más estables, con una
entorno de tu negocio (o doméstico, que lo
mismo da) de la manera que consideres
oportuna, son cosas intrínsecas al software
libre, pero no al software propietario.
Y son libertades, no “aperturas”.
Así que la próxima vez que creas que es
más apropiado hablar de “abierto” en vez
de “libre” porque temes ofender a un
empresario, piénsalo muy bien, que es muy
fácil quedar como un tonto en esta cues-
tión. Decir que no hace falta libertad para
un negocio, es como decir que no hace falta
oxígeno. Si los empleados pueden pasar sin
respirar, nada que objetar, pero permite que
lo dude.
Si no te convence, considera relocalizar tu
propia empresa a Corea del Norte y ya me
dirás cómo te va. ■
Paul C. Brown
Director
EDITORIAL
79Número 78W W W . L I N U X - M A G A Z I N E . E S
mayor igualdad social y una mayor prospe-
ridad en general.
Incluso si bajamos varios niveles de lo
macro a lo microeconómico de las empresas
individuales, es fácil ver cómo la libertad,
incluso la del software, es, por lo general,
inmediatamente beneficiosa para el nego-
cio. Stallman alega que renunciar a la liber-
tad en el código conlleva inevitablemente a
la renuncia de la libertad en otros ámbitos.
Es fácil ver que tiene razón: estamos habi-
tuados a oír cómo muchas de las “cajas
negras” del software propietario violan sis-
temáticamente la privacidad de sus usua-
rios remitiendo datos confidenciales sobre
sus actividades a terceros. El derecho a la
privacidad en las comunicaciones, el dere-
cho a mantener los datos de la empresa, ya
sean los detalles de los clientes, los planes
de marketing o las especificaciones de un
nuevo producto, constituyen un derecho
que no se puede garantizar con software
propietario, pero sí con software libre. Y hay
más: El derecho a elegir libremente a tu pro-
veedor, a poseer el software que compras, la
libertad de usar las aplicaciones en el
⊳⊳⊳ Viene de página 4
NO LO DIGAS…
“Los abogados siguen nerviosos con
el tema de las patentes de “Carmack’s
Reverse’. Voy a escribir nuevo código
para el lanzamiento [de la versión GPL]
de Doom3.”
Un día después y como respuesta a un
seguidor que le preguntaba si no encon-
traba frustrante tener que reescribir el
código, twitteó:
“Esto demuestra la idiotez de la
patente – las solución ha consistido en
añadir cuatro líneas de código y modifi-
car otras dos.”
Finalmente, el 23 de noviembre, el
código fuente de Doom 3 se publicó bajo
licencia GPL v3. �
NOTICIAS
aquí viene el quid de la cuestión: aun-
que como su nombre indica, el algo-
ritmo fue creado y utilizado por Car-
mack para sus juegos, fue patentado por
Creative.
Cuando Creative amenazó a Id con lle-
varlos a juicio por infracción, apareció
un tercer actor, Sim Dietrich de Nvidia,
quien ya había pos-
tulado los principios
del sistema de som-
breado en una
charla de 1999.
Aún así, Id fue
obligado a pactar
con Creative y tuvo
que incorporar tec-
nologías Creative en
Doom 3 para evitar
una potencialmente costosa pelea legal.
Y así quedó la cosa… hasta que llega
la hora de liberar el código.
Después de varias demoras sin expli-
car, Carmack reveló el 16 de diciembre
en su Twitter:
Doom 3 y sus PatentesJohn Carmack creador de juegos legen-
darios como Wolfenstein, Doom y
Quake, nunca ha sentido simpatía por
las patentes de software. Después de las
tribulaciones que le han causado última-
mente, sospechamos que su desprecio
no ha hecho más que aumentar.
La historia va
como sigue: Todo
comenzó cuando
Carmack pretendió
liberar el motor
Doom 3, cosa que
había prometido
hacer, tal y como
viene haciendo
con todos los jue-
gos de su empresa,
Id. El motor contiene un algoritmo
denominado “Carmack’s Reverse” [1],
un sistema para el cálculo de sombras
en escenarios 3D y utilizado extensa-
mente en el juego (y en casi todos los
First Person Shooters posteriores). Pero
Derechos Humanos antesque Derechos de Autor
Según el Tribunal de Justicia de la
Unión Europea, la monitorización para
detectar infracciones contra los dere-
chos de autor es ilegal.
En una nota de prensa emitida por el
alto tribunal europeo se deja muy claro
que, a pesar de que los derechos deriva-
dos del copyright están muy asentados
en la jurisprudencia europea, no se dice
en ningún sitio que sean inviolables.
Sin embargo, la intimidad de los usua-
rios, incluso la de aquellos sospechosos
de utilizar redes P2P para la disemina-
ción de obras protegidas, sí lo es.
La nota viene a raíz de Scarlet
Extended SA, un proveedor de servi-
cios de Internet, contra SABAM, el
equivalente de la SGAE belga. El
segundo exigía al primero que insta-
lara una infraestructura de monitoriza-
ción para detectar violaciones cometi-
das por sus clientes.
Scarlet decidió recurrir a los tribuna-
les al entender que esto violaría un
derecho básico, el de la confidenciali-
dad de las comunicaciones de sus clien-
tes, y el Tribunal de Justicia de la Unión
Europea de Justicia le ha dado la razón.
Esta sentencia tiene profundas impli-
caciones para legislaciones que preten-
den cortar o acotar conexiones o tomar
medidas legales contra usuarios bajo
sospecha de compartir obras protegi-
das. Estas leyes, que las empresas de
medios están intentando que se imple-
menten a lo largo y ancho de Europa,
se vuelven ineficaces, ya que no se
podría contar en ningún caso con
mecanismos para ayudar a establecer si
de verdad se está produciendo la infrac-
ción. �
NOTICIAS
[1] Enlace a la nota de prensa: http://
curia. europa. eu/ jcms/ upload/ docs/
application/ pdf/ 2011-11/ cp110126en.
[2] Sentencia completa: http:// curia.
europa. eu/ jurisp/ cgi-bin/ form.
pl?lang=EN&Submit=rechercher&nu
maff=C-70/ 10
RECURSOS
[1] Carmack’s reverse: http:// en.
wikipedia. org/ wiki/ Shadow_volume
[2] John Carmack rescribe las partes
afectadas: https:// twitter. com/ #!/
ID_AA_Carmack/ status/
136614459887202305
RECURSOS
8 Número 78 W W W . L I N U X - M A G A Z I N E . E S
PORTADA • Montando un Cluster
10 Número 78 W W W . L I N U X - M A G A Z I N E . E S
pleto de servidores 1U (Figura 1). El
cluster puede ser tan pequeño como
cuatro nodos, o puede llenar un rack
completo con equipamiento. (Véase el
cuatro titulado “Especificaciones Hard-
ware” para más información sobre la
configuración hardware usada para este
artículo).
Antes de EmpezarAntes de que profundicemos sobre cuá-
les son los pasos de configuración,
comenzaremos viendo algunos puntos
sobre planificación y compra. Al ser un
programador de sistemas acostumbrado
a trabajar sólo con código, con frecuen-
cia me sorprendo por la cantidad de
problemas de logística que necesitan
considerarse en el mundo real.
Antes de que encarguemos nuestro
hardware, será mejor que pensemos
acerca de algunas cuestiones básicas.
¿Por qué necesitamos un cluster? ¿Qué
hacen nuestros usuarios? ¿Es un cluster
la solución adecuada? ¿Se han tomado
los requisitos del sistema y se ha deci-
dido una especificación base? Debere-
mos comenzar por un presupuesto ini-
cial de la marca que seleccionemos. A
partir de ahí nos moveremos hasta con-
seguir como mínimo otros dos presu-
puestos de marcas de la competencia
similares. Aún con estos presupuestos
que pueden compararse, deberemos
avanzar un poco más. Solicitaremos si
podemos ejecutar algún trabajo típico
que esperamos usar en nuestro cluster
sobre el hardware ofertado en algún
laboratorio del vendedor para poder
hacer mediciones de rendimiento. ¿Cuá-
les son los cuellos de botella de la apli-
cación? ¿podemos usar el presupuesto
inicial para maximizar el rendimiento
medido?
Antes de lanzar la orden de compra
deberemos considerar los problemas de
espacio y logísticos. ¿El hardware será
montado, cableado y verificado por el
Los clusters de computación de
alto rendimiento, High-Perfor-
mance Computing (HPC) en
inglés, se caracterizan por sus procesa-
dores de múltiples núcleos, por sus
grandes cantidades de memoria, la red
de alta velocidad y enormes almacenes
de datos – todos ellos compartidos entre
múltiples servidores montados en
racks. Los programas de usuario que se
ejecutan en un cluster son llamados tra-
bajos, y se gestionan normalmente
mediante un sistema de colas para un
uso óptimo de todos los recursos dispo-
nibles. Un cluster HPC está formado por
muchos servidores separados, llamados
nodos, que posiblemente llenan com-
pletamente un centro de datos con
docenas de racks que consumen mucha
potencia eléctrica. Los HPC se usan
habitualmente para simular modelos
numéricos o análisis de datos proceden-
tes de la instrumentación científica. En
el centro del HPC hay hardware fácil de
manejar y software de sistema gestio-
nado por los programadores de siste-
mas, los cuales permiten a los investiga-
dores concentrar sus energías en
desarrollar sus programas. Este artículo
describe un conjunto de software básico
que puede ser el punto de inicio de
nuestro propio cluster HPC
¿A qué se parece un cluster HPC? El
cluster típico para un grupo de investi-
gación puede contener un rack com-
vendedor? ¿Dentro o fuera de nuestro
local? ¿Hemos reservado espacio
suficiente en el rack para alo-
jar el equipo? Un cluster
genera mucho calor,
así que es
importante
la locali-
zación
de la
sala de
servi-
dores.
Este espa-
cio debe
tener una
capacidad de
enfriamiento adecuada.
¿Estamos intercalando los ser-
vidores que más calor disipan en la
sala de servidores? Una vez decidido el
lugar, deberemos pedir cita para un pre-
supuesto de un electricista, sin olvidar
gestionar todas las peticiones necesarias
para el alta de la red, el inventario y las
tarjetas/ llaves de acceso para los princi-
pales administradores del sistema. No
importa cuánto planifiquemos, al final
siempre surgirá algún imprevisto.
Deberemos asegurarnos de plantear
un esquema de copias de seguridad e
incluirlo en el presupuesto. Los backups
pueden duplicar el coste de almacena-
miento, y pueden fundir el resto del pre-
supuesto, si aún queda algo. Siempre
deberemos asegurarnos de que tenemos
la configuración rack adecuada, el vol-
taje correcto para los PDUs y los enchu-
fes apropiados, y sólo los sistemas nece-
sarios conectados al UPS. También
deberemos asegurarnos de antemano de
que hemos adquirido todas las licencias
del software y los medios de instala-
ción. Si es posible, solicitaremos al ven-
dedor que lo ensamble y lo integre fuera
de la sala. El vendedor debe proporcio-
nar un equipo entrenado, con un seguro
de servicio de entrega para entregas al
HPC del mundo real paso a paso
DE CERCAMontamos un cluster HPC real con Kickstart, SSH, Son of Grid Engine y otras herramientas libres.
POR GAVIN W. BURRIS
Gavin W. Burris es programador senior
de sistemas de la Escuela de Artes y
Ciencias de la Universidad de Pennsyl-
vania. En su puesto en el grupo de
Seguridad de Sistemas Unix trabaja
con clusters HPC, gestión de habita-
ciones de servidores, ordenadores de
escritorio de investigación, gestión de
contenidos web y sistemas de almace-
namiento masivo. Mantiene un blog
en: http:// idolinux. blogspot. com
EL AUTOR
interior de la sala donde se ha reser-
vado la zona de instalación, mediante
un camión con grúa, y elimina-
ción de los residuos. Un rack ya equi-
pado puede pesar literalmente una
tonelada. Si se cae en el camión de
entrega, seguramente no querrás ser ni
el responsable ni el que está debajo. Y
otra cosa, ya sabemos que NO es posi-
ble realizar entregas no programadas
dentro de la sala de servidores.
La ConfiguraciónUna vez tengamos todo planificado,
hayamos seleccionado al vendedor y
realizado la entrega del sistema, es hora
de la instalación del software y su
configuración. Para algo tan complicado
como un cluster HPC, todas las configu-
raciones que vamos a mostrar pueden
cambiar, pero la configuración de ejem-
plo descrita en este artículo es sufi-
ciente para dar una idea del tipo de
decisiones a las que nos enfrentaremos
si lo intentamos por nuestra cuenta.
Para este artículo hemos supuesto
que se tienen ciertos conocimiento en la
gestión y configuración de entornos
Linux. La mayoría de los comandos
mencionados en él están documentados
en su página de manual, aunque tam-
bién podemos buscar información adi-
cional en la documentación de Red Hat
Enterprise Linux [1] o en la de CentOS
[2]. Concretamente, la Guía de Instala-
ción de Red Hat Enterprise Linux
[3] y la sección de instalaciones
con Kickstart (para instala-
ciones desatendidas) [4]
son lecturas
importantes.
Los pasos
esenciales para
levantar y hacer que
funcione nuestro cluster
HPC son:
1. Crear el nodo de admi-
nistra-
ción y
configu-
rarlo para
que actúe
como servidor
de instalación
para los nodos
de cómputo
del cluster.
Esto incluye
configurar el
sistema para
recibir cone-
xiones PXE de
cliente, así
como la
configuración
necesaria para
posibilitar las
instalaciones
automáticas
desatendidas
con Kickstart.
2. Arrancar los
nodos de
cómputo uno
a uno, conec-
tándolo al ser-
vidor de admi-
nistración y
lanzando la
instalación.
3. Cuando tenga-
mos todos los
nodos encen-
didos y en
funciona-
miento, insta-
lar un sistema de colas de trabajo
para hacerlos funcionar conjunta-
mente como un cluster de alto ren-
dimiento.
En este punto, asumiremos que tene-
mos el rack de equipos perfectamente
cableado (Figura 2) y enchufado a la
corriente, y alojado en las instalaciones
adecuadas. Llamaremos al sistema com-
pleto Fiji, un nombre corto y fácil de
escribir. Antes de ir a la sala de servido-
res, el primer paso es descargar y que-
mar un DVD de instalación de CentOS
para 64-bits [5], cuya versión actual es
la 5.6.
Una vez tengamos el disco, pasare-
mos a instalarlo en el nodo de adminis-
tración, que actuará como servidor de
instalación desatendida para automati-
zar la instalación de todos los nodos de
Montando un Cluster • PORTADA
11Número 78W W W . L I N U X - M A G A Z I N E . E S
• 42U rack
• 1U KVM
• 3000VA UPS 208 Volt
• Dell PowerConnect 6248 gigE switch
• 2x Dell PowerEdge R610 para los nodos de cabeza/ identifica-
ción y almacenamiento / administración
• 2x Dell PowerVault MD1000 para 12TB de almacenamiento
• 29x Dell PowerEdge R410 nodos de cómputo
• 29x quad data rate HBAs & 1x switch InfiniBand interconec-
tado de fábrica de QLogic
Especificaciones Hardware
Figura 1: Un cluster nuevo aún sobre el palé.
PORTADA • Montando un Cluster
14 Número 78 W W W . L I N U X - M A G A Z I N E . E S
cluster de mayor
tamaño.
Los nodos de
administración/
almacenamiento y
el nodo “cabeza”/
identificación tie-
nen múltiples
interfaces Ether-
net. La primera
interfaz (eth0)
conecta a la red
privada interna
(192.168.1.0)
mediante un
switch de un giga-
bit, donde sucede
toda la comunica-
ción interna entre
los nodos y las
interfaces de ges-
tión. La segunda
interfaz Ethernet
(eth1) conecta la
red pública para
usuarios remotos y
entrada del admi-
nistrador. Es
importante tenerlo
en cuenta, ya que
en este caso, las placas base de gestión
de tarjetas controladoras (BMC/ RAC),
que se controlan con IPMI [7], están
configuradas para compartir el primer
puerto Ethernet. Esto significa que vere-
mos dos direcciones MAC diferentes y
dos IPs diferentes en el puerto eth0;
queremos que ambas estén en la red
interna.
Comenzaremos enganchando el con-
mutador teclado-vídeo-ratón (KVM) al
nodo de administración y lo encendere-
mos. Comprobaremos la configuración
de la BIO, estableceremos una contra-
seña y eligiremos un orden en las uni-
dades de arranque. Luego configurare-
mos el BMC, estableciendo un nombre
de usuario para el administrador y una
contraseña, y configuraremos la direc-
ción IP interna del dispositivo.
Todo debería ser redundante en los
nodos de administración/ almacena-
miento y “cabeza”/ identificación,
incluidas las unidades raíz, que almace-
narán el sistema operativo. Configurare-
mos un espejo RAID 1 para la unidad
raíz interna mediante la BIOS RAID.
En este punto necesitaremos configu-
rar los gabinetes de almacenamiento de
cómputo que forman el resto del cluster.
Aunque este artículo está orientado a la
instalación de un cluster con hardware
suficiente para cubrir las necesidades
de una empresa, no hay razones para
que uno no pueda seguir estos pasos
sobre ordenadores de escritorio conec-
tados mediante un modesto hub de
10Mb, al menos mientras los servidores
sean capaces de arrancar desde una red
con PXE [6]. PXE (siglas de Preboot
eXecution Environment) nos permite
instalar y configurar los nodos de cóm-
puto sin tener que parar y arrancar cada
nodo desde un CD.
Cuando desplegamos un cluster
multi-usuario, donde los usuarios se
identifican mediante SSH, VNC o NX, es
buena idea tener un nodo ‘cabeza’
separado para entradas al sistema inter-
activas. Para un cluster de tamaño
pequeño o mediano, no es mala idea
combinar lo que se conoce como nodo
de almacenamiento con el nodo de
administración. En este artículo asumi-
remos que el cluster consta de un solo
rack de equipos completo, pero pode-
mos extender la técnica descrita aquí
para replicar el proceso N veces para un
datos externos. Nuestro laboratorio
tiene unos 10TB, que hemos configu-
rado como RAID 6 mas uno de repuesto
de emergencia. Recomendamos que se
inicialice completamente el almacena-
miento antes de continuar. Después de
la completa inicialización del RAID,
apagaremos el nodo y desenchufaremos
el gabinete RAID externo antes de insta-
lar el sistema operativo, ya que el parti-
cionador del instalador del sistema
puede tener problemas con discos duros
muy grandes.
Montar el Nodo deAdministraciónEl primer paso es instalar el nodo de
administración que hará también de
servidor de almacenamiento y de insta-
lación desatendida del cluster con
Kickstart. Para comenzar con la instala-
ción del nodo de administración, inser-
taremos el DVD de instalación de Cent -
OS en el sistema que hará de nodo de
administración. Arrancaremos el insta-
lador y dejaremos casi todas las opcio-
nes por defecto. Los únicos pasos dife-
rentes son: establecer una contraseña
para el arranque, la configuración de los
dos interfaces de red y cambiar SELinux
a modo permisivo. Para este ejemplo
llamaremos al nodo de administración/
almacenamiento fijistor, con IP interna
192.168.1.2. Para la selección de paque-
tes, no tocaremos los seleccionados por
defecto. Nótese que los paquetes cluster
en el instalador anaconda de CentOS no
se refieren en este contexto a un cluster
HPC.
Una vez finalizada la instalación, apa-
garemos el sistema, engancharemos la
unidad de RAID externa, quitaremos la
opción de la BIOS de “arrancar desde
DVD” y lo encenderemos. Ya podemos
admirar la nueva ventana de login.
Observe que podemos completar la
mayoría de los siguientes pasos de
forma remota usando SSH. La única vez
que necesitaremos estar físicamente en
la sala de servidores es cuando estemos
tocando la BIOS y encendiendo los
nodos por primera vez (Figura 3).
Puesto que SSH en la principal
entrada al sistema, necesitaremos blo-
quear sshd. Instalaremos y probaremos
una clave SSH personal para el usuario
root, y luego limitaremos a que sólo
puedan identificarse en el nodo de
administración los usuarios del grupo
Figura 2: El cableado del cluster se puede ir de las manos rápida-
mente, así que sea cuidadoso.
de administración y usando sólo firmas
digitales. Para eso sólo tenemos que
añadir unas cuantas líneas en el fichero
de configuración de sshd /etc/ssh/sshd_
config:
PermitRootLogin without-password
AllowGroups fijiadmin
Luego añadiremos el grupo de adminis-
tración y reiniciaremos sshd:
# groupadd fijiadmin
# usermod -G fijiadmin root
# service sshd restart
Generaremos la clave SSH para la
cuenta root de fijistor, que distribuire-
mos a los nodos de cómputo:
# ssh-keygen # pulsar enter, U
sin frase de paso
# cp /root/.ssh/id_rsa.pub U
/root/.ssh/U
authorized_keys.fijistor
# chmod -R go= /root/.ssh
Si no planeamos acceder al nodo de
administración por medio de la GUI,
podemos desactivar la identificación
Montando un Cluster • PORTADA
15Número 78W W W . L I N U X - M A G A Z I N E . E S
ción de los ficheros de log, cambiando
la configuración del fichero /etc/ logro-
tate.conf:
# mantiene 4 semanas los logs
# rotate 4
rotate 999
Activaremos el reenvío de paquetes de red
en el nodo de administración, para que así
todos los nodos de ejecución puedan acce-
der a servicios públicos cuando lo necesi-
gráfica comentando una línea en el
fichero /etc/inittab. Con esto liberare-
mos algo de memoria:
# Ejecutamos xdm en
# el runlevel 5
#x:5:respawn:/etc/X11/prefdm U
-nodaemon
Ahora realizaremos la primera actuali-
zación completa de paquetes del sis-
tema – instalaremos las herramientas de
desarrollo – y rei-
niciaremos para
cargar el nuevo
kernel:
# yum -y update
# yum -y U
install U
@development-U
tools
# reboot
Es importante
mantener los logs
del sistema, por lo
que no debemos
olvidar ampliar el
tiempo de reten-
01 *filter02 :INPUT ACCEPT [0:0]03 :FORWARD ACCEPT [0:0]04 :OUTPUT ACCEPT [0:0]05 :RH-Firewall-1-INPUT - [0:0]06 -A INPUT -j RH-Firewall-1-INPUT07 -A FORWARD -j RH-Firewall-1-INPUT08 -A RH-Firewall-1-INPUT -i lo -j ACCEPT09 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j
ACCEPT10 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT11 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT12 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d
224.0.0.251 -j ACCEPT13 #-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j
ACCEPT14 #-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j
ACCEPT15 -A RH-Firewall-1-INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT16 ### begin ssh17 #-A RH-Firewall-1-INPUT -m state --state NEW -m
tcp -p tcp --dport 22 -j ACCEPT18 -A RH-Firewall-1-INPUT -p tcp --dport 22 --syn -s
192.168.1.0/255.255.255.0 -j ACCEPT19 -A RH-Firewall-1-INPUT -p tcp --dport 22 --syn -m
limit --limit 6/m --limit-burst 5 -j ACCEPT20 ### end ssh21 ### begin cluster22 -A RH-Firewall-1-INPUT -i eth0 -s
192.168.1.0/255.255.255.0 -j ACCEPT23 -A RH-Firewall-1-INPUT -i eth0 -d 255.255.255.255 -j
ACCEPT24 -A RH-Firewall-1-INPUT -i eth0 -p udp --dport
67:68 -j ACCEPT25 -A RH-Firewall-1-INPUT -i eth0 -p tcp --dport
67:68 -j ACCEPT26 ### end cluster27 ### begin log28 -A RH-Firewall-1-INPUT -m limit --limit 10/second -j
LOG29 ### end log30 -A RH-Firewall-1-INPUT -j REJECT --reject-with
icmp-host-prohibited31 COMMIT32 ### begin nat33 *nat34 :PREROUTING ACCEPT [0:0]35 :POSTROUTING ACCEPT [0:0]36 :OUTPUT ACCEPT [0:0]37 -A POSTROUTING -o eth1 -j MASQUERADE38 #-A PREROUTING -i eth1 -p tcp --dport 2222 -j
DNAT --to 192.168.1.200:2239 COMMIT40 ### end nat
Listado 1: /etc/ sysconfig/ iptables
Figura 3: La buena programación minimiza el tiempo usado en el
KVM.
gos. En este caso limitaremos la veloci-
dad a la que se pueden reintentar las
conexiones SSH, para así atajar los ata-
ques de fuerza bruta a SSH. Todo el trá-
fico desde la red interna del cluster está
permitido. Los paquetes descartados se
registrarán para una futura depuración –
una opción que siempre podremos
comentar y desactivar si la vamos a nece-
sitar más adelante.
Finalmente, a todo
tráfico de salida
procedente de la
red interna se le
realizará NAT.
Véase el Listado 1
para las configura-
ciones importantes
del fichero /etc/
sysconfig/iptables.
Ahora recargaremos los parámetros
sysctl del kernel y reiniciaremos el cor-
tafuegos:
# service iptables restart
El siguiente paso del proceso es forma-
tear la unidad de almacenamiento RAID
externa de 10TB que está en /dev/sdx –
naturalmente, sustituyendo la unidad
correcta por sdx. Si nuestra
configuración no incluye ninguna uni-
dad de almacenamiento externa adicio-
nal, podremos saltarnos este paso.
Observe que podemos sobrescribir la
información de particionamiento pre-
viamente existente en el dispositivo y
usar luego LVM directamente (Listado
2). Yo suelo establecer el tamaño de los
metadatos para ajustar un alineamiento
ten. Para activar el reenvío IP en el nodo
de administración debemos añadir lo que
sigue en el fichero /etc/sysctl.conf:
net.ipv4.ip_forward = 1
El siguiente paso es ajustar las configura-
ciones del cortafuegos con iptables, o
nada podrá pasar a través del cortafue-
PORTADA • Montando un Cluster
16 Número 78 W W W . L I N U X - M A G A Z I N E . E S
01 # cat /proc/partitions02 # dd if=/dev/urandom of=/dev/sdx bs=512 count=6403 # pvcreate --metadatasize 250k /dev/sdx04 # pvs -o pe_start05 # vgcreate RaidVolGroup00 /dev/sdx06 # lvcreate --extents 100%VG --name RaidLogVol00
RaidVolGroup0007 # mkfs -t ext3 -E stride=32 -m 0 -O
dir_index,filetype,has_journal,sparse_super/dev/RaidVolGroup00/RaidLogVol00
08 # echo “/dev/RaidVolGroup00/RaidLogVol00 /data0ext3 noatime 0 0” >>/etc/fstab
09 # mkdir /data0 ; mount /data0 ; df -h
Listado 2: Configuración de las Particiones
01 # mkdir -p /data0/repo/CentOS/5.6/iso/x86_6402 # ln -s /data0/repo /repo03 # cd /repo/CentOS04 # ln -s 5.6 505 # wget
http://mirrors.gigenet.com/centos/RPM-GPG-KEY-CentOS-5
06 # cd /repo/CentOS/5.6/iso/x86_6407 # cat /dev/dvd > CentOS-5.6-x86_64-bin-DVD-1of2.iso08 # wget
http://mirror.nic.uoregon.edu/centos/5.6/isos/x86_64/sha1sum.txt
09 # sha1sum -c sha1sum.txt10 # mount -o loop CentOS-5.6-x86_64-bin-DVD-1of2.iso
/mnt11 # mkdir -p /repo/CentOS/5.6/os/x86_6412 # rsync -avP /mnt/CentOS /mnt/repodata /repo/Cen-
tOS/5.6/os/13 # mkdir -p /repo/CentOS/5.6/updates/x86_6414 # rsync --exclude=’debug’ --exclude=’*debug
info*’ --exclude=’repoview’ \15
--exclude=’headers’ -irtCO --delete-excluded --delete \
16 rsync://rsync.gtlib.gatech.edu/centos/5.6/upda-tes/x86_64 /repo/CentOS/5.6/updates/
17 # mkdir -p /repo/epel/5/x86_6418 # cd /repo/epel19 # wget
http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
20 # rsync --exclude=’debug’ --exclude=’*debu-ginfo*’ --exclude=’repoview’ --exclude=’headers’ \
21 -irtCO --delete-excluded --deletersync://archive.linux.duke.edu/fedora-epel/5/x86_64 /repo/epel/5/
22 # mv /etc/yum.repos.d/* /usr/src/23 # cat /dev/null >/etc/yum.repos.d/CentOS-Base.repo24 # cat /dev/null >/etc/yum.repos.d/ CentOS-Media.
repo
Listado 3: Configuración Sistema deInstalación
01 ### Base de CentOS desde los medios de instalación02 [base]03 name=CentOS-$releasever - Base04 #mirrorlist=http://mirrorlist.centos.org/?rele-
ase=$releasever&arch=$basearch&repo=os05 #baseurl=http://mirror.centos.org/centos/$relea-
sever/os/$basearch/06 baseurl=file:///repo/CentOS/$releasever/os/$base-
arch/07 gpgcheck=108
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
09 protect=110 ### Actualizaciones CentOS vía espejos rsync11 [update]12 name=CentOS-$releasever - Updates13 #mirrorlist=http://mirrorlist.centos.org/?rele-
ase=$releasever&arch=$basearch&repo=updates14 #baseurl=http://mirror.centos.org/centos/$relea-
sever/updates/$basearch/15 baseurl=file:///repo/CentOS/$releasever/upda-
tes/$basearch/16 gpgcheck=117
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
18 protect=119 ### Paquetes Extra para Enterprise Linux (EPEL)20 [epel]21 name=Extra Packages for Enterprise Linux 5 - $base-
arch22
#baseurl=http://download.fedora.redhat.com/pub/epel/5/$basearch
23#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
24 baseurl=file:///repo/epel/$releasever/$basearch25 enabled=126 protect=027 failovermethod=priority28 gpgcheck=129 gpgkey=http://download.fedora.redhat.com /pub/
epel/RPM-GPG-KEY-EPEL
Listado 4: /etc/ yum.repos.d/ fiji.repo
Montando un Cluster • PORTADA
17Número 78W W W . L I N U X - M A G A Z I N E . E S
de 129KB. El comando pvs informa que
si solicitamos 250KB obtendremos una
configuración de 256KB.
Creación de un Fichero deRepositorioCon el almacenamiento listo, es hora de
construir un fichero de repositorio, el
cual alimentará a todas las actualizacio-
nes por Yum del sistema y a todas las
instalaciones de los nodos usando el
programa Kickstart. Primero crearemos
una estructura de directorio con los
paquetes de instalación de base del
DVD de instalación de CentOS, y luego
traeremos las últimas actualizaciones
desde un espejo de ficheros rsync cer-
cano (Listado 3). Recomendamos bus-
car nuestro propio servidor espejo cer-
cano [8] que ofrezca el servicio rsync.
Los comandos del Listado 3 también
traen el repositorio EPEL [9] para tener
algunos paquetes adicionales.
Ahora creamos una configuración de
repositorio para yum en el fichero
/etc/yum.repos.d/fijo.repo (Listado 4).
Luego creamos un script para actualizar
el repositorio de ficheros (Listado 5).
Ya tenemos un repositorio de ficheros
con todos lo paquetes RPMs, que pode-
mos compartir vía NFS junto con los
directorios /data0 y /usr/global/. En este
cluster, los directorios home de los usua-
rios estarán en /data0/home/. Usaremos
/usr/global/ como /usr/local/, excepto
que estará montado en todos los nodos
por NFS. El script global.sh (Listado 6)
estará como enlace simbólico en todos
los nodos en
/etc/profile.d/global
.sh y establecerá
las variables de
entorno del usua-
rio.
El fichero NFS /etc/exports describe
qué directorios van a ser exportados a
otros ordenadores (ver Listado 7).
Cuando la configuración esté lista, lan-
zaremos el servidor NFS:
# chkconfig nfs on
# service nfs start
Activamos los logs remotos en syslog
de los nodos añadiendo la siguiente
línea en el fichero /etc/ sysconfig/
syslog:
SYSLOGD_OPTIONS=”-m 0 -r U
-s fiji.baz.edu”
Y reiniciamos syslog:
# service syslog restart
Todos los nombres de los nodos del
cluster junto con sus IPs deben aparecer
listados en el fichero /etc/hosts (Listado
8). Tampoco hay que olvidar activar la
01 #!/bin/bash02
OPTS=’-vrtCO --delete --delete-excluded --exclude=i386* --exclude=debug \
03--exclude=*debuginfo* --exclude=repoview --exclude=headers’
04 rsync $OPTS rsync://rsync.gtlib.gatech.edu/cen-tos/5.6/updates/x86_64 /repo/CentOS/5.6/updates/
05 rsync $OPTSrsync://archive.linux.duke.edu/fedora-epel/5/x86_64 /repo/epel/5/
Listado 5: /root/ bin/ update_repo.sh
01 # Grid Engine02 export SGE_ROOT=/usr/global/sge03 . /usr/global/sge/default/common/settings.sh04 alias rsh=’ssh’05 alias qstat=’qstat -u “*”‘06 07 # Compiladores Intel08 . /usr/global/intel/Compiler/11.1/064/bin/icc-
vars.sh intel6409 . /usr/global/intel/Compiler/11.1/064/bin/ifort-
vars.sh intel6410 .
/usr/global/intel/Compiler/11.1/064/mkl/tools/environment/mklvars64.sh
11 exportINTEL_LICENSE_FILE=/usr/global/intel/licenses:$INTEL_LICENSE_FILE
Listado 6: /usr/ global/ etc/ profile.d/ global.sh
01 # yum install dhcp xinetd tftp tftp-server syslinux02 # mkdir -p /usr/global/tftpboot ; ln -s /usr/glo-
bal/tftpboot /tftpboot03 # mkdir -p /tftpboot/pxelinux.cfg /tftpboot/ima-
ges/centos/x86_64/5.604 # cd /tftpboot/images/centos/x86_64/ ; ln -s 5.6 505 # rsync -avP /mnt/isolinux/initrd.img /mnt/isoli-
nux/vmlinuz /tftpboot/images/centos/x86_64/5.6/06 # cd /usr/lib/syslinux07 # rsync -avP chain.c32 mboot.c32 memdisk menu.c32
pxelinux.0 /tftpboot/08 # mkdir -p /usr/global/kickstart ; ln -s /usr/glo-
bal/kickstart /kickstart ; cd /kickstart09 # mkdir -p /kickstart/fiji/etc ; cd
/kickstart/fiji/etc10 # mkdir -p rc.d/init.d profile.d ssh yum/plugin-
conf.d yum.repos.d11 # touch rescue.cfg ks-fiji.cfg ; ln -s ks-fiji.cfg
ks.cfg
Listado 9: Instalación de Kickstart
01 127.0.0.1 localhost.localdomain localhost02 ::1 localhost6.localdomain6 localhost603 192.168.1.1 fiji.baz.edu fiji04 192.168.1.2 fijiistor.baz.edu fijistor05 192.168.100.9 ib06 192.168.1.101 node0107 192.168.1.102 node0208 192.168.1.103 node0309 192.168.1.104 node0410 192.168.1.200 fiji-bmc11 192.168.1.201 node01-bmc12 192.168.1.202 node02-bmc13 192.168.1.203 node03-bmc14 192.168.1.204 node04-bmc
Listado 8: /etc/ hosts
01 /data0 fiji(rw,async,no_root_squash) 192.168.1.0<A7><A7>
02 /255.255.255.0(rw,async,no_root_squash)03 /usr/global
192.168.1.0/255.255.255.0(rw,async,no_root_squash)
04 /kickstart 192.168.1.0/255.255.255.0(ro)05 /repo 192.168.1.0/255.255.255.0(ro)
Listado 7: /etc/ exports
# cp /etc/hosts U
/kickstart/fiji/etc/
# cp /root/.ssh/id_rsa.pub U
/kickstart/fiji/authorized_keys
# cp /etc/yum.repos.d/*.repo U
/kickstart/fiji/etc/yum.repos.d/
Ahora podemos pasar al siguiente paso
del proceso, que es editar el fichero
/kickstart/fiji/etc/ntp.conf y cambiar el
servidor al nodo de administración:
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server 192.168.1.2
Cuando arranquemos los nodos de cóm-
puto, podremos copiar cada una de las
direcciones MAC en el fichero
/etc/dhcpd.conf (Listado 11), y luego rei-
niciaremos el proceso dhcpd. El nodo
podrá entonces inicializar la red con la IP
ya configurada. Arrancar los nodos uno a
uno y pasar su
dirección al fichero
/etc/dhcpd..conf es
tedioso, pero puede
ser automatizado
con técnicas de ges-
tión más avanza-
das.
Estableceremos
la opción de desac-
tivado de /etc/
xinetd.d/tftp a no (tal y como se muestra
en el Listado 12). Ahora cargaremos los
servicios que acabamos de configurar:
# service xinetd restart
# chkconfig dhcpd on
# service dhcpd restart
Con una estructura de fichero PXE ya
colocada, podemos ir al paso principal
en la preparación de los ficheros de
configuración de Kickstart. Los ficheros
de configuración de Kickstart son fiche-
ros de texto plano que almacenan todas
las opciones que el instalador puede
aceptar, además de todos los scripts de
pre- y post- instalación que deseemos
añadir. El Listado 13 muestra un fichero
de configuración de Kickstart simple,
que lo único que hace es arrancar en el
modo de rescate del instalador. Este
fichero es bueno tenerlo a mano cuando
toque depurar los nodos que inevitable-
mente fallen.
sincronización de tiempo por red para
tener logs consistentes:
# ntpdate -u -b U
-s 1.centos.pool.ntp.org
# hwclock --utc --systohc
# chkconfig ntpd on ; U
service ntpd start
Lanzando KickstartEl siguiente paso es instalar los servi-
cios necesarios para tener un servidor
de instalación desatendida con Kick -
start (Listado 9) y construir una estruc-
tura de ficheros para poder arrancar
usando PXE, TFTP y NFS. Este paso nos
permitirá que un nuevo nodo de cóm-
puto pueda arrancar usando la red de
forma similar a como lo haría mediante
un CD o DVD.
Primero editaremos el menú PXE del
fichero /tftpboot/pxelinux.cfg/default
(Listado 10). Luego generaremos nues-
tra propia contraseña que reemplazare-
mos en el Listado 10. Las contraseñas
cifradas con SHA-1 comienzan con
$4$:
# sha1pass password
$4$gS+7mITP$y3s1L4Z+5Udp2vlZHChU
NXd8lhAg$
Copiamos todos los ficheros que desea-
mos tener sincronizados en todos los
nodos:
PORTADA • Montando un Cluster
18 Número 78 W W W . L I N U X - M A G A Z I N E . E S
01 DEFAULT menu.c3202 PROMPT 003 TIMEOUT 10004 ONTIMEOUT local05 NOESCAPE 106 ALLOWOPTIONS 007 MENU TITLE Fiji Cluster PXE Menu08 09 LABEL local10 MENU LABEL Boot local hard drive11 LOCALBOOT 012 13 LABEL centos14 MENU LABEL CentOS 5 Fiji Node Install15 KERNEL images/centos/x86_64/5/vmlinuz16 APPEND ks=nfs:192.168.1.2:/kickstart/ks.cfg
initrd=images/centos/x86_64/5/initrd.img ram-disk_size=100000 ksdevice=eth0 ip=dhcp
17 18 LABEL rescue19 MENU PASSWD $4$XXXXXX20 MENU LABEL CentOS 5 Rescue21 KERNEL images/centos/x86_64/5/vmlinuz22 APPEND initrd=images/centos/x86_64/5/initrd.img
ramdisk_size=10000 text rescueks=nfs:192.168.1.2:/kickstart/rescue.cfg
Listado 10: /tftpboot/ pxelinux.cfg/ default
01 ddns-update-style interim;02 ignore client-updates;03 option option-128 code 128 = string;04 option option-129 code 129 = text;05 06 subnet 192.168.1.0 netmask 255.255.255.0 {07 option routers 192.168.1.2;08 option subnet-mask 255.255.255.0;09 option nis-domain “fiji.baz.edu”;10 option domain-name “fiji.baz.edu”;11 option domain-name-servers 123.123.123.123;12 option time-offset -18000; # Eastern13 option ntp-servers 192.168.1.2;14 default-lease-time 21600;15 max-lease-time 43200;16 17 allow booting;18 allow bootp;19 next-server 192.168.1.2;20 filename “/pxelinux.0”;21 22 host node01 {23 hardware ethernet 00:11:22:33:44:a0;24 fixed-address 192.168.1.101;25 }26 27 host node01-bmc {28 hardware ethernet 00:11:22:33:44:8d;29 fixed-address 192.168.1.201;30 }31 32 host node02 {33 hardware ethernet 00:11:22:33:44:83;34 fixed-address 192.168.1.102;35 }36 37 host node02-bmc {38 hardware ethernet 00:11:22:33:44:61;39 fixed-address 192.168.1.202;40 }
Listado 11: /etc/ dhcpd.conf
todos los nodos de computación que eje-
cutarán los trabajos enviados al cluster.
Instalación de los Nodos deCómputoUna vez tengamos toda la infraestruc-
tura en su lugar, estaremos listos para
empezar a instalar los nodos de compu-
tación. Los pasos exactos pueden variar
dependiendo de la configuración que
tengamos, pero la clave está en ser
metódicos y en minimizar el tiempo
dedicado a cada nodo.
Nótese que el nodo “cabeza”/ identifi-
cación, que tiene como nombre host
fiji, puede instalarse de forma manual o
automática de la misma manera que los
nodos de cómputo, con el caso adicio-
nal de configurar eth1 como interfaz
hacia la red pública. Un ejemplo del
procedimiento de instalación de un
nodo de cómputo podría incluir los
siguiente pasos:
1. Enchufamos el KVM y pulsamos el
botón de encendido.
2. F12 para arranque por PXE.
3. Ctrl + S para conseguir la direc-
ción Ethernet
MAC del sis-
tema.
4. Ctrl + E para conseguir la dirección
Ethernet MAC del BMC.
5. Establecemos los parámetros LAN:
Fuente de Direcciones IP IPv4:
DHCP.
6. Establecemos la configuración de
usuario LAN: pulsamos enter y con-
firmamos la password.
7. Pulsamos Esc; almacenamos los
cambios y salimos.
8. Añadimos la dirección MAC al
fichero /etc/dhcpd.conf de fijistor, y
luego escribimos service dhcpd res-
tart.
9. Pulsar enter en el menú de instala-
ción PXE del nodo de cómputo para
el cluster Fiji.
10. Esperar la comprobación de depen-
dencias de paquetes.
11. Pasar al siguiente nodo.
Quizás deseemos usar una herramienta
de gestión como IPMI para controlar el
DRAC/ BMC, y poder encender y apagar
remotamente los nodos bloqueados:
# yum -y install OpenIPMI-tools
# ipmitool -H 192.168.1.2XX U
El fichero completo de Kickstart para
el arranque de un nodo de cómputo,
/kickstart/ks.cfg, puede ser descargado
desde la web de Linux Magazine[10].
Recomiendo editar este fichero de
configuración Kickstart para principian-
tes y comprobarlo continuamente insta-
lando el primer nodo de cómputo. Pode-
mos editarlo una y otra vez, haciendo
pequeños ajustes en cada paso, y luego
reinstalar completamente el primer nodo
hasta que quede una instalación per-
fecta. Una vez tengamos el primer nodo
correctamente, procederemos a encender
el resto de los nodos del cluster.
No hay que olvidar generar y reem-
plazar el lugar reservado para la contra-
seña con la nuestra propia. Las contra-
señas cifradas en formato MD5 comien-
zan por $1$:
$ grub-md5-crypt
Password:
Retype password:
$1$d6oPa/$iUemCR50qSyvGSVTX9NrX1
Con el nodo de administración instalado
y el fichero de configuración de Kickstart
establecido y listo para la acción, el
siguiente paso es instalar y configurar
PORTADA • Montando un Cluster
20 Número 78 W W W . L I N U X - M A G A Z I N E . E S
01 #!/bin/sh
02 for I in ̀ grep -v “\#” /etc/machines.list`; do
03 echo -n “$I “ ; ssh $I “$@”
04 done
Listado 14: /root/ bin/ ssh_loop.sh
01 rsync -a fiji:/etc/passwd /root/etc/02 rsync -a fiji:/etc/shadow /root/etc/03 rsync -a fiji:/etc/group /root/etc/04 rsync -a /root/etc/passwd /root/etc/shadow
/root/etc/group /etc/05 rsync -a /root/etc/passwd /root/etc/shadow
/root/etc/group /kickstart/fiji/etc/06 for NODE in ̀ cat /etc/machines.list | grep -v “^#”`;
do07 rsync -a /kickstart/fiji/etc $NODE:/08 done
Listado 15: /root/ bin/ update_etc.sh
01 # mkdir /usr/global/sge-6.2u5_PLUS_3-26-1102 # ln -s /usr/global/sge-6.2u5_PLUS_3-26-11
/usr/global/sge03 # export SGE_ROOT=/usr/global/sge04 # cd /usr/global/sge05 # adduser -u 186 sgeadmin06 # mkdir src ; cd src07 # wget http://bioteam.net/dag/gridengine-cour-
tesy-binaries/sge-6.2u5_PLUS_3-26-11-common.tar.gz
08 # wget http://bioteam.net/dag/gridengine-cour-tesy-binaries/sge-6.2u5_PLUS_3-26-11-bin-lx26-amd64.tar.gz
09 # cd /usr/global/sge10 # tar xzvf
src/sge-6.2u5_PLUS_3-26-11-common.tar.gz11 # tar xzvf
src/sge-6.2u5_PLUS_3-26-11-bin-lx26-amd64.tar.gz12 # chown -R sgeadmin.sgeadmin .
Listado 16: Instalación de Son of Grid Engine
01 lang en_US02 keyboard us03 mouse none04 nfs --server=192.168.1.2
--dir=/repo/CentOS/5/iso/x86_6405 network --bootproto=dhcp
Listado 13: /kickstart/ rescue.cfg
01 service tftp02 {03 socket_type = dgram04 protocol = udp05 wait = yes06 user = root07 server = /usr/sbin/in.tftpd08 server_args = -s -v /tftpboot09 disable = no10 per_source = 1111 cps = 100 212 flags = IPv413 }
Listado 12: /etc/ xinetd.d/ tftp
-U root -P PASSWORD U
-I lanplus chassis status
# ipmitool -H 192.168.1.2XX U
-U root -P PASSWORD U
-I lanplus chassis power cycle
En un cluster de servidores Linux,
muchas veces es deseable ejecutar los
mismos comandos en todos los nodos de
cómputo. Podemos ejecutar estos
comando más comunes usando un senci-
llo bucle for en un script, o podemos usar
un shell específico para cluster como el
Shell de Dancer [11] o ClusterSSH [12].
Para ejecutar los comandos crearemos un
fichero llamado /etc/machines.list, que
constará de la lista de todos los nodos,
uno por línea, luego usaremos el script
/root/bin/ssh_ loop.sh (Listado 14).
Deberemos mantener sincronizada la
autenticación del usuario entre todos los
nodos. Aunque hay mejores maneras de
hacerlo, en pos de la brevedad, haremos
una simple sincronización de los ficheros
de autorización desde el nodo “cabeza”/
identificación al resto de los nodos
usando el script /root/bin/update_ etc.sh
(Listado 15).
Configuración del GridEl último paso es activar la cola de tra-
bajos para gestionar la carga de tra-
bajo. Usaremos los binarios, cortesía
de BioTeam, de Son of Grid Engine
[13]. Son of Grid Engine es un proyecto
basado en la comunidad que parte del
proyecto Sun Grid Engine. Cuando Ora-
cle compró Sun y eliminaron la versión
libre de su Grid Engine, los desarrolla-
dores de Son of Grid Engine decidieron
mantener una versión libre. Para más
información sobre cómo trabajar con
Son of Grid Engine, ir a los documen-
tos y manuales de la página del pro-
yecto [15].
Recuerde que los directorios de ini-
cio de los usuarios y /usr/global/ están
exportados a todo el cluster mediante
NFS. De esta forma los usuarios ten-
drán las claves SSH que permiten
hacer SSH y enviar comandos remotos
y sin contraseña desde el nodo de
cabeza a todos los nodos de computa-
ción.
Para empezar con Son of Grid Engine
seguiremos los pasos del Listado 16.
Podemos instalar de forma interactiva el
equipo maestro en el nodo de adminis-
tración usando la configuración por
defecto, excepto lo siguiente: instalar
como usuario sgeadmin, establecer los
puertos de red con el entorno, el puerto
6444 para sge_qmaster, puerto 6445
para sge_execd, nombre de célula por
defecto, nombre de cluster p6444, decir
que no a pkgadd y que sí a la verifica-
ción de permisos, decir que no al servi-
dor JMX Mbean, seleccionar el método
de encolado clásico, GID en el rango
20000-20100, introducir cada nombre de
los equipos y establecer no shadow host.
# cd /usr/global/sge/
# ./install_qmaster
Luego estableceremos las variables de
entorno del usuario:
. /usr/global/sge/default/U
common/settings.sh
Los logs de SGE se pueden encontrar
en: /usr/global/sge/default/spool/qmas-
ter/messages, /tmp/qmaster_messages
(durante el inicio de qmaster), /usr/glo-
Montando un Cluster • PORTADA
# su - testuser
$ qsub /usr/global/sge/examplesU
/jobs/simple.sh
$ qstat
ConclusiónAhora ya disponemos de un cluster de
super computación funcional con ges-
tión de trabajos y de recursos. ¿Qué es lo
siguiente? ¿Deberíamos instalar Blender
[16] y empezar a renderizar películas
con todas las opciones activadas? ¿Insta-
lar MPI y explorar la computación en
paralelo [17]? ¿Quizás ejecutar las prue-
bas de rendimiento de Linpack y compe-
tir en el Top 500 [18]? Bueno, esto
depende de nuestra rama de trabajo,
pero supongo que el grupo de investiga-
dores tiene ya suficiente trabajo para
mantener al sistema ocupado. �
bal/sge/default/spool/HOSTNAME/mes-
sages y /tmp/execd_messages (durante
el inicio de execd).
Necesitaremos instalar SGE en todos
los nodos de cómputo. Este paso se
hace fácilmente con la configuración
automated install. El Listado 17 mues-
tra un ejemplo del fichero SGE
cluster.conf, pero sin comentarios.
Para iniciar la instalación automática:
# cd /usr/global/sge/
# cp util/install_modules/U
inst_template.conf cluster.conf
# vim cluster.conf
# ./inst_sge -x -auto U
/usr/global/sge/cluster.conf U
automated install log U
sge_root/spool/U
install_HOSTNAME_TIMESTAMP.log
Tras la ejecución con éxito del instala-
dor, verificaremos que Son of Grid
Engine está funcionando y comprobare-
mos la configuración con:
$ ps ax | grep sge
$ qconf -sconf
Un buen primer paso es enviar un tra-
bajo sencillo de pruebas al cluster como
un usuario normal:
# adduser testuser
# update_etc.sh
PORTADA • Montando un Cluster
22 Número 78 W W W . L I N U X - M A G A Z I N E . E S
[1] Documentación de Red Hat Enterprise Linux: http:// docs. redhat. com/ docs/ en-US/
Red_Hat_Enterprise_Linux/ index. html
[2] Documentación de CentOS-5: http:// www. centos. org/ docs/ 5/
[3] Guía de instalación de RHEL: http:// docs. redhat. com/ docs/ en-US/
Red_Hat_Enterprise_Linux/ 5/ html/ Installation_Guide/ index. html
[4] Instalaciones Kickstart: http:// docs. redhat. com/ docs/ en-US/
Red_Hat_Enterprise_Linux/ 5/ html/ Installation_Guide/ ch-kickstart2. html
[5] Espejos para la ISO de CentOS: http:// isoredirect. centos. org/ centos/ 5/ isos/ x86_64/
[6] PXE: http:// en. wikipedia. org/ wiki/ Preboot_Execution_Environment
[7] IPMI: http:// en. wikipedia. org/ wiki/ Intelligent_Platform_Management_Interface
[8] Espejos CentOS para la zona de Norteamérica: http:// www. centos. org/ modules/
tinycontent/ index. php?id=30
[9] Espejos públicos activos de Fedora EPEL: http:// mirrors. fedoraproject. org/ publiclist/
EPEL/
[10] Código para este artículo: http:// www. linux-magazine. es/ Magazine/ Downloads/ 78/
HPC
[11] Dancer’s Shell: http:// www. netfort. gr. jp/ ~dancer/ software/ dsh. html. en
[12] ClusterSSH: http:// clusterssh. sourceforge. net/
[13] Son of Grid Engine: https:// arc. liv. ac. uk/ trac/ SGE
[14] Binarios de BioTeam Grid Engine: http:// bioteam. net/ dag/
gridengine-courtesy-binaries/
[15] Grid Engine HowTo: http:// arc. liv. ac. uk/ SGE/ howto/ howto. html
[16] Blender: http:// www. blender. org/
[17] Introducción a la computación paralela: https:// computing. llnl. gov/ tutorials/
parallel_comp/
[18] Prueba de rendimiento Linpack: http:// www. top500. org/ project/ linpack
RECURSOS
01 SGE_ROOT=”/usr/global/sge”02 SGE_QMASTER_PORT=”6444”03 SGE_EXECD_PORT=”6445”04 SGE_ENABLE_SMF=”false”05 SGE_ENABLE_ST=”true”06 SGE_CLUSTER_NAME=”p6444”07 SGE_JMX_PORT=”6666”08 SGE_JMX_SSL=”false”09 SGE_JMX_SSL_CLIENT=”false”10 SGE_JMX_SSL_KEYSTORE=”/tmp”11 SGE_JMX_SSL_KEYSTORE_PW=”/tmp”12 SGE_JVM_LIB_PATH=”/tmp”13 SGE_ADDITIONAL_JVM_ARGS=”-Xmx256m”14 CELL_NAME=”default”15 ADMIN_USER=”sgeadmin”16 QMASTER_SPOOL_DIR=
”/usr/global/sge/default/spool/qmaster”17 EXECD_SPOOL_DIR=”/usr/global/sge/default/spool”18 GID_RANGE=”20000-20100”19 SPOOLING_METHOD=”classic”20 DB_SPOOLING_SERVER=”“21 DB_SPOOLING_DIR=”spooldb”22 PAR_EXECD_INST_COUNT=”20”23 ADMIN_HOST_LIST=”fijistor”24 SUBMIT_HOST_LIST=”fiji”25 EXEC_HOST_LIST=”node01 node02 node03 node04”
26 EXECD_SPOOL_DIR_LOCAL=”“27 HOSTNAME_RESOLVING=”true”28 SHELL_NAME=”ssh”29 COPY_COMMAND=”scp”30 DEFAULT_DOMAIN=”none”31 ADMIN_MAIL=”none”32 ADD_TO_RC=”true”33 SET_FILE_PERMS=”true”34 RESCHEDULE_JOBS=”wait”35 SCHEDD_CONF=”1”36 SHADOW_HOST=”“37 EXEC_HOST_LIST_RM=”“38 REMOVE_RC=”true”39 WINDOWS_SUPPORT=”false”40 WIN_ADMIN_NAME=”Administrator”41 WIN_DOMAIN_ACCESS=”false”42 CSP_RECREATE=”true”43 CSP_COPY_CERTS=”false”44 CSP_COUNTRY_CODE=”DE”45 CSP_STATE=”Germany”46 CSP_LOCATION=”Building”47 CSP_ORGA=”Organisation”48 CSP_ORGA_UNIT=”Organisation_unit”49 CSP_MAIL_ADDRESS=”[email protected]”
Listado 17: Ejemplo de SGE cluster.conf
Cygwin es una capa de compatibi-
lidad que proporciona un entorno
operativo tipo Unix en los siste-
mas Windows. El entorno Cygwin tiene
el aspecto de Linux, pero bajo su superfi-
cie, los comandos son ejecutados en
Windows. Al contrario que otras herra-
mientas alternativas que proporcionan
entornos virtuales para sistemas Linux
huéspedes completos, Cygwin no es real-
mente Linux, sino que es una API y una
DLL (Dynamic Link Library) que se eje-
cuta en Windows y ofrece el soporte
para la ejecución de aplicaciones Linux.
PRÁCTICO • Cygwin
24 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Podría decirse que Cygwin es lo con-
trario a Wine, la famosa API que permite
que las aplicaciones Windows se puedan
ejecutar en Linux. Cygwin permite a las
aplicaciones Linux ejecutarse en Win-
dows. Sin embargo, al contrario que
Wine, Cygwin no soporta la ejecución
directa de los ficheros binarios de Linux.
Cualquier aplicación que se vaya a ejecu-
tar en Cygwin debe compilarse para el
entorno Cygwin.
Cygwin permite la migración a un
entorno de aplicaciones Linux
incluso si, por alguna razón, se nece-
sita tener Windows para otros siste-
mas. Además de la DLL y los compo-
nentes de compatibilidad, Cygwin
también proporciona una colección
de utilidades Linux y un entorno de
comandos de la terminal.
Cygwin simplifica la tarea de portar
los programas al sistema operativo de
Microsoft, y los usuarios finales de
Windows pueden beneficiarse de los
numerosos programas del mundo
Linux, entre los que se incluyen
herramientas prácticas y programas de
aplicación.
Instalación de CygwinCygwin se instala fácilmente. Tras descar-
gar el fichero de instalación desde el sitio
web oficial [1] y hacer doble clic en
setup.exe, hay que responder afirmativa-
mente al aviso que se muestra. Tras este
paso aparece un asistente que guiará al
usuario por todo el proceso de instalación.
Ejecución de aplicaciones Linux en Windows con Cygwin
ENTRE DOS MUNDOSSi ha estado trabajando con Linux durante algún tiempo, seguro que se habrá acostumbrado a las opciones
que ofrece. Aunque los usuarios de Windows también pueden beneficiarse de diversas funciones de Linux
gracias a Cygwin. POR FLORIAN EFFENBERGER
Figura 1: Un cuadro de diálogo típico de Windows
avisa de los posibles peligros…
Florian Effenberger lleva muchos
años de evangelista del software
libre. Es fundador y miembro del
comité Document Foundation,
anteriormente estuvo trabajando
en el proyecto OpenOffice.org
durante siete años, donde su
último puesto fue de “Marketing
Project Lead”. También escribe de
forma regular para diversas publi-
caciones tanto en lengua alemana
como inglesa.
EL A
UT
OR
25Número 78W W W . L I N U X - M A G A Z I N E . E S
Cygwin ofrece su software en forma de
paquetes en un estilo similar al de Linux,
por lo que deberemos descargarlos de
Internet antes de que comience el pro-
ceso de instalación. Para instalarlo en
una máquina con conexión a Internet
hay que seleccionar la opción Install
from Internet (Figura 1); en este paso se
almacenan temporalmente los paquetes
de forma local. Si sólo se desea descargar
los paquetes para instalarlos en otra
máquina, habrá que seleccionar Down-
load Without Installing. Luego, en el
ordenador en el que se deseen instalar
los paquetes sin conexión a Internet
deberá seleccionarse Install from Local
Directory.
En algunos casos, la identificación del
directorio raíz, como Windows se
refiere a él frecuentemente, puede ser
un problema. En mi sistema de pruebas,
ejecutando una versión de 64 bits de
Windows 7 Ultimate, ya tenía instalado
el cliente x2go, el cual proporciona su
propio entorno. El asistente de instala-
ción originariamente quería actualizar
esta copia; tuve que cambiar manual-
mente la ruta a C:\Program Files
(x86)\Cygwin.
El programa de instalación se quejó
posteriormente por los espacios en
blanco, que ignoré completamente; des-
pués de todo, esta es la configuración
por defecto. Si el sistema va a ser utili-
zado por más de una persona, es posible
elegir entre hacer que Cygwin se encuen-
tre disponible para todos los usuarios del
sistema All users (opción recomendada)
o sólo para el usuario actual.
El siguiente paso consiste en especifi-
car el directorio en el que temporalmente
se almacenarán los paquetes descarga-
dos, para el caso en el que se quiera ins-
talar en otra máquina. Luego se puede
especificar un servidor proxy; la mayoría
de los usuarios querrán seleccionar
Direct Connection aquí; pero si tiene
duda, puede probar la opción Use Inter-
net Explorer Proxy Settings. Antes de
seleccionar los paquetes que se van a
utilizar hay que seleccionar un servidor
mirror, que será el que proporcionará los
ficheros necesarios. La experiencia nos
dice que la selección de un mirror en
nuestro propio país acelerará el proceso
de descarga.
Tras finalizar estos pasos, que parecen
más complicados de lo que realmente
son, se pueden seleccionar los paquetes
(Figura 2). Los que están disponibles se
encuentran organizados en varios gru-
pos; Cygwin también elige la
configuración que proporcione al usua-
rio un sistema básico sólido.
Para instalar programas adicionales
hay que usar el cuadro desplegable que
se encuentra junto al nombre del
paquete dentro del grupo expandido. En
la lista desplegable existen varias opcio-
nes: Skip sirve para omitir el paquete –
es decir, el paquete no se instalará.
Para instalar un paquete sólo hay que
hacer clic en él; en este caso se podrá ver
el número de la versión en vez de Skip.
Si hay varias, por ejemplo las versiones
1.4 y 1.5 de Mutt, se puede hacer clic
para cambiar entre ellas hasta llegar de
nuevo a Skip. Para instalar el código
fuente además de la versión binaria del
paquete hay que pulsar Src.
Además de instalar paquetes indivi-
duales pueden instalarse grupos comple-
tos. Normalmente se podrá ver la eti-
queta Default junto al nombre del grupo.
Esto se refiere a la selección de paquetes
por defecto, es decir, los paquetes que se
instalarán por defecto en una instalación
básica. Si se hace clic en la etiqueta y se
cambia al modo Install, se instalarán
todos los paquetes del grupo. Si ya se
han seleccionado o instalado algunos
paquetes, podrán verse las opciones
Reinstall (reinstala todos los paquetes
existentes) y Uninstall (desinstala los
paquetes instalados).
Por ahora basta con mantener los valo-
res por defecto y hacer clic en Next para
comenzar la descarga; este proceso
puede llevar un rato dependiendo de la
conexión a Internet disponible, aunque
sólo tardó tres minutos en nuestra
máquina de pruebas. Finalmente hay
que seleccionar
dónde se quieren
los enlaces a
Cygwin y listo. O
casi – en mi caso,
apareció un asis-
tente de Windows
preguntando si el
software se instaló
correctamente. Se
puede confirmar
haciendo clic en
The program insta-
lled correctly. Pero
no hay que borrar
todavía setup.exe;
hará falta para instalar posteriormente
algunos paquetes.
ComenzamosCygwin se instala dentro del sistema de
forma modesta. Sólo una entrada en el
menú Inicio y un pequeño icono en el
escritorio revelan su presencia. Haciendo
clic en el icono aparecerá la consola
(Figura 3), e inmediatamente podrá
verse el intérprete de comandos Bash,
que contiene por defecto diversos
comandos típicos de Linux. Siempre que
sea posible, Cygwin emulará los coman-
dos y las funciones del mundo Linux en
Windows: El comando uname devuelve
la información del sistema Windows; el
directorio home se encuentra físicamente
en C:\Program Files
(x86)\Cygwin\home\username (desafor-
tunadamente, no se encuentra dentro del
directorio de usuario de Windows). Aun-
que el directorio /proc se encuentra dis-
ponible, tecleando cat /proc/loadavg sólo
mostrará una carga de 0.00 todo el
tiempo. También pueden encontrarse
otros directorios típicos del mundo
Linux; por ejemplo, var, lib, etc y dev.
El kernel no podrá encontrarse en
boot, lo que es comprensible; después de
todo, Cygwin no es una herramienta de
virtualización. Dicho de otro modo, no
se va a trabajar con un kernel de Linux,
sino con programas compilados de
forma nativa para Windows. Cygwin uti-
liza una capa de compatibilidad para
emular interfaces como el directorio
/proc. Esta solución es probablemente
más similar al proyecto MacPorts, que
hace que diversas aplicaciones Linux se
encuentren disponible para OS X.
El comando mount indica las unidades
montadas: /usr/bin y /usr/lib vienen de
Cygwin • PRÁCTICO
Figura 2: Una gran selección de software disponible.
seguro que el lector ya estará familiari-
zado gracias a los gestores de paquetes
de Linux – la resolución automática de
dependencias (Figura 4). Para instalar
SSH hacen falta otras herramientas y
librerías, que Cygwin instalará automáti-
camente.
Desafortunadamente, el servidor SSH
viene sin la configuración, al contrario
que en la mayoría de las distribuciones
de Linux. En la web [2] se encuentran
disponibles varios how-to para facilitar
la instalación. Hay que ejecutar Cygwin
con una cuenta de administración de
Windows – de lo contrario no podrá ins-
talarse el servicio – y
teclear ssh-host-con-
fig -y. El script muestra
un número de líneas y
mensajes y luego pide
al usuario que defina la
contraseña del usuario
Windows llamado
cyg_server, que habrá
que crear. Debe elegirse
una contraseña segura
y asegurarse de que no
se olvide – en el caso
de que ocurriera, hará falta modificar la
instalación de SSH. Finalmente hay que
modificar los permisos de varios ficheros
tecleando ssh-user-config -n.
Téngase en cuenta que nunca debería
ejecutar Windows como un servidor SSH
sin un cortafuegos adicional. Un router
estándar o un sistema de filtrado de
paquetes basado en iptables en la puerta
de enlace Linux será suficiente.
El servidor SSH estará disponible tras
reiniciar el sistema. Por otro lado, se
puede teclear en la línea de comandos
net start sshd, pero no en Cygwin, sino
en la línea de comandos de Windows.
los subdirectorios correspondientes en el
directorio raíz de Cygwin, que se
encuentra montado. El disco C: lo está
en /cygdrive/c y tiene permisos de escri-
tura. Hay que tener en cuenta que cual-
quier unidad que se conecte, como las
unidades USB, se montarán de forma
automática por Cygwin en tiempo real,
lo que es una característica interesante.
Los recursos compartidos de red por
medio de Samba/ CIFS también están
soportados y pueden encontrarse en
//servername/share. Un simple mount
//fileserver/pool /home/max/share, por
ejemplo, montará los ficheros en el servi-
dor de ficheros en el directorio home.
SSH en WindowsProporcionar un intérprete de coman-
dos Bash no es, obviamente, la princi-
pal tarea de Cygwin, aunque trabajar
con él es muy útil – Cygwin posee
muchas más funciones. Además de pro-
porcionar a los desarrolladores una
forma fácil y rápida de portar sus apli-
caciones, los usuarios pueden disponer
de multitud de aplicaciones Linux para
poder utilizarlas en Windows (por
ejemplo, SSH). Aunque Windows posee
su propia solución para la administra-
ción remota por medio de los servicios
de terminal, se necesita un cliente RDP
para ello. Además, sólo puede conec-
tarse a la GUI, por lo tanto, hace falta el
ancho de banda correspondiente. Por
otro lado, Cygwin proporciona a los
usuarios el uso de SSH.
Para esto es necesario salir de Cygwin
tecleando exit en el intérprete de coman-
dos y luego ejecutar el programa de ins-
talación anterior. En la selección de
paquetes, hay que buscar ssh y luego
instalar el paquete SSH. Esto presentará
otra función de Cygwin con la que,
PRÁCTICO • Cygwin
26 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 3: A pesar de los avisos, todo se ha instalado correctamente.
Figura 4: El aspecto de bash en Windows – cortesía de
Cygwin.
Figura 5: Los paquetes normalmente vienen en grupos.
Figura 6: Moving entre los mundos: de un Mac a Windows, y luego a bash.
Luego hay que modificar el cortafuegos
de Windows para permitir las conexio-
nes al puerto 22. La configuración se
encuentra disponible en Inicio | Panel de
Control | Cortafuegos de Windows |
Configuración Avanzada | Reglas de
Entrada | Nuevas Reglas…
Es imprescindible permitir las conexio-
nes en el puerto 22 por medio de TCP en
todos los perfiles e introducir el nombre
Cygwin SSHD Server. Por supuesto, esta
solución es un parche, pero la recom-
pensa consiste en ¡una conexión SSH
directa al ordenador Windows (Figura
5)!
Uso de Programas deAplicaciónCygwin no está diseñado para ejecutar
servicios; los usuarios con programas
típicos de Linux pueden también benefi-
ciarse. Por ejemplo, Cygwin incluye el
programa de correo Mutt, el editor vi y el
administrador de archivos mc (Midnight
Commander) (Figura 6). Hay que reco-
nocer que existen versiones Windows de
muchas de estas herramientas, pero su
ejecución en un entorno completo tiene
sus beneficios.
Los scripts de copias de seguridad son
aplicaciones útiles. Muchos usuarios han
escrito sus propios programas Bash que
se basan en rsync para copiar los fiche-
ros que se desean respaldar en un sis-
tema remoto. Aunque rsync se encuentra
disponible para Windows, las sofistica-
das funciones de Bash son difíciles de
programar en Windows, por ello, es con-
veniente tener un entorno similar a
Linux.
La X Marca la DiferenciaPero esto no es todo. Cygwin también
incluye Cygwin/ X [3], una implementa-
ción del sistema X11 que permite ejecu-
tar aplicaciones gráficas directamente en
Windows (Figura 7).
Hay que admitir que la ejecución de
programas X clásicos de los primeros
días de la informática ya no es excitante.
Lo que hace interesante el servidor X, sin
embargo, es su protocolo diseñado para
redirigir la salida de un dispositivo a
otro. Gracias a las tecnologías actuales,
este es un proceso rápido que es ligero
de recursos, incluso con conexiones con
poco ancho de banda. Un ejemplo de
ello es x2go [4], que permite acceder a
un PC Linux de casa desde cualquier
sitio. Además, x2go es una solución ideal
para un servidor de un centro de datos
(Figura 8).
Aunque las mayorías de las soluciones
de virtualización proporcionan un senci-
llo soporte basado en la línea de coman-
dos, si se tiene un problema con la VM
(por ejemplo, un puente de red que no
funcione), no estará mal echarle un vis-
tazo a su monitor. Con x2go se puede
hacer en un par de segundos – y lo que
hace que x2go se pueda ejecutar en Win-
dows viene de la mano de Cygwin.
ConclusionesLa potencia de Cygwin salta a la vista
una vez que se mira con detalle. La capa
de compatibilidad con Linux permite el
uso en Windows de programas de aplica-
ción, comandos y herramientas del
mundo Linux. Como desarrollador, se
pueden portar rápida y fácilmente apli-
caciones. El entorno X11 ofrece diversas
opciones excitantes, con x2go se puede
ver la punta del iceberg de lo que repre-
sentan las sesiones remotas. Hay que
recordar que Cygwin no ha sido dise-
ñado para emular un sistema gráfico
Linux completo; posee restricciones – el
original es aún mejor. �
Cygwin • PRÁCTICO
27Número 78W W W . L I N U X - M A G A Z I N E . E S
[1] Cygwin: http:// www. cygwin. com
[2] HOW-TO de Cygwin SSHD: http://
www. noah. org/ ssh/ cygwin-sshd.
html
[3] Cygwin/ X: http:// x. cygwin. com
[4] x2go: http:// www. x2go. org
RECURSOS
Figura 7: El aspecto de Midnight Commander en Windows.
Figura 8: Simples programas gráficos ejecutándose en Windows gracias a Cygwin/ X.
Los catálogos de biblioteca se basa-
ron originalmente en un sistema de
tarjetas que era tedioso y lento para
actualizar manualmente. Afortunada-
mente, esto se hace hoy día a través de
modernos sistemas electrónicos que per-
miten una administración central de los
catálogos en las bibliotecas de manera
fácil. Recientemente he tenido el placer de
instalar un sistema de este tipo, Koha.
Koha [1] es un sistema para bibliotecas en
software libre que fue desarrollado inicial-
mente por Katipo Communications Ltd.
en Nueva Zelanda.
El sistema Koha incluye módulos para
gestionar la circulación, catalogación,
adquisición, publicación seriada, reservas,
gestión de clientes (usuarios) y mucho
más. Koha utiliza la bien conocida base de
datos MySQL y es fácilmente accesible
tanto para los clientes como para el perso-
nal a través de una intuitiva interfaz web.
La configuración es un sistema piloto
para las escuelas secundarias de Chipre.
En este esfuerzo se encuentran partici-
pando tres liceos, mientras que la Biblio-
PRÁCTICO • Koha
28 Número 78 W W W . L I N U X - M A G A Z I N E . E S
teca de la Universidad de Chipre está ayu-
dando en la creación, puesta a punto y
alojamiento del proyecto.
Para el banco de pruebas inicial,
importé el catálogo de la biblioteca de otro
sistema a Koha. El siguiente paso sería
importar el Catálogo de la Unión de Chi-
pre a Koha (previsto para un futuro pró-
ximo. El catálogo colectivo incluye los
datos bibliográficos de 38 bibliotecas dife-
rentes de toda la isla, con más de medio
millón de registros, lo que dará un gran
impulso al proyecto. Por ejemplo, una
biblioteca de una escuela ya no tendrá que
catalogar sus libros, porque la mayoría de
ellos ya estarán allí a través del catálogo
colectivo.
Además, la solución beneficiará a todos
los que participan en este catálogo colec-
tivo de las escuelas. Una instalación sirve
una cantidad arbitraria de las bibliotecas a
través de acceso basado en web sin nece-
sidad de tener ningún cliente instalado
localmente. Este sistema requiere menos
horas de soporte y será más fácil de man-
tener y actualizar. En este artículo descri-
bimos Koha y, más específicamente, la
configuración de Koha 3.02 en un servidor
openSUSE de 64 bits [2].
Configuración InicialInstalar Koha en un servidor es muy fácil.
Lo primero que deberíamos hacer es insta-
lar los paquetes básicos necesarios: el ser-
vidor web Apache [3], algunos módulos
de Perl y la base de datos MySQL [4].
Comenzamos por abrir una consola y
teclear:
yast -i apache2U
apache2-mod-perl
mysql-community-server make gcc
Después de instalar estos paquetes, es
necesario ajustar la configuración regional
David
Maska, 1
23R
F
Administración fácil de bibliotecas con KohaEl Guard��nde los LibrosLa Tecnología de la Información juega un papel clave en entornos de la
biblioteca moderna. Este mes echamos un vistazo a Koha, un sistema
integrado de software libre que puede ayudar a administrar sus opera-
ciones diarias en una biblioteca. POR EVELTHON PRODROMOU
01 locale02 LANG=en_US.UTF-803 LC_CTYPE=”en_US.UTF-8”04 LC_NUMERIC=”en_US.UTF-8”05 LC_TIME=”en_US.UTF-8”06 LC_COLLATE=”en_US.UTF-8”07 LC_MONETARY=”en_US.UTF-8”08 LC_MESSAGES=”en_US.UTF-8”09 LC_PAPER=”en_US.UTF-8”10 LC_NAME=”en_US.UTF-8”11 LC_ADDRESS=”en_US.UTF-8”12 LC_TELEPHONE=”en_US.UTF-8”13 LC_MEASUREMENT=”en_US.UTF-8”14 LC_IDENTIFICATION=”en_US.UTF-8”15 LC_ALL=
Listado 1: Locale delSistema
29Número 78W W W . L I N U X - M A G A Z I N E . E S
del sistema, de Apache y de MySQL. El
locale de su sistema debe estar en UTF-8.
Para ver si es el caso, vamos a una consola
de comandos y tecleamos locale. Debería-
mos obtener una respuesta como la que se
muestra en el Listado 1.
Si nuestro resultado es diferente, pode-
mos seguir el procedimiento del cuadro
“Configuración regional en UTF-8”.
Descargamos Koha con el comando:
wget http://download.U
koha-community.org/U
koha-version.tar.gz
y lo extraemos con tar:
tar xvfz koha-version.tar.gz
que va al directorio koha-version.
Configuración de ApacheEl siguiente paso es configurar la codifica-
ción de Apache. Para establecer la codifi-
cación por defecto a UTF-8 creamos un
archivo de configuración local y añadimos
la directiva AddDefaultCharset: .
vi /etc/apache2/httpd.conf.local
Añadimos lo siguiente al archivo:
AddDefaultCharset UTF-8
y guardamos. A continuación, tecleamos:
a2enmod perl5
chkconfig apache2 on
rcapache2 restart
Los comandos anteriores habilitan el Perl
scripting, reiniciamos Apache y nos asegu-
ramos de que se inicie en el arranque.
Configuración de Apache através de YaSTEn nuestro caso se configuró el sistema en
openSUSE, que utiliza la herramienta de
configuración YaST. Los pasos básicos
para otras distribuciones son similares,
pero los detalles pueden diferir. En los sis-
temas de openSUSE, puede utilizar YaST e
instalar el paquete yast2-http, que ofrece
una herramienta con interfaz gráfica de
usuario para gestionar fácilmente el servi-
dor HTTP. Tras instalar este paquete, vol-
vemos a cargar Yast y nos dirigimos a Ser-
vicios de Red | servidor http. Debemos ase-
gurarnos de que el servidor HTTP está
habilitado en el fire-
wall. Desde esta
herramienta tam-
bién podemos acti-
var o desactivar los
módulos de Apache
y otros parámetros
del servidor web.
Configuraciónde MySQLSi llegamos a este
punto, MySQL ya
está instalado. Por tanto, es necesario ase-
gurarse de que se inicia en el arranque, se
activa y cuida de los aspectos de seguri-
dad:
chkconfig mysql on
rcmysql start
/usr/bin/U
mysql_secure_installation
El último comando refuerza la seguridad y
nos permite eliminar las bases de datos de
prueba y las cuentas de usuario anónimas
creadas por defecto. Este paso es muy
recomendable en servidores de produc-
ción. Además de establecer una contra-
seña de root, el resto de las preguntas es
mejor dejarlas en sus valores predetermi-
nados, presionando Enter sin más.
Ahora sería un buen momento para ase-
gurarnos de que la codificación de MySQL
se establece a UTF-8. Para cambiarla,
vamos a un símbolo del sistema MySQL
simplemente tecleando mysql -p, contesta-
mos la petición con la contraseña de root,
y luego, con show, comprobamos que la
configuración de la codificación sea como
la del Listado 2. En este caso, todas las
configuraciones están en UTF-8, por lo
que no es necesario hacer cambios.
El último paso con MySQL es la conce-
sión de permisos al usuario koha para la
base de datos de Koha. Podemos hacer
esto a través de la interfaz de comandos
de MySQL. Para generar una base de datos
con éxito, primero tendremos que crear
un usuario MySQL, y concederle los per-
misos necesarios para la base de datos de
Koha. En el caso descrito en este artículo,
el usuario de MySQL se llama kohaadmin
(véase el Listado 3).
Configuración delAnalizador SAXKoha está basado principalmente en Perl,
por lo que debemos asegurarnos de que
los paquetes perl-XML-SAX y perl-XML-
libxml están instalados. En caso contrario,
podemos instalarlos desde un intérprete
de comandos:
yast -i perl-XML-SAXU
perl-XML-LibXML
Seguidamente debemos comprobar qué
analizador XML está usando el sistema.
Afortunadamente, Koha incluye una utili-
dad de shell que podemos utilizar para esto:
koha_root_folder/U
misc/sax_parser_print.pl
En mi caso, al ejecutar el verificador del
analizador SAX de Koha, se generó el con-
tenido del Listado 4.
Como indica la línea 5, tiene mala pinta,
pero no se preocupe, arreglar este error es
muy fácil: sólo tenemos que localizar un
archivo llamado ParserDetails.ini, del
siguiente modo: :
find / -iname ParserDetails.ini
Obtendremos una respuesta similar a esta:
/usr/lib/perl5/vendor_perl/U
5.12.1/XML/U
SAX/ParserDetails.ini
El siguiente paso es editar
ParserDetails.ini y cambiar la línea que
Koha • PRÁCTICO
1. Iniciar Yast.
2. Ir a Sistema | Idiomas.
3. Pulsar en Detalles. Aparecerá una
nueva ventana. Nos aseguramos de
que Configuración regional para el
usuario root está configurado a Sí y la
casilla Usar codificación UTF-8 está
marcada.
4. Aceptamos los cambios.
Configuración Regionalen UTF-8
01 mysql> show variables like ‘char%’;02 +--------------------------+----------------------------+03 | Variable_name | Value |04 +--------------------------+----------------------------+05 | character_set_client | utf8 |06 | character_set_connection | utf8 |07 | character_set_database | utf8 |08 | character_set_filesystem | binary |09 | character_set_results | utf8 |10 | character_set_server | utf8 |11 | character_set_system | utf8 |12 | character_sets_dir | /usr/share/mysql/charsets/ |13 +--------------------------+----------------------------+14 8 rows in set (0.00 sec)
Listado 2: Variables MySQL y sus Valores
La lista de módulos Perl necesarios se
muestra después de ejecutar el instalador,
el cual proporciona una lista de requisitos
previos no satisfechos tras responder a
una serie de preguntas. Para ahorrarle la
molestia de ir y venir de un lado a otro, he
creado una lista (véase la Tabla 1).
Todos estos módulos deben instalarse al
configurar Koha con todas las opciones
habilitadas. La columna de la izquierda
muestra el módulo de Perl requerido. La
columna de la derecha lista el módulo de
Perl tal y como se denomina en el reposito-
rio Perl de openSUSE. No todos los módu-
los necesarios existen en el repositorio de
Perl. Los que no tienen un equivalente
deben instalarse a través de CPAN [7].
Además, se tendrán que instalar dos
paquetes más en el sistema: perl-Cache-
Memchached y memcached.
Para instalarlos a través de CPAN, ejecu-
tamos el comando cpan mediante una
consola de comandos. Si es la primera vez
que ejecutamos este comando, tendremos
que configurarlo, para lo cual podemos
utilizar un proceso de configuración auto-
mática. Una vez realizado, deberíamos ver
un símbolo de sistema CPAN:
Enter ‘h’ for help.
cpan[1]>
A partir de aquí podemos instalar módu-
los con install module_name, por ejemplo
install Authen::CAS::Client.
Instalación de KohaLo primero que tenemos que hacer es
crear un usuario y un grupo para Koha.
Debemos asegurarnos de configurar la
contraseña de Koha. Los comandos que
necesitamos son useradd nombreusuario,
passwd nombreusuario, groupadd nom-
bregrupo. Para mayor comodidad, pode-
mos configurar el mismo nombre para el
usuario y el nombre del grupo.
Para iniciar la instalación ejecutamos
Makefile.PL. El script de instalación
genera una gran cantidad de líneas. Cada
parámetro se explica en el script de insta-
lación, por lo que este procedimiento debe
llevar sólo unos minutos.
Después de configurar las opciones de
parámetros, el script de instalación genera
una lista de los parámetros configurados,
así como las instrucciones sobre cómo se
pueden modificar. A continuación ejecuta-
mos make, make test y make install. Si
hemos introducido las opciones de
configuración correctas, debemos obser-
var un mensaje diciendo que se instalaron
los archivos de Koha.
dice [XML:: SAX::PurePerl] a [XML::
LibXML:: SAX:: Parser] y guardar. Para
verificar, volvemos a ejecutar sax_par-
ser_print.pl. Deberíamos obtener un men-
saje con “buen aspecto”, como el que se
muestra en el Listado 5.
Instalación de Módulos PerlUna vez hemos terminado con el analiza-
dor de XML, es necesario instalar unos
cuantos módulos Perl. Para descubrir qué
módulos son necesarios ejecutamos perl
Makefile.PL.
En este punto, esperaba recibir algún
tipo de mensaje de instalación, pero no
fue así. En su lugar apareció un aviso del
instalador diciendo Can’t locate
ZOOM.pm in @INC (@INC contains.
Una investigación posterior en Make-
file.PL mostró que me faltaba el paquete
perl-Net-Z3950-ZOOM. Este paquete no
se encuentra en los repositorios estándar
de openSUSE (los que se añaden cuando
el sistema se instala por primera vez). Lo
más fácil es buscar el paquete [5],
perl_net-Z3050. Ahora seguimos el pro-
cedimiento descrito en el cuadro “Insta-
lación de Servicio con 1-Click” para ins-
talarlo. Esto agrega el repositorio
devel:languages:perl [6] a la lista de
repositorios.
PRÁCTICO • Koha
30 Número 78 W W W . L I N U X - M A G A Z I N E . E S
01 mysql -u root -p02 Enter password:03 Welcome to the MySQL monitor. Commands end with ; or \g.04 Your MySQL connection id is 5305 Server version: 5.1.53-log SUSE MySQL RPM06 07 Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.08 This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to modify and redistribute it under the GPL v2 license09 10 Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.11 12 mysql> create database ̀ koha` default character set utf8 collate utf8_unicode_ci;13 Query OK, 1 row affected (0.00 sec)14 15 mysql> grant all on koha.* to ‘kohaadmin’@’localhost’ identified by ‘kohapassword’;16 Query OK, 0 rows affected (0.00 sec)17 18 mysql> flush privileges;19 Query OK, 0 rows affected (0.00 sec)20 21 mysql> quit22 Bye
Listado 3: Creación y Configuración Usuario MySQL01 Koha wants something like:
02 XML::LibXML::SAX::Parser=HASH
(0x81fe220)
03 You have:
04 XML::SAX::PurePerl=HASH(0x9a2bd0)
05 Looks bad, check INSTALL.* documen-
tation.
Listado 4: ConfiguraciónErrónea Analizador SAX
01 misc/sax_parser_print.pl02 Koha wants something like:03 XML::LibXML::SAX::Parser=HASH
(0x81fe220)04 You have:05 XML::LibXML::SAX::Parser=HASH
(0x9a0240)06 Looks good.
Listado 5: VerificaciónCorrecta Analizador XML
01 ./tmpl_procd /usr/share/koha/misc/translator02 ./tmpl_process3.pl install -i /usr/share/koha/opac/htdocs/opac-tmpl/prog/en/ -o /usr/share/koha/opac/htdocs/opac-tmpl/ prog/
el-GR -s /home/koha/koha-3.02.00/misc/translator/po/el-GR-i-opac-t-prog-v-3002000.po -r03 ./tmpl_process3.pl install -i /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/ -o /usr/share/koha/intranet/htdocs/intra-
net-tmpl/prog/el-GR -s /home/koha/koha-3.02.00/misc/translator/po/el-GR-i-staff-t-prog-v-3002000.po04 Charset in/out: UTF-8 at ./tmpl_process3.pl line 267.05 Copying /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/columns.def...06 The install seems to be successful.
Listado 6: Instalar un Nuevo Idioma
Para utilizar los procesos por lotes de la
línea de comandos de Koha, establecemos
las variables de entorno:
export KOHA_CONF=U
/etc/koha/koha-conf.xml
export PERL5LIB=U
/usr/share/koha/lib
Para otras tareas posteriores a la instalación,
por favor consulte el archivo README.
Tal y como se indica en las notas poste-
riores a la instalación, tendremos que esta-
blecer las variables de entorno. Para ello
sólo hay que crear /etc/bash.bashrc.local y
añadir:
export KOHA_CONF=U
/etc/koha/koha-conf.xml
export PERL5LIB=U
/usr/share/koha/lib
Ahora, para activar las variables, salimos
y volvemos a loguearnos en la shell.
Configurar ApacheDebido a que es una aplicación web, ten-
dremos que crear una máquina virtual. En
openSUSE, los archivos de la máquina vir-
tual se configuran en el directorio /etc/
apache2/ vhost.d. Cualquier archivo con la
extensión .conf es leído y se considera un
archivo de configuración del host virtual.
Además, el instalador de Koha ya ha cre-
ado un archivo de configuración con todas
las directrices necesarias en /etc/ koha/
koha-httpd.conf. Lo único que queda es
crear un enlace simbólico que apunte a
ese archivo en el directorio del host virtual
de Apache. Podemos hacerlo tecleando:
ln -s /etc/koha/koha-httpd.confU
/etc/apache2/vhosts.d/koha.conf
Además, tenemos que habilitar los módu-
los rewrite y env con el comando:
a2enmod rewrite
a2enmod env
Luego debemos editar /etc/ koha/ koha-
httpd.conf y añadir lo siguiente al final del
archivo para permitir la exploración de
koha:
<Directory /usr/share/koha>
Order allow,deny
Koha • PRÁCTICO
31Número 78W W W . L I N U X - M A G A Z I N E . E S
Tabla 1: Paquetes Perl y sus Nombres en openSUSEPaquete Perl Paquete openSUSE 11.3 Paquete Perl Paquete openSUSE 11.3
Algorithm::CheckDigits perl-Algorithm-CheckDigits MIME::Lite perl-MIME-Lite
Authen::CAS::Client Mail::Sendmail perl-Mail-Sendmail
Biblio::EndnoteStyle perl-Biblio-EndnoteStyle Memoize::Memcached
Business::ISBN perl-Business-ISBN Net::LDAP
CGI::Session perl-CGI-Session Net::Z3950::ZOOM perl-Net-Z3950
CGI::Session::Serialize::yaml perl-CGI-Session-Serialize-yaml Net::LDAP::Filter
Class::Accessor perl-Class-Accessor Net::Server perl-Net-Server
Class::Factory::Util perl-Class-Factory-Util Number::Format perl-Number-Format
DBD::SQLite2 perl-DBD-SQLite PDF::API2 perl-PDF-API2
DBD::mysql perl-DBD-mysql PDF::API2::Page
Data::ICal perl-Data-ICal PDF::API2::Simple
Date::Calc perl-Data-Calc inc::Module::Install perl-Module-Install
Date::ICal perl-Date-ICal PDF::API2::Util
Date::Manip perl-Date-Manip PDF::Reuse perl-PDF-Reuse
DateTime perl-DateTime PDF::Reuse::Barcode perl-PDF-Reuse-Barcode
Email::Date perl-Email-Date PDF::Table
GD perl-GD POE perl-POE
GD:Barcode:UPCE perl-GD-Barcode SMS::Send perl-SMS-Send
Graphics::Magick perl-GraphicsMagick Schedule::At perl-Schedule-At
HTML::Scrubber perl-HTML-Scrubber Text::CSV perl-Text-CSV
HTML::Template::Pro perl-HTML-Template-Pro Text::CSV::Encoded
HTTP::OAI Text::CSV_XS perl-Text-CSV_XS
JSON perl-JSON Text::Iconv perl-Text-Iconv
Lingua::Stem perl-Lingua-Stem UNIVERSAL::require perl-UNIVERSAL-require
Lingua::Stem::Snowball perl-Lingua-Stem-Snowball XML::Dumper perl-XML-Dumper
List::MoreUtils perl-List-MoreUtils XML::LibXSLT perl-XML-LibXSLT
Locale::Currency::Format XML::RSS perl-XML-RSS
Locale::PO perl-Locale-PO XML::SAX::Writer perl-XML-SAX-Writer
MARC::Charset perl-Marc-Charset YAML Perl-YAML
MARC::Crosswalk::DublinCore perl-MARC-Crosswalk-DublinCore YAML::Syck perl-YAML-Syck
MARC::File::XML perl-MARC-File-XML HTML::Template::Pro perl-HTML-Template-Pro
MARC::Record perl-MARC-Record DublinCore::Record perl-DublinCore-Record
su contraseña, y se mos-
trarán algunas preguntas
más para terminar la
instalación. En caso de
no completarla, la inter-
faz web koha quedará
bloqueada en modo de
mantenimiento.
Cuando visité por pri-
mera vez mi interfaz del
instalador web, recibí
una advertencia
diciendo que el paquete
perl-Date-ICal no se
había instalado, a pesar
de que se instaló a tra-
vés de YaST. Para resol-
ver esto, lo eliminé
desde Yast y luego lo ins-
talé a través de CPAN.
Instalar IdiomasAdicionalesComo con cualquier
aplicación multilingüe,
nuestra configuración
puede necesitar soporte
para otros idiomas ade-
más del inglés. Para tra-
ducir la interfaz gráfica
de usuario a otro idioma debemos comple-
tar un proceso de dos pasos. El primero de
ellos es localizar los archivos .po del
idioma que queramos e instalarlos. El
segundo paso es activar el idioma recién
instalado desde la interfaz web de admi-
nistración de Koha. Vamos a mostrar
cómo añadir el idioma griego, aunque el
procedimiento es el
mismo para cualquier
otro idioma soportado.
Comenzamos cre-
ando la jerarquía para
Greek (el-GR), para lo
que tenemos que crear
dos directorios: /usr/
share/ koha/ opac/
htdocs/ opac-tmpl/ prog/
el-GR y /usr/share/
koha/intranet/htdocs/
intranet- tmpl/ prog/ el-
GR. El primer directorio
incluye la interfaz OPAC
(Online Public Access
Catalog), y el segundo
la interfaz de la intranet.
Suponiendo que hemos
extraído Koha en la car-
peta koha del directorio
de usuario, podemos ejecutar el comando
mostrado en el Listado 6 para instalar la
traducción griega.
Si aparece el mensaje “The install
seems to be successful”, podemos proce-
der al segundo paso, que es activar el
nuevo idioma. Si no es así, puede que no
hayamos creado un directorio necesario,
o puede que haya escrito incorrecta-
mente alguna de las rutas en los coman-
dos.
Para continuar, nos logueamos en la
interfaz de la intranet como administra-
dor. La primera interfaz que ve un admi-
nistrador es la que se muestra en la Figura
1.
A partir de ahí, nos vamos a Home |
Administration | System Preferences |
OPAC | I18N/ L10N. En esa página se nos
dará la opción de habilitar el idioma que
acabamos de instalar, como se ve en la
Figura 2.
Instalación y Configuraciónde ZebraSi estamos creando un servidor de produc-
ción, es probable que queramos instalar el
motor de indexación de texto y de recupe-
ración Zebra [8]. Sin él, buscar algo será
lento y frustrante. Sin embargo, si sólo
estamos haciendo una prueba, todo irá
bien sin él. Para instalar Zebra, simple-
mente escribimos:
yast -i idzebra idzebra-doc
Una vez instalado, podemos ejecutar el
comando rebuild:
/usr/share/koha/binU
/migration_tools/U
rebuild_zebra.pl -r -v -a -b
En mi caso, Zebra no funcionó a la pri-
mera. Tuve que hacer algunos ajustes. El
comando rebuild devolvió problemas de
propiedad, como se muestra en el Listado
7.
Para solucionar este problema, di una
propiedad adecuada al directorio zebradb
de la siguiente manera:
chown -R [koha_user]:U
[koha_group]U
/var/lock/koha/zebradb
Entonces, emití el comando rebuild de
nuevo, y funcionó sin ningún tipo de pro-
blemas. Sin embargo, parecía que no se
Allow from all
</Directory>
No debemos olvidar reiniciar Apache.
Al visitar http:// tuTLD:8080, se mos-
trará un formulario de acceso para iniciar
el instalador web. Necesitaremos el nom-
bre de usuario de administrador de koha y
PRÁCTICO • Koha
32 Número 78 W W W . L I N U X - M A G A Z I N E . E S
/usr/share/koha/bin/migration_tools/rebuild_zebra.pl -r -v -a -bZebra configuration information================================Zebra biblio directory = /var/lib/koha/zebradb/bibliosZebra authorities directory =/var/lib/koha/zebradb/authoritiesKoha directory = /usr/share/koha/intranet/cgi-binBIBLIONUMBER in : 001$@BIBLIOITEMNUMBER in : 090$a================================exporting authority====================
====================REINDEXING zebra====================15:24:24-21/12 zebraidx(5218) [log] zebra_start 2.0.43abd433d1a315576cf1f4a53f2c70365f9a76477f15:24:24-21/12 zebraidx(5218) [log] config/etc/koha/zebradb/zebra-biblios.cfg15:24:24-21/12 zebraidx(5218) [warn] zebra_lock_createfail fname=/var/lock/koha/zebradb/biblios/norm..LCK[Permission denied]
Listado 7: Salida del Comando rebuildde Zebra
Figura 1: La intranet vista por un administrador.
Figura 2: Activación de idiomas adicionales en Koha.
habían cargado los módulos de filtro. El
problema se encontraba en la ruta de las
bibliotecas de 64 bits. Para localizar la ruta
correcta podemos hacer:
find / -iname mod-alvis.so
/usr/lib64/idzebra-2.0/U
modules/mod-alvis.so
Una vez corregida la ruta, edité el archivo
de configuración zebra biblios.cfg y reem-
placé:
modulePath: U
/usr/lib/idzebra-2.0/modules
con
modulePath: U
/usr/lib64/idzebra-2.0/modules
Finalmente, se pudo inicializar Zebra con:
/usr/bin/zebrasrvU
-f /etc/koha/koha-conf.xml &
Debemos asegurarnos de que este
comando se agrega a /etc/ init.d/ after.local
para que Zebra se inicialice cada vez que
arranca el servidor.
Por último, si vamos a llevar el sistema
a Internet, deberíamos activar el soporte
SSL en la instalación. No voy a entrar en
muchos detalles sobre eso, porque el
soporte SSL en Apache es bastante senci-
llo. Para Koha, tenemos que editar el
fichero de configuración y añadir SSL
como nueva directiva de host virtual en el
puerto 443. También podemos agregar el
cifrado SSL en el puerto 8080 para las
conexiones de intranet (no olvide activar
el módulo SSL de Apache).
Uso de KohaLo que ve un usuario al visitar su sitio
web es la interfaz del Catálogo de Acceso
Público en línea (OPAC) – similar a la que
se ve en la Figura 3. Los usuarios pueden
buscar materiales en el
catálogo de la biblioteca,
y es posible acceder para
adaptar la información a
nuestras propias necesi-
dades. Además, pueden
almacenar los resultados
de búsqueda como lis-
tas, añadir etiquetas,
enviar sugerencias de
compra y mucho más.
Existen manuales deta-
llados [9] para explicar
todo tipo de operacio-
nes.
AgregarClientesEn entornos de biblio-
teca, a los usuarios se
les llama clientes. Aña-
dir uno en Koha es sólo
cuestión de un par de
clics. Para hacerlo
vamos a Patrons | New.
Pulsando en New se abre un formulario en
el que podemos añadir los detalles de un
cliente. Tenga en cuenta los campos login
y password de OPAC hacia el final del for-
mulario. Cada usuario necesita una
cuenta de usuario de OPAC para loguearse
en Koha. Cuando hayamos terminado,
simplemente pulsamos Save.
Si no hacemos nada más, las credencia-
les que utilizamos para este usuario sólo
se utilizan para que se loguee como un
cliente habitual (usuario de biblioteca). Si
necesitamos crear algún otro usuario,
tenemos que editar los permisos de acceso
del usuario. Para ello, vamos a Home |
Patrons y elegimos la cuenta del cliente.
Podemos localizar al cliente buscando por
nombre parcial, o con un número de su
tarjeta. Alternativamente, podemos nave-
gar por los clientes por apellido.
Supongamos, por ejemplo, que tenemos
un cliente llamado Account Tester. Si lo
buscamos por test, se obtendrá una lista de
usuarios (en este caso,
un usuario demo), como
se ve en la Figura 4.
El nombre del cliente
será un enlace. Al pulsar
en ese enlace nos lleva a
la página del cliente. Ele-
gimos More | Set permis-
sions para ir a la página
de permisos. Las opcio-
nes de permiso se mues-
tran en la Figura 5. Deberíamos tener en
cuenta algunas consideraciones antes de
asignar los permisos a los usuarios.
ConclusiónKoha nos permite automatizar el ciclo de
producción de una biblioteca a través de
una interfaz de usuario intuitiva basada
en Web y es relativamente fácil de confi-
gurar. Aprender a gestionar Koha puede
llevar un tiempo, ya que es un sistema
muy completo. En este artículo nos hemos
centrado en instalar y configurar Koha
desde el punto de vista del administrador.
Después de eso, le toca a los bibliotecarios
agregar contenido, usuarios y utilizar el
software adecuadamente. �
Koha • PRÁCTICO
33Número 78W W W . L I N U X - M A G A Z I N E . E S
[1] Koha: http:// www. koha. org/
[2] openSUSE Linux:
http:// www. opensuse. org
[3] Servidor web Apache:
http:// www. apache. org
[4] MySQL AB: http:// www. mysql. com
[5] Descarga de openSUSE:
http:// software. opensuse. org
[6] Repositorio Perl en openSUSE:
http:// download. opensuse. org/
repositories/ devel:/ languages:/ perl/
openSUSE_11. 3
[7] CPAN: http:// www. cpan. org
[8] Zebra: http:// www. indexdata. com/
zebra
[9] Manuales de Koha: http:// koha. org/
documentation/ manual
RECURSOS
Figura 4: Búsqueda de clientes.
Figura 5: Configuración de permisos.
Figura 3: El catálogo de acceso público en línea (OPAC) visto por
un usuario anónimo.
Aunque se pueda manejar la base de
datos MySQL desde la línea de
comandos, siempre es preferible uti-
lizar una herramienta gráfica. phpMyAdmin
[1] es la elección de muchos usuarios, pero
no es la única que existe. De hecho, si hace
falta configurar una base de datos ocasional
o ajustar algunos parámetros de la base de
datos de vez en cuando, la cantidad de fun-
ciones de phpMyAdmin podría ser exage-
rada para estas necesidades. Afortunada-
mente, tenemos disponible varias alternati-
vas sencillas para la administración de
MySQL, y en este artículo vamos a echarle
un vistazo a varias de ellas.
SQL BuddyAunque SQL Buddy [2] no se encuentra
actualmente en desarrollo, aún sigue siendo
PRÁCTICO • MySQL Buddy y Adminer
34 Número 78 W W W . L I N U X - M A G A Z I N E . E S
la mejor herramienta de administración
ligera para MySQL. Su facilidad de uso y la
lógica de su interfaz con Ajax hacen que la
tarea de crear y administrar bases de datos
MySQL sea pan comido, incluso para los
usuarios normales. Escrita enteramente en
PHP, SQL Buddy no requiere ninguna insta-
lación; tan sólo hay que obtener la última
versión del sitio web del
proyecto, descomprimir el
archivo, mover el directo-
rio resultante al directorio
raíz del servidor web y
listo.
SQL Buddy utiliza la
tabla users de MySQL para
la autenticación, de modo
que el usuario puede
conectarse usando cual-
quiera de los usuarios de
MySQL existentes, inclu-
yendo el usuario root. Una
vez conectados, se mos-
trará la página principal
(Figura 1). Aquí se puede
seleccionar un idioma
(SQL Buddy soporta 47
idiomas) y un tema (a
escoger entre Bittersweet
que viene por defecto y el
tema Classic). En la sec-
ción Create a New Database, se puede crear
rápidamente una base de datos nueva intro-
duciendo su nombre, seleccionando un
juego de caracteres y presionando el
botón Submit.
SQL Buddy soporta atajos de teclado, de
modo que pueden realizarse ciertas opera-
ciones sin tener que abandonar el teclado –
en la página principal podemos encon-
trar un listado con estos atajos.
La barra de navegación lateral de la
izquierda se encuentra dividida en dos gru-
pos. Los enlaces de navegación en la parte
superior de la barra lateral permiten acceder
de forma rápida a otras páginas de SQL
Buddy tales como Users, Query, Import y
Export. Debajo de estos enlaces se encuentra
una lista desplegable con todas las bases de
datos disponibles. Para utilizar una base de
datos hay que hacer clic sobre ella, o bien,
hacer clic en el triángulo que se encuentra
Serg
ey K
on
yakin
, 123R
F
Ante todo simplicidad: Herramientas ligeras para la administración de MySQL
HERRAMIENTAS MYSQLAlbergar sitios web tanto en nuestro servidor local como en servidores
remotos casi siempre implica el uso de una base de datos MySQL. Por
ello siempre debemos tener en nuestro arsenal alguna herramienta
decente para su administración. POR DMITRI POPOV
Figura 1: SQL Buddy posee una interfaz intuitiva y soporta ata-
jos de teclado.
35Número 78W W W . L I N U X - M A G A Z I N E . E S
junto a la base de datos para ver todas sus
tablas.
Como probablemente haya adivinado ya,
la página Users proporciona las herramien-
tas esenciales para la gestión de los usuarios.
También aquí, la simplicidad es la clave.
Para crear un usuario nuevo se introduce el
host, el nombre del usuario y la contraseña
en los campos apropiados, luego con las
opciones disponibles se le autoriza el acceso
a las bases de datos y se le asignan los privi-
legios. Haciendo clic en el botón Submit se
añade el usuario al sistema (Figura 2). La
edición de las cuentas de los usuarios exis-
tentes es igual de fácil: se selecciona el usua-
rio que se desee editar y se presiona el botón
Edit, luego sólo hay que modificar los valo-
res apropiados.
La página Query proporciona un editor
SQL que permite la construcción y la ejecu-
ción de consultas SQL. De hecho, tan sólo es
un cuadro de texto sin ningún tipo de flori-
tura como el coloreado de código. Para tra-
bajar con esta función hay que saber SQL.
SQL Buddy facilita la realización de copias
de seguridad de las bases de datos MySQL y
de los datos almacenados en ellas por medio
de la página Export. Se pueden seleccionar
todas o algunas de las bases de datos de la
lista Databases y elegir si se quiere exportar
la base de datos, los datos o ambos. Para
guardar el fichero como .sql se debe selec-
cionar como opción de salida Text file, asig-
nar un nombre al fichero de la copia de
seguridad y presionar Submit (Figura 3).
Para restaurar las bases de datos y los datos
(o importar los datos
a partir de otras
bases de datos), en
la página Import se selecciona el fichero .sql
que contenga la copia de seguridad y se
pulsa el botón Submit.
La intuitiva interfaz de usuario de SQL
Buddy también facilita el trabajo con las
bases de datos. Haciendo clic en Databases,
que se encuentra en la barra de navegación,
se accede a la página de mantenimiento.
Aquí se pueden añadir tablas y campos a la
base de datos, además de manipular las
tablas existentes. La creación de tablas y
campos es bastante sencilla. En la sección
Create a New Table, se le da un nombre a la
tabla, se especifica el juego de caracteres, se
añaden tantos campos como se necesiten y
se presiona Submit.
También se pueden seleccionar las tablas
existentes y realizar diversas acciones sobre
ellas, como Empty (borra todos los registros
de las tablas seleccionadas), Drop (borra las
tablas seleccionadas) y Optimize (optimiza
las tablas seleccionadas) (Figura 4). Por
supuesto, es posible utilizar SQL Buddy para
moverse y ver los registros de las tablas de la
base de datos. Haciendo clic en el icono
MsSQL Buddy y Adminer • PRÁCTICO
Figura 2: Añadiendo un usuario nuevo.
Figura 3: SQL Buddy facilita la exportación de las bases de datos y de
los datos.
Figura 4: Trabajando con bases de datos en SQL Buddy.
triangular se pueden explorar y recorrer los
registros. Para editar un registro, se selec-
ciona y se presiona el enlace Edit.
En resumen, SQL Buddy es una herra-
mienta para la administración de MySQL
bastante agradable. Su intuitiva interfaz de
usuario hace que el trabajo con las bases de
datos sea menos tedioso, incluso para los
usuarios sin experiencia. El único inconve-
niente es que su desarrollador original ya no
sigue manteniéndola, pero tengo la espe-
ranza de que la comunidad dé un paso ade-
lante y continúe el desarrollo de esta ágil
herramienta.
AdminerHay dos cosas que diferencian a Adminer
[3] del resto de las herramientas de adminis-
tración de MySQL. Primero, la herramienta
completa consiste en un único fichero PHP,
de modo que es ridículamente fácil la insta-
lación: descargamos la última versión de
Adminer del sitio web del proyecto y copia-
mos el fichero al directorio raíz del servidor
web. Y eso es todo. Segundo, Adminer es
impresionantemente rápida, lo que puede
ser un punto a favor cuando hace falta admi-
nistrar una base de datos MySQL remota por
medio de una conexión lenta. Además de
MySQL, Adminer también puede manejar
las bases de datos PostgreSQL, SQLite, MS
SQL y Oracle.
La interfaz de usuario de Adminer no
ganaría ningún concurso de diseño, y si la
comparamos con la de SQL Buddy, pode-
mos decir que es totalmente plana (Figura
5); sin embargo, es la carencia de elementos
visuales lo que hace que Adminer sea tan
rápida. Y aunque la interfaz no sea bonita,
es funcional y permite que se pueda realizar
el trabajo.
De forma similar a SQL Buddy, Adminer
utiliza la tabla users de MySQL para la
autenticación de los usuarios, de modo que
podemos conectarnos usando cualquier
cuenta de usuario existente en el servidor
MySQL. La página principal muestra un lis-
tado de las bases de datos existentes y pro-
porciona unos cuantos enlaces con los
comandos más utilizados, con los cuales se
puede crear una base de datos nueva; ver,
modificar y añadir usuarios; y echarle un ojo
a los procesos en ejecución.
La creación de una base de datos nueva es
un proceso bastante sencillo. Para comen-
zar, hay que hacer clic en el enlace Create
new database, luego se especifica el nombre,
la codificación y se pulsa el botón Save. El
añadido de usuarios nuevos tampoco es par-
ticularmente difícil. Para poder rellenar los
campos requeridos y espe-
cificar los privilegios hay
que hacer clic en el enlace
Privileges de la página prin-
cipal y luego en Create user
(Figura 6). Para finalizar se
pulsa Save. Si se desea
modificar un usuario exis-
tente, es suficiente con
hacer clic en el enlace edi-
tar que se encuentra junto
al usuario deseado.
Para ir a una base de
datos específica, o bien se
pulsa el enlace correspon-
diente de la lista de bases de
datos, o bien se selecciona
de la lista desplegable de la
barra de navegación de la parte izquierda. De
esta forma se abre la página Tables and
Views que contiene un resumen de todas las
tablas de la base de datos (Figura 7).
El campo Search puede ser útil para bus-
car registros en una tabla. Por ejemplo, si se
teclea “monkey” y se presiona el botón
Search, nos devolverá una lista de tablas que
contienen algún registro que coincide con la
búsqueda. Al pulsar sobre una de estas
tablas se podrán ver los registros obtenidos
como resultado de la búsqueda.
Los botones en la parte inferior de la lista
permiten realizar diversas acciones útiles. Es
posible optimizar, comprobar y reparar
tablas simplemente presionando el botón
apropiado. Para examinar la estructura de
una tabla específica sólo hay que pulsar
sobre ella en la vista resumen. Para poder
ver los registros de la tabla, se debe pulsar el
enlace Select data. Se pueden editar los
registros de forma individual con tan sólo
hacer clic en el enlace edit que aparece junto
a ellos, y si se quiere añadir un registro
nuevo, lo único que hay que hacer es pulsar
el enlace New item.
Como cualquier herramienta para la
administración de MySQL que valga la pena,
Adminer permite importar y exportar datos,
y para ello dispone de varias formas de
hacerlo. Cuando se está viendo una tabla, se
puede exportar su estructura y registros
haciendo clic en el enlace Export que se
encuentra al pie de la página y seleccio-
nando el tipo de salida que se desee (por
ejemplo, abrir el fichero de exportación en el
navegador, guardarlo, o comprimirlo y guar-
PRÁCTICO • MySQL Buddy y Adminer
36 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 6: Modificación de un usuario existente.
Figura 5: La interfaz de Adminer es decididamente básica.
darlo). Adminer también soporta tres forma-
tos populares de exportación: SQL, CSV
(valores separados por coma) y TSV (valores
separados por tabuladores); sólo hay que
seleccionar el deseado y pulsar el botón
Export. La importación de datos en la tabla
actual también es muy fácil: Hay que hacer
clic en el enlace Import, seleccionar el
fichero fuente y presionar Import. El
comando Dump en la barra de navegación
permite exportar la base de datos que actual-
mente se esté viendo entera o todas las
bases de datos juntas si se invoca desde la
página principal (Figura 8).
En resumen, no hay que dejarse engañar
por el aspecto de Adminer. Esta herramienta
para la administración de
MySQL es competente, fácil de
instalar y extremadamente
rápida. Gracias a sus flexibles
opciones de exportación y
soporte para operaciones avan-
zadas como son las funciones,
los triggers y los procedimientos
almacenados, es perfecta para
los usuarios casuales de MySQL
y para los avanzados.
ConclusiónAsí que, ¿cuál de estas dos herra-
mientas de administración de
MySQL debemos elegir? Si sólo
tenemos que crear bases de
datos ocasionales o realizar
algún ajuste de vez en cuando,
entonces SQL Buddy será una buena elec-
ción. No nos agobiará con funciones avan-
zadas y además, engloba todas sus funcio-
nes en una interfaz elegante. Si lo que nece-
sitamos es una herramienta rápida y
potente, y no nos dejamos asustar por inter-
faces que exponen funciones complejas, en
ese caso Adminer es lo que andamos bus-
cando. �
MsSQL Buddy y Adminer • PRÁCTICO
37Número 78W W W . L I N U X - M A G A Z I N E . E S
[1] phpMyAdmin: www. phpmyadmin.
net
[2] SQL Buddy: http:// www. sqlbuddy.
com/
[3] Adminer: www. adminer. org
RECURSOS
Figura 7: Trabajando con tablas en Adminer.
Figura 8: Adminer dispone de una utilidad de exportación
flexible.
DESARROLLO • Python: Django y Mongo DB
38 Número 78 W W W . L I N U X - M A G A Z I N E . E S
El ORM de Django (la librería
que nos permite interactuar con
la base de datos) fue diseñado
de forma que su evolución futura no
quedase bloqueada por decisiones
tomadas en el pasado. Siempre se ha
comparado este ORM con uno de los
más populares en Python, SQLAlchemy
[1]. Pero el propio nombre de este
competidor deja claro su objetivo:
hacer magia con SQL.
Sin embargo, el ORM de Django se
concebió mirando desde la otra parte
del camino. En lugar de centrarse en
crear un sistema que permitiese inter-
actuar con bases de datos relacionales
(que generalmente usan SQL como len-
guaje) se diseñó para poder almacenar
y rescatar objetos desde un repositorio
abstracto. Quizá llamarlo ORM (Object
Relational Manager) no fue una deci-
sión muy acertada.
Después de la dura batalla entre los
distintos conten-
dientes por la
corona de las
nuevas bases de
datos NoSQL que
compiten por
ofrecer diferentes
alternativas a las
bases de datos
relacionales,
MongoDB [2]
comienza a perfilarse como vencedor.
Su acertada elección de características y
su comportamiento a medio camino
entre base de datos relacional y base de
datos llave-valor (diccionarios), le ha
hecho ganar muchos puntos en la
GIGANTESCO
Integración de Django y MongoDB
En una serie de dos artículos comprobaremos cómo podemos hacer uso de toda la potencia de MongoDB
desde Django de forma sencilla. POR JOSÉ MARÍA RUÍZ
01 from mongoengine import *
02
03 class Vuelo(Document):
04 localizador = StringField(required = True)
05 aerolinea = StringField(required=True)
06 origen = StringField(required = True)
07 destino = StringField(required = True)
08 fecha = DateTimeField(required=True)
Modelo mongodb para Vuelo.
No
el P
ow
ell, 1
23R
F.co
m
comunidad de start-ups software. Otro
de los atributos que hace de MongoDB
un gran candidato, y que también le ha
hecho ganar la confianza de muchas
empresas establecidas, es su capacidad
para crear una infraestructura distri-
buida (múltiples servidores conectados)
de forma prácticamente automática.
En este artículo no nos centraremos
en los atributos de MongoDB, sino en
cómo podemos emplear MongoDB
desde Django de forma muy sencilla
gracias a la librería MongoEngine [3].
MongoDBComencemos creando una instancia de
MongoDB. Debemos instalar MongoDB
empleando el sistema de paquetes de
nuestra distribución (en cuyo caso
debemos instalar un paquete con un
nombre parecido a «mongodb-server»),
o bien podemos descargar el código
fuente desde la página web del pro-
yecto [2].
Es recomendable emplear la versión
2.x del proyecto, puesto que incorpora
gran cantidad de mejoras en cuanto a
la fiabilidad y protección de los datos.
En versiones anteriores de MongoDB,
el comportamiento del servidor podía
provocar pérdidas de datos no desea-
das.
Si hemos instalado correctamente el
servidor podemos arrancarlo, pero pri-
mero debemos decidir en qué directo-
rio albergaremos los datos. Por defecto,
MongoDB tratará de usar el directorio
/data/db/, pero podemos seleccionar
cualquier directorio que queramos
usando la opción --dbpath:
$ mkdir midirectorio
$ mongod --journal --dbpath U
midirectorio
La opción --journal le indicará a Mon-
goDB que emplee un fichero de log
para las operaciones, lo que nos prote-
gerá ante pérdidas de datos ocasiona-
das por fallos de alimentación («tirón
del enchufe») a cambio de perder algo
de rendimiento.
Si entramos en el directorio donde
hemos arrancado MongoDB, nos pode-
mos llevar un susto al ver que existen
varios ficheros con un tamaño de 1
gigabyte. Es algo normal – para
aumentar el rendimiento MongoDB
pre-aloja espacio en disco duro.
los modelos del ORM de Django, lo que
nos permitirá reutilizar todo nuestro
conocimiento de Django en su práctica
totalidad.
Podemos instalar MongoEngine
usando el sistema de gestión de paque-
tes Python pip en un virtualenv (si no
conoces estas dos tecnologías, ¡debe-
rías comenzar a usarlas ahora
mismo!):
$ pip install mongoengine
En este artículo, voy a suponer que dis-
ponemos de un proyecto Django opera-
tivo y funcionando. En tal caso deberí-
amos contar con un fichero llamado
settings.py donde se configura el com-
portamiento de Django. Debido a que
MongoEngine no forma parte de
Python, debemos añadir una serie de
lineas en este fichero:
from MongoEngine import connect
connect(“mi-base-de-datos”)
La función connect establecerá una
conexión con la instancia MongoDB
que está ejecutándose en otro terminal.
Por defecto la buscará en el puerto
Muy bien, todo está listo para conec-
tar nuestro proyecto Django con Mon-
goDB, pero antes echemos un vistazo a
los problemas que plantea MongoDB .
No Todo el Monte esOréganoMongoDB trae un poco de aire fresco al
algo añejo mundo de las bases de
datos. Organiza los datos de forma
muy sencilla, disponemos de bases de
datos, colecciones y subcolecciones.
Tenemos libertad absoluta para crear
cuantos elementos de cada tipo desee-
mos. Los documentos almacenados se
comportan como ficheros JSON [4], lo
que los hace muy sencillos de emplear
en Python – vienen a ser como diccio-
narios. Para que no ocupen tanto espa-
cio en disco, MongoDB los almacena
en un formato binario llamado BJSON,
definiendo tipos para números, boolea-
nos, cadenas, fechas…
Todo esto es genial, pero también
plantea varios problemas. Los docu-
mentos almacenados en una colección
pueden ser de cualquier tipo. Podemos
juntar peras y manzanas en una misma
colección, y MongoDB no se quejará.
Esta flexibilidad extrema puede vol-
verse en nuestra contra rápidamente a
medida que la complejidad de nuestro
sistema crezca.
Pero esta forma de trabajar también
es una ventaja, puesto que podremos
ampliar nuestros modelos de datos sin
la necesidad de sus tediosas y peligro-
sas migraciones. Simplemente pode-
mos añadir más campos a nuestros
modelos y no habrá ningún error. Las
nuevas instancias tendrán el nuevo
campo y las antiguas no lo tendrán.
Como MongoDB difiere de la forma
en que queremos usarlo en Django,
MongoEngine introduce algunas res-
tricciones para hacerlo más maneja-
ble.
MongoEngineSi bien podemos usar MongoDB direc-
tamente desde Django, empleando la
librería pymongo
[3], MongoEn-
gine nos hará la
vida más senci-
lla, ver Figura 1.
Define una serie
de clases que se
comportan como
Python: Django y Mongo DB • DESARROLLO
39Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 1: Esquema que muestra cómo se
estructura MongoEngine.
01 class Pasajero(Document):
02 nombre = StringField(required = True)
03 apellidos = StringField(required = True)
04 nie = StringField(required = True)
05 fecha_caduca_nie = DateTimeField(required = True)
Modelo mongodb para Pasajero.
Django. Podemos
crear un modelo
vacío:
>>> v = Vuelo()
Pero si tratamos de guardarlo, se gene-
rará un error:
>>> v.save()
...
ValidationError: Field U
“localizador” is required
>>>
Aunque MongoDB nos permite almace-
nar cualquier tipo de documento, Mon-
goEngine realiza comprobaciones
antes de permitir guardar el modelo.
En este caso nos indica que el campo
localizador es obligatorio. Podemos
asignar valores a cada campo:
>>> v.localizador = “AAA1234”
>>> v.origen = “AGP”
>>> v.destino = “LGW”
>>> v.aerolinea = U
“Python airlines”
>>> from datetime import U
datetime
>>> v.fecha = U
datetime(2011,12,3)
>>> v.save()
Ahora sí hemos podido guardar el
modelo. Es posible editar cualquiera de
los campos de v y volver a guardar:
>>> v.localizador = “BBB4567”
>>> v.save()
Para comprobar que efectivamente se
ha almacenado el modelo, podemos
buscarlo como lo haríamos con el ORM
de Django:
>>> Vuelo.objects.filter(U
localizador = ‘BBB4567’)
[<Vuelo: Vuelo object>]
>>> Vuelo.objects.filter(U
localizador = ‘BBB4567’U
)[0].localizador
“BBB4567”
Una diferencia entre MongoDB y las
bases de datos relacionales es que cada
documento almacenado en MongoDB
dispone de un id que es único de forma
global. No puede haber dos objetos en
MongoDB con el mismo id, aunque
pertenezcan a diferentes bases de
datos.
>>> v.id
ObjectId(‘4ede0549a261U
7c1306000000’)
>>> v.pk
ObjectId(‘4ede0549a26U
17c1306000000’)
Este id se asigna al guardar el objeto,
tal como ocurre en Django. Por último,
podemos eliminar un objeto de la
forma habitual:
>>> Vuelo.objects.count()
1
>>> v.delete()
>>> Vuelo.objects.count()
0
Tipos de CamposPor el momento sólo hemos empleado
la clase StringField, que nos permite
almacenar una cadena de caracteres en
un campo de nuestro modelo, pero
MongoEngine nos ofrece un gran sur-
tido de tipos de campos para nuestros
modelos.
Modelos EmpotradosMongoDB no posee el concepto de
llave foránea, por lo que no es posible
conectar los modelos como se hace en
Django. Como ya hemos visto, aunque
MongoDB no fuerza determinadas res-
tricciones, MongoEngine suple esta
«deficiencia» (o decisión de diseño,
depende del punto de vista). Dispone-
mos de campos básicos como por
ejemplo:
• StringField
• URLField
• EmailField
• IntField
• FloatField
• DecimalField
• DateTimeField
• ComplexDateTimeField, como Date-
TimeField pero almacena los micro-
segundos de forma exacta
• ObjectIdField
• BooleanField
• GeoPointField
Pero MongoDB también nos ofrece
campos de los que no se dispone en
Django:
27017 en localhost (127.0.0.1), donde
MongoDB arranca si no lo especifica-
mos de otra manera. Si tuviésemos que
conectar con una instancia MongoDB
ejecutándose en otra IP o puerto debe-
ríamos usar:
connect(“mi-base-de-datos”, U
host=”192.168.1.30”,U
port=”1999”)
MongoDB también nos permite esta-
blecer control de acceso a las distintas
bases de datos usando un nombre de
usuario y una clave, datos que pode-
mos pasar también a connect()
mediante los parámetros username y
password.
Por increíble que parezca ¡ya hemos
realizado toda la configuración necesa-
ria!
Nuestros Primeros ModelosLa forma de trabajar de MongoEngine
es idéntica a la del ORM de Django.
Debemos definir una serie de modelos
mediante clases que contendrán cam-
pos. Suponiendo que nuestro proyecto
Django disponga de una aplicación lla-
mada main, deberíamos editar el
fichero main/models.py. La verdad es
que podemos poner nuestros modelos
mongo donde queramos, pero es reco-
mendable emplear el fichero donde se
almacenan los modelos en Django por
coherencia.
En Django debemos crear clases que
hereden de models.Model, pero con
MongoEngine nuestras clases deben
heredar de la clase Document. Mon-
goDB se define a menudo como una
base de datos orientada a documentos,
siendo los documentos ficheros JSON.
Nuestro fichero models.py deberá con-
tener el código del Listado 1. Para
poder usar el modelo podemos
emplear el shell de Django:
$ python manage.py shell
>>> from main.models import *
Los modelos mongodb se comportan
de forma idéntica a los modelos
DESARROLLO • Python: Django y Mongo DB
40 Número 78 W W W . L I N U X - M A G A Z I N E . E S
01 class Empleado (EmbeddedDocument):
02 nombre = StringField(required = True)
03 apellidos = StringField(required = True)
Modelo Empotrado de Empleado
• ListField
• SortedListField
• DictField
• MapField
• ReferenceField
• GenericReferenceField
• EmbeddedDocumentField
• GenericEmbeddedDocumentField
• FileField
• BinaryField
• SequenceField
MongoDB permite almacenar en los
documentos listas y diccionarios de
forma nativa. Por ejemplo, en nuestra
clase Vuelo podemos disponer de un
listado de viajeros de aeropuertos por
los que pasará el vuelo. Todos los cam-
pos compuestos permiten almacenar
en su interior cualquier otro tipo de
campo. Podemos crear un ListField de
DateTimeField o StringField. Pero si
sólo pudiera hacer eso, MongoDB no
sería tan potente. Existen dos campos
especiales: EmbeddedDocumentField y
ObjectIdField.
Digamos que disponemos de un
modelo llamado Pasajero como el que
aparece en el Listado 2. En una base de
datos relacional tendríamos que poner
un campo en Pasajero que almacenase
el id de su Vuelo. En MongoDB tam-
bién podemos hacer esto, sólo habría
que añadir un campo de tipo Reference-
Field en Pasajero apuntando a Vuelo.
Pero existe otra opción: almacenar
directamente los pasajeros en el propio
vuelo. A esto se le
llama normalmente
«desnormalizar» el
modelo. Por ejemplo,
imaginemos que que-
remos almacenar la
información de un
vuelo y que no quere-
mos que se actualice.
El nombre de las per-
sonas, sus apellidos o
su fecha de caducidad
de su documento de
identificación pueden
variar con el tiempo.
En una base de datos
relacional deberíamos
disponer de una tabla
con el histórico de
cambios, pero en
MongoDB simple-
mente podemos alma-
cenar los datos dentro
del modelo, ver Figura 2. Para ello
debemos cambiar la definición de
Vuelo a la que aparece en el Listado 3.
El campo pasajeros es una lista de
objetos de tipo EmbeddedDocument-
Field, que a su vez sólo acepta como
parámetro una clase que herede de
EmbeddedDocument. MongoEngine
nos aporta estructura y validaciones
donde MongoDB no lo hace.
Muy bien ¿y cómo podemos añadir
un pasajero a un vuelo? Suponiendo
que la variable v es un objeto de tipo
Vuelo con todos sus campos asignados:
01 >>> v.pasajeros
02 []
03 >>> p = Pasajero()
04 >>> p.nombre = u”Pedro”
05 >>> p.apellidos = u”López”
06 >>> p.nie = “123123”
07 >>> p.fecha_caduca_nie
= datetime(2011,12,31)
08 >>>
09 >>> v.pasajeros.append(p)
10 >>> v.save()
pasajeros se comporta como una lista
de Python. Si quisiéramos borrar todos
los pasajeros:
>>> v.pasajeros = []
>>> v.save()
Pero no sólo de listas vivimos los pro-
gramadores, a veces también necesita-
mos almacenar diccionarios. Para ello
disponemos de la clase MapField, con
la que podemos almacenar un diccio-
nario que emplea cadenas como llaves
y campos como valores. De nuevo
podemos emplear EmbeddedDocument-
Field como campo a almacenar. En
nuestro ejemplo, podemos añadir el
modelo Empleado (ver Listado 3) y
añadir también un nuevo campo a
Vuelo llamado empleados:
...
empleados = MapField(U
EmbeddedDocumentU
Field(Empleado))
que nos permitirá añadir empleados
usando su puesto, por ejemplo, como
llave:
>>> v.empleados[‘capital’]U
= Empleado(nombre = ‘Gustavo’,U
apellidos = “Carmona”)
>>> v.save()
Gracias a estas dos clases (y a Sorted -
ListField y DictField) MongoDB nos
permite construir potentes jerarquías
de objetos que podremos almacenar y
recuperar a toda velocidad.
ConclusiónEn este primer artículo sólo hemos
podido ver las opciones más sencillas
de MongoDB. En el próximo veremos
cómo se comportan MongoEngine y
Django cuando hagamos uso de las
características más importantes de
MongoDB: el sharding/ replicación y
map/ reduce. Es entonces cuando
podremos apreciar la auténtica poten-
cia de esta innovadora base de datos. �
Python: Django y Mongo DB • DESARROLLO
41Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 2: Esquema relacional vs Esquema de documentos empo-
trados.
[1] SQLAlchemy:
http:// www. sqlalchemy. org
[2] MongoDB:
http:// www. mongodb. org/
[3] MongoEngine:
http:// mongoengine. org/
[4] JSON: http:// www. json. org/
RECURSOS
José María Ruiz Aguilera es un
emprendedor enamorado de Python, la
ciencia y la informática.
EL AUTOR
Apesar de que posiblemente dis-
frute al escribir tarjetas de felici-
tación a mano y luego enviándo-
las por correo, debería considerar aho-
rrarse la molestia de escribir las direccio-
nes en los sobres, y usar etiquetas adhe-
sivas en su lugar. Las prácticas etiquetas
para impresoras láser en hojas tamaño
carta (véase la Figura 1) cuestan alrede-
dor de medio céntimo por unidad (15
céntimos por hoja). No sólo aceleran el
proceso de envío por correo, sino que
también son útiles para eti-
quetar cables de equi-
pos electrónicos.
El script Perl
que veremos en
este artículo
lee el texto
separado
por comas
y lo
imprime línea por línea en las etiquetas.
Por supuesto, no tenemos por qué res-
tringirnos a las direcciones. ¿Le atrae la
idea de etiquetar el lío de cables que
tiene debajo de su escritorio para ayudar
al saturado administrador de red a encon-
trar el cable de alimentación del router en
un par de segundos la próxima vez que
algo vaya mal?
Tamaños PreconfiguradosOpenOffice Writer ya soporta formatos de
etiquetas de una gran variedad de
provee dores, y en el menú Nuevo | Eti-
quetas (véase la Figura 2), podemos crear
documentos de tipo tabla para que coin-
cidan. En el cuadro de diálogo de la
Figura 3 sólo tenemos que introducir el
fabricante y el código de producto para
las etiquetas – las dimensiones están
garantizadas. Después de crear estos
documentos, sólo tenemos que añadir el
cuerpo de texto y pulsar el botón “Impri-
mir”, que es sin duda algo más fácil que
escribir nuestro propio programa de posi-
cionamiento de impresión. Debido a que
OpenOffice guarda sus documentos en
formato abierto ODF, podemos extraer
los datos de la tabla desde un archivo
CSV con un script Perl antes de inyectar-
los en el documento.
Dentro del Archivo .odtAntes de que nuestra lista de direcciones
se pueda agregar a la tabla de etiquetas
necesitamos crear una plantilla de Open -
Office y teclear un par de cadenas de
prueba (véase la Figura 4). Como revela
el comando unzip de la Figura 5, el docu-
mento resultante, guardado como tem-
DESARROLLO • Perl: Etiquetas OpenOffice
42 Número 78 W W W . L I N U X - M A G A Z I N E . E S
No lo escriba, ¡péguelo!
ETIQUETAINDEPENDIENTE
OpenOffice ofrece una selección de formatos preconfigurados para
usuarios que necesitan imprimir sus propias etiquetas autoadhesivas.
Perl suministra los datos de dirección al documento.
POR MIKE SCHILLI
plate.odt, consta de un archivo ZIP con
los archivos XML, el más interesante de
los cuales, content.xml, es el contenido
del texto del documento con marcas
XML.
Al llamar al script del Listado 1 tecle-
ando oo-dumper template.odt, se revela
entonces el contenido del documento y
las estructuras de marcado para las cade-
nas introducidas previamente por el
usuario en los elementos de la tabla.
El script obtiene el módulo OpenOf-
fice::OODoc de CPAN y llama a su cons-
tructor ooDocument() con el nombre del
archivo a investigar. La línea 18 define
“content” como el member del docu-
mento. En otras palabras, estamos intere-
sados en el contenido del documento, no
en las cabeceras externas, pies de página,
definiciones de estilo reutilizables o
metadatos.
Explorando el XMLEl método selectElements lanza una con-
sulta XPath que revela todos los elemen-
tos XML dentro de la etiqueta
officce:body, es decir, el documento de
texto en sí. Los documentos contienen
un único cuerpo, sin embargo, OpenOf-
fice::OODoc insiste en que el lado
izquierdo de la asignación en la línea 21
sugiere un contexto de lista, lo que
explica el paréntesis alrededor de $ele-
ment. El valor de retorno es una referen-
cia a un elemento específico OpenOf-
fice::OODoc::Element, que entiende tam-
bién los métodos de ejecución del parser
XML, XML::Twig, por herencia. Este
estrafalario módulo XML, que ya fue
revisado en un artículo anterior de esta
sección de Perl [3], proporciona el
ces todas las etiquetas e inyecta los datos
de texto en ellas.
Para abrir la plantilla .odt, el script usa
el constructor ooDocument() del archivo
ready.odt que se creó anteriormente en la
línea 31 al copiar template.odt con la fun-
ción cp del módulo Sysadm::Install.
La versión disponible actualmente de
OpenOffice::OODoc contiene un error
que hace que se procesen los documen-
tos codificados en UTF8 incorrectamente
si contienen caracteres no ASCII. La
configuración
local_encoding => “”
de la línea 36 proporciona una solución
temporal, pero el valor debería ser “utf8”.
Añadir los Datos deDireccionesLos datos en bruto deben almacenarse en
un archivo address-book.csv (véase la
método _dump(),
lo que genera el
formato de texto
del sub-árbol XML
y lo devuelve como
una cadena.
En la Figura 6, la
etiqueta office:text
bajo office:body
contiene un par de
declaraciones
sequence seguidas
por texto tipo
text:p. Esta línea es
una fila de una
tabla con tres
columnas, para
cuyos elementos
draw:frame dibuja los marcos. Estos mar-
cos, a su vez, contienen elementos
draw:text-box con elementos text:p en
donde reside el texto de prueba (test1,
test2, etc.).
Una consulta XPath como
//office:body/office:text/text:p
recupera todas las líneas de la tabla (que
a su vez contienen los marcos de la
columna), mientras que los elementos de
la tabla (tres por fila) se almacenan de
forma relativa a éstos más abajo:
.../draw:frame/U
draw:text-box/text:p
El script del Listado 2 utiliza la primera
consulta XPath para añadir tantas líneas
a la tabla como sea necesario para los
datos de direcciones que se desean impri-
mir. La segunda consulta examina enton-
Perl: Etiquetas OpenOffice • DESARROLLO
43Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 2: La entrada Etiquetas en OpenOffice Writer nos lleva al
maravilloso mundo de los formatos para etiquetas.
Figura 1: Etiquetas para impresora laser: 30 por hoja, 4.200 por caja.
Figura 3: Además del fabricante de las etiquetas, también podemos
seleccionar un producto específico.
separadas por comas del archivo CSV.
Para dejar espacio suficiente en el lado
izquierdo de la etiqueta, donde irá más
tarde la entrada de texto, el comando de
reemplazo dentro del bucle for a partir de
la línea 99 inserta un espacio en blanco
delante de cada línea de la etiqueta. La
línea 104 concatena las líneas de la direc-
ción para crear una cadena con saltos de
línea y la empuja hasta el final de la
matriz @addresses, que es pasada por la
función de nuevo al programa principal
tras completar su trabajo.
¡No Quiero DesperdiciarEtiquetas!Para evitar el desperdicio de etiquetas, el
script siempre llena por completo una
página tamaño carta – si es necesario,
mediante la repetición de las direcciones
en el archivo CSV. Si la base de datos de
direcciones tiene más de 30 entradas, el
Listado 2 ha de añadir páginas adiciona-
les al final del documento. En este caso
también se llenará cualquier espacio
sobrante en la página con datos repeti-
dos.
Figura 7), donde el script label-writer
puede recogerlos línea por línea con la
función getline() del módulo
Text::CSV_XS de CPAN.
La función addresses_scan abre el
archivo con el pragma :encoding(utf8)
para permitir que Perl analice los caracte-
res codificados en UTF-8 correctamente
en el archivo y fije la bandera UTF-8 para
ellos en sus estructuras de datos.
En cada iteración del bucle, la variable
$row apunta a una matriz cuyos elemen-
tos representan las entradas de líneas
DESARROLLO • Perl: Etiquetas OpenOffice
44 Número 78 W W W . L I N U X - M A G A Z I N E . E S
001 #!/usr/local/bin/perl -w
002 #############################
003 # label-writer - Use
004 # OpenOffice to write
005 # address labels
006 # Mike Schilli, 2011
007 # ([email protected])
008 #############################
009 use strict;
010 use OpenOffice::OODoc;
011 use Sysadm::Install
012 qw( :all );
013 use Text::CSV_XS;
014 use POSIX qw(ceil);
015
016 my $template =
017 “template.odt”;
018 my $file = “ready.odt”;
019 my $addr_book =
020 “address-book.csv”;
021 my $labels_per_page = 30;
022
023 my @addresses =
024 addresses_scan($addr_book);
025
026 my $addtl_pages = ceil(
027 scalar @addresses /
028 $labels_per_page) - 1;
029
030 # Put template in place
031 cp $template, $file;
032
033 my $doc = ooDocument(
034 file => $file,
035 type => “content”,
036 local_encoding => “”,
037 );
038
039 # Extend document as
040 # necessary
041 my @rows =
042 $doc->selectElements(
043 ‘//office:body/’ .
044 ‘office:text/text:p’
045 );
046
047 for (1 .. $addtl_pages) {
048 for my $row (@rows) {
049 $doc->replicateElement(
050 $row, “body”);
051 }
052 }
053
054 # All labels, including new ones
055 my @labels =
056 $doc->selectElements(
057 ‘//office:body/’ .
058 ‘office:text/text:p/’ .
059 ‘draw:frame/’ .
060 ‘draw:text-box/text:p’
061 );
062
063 my $addr_idx = 0;
064
065 for my $label (@labels) {
066 $doc->setStyle($label,
067 “P1”);
068 $doc->setText($label,
069 $addresses[$addr_idx]);
070 $addr_idx++;
071 $addr_idx = 0
072 if $addr_idx >
073 $#addresses;
074 }
075
076 $doc->save();
077
078 #############################
079 sub addresses_scan {
080 #############################
081 my ($addr_book) = @_;
082
083 my @addresses = ();
084
085 open(my $fh,
086 “<:encoding(utf8)”,
087 $addr_book)
088 or die “$addr_book: $!”;
089
090 my $csv = Text::CSV_XS->new(
091 { binary => 1 })
092 or die “Cannot use CSV: “
093 . Text::CSV->error_diag();
094
095 while (my $row =
096 $csv->getline($fh)) {
097 unshift @$row, “”;
098
099 for (@$row) {
100 s/^/ /;
101 }
102
103 push @addresses,
104 join(“\n”, @$row);
105 }
106 close $fh;
107
108 return @addresses;
109 }
Listado 2: label-writer
01 #!/usr/local/bin/perl -w
02 #############################
03 # oo-dumper - Dump an
04 # OpenOffice document
05 # Mike Schilli, 2011
06 # ([email protected])
07 #############################
08 use strict;
09 use OpenOffice::OODoc;
10
11 (my $file) = @ARGV;
12
13 die “usage: $0 file”
14 unless defined $file;
15
16 my $doc = ooDocument(
17 file => $file,
18 member => “content”,
19 );
20
21 (my $element) =
22 $doc->selectElements(
23 ‘//office:body’);
24
25 print $element->_dump();
Listado 1: oo-dumper
La línea 21 refiere al número predefinido de etiquetas por
página, y la línea 26 calcula el número necesario de páginas
del documento de etiquetas mediante la factorización del
tamaño de la base de datos de direcciones. La función ceil()
del módulo POSIX redondea hasta el siguiente número
entero en caso de fracciones. El número $addtl_pages (pági-
nas adicionales) es entonces uno menos debido a que el
documento de plantilla creado por el usuario ya dispone de
la primera página.
Todas las filas de la tabla en la página de prueba se ali-
nean en la matriz @rows después de la primera consulta de
XPath en la línea 42, y por cada página adicional a crear, el
bucle for de las líneas 47 a 52 itera en estas entradas de fila
– duplicándolas con replicateElement() – y utiliza el pará-
metro “body” para indicar a la función que añada duplica-
dos al final del cuerpo del documento. Las líneas de nueva
creación son copias exactas de las líneas de la primera
página, es decir, todavía contienen los datos de prueba o
están vacíos.
La segunda consulta XPath en la línea 56 recupera todos
los elementos de la tabla (tres por línea, incluyendo todos
los elementos de las páginas de nueva creación) del docu-
mento y los almacena en la matriz @labels. El bucle for de
la línea 65 pasa entonces a través de ellos y les asigna el
estilo “P1”. El volcado de la Figura 6 muestra que esto
aplica el tipo de letra Bitstream Vera Sans al texto. La
Figura 4: El usuario escribe los textos de muestra en los campos
de texto del documento OpenOffice.
Figura 5: Una llamada a unzip revela los archivos XML conteni-
dos en el documento de OpenOffice.
sólo se habían
hecho en la memo-
ria volátil hasta
ahora, en el disco.
Cuando el usuario
abre el archivo en
OpenOffice (hemos
probado esto con la
versión 3.2), el
documento se
parece al de la
Figura 8. Lo único
que necesitamos
hacer ahora es
insertar una página
con etiquetas adhe-
sivas en la impre-
sora y seleccionar
Imprimir en Open -
Office Writer. Para
evitar el desperdi-
cio de etiquetas,
tiene sentido impri-
mir una página de
prueba en una hoja
normal de papel y
contrastarla a la
luz con la hoja de
etiquetas para com-
probar la alineación. Para saber si la hoja
de etiquetas tiene que estar boca arriba o
boca abajo en la impresora a la hora de
imprimir las etiquetas, y al mismo tiempo
descubrir la dirección en la que la impre-
sora carga el papel, ponemos una marca
de lápiz en una esquina antes de impri-
mir el archivo. A continuación miramos
la posición de la marca en el resultado
final, y hacemos las complejas transfor-
maciones geométricas en la cabeza para
lograr el objetivo con éxito.
Para instalar los scripts necesitamos los
módulos OpenOffice::OODoc,
Sysadm::Install y Text::CSV_XS. Este
último es una versión opti-
mizada en velocidad del
veterano Text::CSV. Una
shell de CPAN se encar-
gará de la instalación de
estos módulos en caso de
no estar disponibles en su
distribución. Seguida-
mente abrimos la aplica-
ción OpenOffice Writer y
seleccionamos el formato
de etiqueta que necesita-
mos en el cuadro de diá-
logo Etiquetas. Es necesa-
rio modificar el valor esta-
blecido de 30 etiquetas por línea, en la
línea 21 del Listado 2, para que coincida
con su formato de etiqueta.
Si algo sale mal, es una buena idea
analizar el archivo ODF con oo-dumper y
ajustar cualquier desviación del formato
creando las consultas XPath correspon-
dientes.
Después de llenar un par de campos de
prueba, guardamos los resultados como
template.odt. El script label-writer debe-
ría analizar entonces el archivo de direc-
ciones address-book.csv codificado en
UTF-8 y crear la salida read.odt, que
entonces enviamos a la impresora.
Toda una variedad de otras aplicacio-
nes vienen a la mente con este script: eti-
quetar cables en los centros de datos o
codificar los equipos para la gestión de
activos. O, podríamos calarnos la visera
de contable, arremangarnos, y colocar
una etiqueta a todos los libros de nuestra
colección, de manera que sepamos a qué
estante pertenecen, una vez hayamos ter-
minado de leerlos [5]. �
siguiente llamada a setText() recoge el
siguiente registro del archivo de direccio-
nes y guarda la cadena de texto corres-
pondiente en el elemento de la tabla que
se está procesando.
El bucle incrementa de forma continua
la variable índice$addr_idx a la matriz de
direcciones, empezando desde cero, y se
pone a cero de nuevo cuando llega al
final de la base de datos de direcciones
para reiniciar con la primera dirección.
Inserción CorrectaEl método save() guarda a continuación
los cambios en el archivo ready.odt, que
DESARROLLO • Perl: Etiquetas OpenOffice
46 Número 78 W W W . L I N U X - M A G A Z I N E . E S
[1] Listados de este artículo: http://
www. linux-magazine. es/ Magazine/
Downloads/ 78
[2] “Una sencilla manera de hacer eti-
quetas en OpenOffice Writer” por
Solveig Haugland, http://
openoffice. blogs. com/ openoffice/
2007/ 06/ a-simple-way-to. html
[3] “Perl: XML Parsers” por Michael
Schilli, Linux Magazine Internacio-
nal, Septiembre 2005, http:// www.
linux-magazine. com/ Issues/ 2005/
58/ SPOILED-FOR-CHOICE
[4] “The Perl OpenDocument Connec-
tor”, por Jean-Marie Gouarn, The
Perl Review, http:// www.
theperlreview. com/ SamplePages/
ThePerlReview-v3i1. p18. pdf
[5] “Perl: OpenOffice Access” por
Michael Schilli, Linux Magazine
Internacional, Noviembre 2004,
pag. 72.
RECURSOS
Figura 6: El método _dump() muestra cómo se anida el documento
XML.
Figura 9: Las etiquetas ya impresas.
Figura 7: Datos de direcciones en formato CSV.
Figura 8: Después de ejecutar el script, el archivo ready.odt de
OpenOffice contiene todas las direcciones insertadas.
47Número 78W W W . L I N U X - M A G A Z I N E . E S
La mayoría de los administradores se
habrán dado cuenta de que los días
de ifconfig están contados; después
de todo, el comando ip es mucho más
potente – y nos ahorra pulsaciones de
teclado. Soy consciente de ello también,
pero sigo usando la vieja herramienta. Lo
mismo me sucede cuando se trata de mi
antigua amiga nslookup. La heredera al
trono, dig, es una herramienta de diagnós-
tico para los problemas de los servidores de
nombre. A pesar de ello, la utilidad dig [1]
aún compite con su antecesora.
Sin embargo, debido a la fuerza de los
hechos, las cosas están comenzando a cam-
biar: la extensión más compleja de protocolo
de la historia del DNS (Domain Name
System) se encuentra actualmente en pleno
cambio. Me refiero a DNSSEC.
[1] Páginas man de dig: http:// linux. die.
net/ man/ 1/ dig
[2] DNSSEC: http:// www. dnssec. net/
[3] ldns: http:// www. nlnetlabs. nl/
projects/ ldns
RECURSOS
EL AUTOR
CavandoEl día a día del Administrador de Sistemas: dig
DNSKEY. Si deseamos obtener la clave
pública de la zona raíz y escribirla en el
fichero root.key, hay que teclear el siguiente
comando:
dig DNSKEY . +dnssec >U
./root.key
Armado con esta información, puedo trazar
la cadena completa de confianza hasta la
zona raíz usando la herramienta drill, del
paquete ldns-utils [3]. En el siguiente ejem-
plo se muestra el funcionamiento con una
web sueca:
drill -D -S -k ./root.keyU
www.dnssec.se
La Figura 1 presenta la cadena de confianza
en un gráfico realizado con caracteres ASCII.
Mi conclusión es que a veces hace falta que
nos presionen desde fuera para dejar los vie-
jos hábitos. nslookup, descansa en paz. �
Muchos administradores confían en herramientas Linux cuyo destino se encuentra ya
sellado, pero las fuerzas externas pueden ayudarlos a abandonar los viejos hábitos.
POR CHARLY KÜHNAST
Aleksandr Kurganov, 123RF
La Columna de Charly • ADMINISTRACIÓN
Estas extensiones de seguridad permiten
el firmado de la información de las zonas y
podrían ayudar a acabar con las suplantacio-
nes de DNS. DNSSEC [2] crea una cadena
de confianza que comienza en la zona raíz y
se extiende por los dominios genéricos
(.com, .net, etc) y de países (.fr, .de, etc), y
continúa hacia abajo por la estructura jerár-
quica del DNS.
La zona raíz, que viene representada por
un punto (.) en la nomenclatura DNS, aña-
dió las firmas necesarias a mediados de
2010. En el momento de escribir este arti-
culo, la zona .es aún no se ha unido y no
hay nigún indicativo de cuando la hará.CavandoDe modo que si quiero averiguar si un domi-
nio específico está firmado, nslookup no
podrá ayudarme, ya que no soporta
DNSSEC. Pero dig sí,
así que que podemos
introducir:
dig NS ns1.nic.fr
+dnssec
La salida devuelve la
dirección IP correspon-
diente, también mues-
tra los nuevos registros
RRSIG, que contienen
los datos de la firma,
gracias a +dnssec. Las
claves públicas para la
validación se encuen-
tran almacenadas
directamente en la
zona. Para ello hace
falta un registro
Figura 1: Charly usa Drill para ver si la cadena de confianza del DNS
sueco ha perdido algún eslabón.
Charly Kühnast es Gerente de Sistemas Unix en el centro de datos de Moers, Alemania,
cerca del conocido Rhin. Entre sus labores se incluye la seguridad del cortafuegos, la
disponibilidad y el cuidado de la DMZ (zona desmilitarizada). Divide su tiempo libre entre
el calor, la humedad y oriente, donde se divierte cocinando, visitando acuarios y aprendi-
endo japonés respectivamente.
ADMINISTRACIÓN • Inseguridades: Hackeando JTAG
48 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Antes de nada me gustaría compar-
tir una apreciación personal: los
Linux embebidos, por norma
general, me preocupan bastante. La mayo-
ría de los sistemas Linux embebidos no se
preocupan demasiado por la seguridad.
Sus creadores suelen encargarse más de
que funcionen y no tanto de que sean
seguros. Para empeorar las cosas, muchos
fabricantes tienden a abandonar sus pro-
ductos, dejando al cliente sin actualizacio-
nes de seguridad, especialmente con los
dispositivos de clientes domésticos.
¿Por Qué es tanImportante?En el pasado, los dispositivos embebidos
no suponían un problema de seguridad,
porque rara vez se conectaban a una red.
La única manera de hacer algún chanchu-
llo con ellos era físicamente. Pero ahora
todo está en red: la impresora, el escáner,
el termostato y casi cualquier cosa que
lleve un procesador, o sea, casi todo. Si un
atacante consigue acceso a uno de estos
dispositivos, podría realizar ataques man-
in-the-middle contra cualesquiera otros
dispositivos conectados a la misma red.
Ejemplo de SeguridadEmbebidaHay un ejemplo que destaca sobre los
demás a la hora de demostrar por qué los
dispositivos embebidos suponen una gran
amenaza: las contraseñas predetermina-
das. La Default Password List [1] es una
lista de contraseñas predeterminadas,
actualizada por última vez a finales de
2010, que contiene casi 1300 contraseñas,
la mayoría de ellas para dispositivos de
hardware (Figura 1). Empresas como
3COM, HP, IBM o Cisco aparecen muchas
veces en la lista. Pero continuamente sur-
gen nuevos riesgos. Por ejemplo, hay una
serie de escáneres con capacidad de cone-
xión a la red que por lo visto tienen un
fallo que permite activarlos de manera
remota, dejando que un intruso remoto
vea lo que se está escaneando.
¿Qué hacemos entonces? No queremos
comprar un router inalámbrico o un móvil
y que el fabricante deje de mantenerlo, o
lo haga a los 6 ó 12 meses. ¿O qué pasa si
compramos una consola (por ejemplo una
PlayStation) y la queremos usar para otra
cosa que no sea jugar? Bueno, lo que se va
a explicar en este artículo es cómo cargar
firmware personalizado en estos aparatos.
Cargando FirmwarePersonalizadoMuchos aparatos permiten la carga de
actualizaciones, lo que viene a significar
que podemos instalar en ellos firmware
personalizado. Normalmente, si hay un
firmware alternativo para ellos de soft-
ware libre, éste suele estar mejor sopor-
tado, durante más tiempo e incluir más
funcionalidades. El ejemplo perfecto son
los routers inalámbricos domésticos, que
suelen venir capados pero que podemos
convertir en servidores de VPN, ser-
vidores web, o incluso servidores
SIP simplemente cargándoles
un firmware personalizado.
Ya hemos hablado sobre
este tema en un artículo
anterior [2]. En menos de
15 minutos, podemos
convertir un viejo rou-
ter inalámbrico en
algo que nos pueda
servir fielmente
durante unos pocos
años más.
Pero no todos los fabricantes nos lo van
a poner tan fácil. Quizá sean los teléfonos
móviles los peores en este aspecto. Los
fabricantes de teléfonos móviles no quie-
ren ni que nos acerquemos al firmware,
eso a pesar de que los suelen mantener
sólo durante unos meses o un año a lo
más. Hay marcas, como Sony, que están
convencidas de que el cliente no tiene nin-
gún derecho a hacer lo que quiera con el
hardware que ha comprado. La PlaySta-
tion soportaba Linux inicialmente cuando
salió al mercado en el 2000, y siguió
soportándolo durante casi una década. Sin
embargo, en 2010 Sony decidió dejar de
dar soporte para Linux en la PlayStation, e
incluso se esforzó bastante para que nadie
lo pudiese usar. Entonces, ¿qué pasa si
queremos convertir nuestros sistemas
PlayStation en máquinas de cálculo, como
hicieron las Fuerzas Aéreas de EEUU? [3]
JailbreakingLos fabricantes bloquean cada vez más
sus dispositivos –
en efecto,
metiendo al
usuario en
una jaula –
con
importan-
tes restric-
ciones
acerca de
lo que pue-
den hacer o
dejar de
hacer. El
¡Sé el dueño de tus cosas!
Jailbreaking¿De quién es este aparato? El hecho de que hayamos comprado una
cosa no nos legitima para mirar en su interior. Pero en Internet hay
muchísimos recursos para los jailbreakers. POR KURT SEIFRIED
arte del “Jailbreaking” consiste en liberar
un dispositivo para eliminar dichas res-
tricciones impuestas por su software.
Nota importante: la legalidad del jail -
breaking varía considerablemente en fun-
ción del país en que se resida y del dispo-
sitivo de que se trate. Por ejemplo, en los
EEUU, la oficina de copyright americana,
la U.S. Copyright Office, dictaminó que el
jailbreaking no está prohibido sobre telé-
fonos móviles. Sin embargo, también en
los EEUU, según nuestras fuentes, sí que
sigue estando prohibido hacer jailbreaking
en una consola. Su argumento es que el
jailbreaking sobre las consolas promueve
la violación de los derechos de copyright
sobre el software.
Supongamos que el jailbreaking es legal
en nuestro país, y que tenemos suerte y
encontramos un método por software para
acceder al aparato. Lo bueno es que la
mayoría de los fabricantes son pésimos en
cuanto a seguridad. El jailbreaking por
software suele aprovechar problemas
como buffer overflows al cargar partidas
guardadas, cifrados débiles en la firmas de
actualizaciones o problemas de renderiza-
ción de PDFs. Algunos grupos de software
para jailbreaking generan software muy
profesional y fácil de usar que permite
tomar el control del dispositivo – especial-
mente de iPhones y, cada vez más, teléfo-
nos con Android.
Pero, ¿y si el fabricante ha bloqueado el
dispositivo de manera que no se pueda
hacer jailbreaking? ¿Qué opciones tene-
mos?
JTAG al RescateJTAG (Joint Test Action Group)
existe como consecuencia directa
de la proliferación de los disposi-
tivos embebidos. Básicamente,
lo que JTAG hace es definir un
método de prueba para placas
de circuito impresas (o sea,
todo lo que use electrici-
dad, desde una tostadora
a un router). Es posible
incidir sobre unas
instrucciones con-
cretas (para depu-
rar un fallo persis-
tente, por ejemplo),
introducir puntos
de ruptura o, con
suerte, cargar firmware
en el dispositivo. Hay varios
dispositivos que, a pesar de esforzarse por
impedir que se les
haga jailbreaking por
software, tienen
implementaciones
JTAG vulnerables
que permiten la
carga de firmware
personalizado.
El arte del JTAG
hacking, sin
embargo, no es apto
para neófitos. Se
necesitan ciertos
conocimientos sobre
hardware. Aunque
ya han pasado los
días en que la gente
se tenía que hacer su
propio hardware con lectura de JTAG,
actualmente se pueden adquirir dispositi-
vos hardware USB que permiten comuni-
carse con los sistemas que incorporen
puertos JTAG. Lo bueno de JTAG es que,
con suerte, aunque no consigamos cargar
firmware personalizado, aún podremos
lograr acceder al bus principal para modi-
ficar la memoria del sistema en ejecu-
ción. De este modo se puede controlar el
comportamiento del aparato e incluso
modificar los sistemas de seguridad que
impiden al usuario cargar firmware per-
sonalizado. Para saber más sobre JTAG
hacking pueden visitar el blog “HACK A
DAY” [4]. Para saber cuáles son los pins
JTAG de un dispositivo concreto, se
puede consultar el buscador del sitio
JTAG Finder [5].
ConclusiónCreo firmemente en el principio de pri-
mera venta, es decir, si compras algo, ya
es tuyo. Si quiero usar mi PlayStation 3
como tope para la puerta, convertirla en
una máquina Linux, o pintarla de rosa y
llamarla arte moderno, nadie tiene por
qué decirme lo contrario. Le pido al lector
que cuando vaya a comprar el siguiente
aparato se asegure de que está comprando
algo que verdaderamente poseerá y podrá
controlar. �
Inseguridades: Hackeando JTAG • ADMINISTRACIÓN
49Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 1: La lista de contraseñas predeterminadas contiene las con-
traseñas de más de 1300 dispositivos.
RECURSOS
[1] Default Password List: http:// www.
phenoelit-us. org/ dpl/ dpl. html
[2] Inseguridades: Punto de Acceso,
Linux Magazine – Edición en Caste-
llano, número 70, pág. 10.
[3] Air Force Playstation Supercompu-
ter: http:// www. informationweek.
com/ news/ government/
enterprise-architecture/ 221900487
[4] HACK A DAY: http:// hackaday. com/
tag/ jtag/
[5] JTAG Finder: http:// www. c3a. de/ wiki/
index. php/ JTAG_Finder
Todos estos problemas que surgen a lahora de intentar acceder a uno de estosaparatos reafirman la necesidad de laexistencia de la GPLv3. Cada vez sonmás los dispositivos embebidos que lle-van Linux en su interior, lo cual es estu-pendo, porque podemos coger sucódigo fuente y personalizarlo a nuestrogusto, ¿verdad? Pues no. Muchos fabri-cantes de hardware evitan la GPLusando como estratagema los DRM(Digital Rights Management), impi-diendo que los usuarios carguen soft-ware en sus propios dispositivos. Paraempeorar las cosas, la US DMCA (Digi-tal Millennium copyright act) prohíbesaltarse estas medidas DRM mediante
las imposición de multas y penas de cár-cel.
La licencia GPLv3 en su sección 3 solu-ciona este problema permitiendo crearsoftware DRM bajo licencia GPLv3 perocon la condición de que el desarrolladorrenuncie a todos los derechos que pro-híban circunvenir el DRM (dicho de otromodo, no se puede imponer la DMCA).En un primer momento puede parecermuy estricto, pero recordemos que vir-tualmente todo lo que está protegidopor DRM también lo está por copyrighto por patentes; el DRM no es más queun intento de aplicar una imposicióntecnológica en un problema social.
Sobre la Licencia GPLv3
ADMINISTRACIÓN • Monitorización ARP
50 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Equipos de desarrollo de todo el
mundo trabajan duro para que el
software de nuestros sistemas
esté siempre lo más actualizado posible.
Además, los cortafuegos impiden que los
atacantes accedan a nuestros sistemas y
redes desde Internet. ¿Pero qué pasa si el
ataque se produce desde dentro de la red
local?
Uno de los requisitos de casi cualquier
red local es la asignación de direcciones
IP. Con el fin de comunicarse con la red
de una manera funcional (que no sea,
por ejemplo, recolectar datos desde una
conexión inalámbrica), los potenciales
intrusos deben asignarse primero una
dirección IP dentro de la red. Esto es
común tanto a redes cableadas como a
inalámbricas. Dicha IP podría ser una
dirección libre o incluso una que ya esté
siendo usada por otro dispositivo.
Si el atacante se asigna una IP en uso,
suele ser porque planea hacer algún tipo
de espionaje o una redirección de servi-
cios. Bajo ciertas circunstancias, podría
tratar de hacer creer al resto de equipos
que él es alguna máquina de la red.
Dicho de otro modo, el atacante clona la
dirección MAC que en teoría es única
para cada tarjeta de red y que siempre es
la misma. Aquellos ataques en los que el
intruso se asocia una dirección IP exis-
tente con el fin de filtrar y suplantar las
comunicaciones se denomina común-
mente MITM o Man-In-The-Middle, por-
que el atacante se sitúa entre las máqui-
nas que intervienen en la comunicación
a espiar. Redirigir un servicio puede ser
tan sencillo como alterar una entrada de
dirección MAC en una máquina para
hacerle creer que
su servidor de
nombres es otro;
cuando la máquina
engañada quiera
acceder al sitio web
de su entidad ban-
caria, resolverá su
dirección IP
usando un servidor
de nombres mali-
cioso y acabará,
por tanto, visitando un sitio falso y pro-
porcionando sus datos personales al ata-
cante.
Lo ideal sería que no sólo supiéramos
cuándo ha cambiado la dirección MAC
asociada a una dirección IP, sino además
saber cuándo se ha asignado una nueva
IP.
En este artículo presentamos varias
herramientas útiles con las que,
mediante el uso del protocolo ARP
(Address Resolution Protocol), podremos
conocer los cambios producidos sobre
las asignaciones de la red local.
ArpwatchArpwatch es una herramienta sencilla
que vigila las direcciones IP de la red y
analiza cambios sospechosos. ARP cons-
truye una tabla que contiene las corres-
pondencias entre los dispositivos de la
red y las direcciones IP que usan, pre-
An
dre
a D
an
ti, 123R
f.co
m
Utilizamos herramientas de monitorización de ARP para buscar intrusos ennuestra red local
Estrecha VigilanciaSeguramente tenga el lector un cortafuegos, pero ¿qué pasa si el
intruso actúa desde dentro? Estas herramientas de monitorización de
ARPs son capaces de detectar el más mínimo cambio y alertarnos de un
posible ataque local. POR CHRIS BINNIE
Figura 1: El log de Arpwatch proporciona detalles simples sobre cada
evento.
guntando a cada dispositivo de la red “¿Quién usa tal direc-
ción IP?” hasta que alguno responda “Yo tengo esa direc-
ción IP”. Su simplicidad hace que sea fácil de depurar, pero
también propenso a abusos, como por ejemplo los ataques
MITM mencionados anteriormente.
Arpwatch monitoriza las respuestas ARP en busca de
cambios y envía un email al administrador en caso de que
ocurra algo sospechoso. Además de proporcionar una
forma sencilla de auditar el número de direcciones IP en
uso en una red, es un sistema de detección temprana que
se puede configurar para que escuche en varias interfaces a
la vez (tanto de cable como inalámbricas).
Cabe aclarar que en algunas redes se utiliza el falsea-
miento de ARP para redirigir legítimamente el tráfico con
algún propósito concreto. Imaginemos por ejemplo un
cibercafé en el que, hasta que el sitio nos da paso, se redi-
rige a todo el mundo a una página con la política de uso o
las condiciones del local.
Mediante el seguimiento de los dispositivos de la red con
un archivo de logs por interfaz, donde guarda la información
relativa a cuándo y qué dirección IP se asignó a cada direc-
ción MAC, Arpwatch hace fácilmente accesible una informa-
ción que de otro modo pasaría prácticamente desapercibida.
Los logs de Arpwatch guardan las direcciones MAC, las
direcciones IP asociadas, las marcas de tiempo de las últi-
mas actividades, los nombres de dispositivo (alias o nom-
bres DNS), y las interfaces desde las que se observó dicha
actividad. En la Figura 1 se muestran en detalle los logs
generados por Arpwatch.
Las notificaciones que Arpwatch envía por email pueden
alertar al usuario casi al instante. Los informes están bastante
limpios y se podrían, por tanto, formatear como mensajes
SMS (mensajes de texto) si fuese necesario. En la Figura 2 se
puede apreciar la brevedad de dichos emails de notificación.
El primer segmento de una dirección MAC se suele
corresponder (aunque no siempre) con la identificación del
fabricante o el distribuidor de la tarjeta de red, que se pue-
den consultar fácilmente mediante bases de datos en línea.
También existe una asignación formal de estos identifica-
dores en la IEEE [1], pero no es tan práctico. A través de
esta tabla se facilita la identificación de los dispositivos
desconocidos, minimizando el número de falsas alarmas.
Una vez sepa la dirección MAC del atacante y posible-
mente si se trata de un portátil o smartphone, se pueden
utilizar pistas de los datos del proveedor (siempre y cuando
no hayan sido alterados) para trazar la actividas del dispo-
sitivo en la LAN. Incluso si cambia de dirección MAC, al
menos se nos alertará de este hecho.
ArpingLa herramienta más típica a la hora de comprobar direccio-
nes ARP duplicadas en la red local es Arping. Al igual que
Ping, que envía peticiones y queda a la espera de que se
Figura 2: Los hechos: notificación de Arpwatch por correo elec-
trónico.
preguntarse si
existe alguna otra
herramienta capaz
de ofrecer un
método más sofisti-
cado y automati-
zado para combatir
este tipo de ata-
ques localizados.
La herramienta se llama ArpON, que sig-
nifica Arp handler InspectiON.
Mientras que Arpwatch sólo informa
de los problemas detectados, relegando
al usuario las acciones a llevar a cabo,
ArpON ha sido diseñado para automati-
zar la resolución de los problemas
siguiendo una serie de políticas predefi-
nidas. En el sitio web de ArpON [2] se
pueden conocer todos los detalles del
paquete, incluidos varios diagramas,
muy útiles para los principiantes.
Además de sus capacidades de moni-
torización básica de ARP, ArpON cuenta
con más munición en su arsenal. Por
ejemplo, en las sesiones de ArpON tam-
bién se pueden detectar automática-
mente y resolver interceptaciones de
sesiones o el secuestro de conversacio-
nes web o de correo electrónico.
ArpON mantiene la pizarra siempre
bien limpia, creando una caché fresca de
entradas ARP desde el principio, elimi-
nando así la posibilidad de corromper la
caché de ARP con información falsa o
engañosa (a este tipo de ataque se le
conoce como envenenamiento de la
caché ARP). A diferencia de otras herra-
mientas de monitorización de ARP,
ArpON impide activamente que se actua-
licen nuevas entradas sin una entrada de
confianza en su caché, ignorando esen-
cialmente todo lo demás y evitando así el
ataque incluso antes de que comience.
Hay tres niveles de despliegue de
ArpON. El despliegue de un nodo de
monitorización en un dispositivo puede
proporcionar protección unidireccional,
mientras que un demonio instalado
puede tomar la caché de ARP y contras-
tar los cambios con efectividad. Para una
protección bidireccional hacen falta al
menos dos nodos de monitorización,
posibilitando la interceptación de tráfico
entre ambos nodos, de manera que se
pueda descifrar el tráfico del ataque y
reaccionar en consonancia. Para que
pueda funcionar en modo de protección
distribuida se debe instalar ArpON en
todos los dispositivos de la red. Cabe
aclarar que en este caso quedarán des-
protegidos todos los dispositivos que no
estén ejecutando ArpON, por lo que este
modo de funcionamiento probablemente
sólo sea adecuado para pequeñas redes
de dispositivos homogéneos, como por
ejemplo una pequeña red (o subred) de
un clúster o de servidores de correo.
ArpON cuenta con un diseño no-inva-
sivo, tratando de no alterar el protocolo
ARP, que fue creado teniendo en mente
unas redes de datos muy antiguas y que
se podría mejorar para lidiar con los ata-
ques de hoy en día. Independientemente
de los problemas inherentes a ARP, éste
cuenta con un rendimiento muy alto
debido a su simplicidad, rendimiento
que no se ve alterado tampoco por
ArpON. ArpON es útil también en redes
gestionadas por DHCP, donde los dispo-
sitivos obtienen una dirección IP cada
vez que acceden a la red.
También existe la posibilidad de des-
habilitar partes de ArpON para crear un
laboratorio de pruebas propio con el que
realizar ejercicios interesantes.
ConclusiónArpON está actualmente disponible para
Linux, Mac OS X, FreeBSD, NetBSD y
OpenBSD, pero aún no ha sido portado a
Windows. Existen herramientas pareci-
das para Windows y otros sistemas ope-
rativos. Para Windows, hay un producto
llamado WinARP Watch. Para Linux,
Unix y BSD – también está Arpalert.
Cada una de estas alternativas varía en
cuanto a funcionalidades. Aunque Arp-
watch es excelente, ninguna otra herra-
mienta llega al nivel de sofisticación de
ArpON.
Conjugadas con los conocimientos de
un administrador experimentado, las
herramientas de monitorización de ARP
suponen un medio potentísimo, incluso
con la función de bloqueo automático
de ataques deshabilitada. Estas herra-
mientas, con el nivel de detalle de sus
informes, ofrecen una capa adicional de
seguridad y protección tanto para redes
domésticas como para redes industria-
les. �
produzca una respuesta, Arping envía
sus peticiones a la red local (o dominio
de difusión). Algunas implementaciones
de Arping, además de simplemente pre-
guntar por la dirección MAC de una
dirección IP determinada, pregunta tam-
bién a la inversa, es decir, qué dirección
IP tiene una dirección MAC dada.
Esa funcionalidad extra que posee Arp
de comprobar a la inversa es de vital
importancia en ciertos escenarios de ata-
que. En el siguiente ejemplo se le pide a
Arping que busque duplicidades relati-
vas a una dirección IP:
arping -d 97.98.99.100 -I eth1
Combinada con las alertas emitidas por
Arpwatch, para informarnos de los cam-
bios ocurridos en la red, esta herra-
mienta nos dice si hay dispositivos que
comparten una misma dirección IP (que
pueden derivar en fallos de conexión o
en intentos de ataques MITM). El
comando anterior envía cuatro peticio-
nes a través de la interfaz de red eth1,
preguntando “¿Quién tiene esta direc-
ción IP?” y queda a la espera de respues-
tas. En la Figura 3 se muestran cuatro
respuestas idénticas que indican que
sólo hay una única dirección MAC aso-
ciada a esa dirección IP y que, por tanto,
no hay duplicidades en la red.
ArpONAhora que ya sabemos cómo detectar
ataques ARP y recibir informes, cabe
ADMINISTRACIÓN • Monitorización ARP
52 Número 78 W W W . L I N U X - M A G A Z I N E . E S
RECURSOS
[1] Relación entre direcciones MAC y
fabricantes: http:// standards. ieee.
org/ develop/ regauth/ oui/ oui. txt
[2] ArpON: http:// arpon. sourceforge. net
Rendimiento de ArpON
ArpON ha sido diseñado con el obje-
tivo de ser eficiente, de ahí que no sea
demasiado opulento en lo que a fun-
cionalidades se refiere. Existe una
herramienta alternativa, llamada S-Arp
(ARP Seguro), que añade una capa de
cifrado para proporcionar una mayor
seguridad, pero que ralentiza el proto-
colo ARP al incrementar las necesida-
des de procesamiento e inyectar datos
extra en el flujo de datos.
Figura 3: Si las respuestas son idénticas, no hay duplicidades en la
red.
lar, la situación podría ser totalmente
diferente para finales de año, ya que
para esas fechas se estima que no
quede ninguna disponible. Este es el
caso actual de la región asiática
(APNIC), donde las direcciones IPv4
sólo la suministran los proveedores
por un coste elevado hasta que se ago-
ten completamente las reservas – algo
que ocurrirá pronto. En este caso, las
empresas no tendrán otra alternativa
que utilizar direcciones IPv6. Actual-
mente no es una solución muy buena,
ya que sólo un porcentaje muy bajo de
los usuarios que poseen acceso IPv6
pueden acceder a las ofertas de las
empresas.
2.- Una empresa trabaja con clientes y
socios en Asia. En muchos casos, la
empresa asiática dispondrá desde hace
tiempo de una solución dual-NAT.
Durante muchos años, algunos provee-
dores de la región asiática han asig-
nado sólo direcciones IP privadas a sus
clientes y han enmascarado estas
direcciones. Por otro lado, estos clien-
tes usan routers que convierten las
direcciones IP privadas usadas inter-
namente, lo que a menudo causa pro-
blemas. Las VPN y VoIP, en particular,
son las causantes de la mayoría de los
problemas de los administradores.
Con IPv6, los clientes poseen direccio-
nes globales para cada sistema, con lo
que se garantiza una conectividad sin
complicaciones. Pero para acceder a los
servicios de las empresas, los ordenado-
res deben poseer una pila dual. Los siste-
Pila Dual IPv4/IPv6 • ADMINISTRACIÓN
53Número 78W W W . L I N U X - M A G A Z I N E . E S
Muchos administrado-
res no tendrán que
enfrentarse al pro-
blema del cambio a IPv6
durante los próximos dos
años, ya que disponen de sufi-
cientes direcciones IPv4 como
para garantizar el acceso de
sus redes a Internet 4, gracias
a la traducción de direccio-
nes de red. El acceso a
Internet 6 no es obligatorio
para estos administradores,
pues de momento no proporciona
ningún servicio crítico imprescin-
dible para sus negocios.
Sin embargo, este no es el caso de la
mayoría de administradores y redes. En
algunos casos de uso sería conveniente
que los administradores se familiariza-
sen con IPv6, pero a pesar de esto, debe-
ría tenerse claro que una migración com-
pleta de IPv4 a IPv6 va a ser improbable
que se produzca en los próximos diez
años.
Dicho esto, puede suceder que algu-
nos servicios nuevos sólo se encuentren
disponibles en Internet 6 en un par de
años, y si los administradores quieren
usarlos, no tendrán más alternativa que
migrar sus redes a IPv6. ¿Por qué moti-
vos vamos a querer pasarnos a IPv6?
1.- Su empresa desea ofrecer más servi-
cios en Internet y necesita direcciones
IPv4 adicionales para ello. La solicitud
de nuevas direcciones no ha sido hasta
ahora ningún problema, pero para
RIPE (Redes IP Europeas) en particu-
WD
esig
ns, 1
23R
F.co
m
HILANDOFINO Durante más de 10 años, los expertos han estado pronosticando el cam-
bio inevitable a IPv6. NAT y CIDR han mantenido a flote a IPv4 desde
entonces, pero todo esto va a cambiar en muy breve. ¿Qué vamos a
hacer entonces? POR RALF SPENNEBERG
Pila dual IPv4/ IPv6: Teoría y práctica
iface ipv6tunnel inet6 v4tunnel
endpoint <Dirección_IPv4_U
del_Intermediario>
local <Dirección_IPv4_local>
address <Dirección_IPv6_local>
netmask 64
mtu 1480
gateway <Dirección_IPv6_U
del_Intermediario>
ttl 255
Estas líneas permiten el acceso del sis-
tema a Internet por medio del túnel. Si el
intermediario del túnel enruta un prefijo
IPv6 por el túnel, el administrador podrá
utilizar un servicio de aviso de router o
DHCPv6 en sus redes.
Por otro lado, pueden asignarse direc-
ciones IPv6 estáticas. Como los equipos
tienen actualmente conectividad IPv4 y
IPv6, la solución se conoce como pila
dual.
¿DS-Lite o NAT64?A pesar de la escasez de direcciones IPv4,
los métodos DS-Lite (Dual Stack Lite, Pila
Dual Lite en español) y NAT64 necesitan
que el cliente pueda acceder a Internet 4.
En ambos casos, el proveedor asigna una
dirección IPv6 global para el router y un
prefijo para los sistemas que se encuen-
tren ocultos detrás de su cliente. Gracias a
esta dirección IPv6 global, tanto el router
como los otros sistemas pueden hacer uso
de IPv6 para comunicarse con los servido-
res. Los dos métodos difieren respecto a la
manera de configuración de los sistemas
del cliente. En el caso de DS-Lite (Figura
1), el proveedor además tiene que asig-
narle una dirección IPv4 privada al router
del cliente.
El propio router usa DHCP para distri-
buir direcciones IPv4 privadas en el sis-
tema interno. Ahora el sistema posee
una dirección IPv6 global y una direc-
ción IPv4 privada, cada una con puertas
de enlace por defecto que apuntan al
router. Cuando un usuario accede a un
sitio web, el sistema realiza primero la
resolución de nombres. Si la respuesta
contiene una dirección IPv6, el equipo
utilizará su dirección IPv6 global para
acceder al servidor. Si la respuesta DNS
contiene tanto una dirección IPv4 como
una dirección IPv6, los sistemas operati-
vos actuales prefieren IPv6, y de nuevo
utilizará este acceso para acceder al ser-
vidor. DS-Lite sólo entra en juego en el
caso de que el servidor sólo disponga de
una dirección IPv4. El cliente envía un
paquete IPv4 con su dirección privada de
origen, que inicialmente se encuentra
enmascarada por el router que usa su
propia dirección privada de origen.
Luego el router la encapsula en un
paquete IPv6 y utiliza IPv6 para enviarla
a un sistema especial en el proveedor
que extrae el paquete IPv4 y utiliza
NAT64 para convertirla en una dirección
IPv4 global. Para ello, el proveedor tiene
que suministrar componentes CGN
(Carrier Grade NAT).
Algunos se refieren a este sistema
como AFTR (Address Family Transition
mas que anteriormente sólo poseían
acceso por medio de IPv4 también deben
tener asignadas ahora direcciones IPv6.
SimplicidadPuede que los
administrado-
res se estén
preguntando así
mismos la forma
de conseguir
direcciones
IPv6. Nor-
malmente
habrá
que solici-
tarlas a los mis-
mos proveedores
de direcciones IPv4.
Sin embargo,
actual-
mente
sólo
hay
unos
cuantos
que ofre-
cen
acceso
IPv6 de
forma nativa. Por
ahora, se resuelve por
medio de túneles: usando IPv4
para crear un túnel a un intermediario de
túnel IPv6, que permite el acceso a Inter-
net 6 por medio del túnel. También ofre-
cen direcciones IPv6 (normalmente en la
forma de un prefijo /48) y las enruta por
medio del túnel. SixXs [1] y Hurricane
Electric [2] proporcionan este servicio a
los clientes profesionales.
De momento, tras el proceso de regis-
tro, ellos le proporcionarán un túnel y
algunas direcciones IPv6 de forma gra-
tuita. Luego, introducen estas direccio-
nes en sus servidores whois, permi-
tiendo que las direcciones asignadas
puedan ser fácilmente encontradas por
terceros. La soluciones utilizadas para
configurar los túneles pueden diferir
dependiendo de los extremos de las mis-
mas, ya que los clientes pueden tener
direcciones IPv4 estáticas globales, diná-
micas o privadas enmascaradas.
En el primero de estos casos, lo único
que hay que hacer en Debian es crear un
dispositivo de túnel adicional con la
siguiente entrada en el fichero /etc/net-
work/interfaces:
ADMINISTRACIÓN • Pila Dual IPv4/IPv6
54 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 1: En DS-Lite, el proveedor ahorra las direcciones IPv4 por medio del uso de NAT, tra-
duciendo direcciones IPv4 privadas a direcciones IPv4 globales (NAT44).
Router). Un administrador en el lado del
proveedor puede implementar AFTR
usando Linux y el paquete de software
AFTR del Internet Software Consortium
[3]. Como el router del lado del cliente
ya no posee una dirección IPv4 global,
no podrá utilizar servicios como
DynDNS o el plegado de puertos; ahora
funciona con IPv6, pero de una forma
muy superior.
En el caso de la segunda variante,
NAT64, el proveedor usa una solución
diferente para proporcionarle a sus clien-
tes el acceso a Internet 4. Al cliente sólo
se le asignan direcciones IPv6 globales
tanto para su router como para los siste-
mas que posea tras el router. Lo impor-
tante es que estos sistemas sólo utilicen
el servidor DNS de su proveedor para la
resolución de nombres de tres formas:
• La resolución de nombres sólo propor-
ciona una dirección IPv6: los clientes
usan su dirección IPv6 global para
acceder a los servidores.
• La resolución de nombres devuelve
tanto una dirección IPv4 como una
IPv6: el cliente preferirá la dirección
IPv6 y la usará para acceder al servi-
dor.
• La resolución de nombres sólo
devuelve una dirección IPv4: en este
caso interviene el servidor DNS del
proveedor, crea una dirección IPv6 adi-
cional y la añade a la respuesta.
Para ello, el servidor añade la representa-
ción hexadecimal de la dirección IPv4 a
un prefijo IPv6 definido. El administra-
dor del servidor DNS puede utilizar el
prefijo reservado 64:FF9B::/96 o un
rango libre de su propia reserva de direc-
ciones IPv6. El cliente recibirá tanto la
dirección IPv4 como la IPv6 en la res-
puesta del DNS, y preferirá la dirección
IPv6. El cliente enviará los paquetes
correspondientes a la puerta de enlace
por defecto del proveedor, donde el rou-
ter identificará la dirección IPv6 adicio-
nal creada anteriormente evaluando el
prefijo.
El sistema extraerá la dirección IPv4
incluida y realizará tanto NAT como la
traducción de IPv6 a IPv4. Los desarro-
lladores se refieren a este método como
NAT64 (Figura 2), y a la puerta de enlace
de la capa de aplicación DNS como
DNS64. Existen varias implementaciones
de esto en Linux. Por ejemplo, la última
versión de BIND ya soporta su uso como
servidor DNS64. El componente NAT64
puede ser manejado tanto por la aplica-
ción del espacio del usuario Tayga [4]
como por el componente Ecdysis [5] del
kernel.
Uno de los problemas del uso de
NAT64 es el incremento popular del uso
de DNSSEC, que detecta la modificación
y por ello la falsificación de las respues-
tas DNS e ignora dichas respuestas.
NAT-PTEl RFC 2766 definió NAT-PT (NAT/ proto-
col translator) en el 2000; al contrario
que NAT64, también soporta NAT64, que
hace posible no sólo para los sistemas
IPv6 el acceso arbitrario a servidores
IPv4, sino que permite a los sistemas
IPv4 acceder de forma arbitraria a los
servidores IPv6. Como IPv4 puede
incluirse fácilmente en direcciones IPv6
modificadas, NAT64 es mucho más sim-
ple de implementar, aunque el proceso
inverso es mucho más complicado.
El espacio de direcciones IPv4 no
posee la capacidad necesaria como para
incluir direcciones IPv6 dentro de direc-
ciones IPv4 modificadas, impidiendo que
DNS64 y NAT64 funcionen de forma
independiente el uno del otro, ya que
necesitan del intercambio de informa-
ción constante. Aunque existen algunas
implementaciones operativas, el RFC
2766 NAT-PT fue modificado en 2007 por
razones históricas debido a numerosos
problemas (RFC 4966).
Para un sis-
tema IPv4, no
hay ninguna
solución disponi-
ble para acceder a
los sistemas que
sólo posean IPv6. Un
proxy con pila dual puede
proporcionar una solución: Los clientes
usarían IPv4 para contactar con el
proxy y acceder a los sistemas IPv6. Sin
embargo, esta técnica sólo soporta los
protocolos que permiten el uso de puer-
tas de enlace de la capa de aplicación,
incluyendo DNS, SMTP, HTTP o
HTTPS.
El FuturoComo sólo un pequeño porcentaje de los
routers DSL actuales soportan IPv6, los
proveedores tendrán que reemplazar los
dispositivos terminales de los clientes
antes de hacer el paso a IPv6 – un pro-
ceso caro por el que los clientes no están
dispuestos a pagar. Por este motivo, los
proveedores retrasarán esta sustitución
tanto como les sea posible, lo que conlle-
vará a que muchos ISP querrán evitar la
sobrecarga de administración de la oferta
adicional de sus servicios por medio de
IPv6. A pesar del éxito del Día IPv6 en
junio, en el que numerosos proveedores
ofrecieron de forma adicional sus servi-
cios por medio de IPv6 por un día,
muchos de los participantes importantes
tales como Facebook, Google y YouTube
actualmente han cesado sus servicios
basados en la pila dual.
ConclusionesMientras que los principales proveedores
rehúsen promocionar el acceso por
medio de IPv6, IPv6 no será del interés
de los consumidores. Hasta este cambio,
los proveedores de DSL probablemente
comenzarán a suministrar a sus clientes
direcciones IPv4 privadas de forma simi-
lar a lo que ha estado sucediendo en
Asia. �
Pila Dual IPv4/IPv6 • ADMINISTRACIÓN
55Número 78W W W . L I N U X - M A G A Z I N E . E S
RECURSOS
[1] SixXS: http:// www. sixxs. net
[2] Hurricane Electric: http:// www. he. net
[3] AFTR: http:// www. isc. org/ software/
aftr
[4] Tayga: www. litech. org/ tayga/
[5] Ecdysis http:// ecdysis. viagenie. ca/Figura 2: En NAT64, el proveedor modifica una dirección IPv6 para enmascarar el acceso a
IPv4.
ADMINISTRACIÓN • Arranque Seguro
56 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Una firma digital no es suficiente
para garantizar la integridad de
un sistema informático com-
pleto. Para tener un entorno realmente
seguro debemos poder confiar tanto en
el hardware como en los archivos de
configuración y el software, incluyendo
aplicaciones, drivers y el propio sistema
operativo. ¿Qué componentes intervie-
nen en semejante proceso de verifica-
ción, y cómo podemos conseguir una
cadena de confianza completa e infran-
queable que aúne todos los componen-
tes?
La necesidad de proveer un anclaje
seguro (o raíz) para esta cadena de con-
fianza hizo que varias empresas de infor-
mática, incluidas AMD, Intel, HP, IBM y
Microsoft fundasen la TCG (Trusted
Computing Group, [1]) en 2003, que
actualmente cuenta con más de 100
miembros. Aunque la TCG se ha diversi-
ficado a lo largo del tiempo dando lugar
a varias especificaciones de seguridad
adicionales, parte de su objetivo original
era definir lo que hoy se conoce como
TPM (Trusted Platform Module): un chip
independiente para el procesamiento
criptográfico ubicado en la máquina,
capaz de gestionar procesos de verifica-
ción de firmas y de anclar una cadena de
confianza que garantice la integridad y
no manipulación de la totalidad de los
elementos del sistema.
El TPM, que se estandarizó con la
especificación ISO/ IEC 11889, incluye
algoritmos criptográficos, un generador
de números aleatorios por hardware y
varios mecanismos para la manipulación
segura de claves y certificados digitales
(Ver el cuadro titulado “Confianza”).
Durante los últimos años, el TPM se ha
convertido en un elemento común en las
placas más completas. En teoría, los
componentes incluidos en el TPM pro-
porcionan las siguientes funciones:
• una identidad de plataforma única
• memoria de claves segura
• sellado de datos
• funciones criptográficas
• evaluación de la integridad del sistema
Microsoft era uno de los miembros origi-
nales del TCG, y los sistemas Windows
Vista y posteriores ofrecen soporte para
TPM en forma de autenticación previa al
arranque y cifrado de disco Bitlocker. El
proyecto Trusted Grub [2] proporciona
un parche para el cargador de arranque
Grub con el que dota a Linux de soporte
para TPM.
Cómo Funciona el ArranqueSeguroEl arranque seguro comienza cuando se
enciende el equipo y se ejecuta el código
de la BIOS. El primer paso consiste en
una inicialización básica del hardware y,
en particular, del chip TPM.
Con el fin de garantizar que la funcio-
nalidad del TPM se encuentra disponible
Cómo proteger el hardware con IMA y arranque seguro
CADENA DECONFIANZA
Las placas base más completas a veces incorporan chips de computación de confianza, aunque los usuarios y
sistemas operativos rara vez los emplean. El kernel Linux ha conseguido dominar esta tecnología, y ahora los
usuarios de Linux pueden disfrutar de una cadena de confianza completa con TrustedGRUB.
POR FALK NEDWAL
Confianza
Para garantizar la confiabilidad del
usuario de acuerdo con la especifica-
ción, TMP contiene varios certificados
que confirman la validez del proceso
de fabricación. Además, el chip con-
tiene pares de claves que identifican
unívocamente al módulo y son utiliza-
das para cifrar y firmar datos. El usua-
rio también genera algunas de estas
claves. El módulo adquiere su identi-
dad cuando el usuario genera la pri-
mera clave. A este proceso se le
conoce como adquisición de la propie-
dad.
©S
inis
a B
ota
s, 1
23R
F.co
m
en el momento del arranque, el sistema
necesita una extensión de la BIOS con el
nombre de CRTM (Core Root of Trust for
Measurement). CRTM, especificada tam-
bién por la TCG, se encarga de medir los
estados del sistema antes del arranque
del sistema operativo. La medición se
lleva a cabo hasheando las áreas relevan-
tes y guardando los resultados en los
registros PCR del TPM (ver el cuadro titu-
lado “Platform Configuration Register”).
En la Figura 1 se ilustra el modo en
que el TPM inspecciona por primera vez
el código de la BIOS, seguido del código
destinado al hardware externo, y por
último los datos resultantes de la lectura
de la información del hardware. Este
proceso convierte la configuración de
hardware existente en parte integral de
la comprobación de la integridad. La
BIOS busca entonces un dispositivo
arrancable. Si detecta un disco duro,
entonces lee el primer sector, lo mide y
ejecuta el código MBR del mismo.
La responsabilidad de CRTM en mate-
ria de arranque seguro finaliza en este
punto, dando el relevo al cargador de
arranque que se encuentra en el MBR
para que continúe con la cadena de con-
fianza. Más tarde, el cargador del sis-
tema operativo iniciará el sistema opera-
tivo, quien a su vez dispondrá los meca-
nismos necesarios para inspeccionar el
código a ejecutar (incluidos los drivers).
Debido a que las llamadas al sistema
hechas desde el kernel también se encar-
gan de iniciar programas, se puede medir
cualquier aplicación que se inicie de este
modo.
Cuando se inicia el kernel, el cargador
de arranque le pasa la cadena de con-
fianza.
Las funciones para la integración del
soporte de TPM llevan en el kernel Linux
desde 2005. El correspondiente parche
del kernel para IMA (Integrity Measure-
ment Architecture) se originó con IBM
Research ([3], [4]). IMA continúa la
cadena de confianza, comprobando si
algún archivo ha sido alterado o manipu-
lado.
IntegrityMeasurementArchitectureIMA es parte oficial
del kernel Linux
desde la versión
2.6.30 de éste, aun-
que por norma gene-
ral no viene habilitado, por lo que puede
ser necesario recompilarlo con las
siguientes opciones:
• CONFIG_IMA=Y
• CONFIG_IMA_MEASURE_PCR_ INDEX
=10
• CONFIG_IMA_AUDIT=Y
• CONFIG_IMA_LSM_RULES=Y
También hace falta una opción de arran-
que opcional para el kernel, ima_tcb=1.
En el Listado 1 se muestra un extracto de
la configuración de Grub con IMA habili-
tado y una comprobación de archivo de
Grub.
IMA utiliza los hooks LSM (Linux
Security Module) del kernel, los mismos
en los que se basan SE Linux y las exten-
siones MAC (Mandatory Access Control).
Un programador puede registrar funcio-
nes internas del kernel mediante estos
hooks; se suelen utilizar para funciones
relacionadas con la seguridad o para lla-
madas al sistema. El kernel inicia las
funciones IMA para, por ejemplo, los
hooks que ejecuta el kernel antes de car-
gar archivos ejecutables. Esto se cumple
con llamadas al sistema como mmap(),
execve() o sys_init_module().
El código de IMA siempre se ejecuta
por tanto antes de que cargue el sistema
o se ejecute cualquier módulo del kernel,
librería, archivo binario o script. El
código calcula la suma checksum del
archivo en cuestión de la misma manera
que lo hace el proceso de arranque pre-
vio. Los resultados no siempre se alma-
cenan en el chip TPM, sino que sólo van
a parar allí en los casos de archivos pre-
vios y validados o cuyo checksum se ha
visto alterado.
Un mecanismo de caché garantiza que
todo este proceso no acabe derivando en
Arranque Seguro • ADMINISTRACIÓN
57Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 1: La cadena de confianza comienza al encender el PC e idealmente continúa hasta que
arranca el sistema operativo. En Linux se consigue con la ayuda de Trusted Grub.
Los PCRs (Platform Configuration Regis-ters) juegan un importante papel en lacomprobación de la integridad llevada acabo en un arranque seguro. Los PCRsson juegos de 16 registros con un anchode datos de 20 bytes, que es justamenteel tamaño de los resultados de los ha -shes criptográficos (SHA-1). Los PCRs seinicializan a 0 cuando la máquina se rei-nicia o resetea. De ese modo, es imposi-ble establecerlos con valores predeter-minados.La única posibilidad a la hora de modifi-car los registros es llamando a la fun-ción TPM_Extend. Esta función se definecomo TPM_Extend[n] := SHA-1(PCR[n] ||
D). Una porción de datos de longitudarbitraria D se enlaza al número n delvalor actual del registro PCR, para sercomputado usando la función criptográ-fica de hasheado SHA-1. El hash de 20bytes resultante se guarda en el registroPCR n. Debido a las características de lafunción de hasheado, es virtualmenteimposible usar este mecanismo paraguardar un valor específico en un PCRde manera intencionada. El arranqueseguro hace uso de ello para almacenarlos valores calculados D en un PCR en elmomento del arranque, impidiendo asísu manipulación.
Platform Configuration Register
Listado 1: Extracto de /boot/ grub/ menu.lst
01 title Ubuntu-IMA
02 root (hd0,6)
03 checkfile (hd0,6)/boot/grub/grub-check
04 kernel /boot/vmlinuz-2.6.35.4-ima root=/dev/sda7
vga=0x317 ima_tcb=1
05 initrd /boot/initrd.img-2.6.35.4-ima
• la Fase 1 de Grub verifica el comienzo
de la Fase 2 de Grub
• la Fase 2 de Grub verifica el resto de la
Fase 2 de Grub
• la Fase 2 de Grub verifica además el
kernel del sistema operativo así como
los módulos del kernel a cargar
TrustedGRUB nos permite verificar ade-
más cualesquiera otros archivos. Pode-
mos definir dicha comprobación
mediante el uso de una nueva opción en
el archivo de configuración de Grub,
/boot/grub/menu.lst, del siguiente modo:
checkfile U
(hdX,X?)/ruta_al_archivo
Debemos especificar la partición al modo
tradicional de Grub; sin embargo, el
tamaño del
archivo está limi-
tado a 8KB. El
archivo conten-
drá la lista de
archivos a verifi-
car, así como sus
hashes correctos
(SHA-1; el Lis-
tado 4 muestra
un ejemplo).
Durante el
arranque, Grub
comprueba una
por una las entra-
das de la lista. Si
el hash o suma
calculada no
coincide con la
suma almace-
nada, el proceso
de arranque se
detiene y muestra
un mensaje al
usuario. El
prompt del Lis-
tado 5 da a elegir
al usuario entre
cancelar el arranque por completo o con-
tinuar con el arranque a pesar de los pro-
blemas detectados.
TPM_Extend envía a los correspon-
dientes registros PCR del TPM las sumas
de los archivos.
VerificaciónA pesar de lo elaborado que son los
pasos descritos en este artículo, aún no
se cumple el principio de arranque
seguro que garantiza la integridad del
proceso de arranque. Para que el arran-
que sea completamente seguro, el sis-
tema debería comparar continuamente
las sumas, así como saber cómo actuar
en caso de que se produzca cualquier
alteración. El arranque seguro no aborta
el proceso de arranque si encuentra
pérdidas de rendimiento apreciables en
condiciones de producción. Además,
IMA almacena en el kernel una tabla
con los nombres de todos los archivos
comprobados y sus correspondientes
sumas. Esta lista contiene en todo
momento el estado actual de los archi-
vos ejecutados hasta ese punto.
Mediante la comparación de estas
sumas con los valores determinados (las
sumas de las versiones integrales de los
archivos correspondientes) se logra
detectar cualquier vulneración de la
integridad de los archivos.
TPM_Extend también guarda las
sumas en el chip TPM. Si el checksum de
un archivo del sistema varía, se almace-
nan sumas diferentes en los valores del
registro PCR. Sin embargo, la tabla del
kernel sólo contiene la suma actual de
los archivos.
IMA ofrece además una interfaz en
espacio de usuario a través de la cual se
puede comprobar la tabla: el administra-
dor puede leer la notación ASCII de la
tabla a través del archivo
/sys/kernel/security/tpm0/ascii_Bios_me
asurements (en el Listado 2 se ilustra
parte de este archivo); en el Listado 3 se
muestra cómo la herramienta head de
Linux lee el registro PCR del TPM.
Arranque Seguro en LinuxPara implementar un sistema de arran-
que seguro en Linux, lo primero que hay
que hacer es habilitar el soporte para
TPM en la configuración de la BIOS. La
primera vez que se hace, se crean varias
claves internas. Para los pasos siguientes
se necesita:
• el gestor de arranque Trusted Grub
• un kernel con IMA habilitado
En el método descrito en este artículo se
utiliza un parche para la versión tradicio-
nal de Grub 0.9.7. Como mencionamos
anteriormente, este parche pertenece al
proyecto TrustedGRUB, un trabajo cola-
borativo entre Sirrix y la Universidad de
Bochum, Alemania, cuyo sitio web [2]
alberga el código fuente, una wiki e
información de instalación detallada. La
actual versión 1.1.5 data de agosto de
2010.
Instalando TrustedGRUB en el MBR del
disco duro logramos que continúe el pro-
ceso de arranque con soporte para TPM
del siguiente modo:
• la extensión CRTM de la BIOS verifica
la Fase 1 de Grub (código del MBR)
ADMINISTRACIÓN • Arranque Seguro
58 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Listado 5: Mensajes del Arranque de Trusted GRUB
01 ****Trusted GRUB now booting Ubuntu-IMA
02 ****Progress:****XX
03 tGRUB: Verifiying (hd0,6)/boot/initrd.img-2.6.35.4-ima -> Integrity Error!
04 tGRUB: Data integrity not Guaranteed, 1 problem(s) occurred
05 tGRUB: Press ESC to stop booting or any other key to continue ...
Listado 4: /boot/ grub/ grub-check
01 792f802081e5193a304606026365797e69334adc (hd0,6)/boot/ initrd.img- 2. 6.35.4-ima
02 b6787ae6767deacefc5758ef7a4c0cdcbd0665ca (hd0,6)/boot/vmlinuz-2.6. 35.4-ima
Listado 3: Registrador PCR Register Vistopor head
01 # head -10 /sys/kernel/security/tpm0/ascii_Bios_measure-
ments
02 6226702b792e3ddd4b33491ce19375c671a8f8a7 08 [S-CRTM Ver-
sion]
03 4bb5a4e9f0f392abfa4eab2202b3bd924621dc63 01 [POST CODE]
04 1ea0e02ec49aaf3fda0bc8186da2cf246d7cfecf 01 [POST CODE]
05 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]
06 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]
07 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]
08 05ce5aa3a72f4dccdaa251bbac738a03296be1f7 01 [POST CODE]
09 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]
10 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]
11 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]
Listado 2: Listado de Sumas en el SistemaActivo
01 # head -5 /sys/kernel/security/ima/ascii_runtime_measure-
ments
02 PCR template-hash filedata-hash filename-hint
03 10 0f7aa9805f51800bf1403c3de856c4bee66dfa21 ima
dd16d778c4dbfdea44536cdc10890757684fe1e0 boot_aggregate
04 10 1dfdf1da8cca8248c420f365bbb7cb00ad59597e ima
648090bfe9593bcc2702461433d5c9ef64399ee5 /init
05 10 afaefb735a3d93f5c6f66f7893b558f04438e8c0 ima
5fb8c8479f31574c435aa06d5bae6ae5a737ca81 /init
06 10 08005d2b0ba3ee8c10c40f87eef76f3c4cea41d5 ima
195b25cdab5501b58858bc0923e51a0eab2447a3 ld-linux.so.2
07 10 63d7494f6da7fb0fc3332ab4fce2a2e1d45fbaf2 ima
d3d48ff690110248aba853fdb0748bfe4dd64673 libc.so.6
algún archivo modificado. En lugar de
eso, lo que hace es ofrecer al usuario la
posibilidad de identificar un sistema
cuya integridad ha sido comprometida.
La respuesta a tal situación no es respon-
sabilidad del arranque seguro, sino que
se deja a la instancia de verificación.
La comprobación de la integridad
supone el núcleo del arranque seguro.
Pero hay un fallo de facto: uno de los
principios básicos en seguridad es que
un PC en ejecución no debe ser quien
verifique su propia integridad. Por ese
motivo, IMA encomienda la verificación
a un tercero confiable. El proceso teórico
(del que aún no ha aparecido ninguna
implementación factible) se conoce
como testimonio remoto y usa un
método de desafío/ respuesta (ver Figura
2) que consta de los seis pasos siguien-
tes:
• la entidad comprobadora genera un
número aleatorio o nonce, (1).
• transfiere el nonce al sistema objetivo
(challenge), (2).
• el sistema objetivo crea una petición
TPM_Quote request, firma el nonce y el
valor del PCR, y devuelve los resulta-
dos junto con la lista de sumas, (3).
• la entidad comprobadora analiza la
firma y el nonce para garantizar que se
trata de un valor de PCR auténtico y
actualizado, (4).
• recalcula el valor
de PCM
(TPM_Extend)
referenciando la
lista de sumas
que ha recibido y,
si los resultados
son idénticos,
deduce que la
lista es auténtica,
(5).
• verifica entonces
todos los valores
de la lista contra
los valores de
una base de
Arranque Seguro • ADMINISTRACIÓN
59Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 2: El protocolo de testimonio remoto (Remote Attestation)
permite verificar la integridad gracias a un sistema remoto. Por des-
gracia, aún no existe ninguna implementación usable.
Figura 3: Una forma de implementar el arranque seguro es usando una smartcard como instancia de verificación junto con un cifrado completo
de los discos duros.
Las smartcards han sido diseñadas paraejecutar operaciones criptográficas,generar números aleatorios y almace-nar de forma segura datos y claves.Actúan como parte desafiante, asumenel papel de protocolo de testimonioremoto (Remote Attestation) y verificanlas sumas. En semejante escenario noes posible iniciar ninguna aplicaciónsegura en el PC hasta que no se haya lle-vado a cabo la comprobación de la inte-gridad del sistema. El truco está enalmacenar la aplicación en el PC en uncontenedor cifrado y la clave en lasmartcard. La smartcard no proporcio-nará la clave hasta que el PC haya verifi-cado satisfactoriamente la integridaddel sistema.
Si el cargador reside en el interior delcontenedor, necesitará hacer uso delprotocolo de testimonio remoto, acce-der a la smartcard y montar el contene-dor cifrado (Figura 4). El cargadorarranca en el Paso 1; inicializa la smart-card y controla el diálogo con el usuario.El usuario ha de autenticarse ante lasmartcard para poder habilitarla (2). Elcargador ejecuta entonces el protocolode testimonio remoto contra la smart-card (3). Tras verificar satisfactoriamentela integridad, proporciona la clave parael montaje del contenedor cifrado (4). Elcargador puede montar entonces elcontenedor (5) e iniciar la aplicación enél contenida (6).
Versión con Smartcard y Cifrado Completo
Claro está que este método tampoco
está exento de problemas: la gestión
mediante Smartcard y stick USB no es
viable con grupos de usuarios de mayor
tamaño; de hecho, una arquitectura de
tal complejidad está más bien orientada
a sistemas dedicados con necesidades de
máxima seguridad y para los que está
justificado el esfuerzo de administración
que supone.
WindowsLas versiones más modernas de Windows
(a partir de Windows Vista) soportan el
chip TPM en forma de autenticación pre-
via al arranque y cifrado de disco duro
mediante Bitlocker [5]. El software veri-
fica la integridad del sistema en las fases
más tempranas del arranque, de manera
similar a como lo hace TrustedGRUB.
Sin embargo, en ese momento se
rompe la cadena de confianza; el kernel
no continúa con las medidas de integri-
dad del chip TPM. La filosofía para la
protección de la integridad varía en este
punto: Bitlocker hace uso de TPM para
garantizar la detección de vulneraciones
de la integridad sólo hasta el momento
en que el kernel arranca. Al mismo
tiempo, Bitlocker garantiza la confiden-
cialidad de los datos del disco mediante
el uso de cifrado completo. De ese modo,
los administradores de los sistemas de
Microsoft pueden prevenir potenciales
ataques consistentes en modificar archi-
vos específicos offline. Estas medidas
están complementadas por funciones
como la firma de drivers, protección ante
parches o control de cuentas de usuario.
Tras una valoración detallada de la
seguridad de Windows Vista se concluye
que, a pesar de que Microsoft ha mejo-
rado sustancialmente la seguridad de
Windows en comparación con sus pro-
ductos anteriores, aún no ofrece ningún
concepto dominante en el sentido de
TCG, o al menos no de un modo ya pre-
parado.
Microsoft ha podido identificar este
error y parece estar trabajando en ello.
En la Build Conference de Septiembre de
2011, los desarrolladores presentaron el
nuevo método de “Arranque Seguro” en
Windows 8 – basado en la UEFI (Unified
Extensible Firmware Interface, [6]) –
para soportar solamente cargadores de
arranque firmados para proteger así el
sistema operativo como el Chrome OS de
Google. Sin embargo, los chips UEFI no
están muy extendidos entre el hardware
de PC.
ConclusiónLa integridad de las aplicaciones se
puede garantizar en Linux mediante una
combinación de CRTM, TrustedGRUB e
IMA, consiguiendo un arranque seguro
perfecto. Esta solución permite al admi-
nistrador detectar cualquier modifica-
ción realizada sobre aplicaciones sensi-
bles, como por ejemplo las dedicadas a
la creación de firmas digitales.
La usabilidad del sistema en entornos
productivos depende de un proceso de
verificación confiable. Por desgracia, aún
no existe ninguna implementación usa-
ble del protocolo de testimonio remoto
(Remote Attestation). En comparación
con Windows, IMA definitivamente
implementa mucho mejor el concepto de
arranque seguro. �
datos; si los valores son idénticos, los
archivos del sistema objetivo están
intactos, (6).
Alternativamente, se puede usar una
smartcard como entidad de confianza
para implementar el protocolo de testi-
monio remoto. La arquitectura propuesta
en el cuadro “Versión con Smartcard y
Cifrado Completo” contempla una auten-
ticación de doble factor para el usuario y
cifrado completo para el disco duro, ade-
más del arranque seguro para garantizar
la integridad y confiabilidad del conjunto
de los datos.
Pero una vez más, hay una serie de obs-
táculos que dificultan la puesta en pro-
ducción de esta solución. Por ejemplo, la
smartcard no puede guardar todas las
sumas debido a la limitación de sus recur-
sos, y el protocolo tardará algún tiempo.
Debido a que el kernel Linux ya cuenta
con mecanismos similares para el cifrado
de discos, como Dm-crypt, Device map-
per y la Crypto API, se puede concebir
una arquitectura aún más compleja y
exhaustiva. La Figura 3 muestra un bos-
quejo de la extensión para el procedi-
miento descrito anteriormente.
En esta configuración, el disco duro no
contiene datos cifrados aparte de los
datos de gestión de las particiones. El sis-
tema usa CRTM y TrustedGRUB para
arrancar (pasos 1 a 4) desde un medio
USB. Aquellos administradores que bus-
quen un método elegante pueden usar un
stick USB con lector de smartcard inte-
grado y llevar consigo todas las credencia-
les de acceso en el stick. La ramdisk ini-
cial contiene el código necesario para
usar la smartcard, autenticar al usuario e
incluso lanzar una comprobación de la
identidad y, en caso de que ésta tenga
éxito, leer la clave desde la smartcard
para el cifrado transparente del disco duro
(pasos 5 a 8). La máquina podrá entonces
montar el sistema de archivos raíz y con-
tinuar con el proceso de arranque (pasos
9 a 11). Una vez hecho todo esto, tienen
lugar los pasos para iniciar la aplicación
de alta seguridad (pasos 12 a 16).
ADMINISTRACIÓN • Arranque Seguro
60 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 4: Secuencia del protocolo de testimonio usando una smartcard para proteger la aplicación.
RECURSOS
[1] Trusted Computing Group: http:// www. trustedcomputinggroup. org
[2] Trusted Grub: https:// projects. sirrix. com/ trac/ trustedgrub/
[3] IBM Research: http:// domino. research. ibm. com/ comm/ research_people. nsf/ pages/ sailer. ima. html
[4] Sailer, Zhang, Jaeger, van Doorn,“Design and Implementation of aTCG- based Integrity MeasurementArchitecture”: 13th USENIX SecuritySymposium, 2004
[5] Bitlocker: http:// windows. microsoft. com/ en-US/ windows7/ products/ features/ bitlocker
[6] Unified Extensible Firmware Inter-face:http:// en. wikipedia. org/ wiki/ Unified_Extensible_Firmware_Interface
LINUX USER • Dia
62 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Cuando necesitamos editar una foto,
habitualmente elegimos un pro-
grama de edición de imágenes
como GIMP o Photoshop. Los programas
de dibujo vectoriales como Inkscape,
Adobe Illustrator o Corel Draw son más úti-
les para dibujos o ilustraciones, pero los
diagramas UML o de red son más difíciles
de dibujar usando un programa de edición
de imágenes, porque, aunque permiten
agrupar objetos, no permiten enlazarlos. El
programa bajo licencia GPL Dia [1] es
mucho mejor a la hora de automatizar el
proceso de actualización de objetos enlaza-
dos.
MultitalentoDia posee muchos objetos gráficos útiles
para crear organigramas y diagramas de
bases de datos o UML y para visualizar flu-
jos de trabajo o estructuras en procesos.
Además, cuenta con soporte limitado para
crear elementos a mano alzada. Para
comenzar, podemos arrastrar objetos desde
la caja de herramientas al espacio de tra-
bajo, y luego organizarlos y enlazarlos
cuando sea necesario. Si movemos un
objeto, automáticamente se actualizarán
las flechas que lo enlazan para indicarnos
la nueva posición, evitándonos así el tener
que ajustar todos los objetos manualmente
cada vez que cambie uno.
InstalaciónDia se encuentra disponible para Linux,
Mac OS X y Windows. Es probable que la
versión Linux esté en el repositorio de nues-
tra distribución favorita. Los usuarios de
Ubuntu y Debian necesitan estar atentos a
las versiones diferentes. Para más informa-
ción véase el cuadro “¿Una Versión para
Gnome?”. La versión portátil para los usua-
rios de Windows se puede arrancar sin ins-
talación (por ejemplo, desde un stick USB).
A pesar de que técnicamente la versión
de Linux es idéntica a la de otros sistemas
operativos, como en GIMP, el cuadro de
herramientas y el espacio de trabajo se
encuentran situados en paneles diferentes
(Figura 1). Sin embargo, podemos arrancar
Dia con la opción --integrated para cambiar
esta configuración y editar múltiples docu-
mentos Dia al mismo tiempo. En este
modo, el programa abre los espacios de tra-
bajo adicionales como pestañas.
ControlesPara crear gráficos podemos arrastrar las
formas requeridas desde la biblioteca de la
izquierda al escritorio. Una vez colocadas,
podemos moverlas, reflejarlas o escalarlas
de acuerdo con nuestras necesidades. Los
elementos se enlazan fácilmente con las
distintas líneas disponibles en el Diagram
Editor.
Visualización de procesos con Dia
EsquemáticoDibujar diagramas y organigra-
mas resulta difícil con programas
de edición gráfica tradicionales
tales como GIMP o Inkscape. Dia
simplifica esta tarea.
POR CHRISTOPH LANGNER Y
THOMAS LEICHTENSTERN
Debian y Ubuntu tienen dos versiones
diferentes de Dia. Los administradores
de paquetes con estas distribuciones
incluyen los meta-paquetes dia y dia-
gnome. Si no utiliza el escritorio
Gnome, no instale dia-gnome. Si usa
KDE o Xfce, este paquete instala un con-
junto de dependencias que no necesita.
En su lugar, debería instalar el paquete
dia, que nos da el mismo programa,
pero sin las dependencias.
¿Una Versión para Gnome?
Para definir la apariencia de los extremos
de los conectores utilizamos los iconos de
la parte inferior del editor. Cuando arrastra-
mos una flecha al centro del rectángulo,
éste se mostrará resaltado en rojo. Cuando
pulsamos el botón del ratón, la punta de la
flecha quedará unida al centro del rectán-
gulo. Cuando movemos el objeto, éste per-
manece enlazado. Este proceso no sólo fun-
ciona con el centro de un objeto, sino tam-
bién con las esquinas y el punto medio de
cualquier lado.
Al igual que otros programas gráficos,
Dia utiliza capas. Para crear nuevas capas
seleccionamos Layers |
Add layer. Para navegar
entre ellas utilizamos la
ventana Layers (Figura 2),
a la cual podemos acceder
a través de Layers |
Layers… en el doble panel
o accediendo a View |
Show Layers en la ventana
integrada.
ExportarCon Dia podemos exportar
nuestros gráficos a varios
formatos, tales como PNG,
SVG o PDF, y luego conti-
nuar trabajando sobre ellos
en otros programas. Versio-
nes más recientes de Dia
también pueden leer y pro-
ducir ficheros en el formato
XML que utiliza MS Visio
[2], que Microsoft publicó
con la versión 2003. Con
esta funcionalidad se
soporta la interoperabilidad
directa con Visio, aunque
pueden darse algunas lige-
ras diferencias entre fiche-
ros.
Mis pruebas mostraron que Visio no pre-
senta el texto en documentos exportados
desde Dia. La elección de otra fuente podría
resolver este problema. Cuando abrí los
ficheros de Visio en Dia, tuve problemas al
cargar los gráficos más complejos. Por
ejemplo, el programa no muestra gradien-
tes de color o elementos más complicados
correctamente. El intercambio de datos
entre Dia y Visio es, en el mejor de los
casos, una solución provisional en este
momento.
Formas AdicionalesSi la selección de formas de las que nos
provee Dia no es suficiente para nuestras
necesidades, podemos ampliar el programa
descargando otras en el formato de paque-
tes DEB y RPM a través del programa Dia -
shapes [3]. Estas formas incluyen elemen-
tos de estructura y de informática, compo-
nentes electrónicos y formas para elemen-
tos ópticos. También hay versiones de
bibliotecas de formas para Windows y Mac
OS X que se pueden descargar desde la
página de inicio de Dia.
Después de instalar Diashapes, aparecerá
en el menú Applications | Graphics del
escritorio Gnome. Cuando lo iniciamos,
muestra una lista de todos los objetos dis-
ponibles, que podemos seleccionar una vez
verificados. Pulsando en Install carga las
formas requeridas y las desempaqueta
automáticamente en ~/ .dia/ shapes, por lo
que ya podremos acceder a ellas desde
Other sheets de la lista desplegable en el
Diagram Editor (Figura 3).
ConclusionesDia no puede competir con el alcance fun-
cional de las alternativas propietarias tales
como OmniGraffle [4] o MS Visio, pero, si
lo único que necesitamos son diagramas
simples sin complejidades, Dia es una estu-
penda opción.
Esta aplicación libre crea diagramas UML
y de red con facilidad, y podemos exportar-
los también fácilmente a formatos popula-
res para su edición posterior. Sin embargo,
es posible que puedan darse algunos pro-
blemas con fuentes integradas si exporta-
mos a MS Visio. �
Dia • LINUX USER
63Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 1: La opción --integrated inicia Dia en una única ven-
tana en Linux (parte superior).
Figura 2: En Dia, el diálogo Layers nos per-
mite cambiar entre diferentes capas.
Figura 3: Diashapes instalado.
[1] Dia: http:// projects. gnome. org/ dia/
[2] MS Visio: http:// office. microsoft. com/
en-us/ visio/
[3] Diashapes: http:// dia-installer. de/
diashapes/ index. html. en
[4] OmniGraffle: http:// www. omnigroup.
com/ products/ omnigraffle/
RECURSOS
LINUX USER • Administración de Contraseñas
64 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Las contraseñas y su administra-
ción no son precisamente
temas excitantes para la mayo-
ría de los usuarios. De hecho, muchos
de ellos piensan que son un mal nece-
sario, mostrando poco interés en crear
contraseñas fuertes. Pero esto es un
error: los recientes ataques a distintos
servicios han comprometido las bases
de datos de empresas, permitiendo a
terceros hacerse con nombres de
usuario y contraseñas de miles,
incluso millones de usuarios. En la
mayoría de los casos, la información
estaba cifrada, pero con un corpus tan
grande con el que trabajar, los atacan-
tes no tendrían ninguna dificultad en
descubrir las contraseñas débiles.
Junto con los nombres de usuario, un
atacante puede tratar de acceder a
otros servicios e intentar apoderarse
de cuentas de otros sitios si estamos
usando el mismo nombre de usuario y
contraseña para esos otros sitios.
Así que, ¿cuál es la respuesta? Con-
traseñas fuertes y separadas para cada
cuenta de cada servicio. Esto proba-
blemente suena como un auténtico
incordio… más que nada porque lo es,
especialmente si hemos intentado ela-
borar y memorizar cada una de ellas.
No es simplemente una molestia –
para muchos usuarios es una fórmula
para el fracaso.
Naturalmente, no deseo que nadie
fracase a la hora de reforzar su seguri-
dad, y no quiero que los malos pue-
dan devorar nuestras contraseñas
fácilmente. Afortunadamente, Linux
está lleno de herramientas para ayu-
darnos a crearlas y a administrarlas.
Comenzaré explicando qué hace que
una contraseña sea buena, luego mos-
traré cómo crearla y después cómo
almacenarla (de modo seguro).
Contraseñas Fuertes¿Qué hace que una contraseña sea
fuerte? Probablemente encontraremos
distintas opiniones, pero como
mínimo deberá tener una combina-
ción de letras mayúsculas y minúscu-
las, números y caracteres especiales –
si es posible. Digo “si es posible”, por-
que algunos sitios puede que no per-
mitan caracteres especiales o podría
limitarnos a utilizar un PIN en vez de
una contraseña de verdad. En tales
casos, es importante hacerlo lo mejor
que podamos.
También es importante evitar con-
traseñas de diccionario en la medida
de lo posible. Por razones obvias, no
es buena idea que nuestra contraseña
sea “contraseña”, “password” ni nin-
guna variante. Igualmente tampoco
debe ser nuestro nombre, apellidos,
nombre de nuestra madre, un insulto,
palabra malsonante u obscenidad (los
atacantes también pueden ser inma-
duros) o el nombre de nuestro grupo
Abordamos la generación y administración de con-traseñas
¡PÁSALO!Las contraseñas fuertes y originales son actualmente una necesidad.
Mostramos distintas maneras de generarlas y que sean fáciles de recor-
dar. POR JOE “ZONKER” BROCKMEIER
Joe “Zonker” Brockmeier es peri-
odista tecnológico freelance, edi-
tor, creador de comunidades y
defensor del software libre. Fue
Community Manager de Open-
SUSE desde el 2008 hasta el 2010.
Ahora escribe para Linux Maga-
zine y otras publicaciones tec-
nológicas. Puedes encontrarlo en
http:// www. dissociatedpress. net y
en Twitter e Identi.ca como jzb.
EL A
UT
OR
musical favorito – a menos que se
llame “Foof2ouv”, grupo que no
conoce ni Dios.
Pero que se nos ocurra una contra-
seña fuerte no es sencillo si no pode-
mos utilizar una palabra que podamos
recordar con facilidad ¿verdad? Cierto,
pero podemos facilitarnos la tarea si
utilizamos un generador de contrase-
ñas aleatorio. Linux tiene bastantes de
donde elegir.
Contraseñas Fáciles conpwgenMi generador de contraseñas favorito
de la línea de comandos es una
pequeña utilidad denominada pwgen,
escrita por un tipo del que probable-
mente haya oído hablar: Ted Ts’o, el
cual, cuando no estaba hackeando sis-
temas de ficheros, pasaba su tiempo
reescribiendo una utilidad que gene-
raba contraseñas aleatorias. Aunque
no sólo eso, ya que pwgen genera con-
traseñas que pretenden ser fáciles de
recordar. ¿Cómo es esto? ¿Contraseñas
seguras y fáciles de recordar? Sí, efec-
tivamente. El modo predeterminado
de pwgen es crear contraseñas que
son pronunciables pero que no son
una palabra. También pueden incluir
al menos una letra en mayúsculas y
un número. La manera más fácil de
verlo es a través de la salida de
pwgen. Aquí hay un ejemplo de con-
traseñas generadas por esta tulidad:
to8Tee0j Ook4kep7 caCh4che
ma1Saik1 Roo6oen9 miexieX3
Piyairo6 Oyol9Iel Ohpho3po
cheiT8ai Gooquae9 AeV8eech
ach9SaiG xiezah1K gooPo8qu
aiGie0Ae xooqu1Fi Dahh4Oox
oosh8Mia ion8beiC tho1Thie
Beel9aa8 Baiph6uu Jei9Mahk
Ninguna de ellas son fácilmente adivi-
nables y tampoco fáciles de crackear,
pero podemos elegir algunas que
podríamos memorizar fácilmente. He
usado pwgen desde hace algunos años
para generar unas cuantas contrase-
ñas que he memorizado y utilizado
para una cuenta… sólo una cuenta.
Así que el comportamiento por
defecto de pwgen es crear un conjunto
de contraseñas y permitirle al usuario
elegir entre ellas. Como podemos ver
aquí, la longitud de la contraseña es
de 8 caracteres con varias columnas y
filas de contraseñas. La idea es gene-
rar un conjunto de ellas para tener
varias entre las que elegir. Sin
embargo, todo esto se puede modifi-
car. Si queremos contraseñas más lar-
gas (o más cortas – algo que no reco-
miendo), usaremos pwgen N, donde N
es la longitud de la contraseña.
También podemos establecer el
número de contraseñas a generar pro-
porcionando un segundo número. De
este modo, si sólo deseamos 10, ejecu-
tamos pwgen 9 10, que generará 10
contraseñas con una longitud de 9
caracteres. En el caso de que sólo de -
seemos especificar el número de con-
traseñas, entonces sería
pwgen -N 10.
¿Y si queremos aña-
dir un símbolo a nues-
tra contraseña? Enton-
ces usaremos la
opción -y:
pwgen -y -N 10.
Esto las generará con
corchetes, comillas,
acentos circunflejos,
etc.
Nótese que algunas
de las salidas pueden
ser un poco ambiguas.
Puede resultar compli-
cado distinguir entre
un “0” y una “O” o
entre un “1” y una “l”
dependiendo de la
fuente de terminal que
estemos utilizando. Yo
no tengo este pro-
blema, porque la fuente
de mi terminal distin-
gue bastante bien estos
caracteres – y uso
reglas mnemotécnicas
para memorizar las
contraseñas. Así,
recuerdo la diferencia
entre “cero” y “Oh” en
mi cabeza. Pero si nos
resulta confuso o irri-
tante, podemos usar la
opción -B para decirle a
pwgen que no utilice
caracteres ambiguos.
Si necesitamos gene-
rar contraseñas para
otra gente o incorporar la generación
de contraseñas en un script, por ejem-
plo, podemos invocar a pwgen desde
los scripts. Cuando se le llama desde
un script, y no interactivamente,
pwgen genera una sola contraseña en
vez de una pantalla completa de con-
traseñas.
La única desventaja de pwgen es
que puede que no se encuentre empa-
quetada en todas las distribuciones.
Está disponible para Debian, Linux
Mint, Ubuntu y para el resto de las
familias Debian/ Ubuntu y sus deriva-
das. Sin embargo, este artículo está
escrito en Scientific Linux 6.1 alpha, y
pwgen no parece encontrarse en los
Administración de Contraseñas • LINUX USER
65Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 1: La ventana por defecto de Revelation.
Figura 2: Añadiendo una cuenta shell.
Figura 3: Añadiendo una cuenta de tarjeta de crédito.
Revelación en laAdministración deContraseñasDurante muchos años he usado una
solución de baja tecnología para
administrar pares de nombre de usua-
rio/ contraseña. Mantenía un fichero
de texto Vim cifrado oculto con
muchos nombres de usuario y contra-
señas de sitios. Esto era, por decirlo
suavemente, ni completamente escala-
ble ni seguro. Concedo que casi
requería acceso físico a mi máquina
para crackearlo, pero el
cifrado de Vim no es
terriblemente fuerte.
Además, no es una
solución integral.
Cuando comencé a bus-
car una GUI para admi-
nistrar contraseñas,
encontré unas cuantas
buenas para Linux,
específicamente dos, a
las que haré referencia
aquí: Revelation [2] y
Seahorse [3].
Si somos usuario de
Gnome, es probable
que ya estemos familia-
rizados con Seahorse,
aunque puede que no
conozcamos todo lo
que Seahorse puede
hacer. También me
gusta Revelation – con
una salvedad: su
desarrollo se detuvo en
2007. Aún se encuentra
empaquetado para
algunas distros, pero le
haría falta un nuevo
mantenedor. Si es de -
sarrollador y lee esto,
puede que sea un buen
proyecto del cual
hacerse cargo.
Cuando ejecutemos
Revelation, veremos
una ventana como la
que aparece en la
Figura 1. Para empezar
a añadir entradas, pul-
samos el botón Add
Entry situado en la
barra de tareas. Luego
veremos un diálogo
como el de las Figuras
2 ó 3. Como podemos
ver, es posible administrar varios
tipos de cuentas/ credenciales en
Revelation, incluyedo tarjetas de cré-
dito, cuentas shell, sitios web, blo-
queos de puertas e incluso claves
cifradas con el certificado y los fiche-
ros de claves.
¿Hasta qué punto es seguro mante-
ner todo esto en una GUI de fácil uso?
Pues el fichero con nuestra informa-
ción está cifrado con otra contraseña.
Después de que hayamos introducido
unas cuantas credenciales, vamos a
File y le damos al fichero de datos de
Revelation un nombre. Se nos pedirá
una contraseña y, si no es lo suficien-
temente fuerte, Revelation se quejará
antes de permitirnos usarla. También
podemos “bloquear” Revelation mien-
tras está abierto, de modo que si
alguien intenta fisgonear en nuestro
escritorio, no tenemos que preocupar-
nos de que puedan navegar nuestras
contraseñas. Nótese que no necesita-
mos usarlo con pwgen, ya que Revela-
tion generará contraseñas aleatorias
para nosotros.
Como he mencionado, Revelation
no está activamente mantenido, por lo
que posiblemente deseemos probar
Seahorse como alternativa. ¿Por qué
no comenzar con Seahorse? En primer
lugar, porque no es tan flexible como
Revelation. Está diseñado para admi-
nistrar claves GPG, cuentas shell y
otras credenciales estándar, pero no
tarjetas de crédito o contraseñas de
sitios web donde deseamos guardar
algo más que pares de nombre de
usuario/ contraseña.
Pero si usa Gnome, puede que ya
tenga instalado Seahorse y, si sólo
necesita administrar un puñado de
contraseñas, esta es una buena
manera de hacerlo.
Firefox SyncPor último, no podemos olvidar men-
cionar Firefox Sync [4]. Firefox ha
tenido la funcionalidad de administrar
contraseñas durante mucho tiempo,
aunque Sync es un sustancial paso
adelante, el cual como su nombre
indica, sincroniza información entre
diferentes versiones de Firefox. Según
la versión de Firefox que estemos
usando, Sync se encuentra disponible
como una extensión o como una fun-
cionalidad nativa del navegador. En
repositorios de Scientific Linux o en
los de Red Hat Enterprise Linux
(RHEL).
Una opción de la familia RHEL es
compilarlo nosotros mismos, siendo
posible encontrar el código fuente en
SourceForge [1]. Como es un pro-
grama sencillo, no necesita actuali-
zarse muy a menudo – su última
actualización es de hace algo menos
que un año (Febrero de 2011) – y las
fuentes se compilan con mucha facili-
dad.
LINUX USER • Administración de Contraseñas
66 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 5: Introduciendo información de la cuenta.
Figura 4: Creando una nueva cuenta Firefox Sync.
Figura 6: Administrando preferencias de Firefox Sync.
Firefox 3.6 necesitaremos instalarlo como extensión,
pero a partir de la 4.0 y posteriores, se encuentra
incluido por defecto. A menos que tengamos una buena
razón para usar 3.6, deberíamos actualizarnos a la 4.0 o
posteriores. Mucha gente piensa en Firefox Sync como
una manera de sincronizar las marcas entre navegado-
res en diferentes máquinas, pero también guardará y
sincronizará nuestras contraseñas. También podemos
hacerlo en Google Chrome o utilizando algo como
Xmarks; sin embargo, tiendo a tener más confianza en
Mozilla que en cualquier otra entidad comercial para
manipular mi privacidad.
Si no ha usado Firefox Sync antes, deberá comenzar
configurando una cuenta (Figura 4). Tenga en cuenta
que tendrá dos credenciales privadas – nuestra contra-
seña y una clave Sync. Cuando nos registramos en Fire-
fox Sync, necesitaremos introducir nuestro nombre de
usuario o dirección email, así como la clave Sync
(Figura 5). Una vez que todo está configurado, pode-
mos administrar lo que Sync vaya a sincronizar. Si nos
encontramos seguros con la política de privacidad y
seguridad de Mozilla, entonces seguimos adelante y le
permitimos sincronizar las contraseñas. También admi-
nistrará nuestros favoritos, preferencias, historial y las
pestañas dentro de los navegadores (Figura 6). Firefox
Sync es de gran ayuda si estamos utilizando Firefox en
varios aparatos y, si no lo tenemos instalado, es un
auténtico incordio intentar administrar contraseñas
para sitios web en un dispositivo móvil.
ResumenLa administración de contraseñas no es algo atractivo
ni excitante, pero merece la pena investigar un poco
para poner orden en nuestra privacidad para quedarnos
tranquilos. Como Linux tiene un porcentaje bastante
alto de usuarios preocupados por una buena adminis-
tración y seguridad de contraseñas, se encuentra
repleto de herramientas que satisfacen estas necesida-
des. ¿Tenemos que ser unos super-paranoicos acerca de
nuestras contraseñas? Probablemente no. A nivel perso-
nal, mi objetivo es que mis credenciales proporcionen
protección frente a ataques comunes y aíslen cada
cuenta de manera que, si los atacantes comprometen
un sitio, no puedan abrir una puerta al resto de mi vida
online. Este método es diferente si se planea pararle los
pies a un atacante que nos tenga como objetivo perso-
nalmente, aunque los mismos pasos deberían ayudar
también a funcionar. Mi recomendación es que genere
contraseñas fuertes.
Y si no está seguro de sus credenciales bancarias,
envíeme un email con ellas, y las revisaré por usted </
sarcasmo>. �
[1] SourceForge: http:// sourceforge. net/ projects/ pwgen/
[2] Revelation: http:// oss. codepoet. no/ revelation/ wiki/ Home
[3] Seahorse: http:// projects. gnome. org/ seahorse/
[4] Firefox Sync: https:// wiki. mozilla. org/ Firefox_Sync
RECURSOS
LINUX USER • Workspace: BilboPlanet
68 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Aprimera vista, BilboPlanet [1] tiene
toda la pinta de otro lector RSS
basado en web. Pero si profundiza-
mos un poco, encontraremos que no es un
agregador RSS habitual. BilboPlanet es lo
que se llama un “portal a planeta”, una
aplicación que toma contenidos de múlti-
ples fuentes RSS y los presenta de manera
que sean fáciles de usar. Esta aplicación
está diseñada específicamente para comu-
nidades y grupos de trabajo para permitir-
les a sus miembros seguirse entre ellos y
compartir información útil. ¿Cómo fun-
ciona en la práctica? Digamos que tenemos
una comunidad en la que todos sus miem-
bros tienen blogs. Si queremos seguirlos,
tenemos que subscribirnos a todos los
feeds RSS individuales. Lo mismo ocurre
para todos los miembros de la comunidad:
han de subscribirse a cada uno de los res-
tantes feeds RSS de los demás miembros
para mantenerse al día. Las cosas incluso
se complican más cuando cada miembro se
subscribe a otros feeds que puede que sean
importantes para el resto de la comunidad.
BilboPlanet ofrece una elegante solución
a este problema agregando y publicando
los feeds RSS de los miembros de la comu-
nidad. Y a pesar de estar desarrollada pen-
sando en comunidades y grupos de trabajo,
esta aplicación también tiene otros usos.
Por ejemplo, podemos utilizarla como una
herramienta para publicar contenido de
nuestros feeds RSS favoritos.
Comenzamos
Como BilboPlanet se ejecuta en la pila Apa-
che/ MySQL/ PHP, necesitamos un servidor
o un alojamiento web que tenga los com-
ponentes requeridos. La aplicación trae un
instalador automático, de modo que
implantar BilboPlanet sólo conlleva unos
cuantos pasos simples. Para empezar, coge-
mos la última versión de la aplicación del
sitio web del proyecto y desempaquetamos
el archivo descargado. Movemos la carpeta
BilboPlanet resultante al documento raíz de
nuestro servidor, luego damos permisos de
escritura al directorio BilboPlanet/ admin/
cache/ y al fichero Bilboplanet/ inc/
config.php. A continuación apuntamos
nuestro navegador a http:// 127. 0. 0. 1/
Bilboplanet (sustituyendo 127.0.0.1 por la
dirección IP o el nombre de dominio de
nuestro servidor) para instalar el asistente
(Figura 1). Cumplimentamos los campos
requeridos y pulsamos Save. En el paso
siguiente, proporcionamos información
sobre nuestra instancia de BilboPlanet,
especificamos las credenciales del adminis-
trador y pulsamos Save de nuevo. El insta-
lador se encargará del resto. Una vez que
BilboPlanet ha sido instalado, podemos eli-
minar el directorio Bilboplanet/ admin/ ins-
tall, y luego pulsar el botón Go to the admi-
nistration interface para configurarlo.
Cuando nos introducimos en la interfaz
administrativa de BilboPlanet, aterrizamos
automáticamente en la sección Dashboard,
la cual ofrece una vista rápida de nuestra
instalación (Figura 2). Esta perspectiva
incluye una lista de los últimos artículos,
estadísticas e información del sistema. Si
necesitamos modificar la configuración de
Administración de feeds RSS con BilboPlanet
AGREGAR YPUBLICAREn la web, un planeta es una herramienta para reunir y mostrar posts de
blogs de los miembros de una comunidad de Internet. Vemos cómo
crear uno usando BilboPlanet. POR DMITRI POPOV
Dmitri Popov es licenciado en
Lengua Rusa y en lenguajes de
computación. Ha estado escribi-
endo sobre Linux y software de
código abierto durante años, y sus
artículos han aparecido en revistas
y sitios web daneses, británicos,
norteamericanos, alemanes y
rusos.
EL A
UT
OR
nuestra cuenta, podemos hacerlo en Com-
mon | Manage your account. Aquí pode-
mos actualizar nuestra dirección de correo
y cambiar la contraseña.
Antes de poder poner a BilboPlanet a
funcionar, tenemos que rellenarlo con
usuarios. Para ello vamos a Administration
| Manage users y pulsamos el botón Add a
user para proporcionar el nombre del usua-
rio, ID, dirección de correo, contraseña y
sitio web. Luego pulsamos Add. De este
modo podremos añadir tantos usuarios
como necesitemos. Nótese que aunque el
campo Website esté marcado como opcio-
nal en el formulario Add a user, es, de
hecho, obligatorio. Debemos especificar al
menos un sitio web para cada usuario
(habitualmente el blog del usuario o su
sitio web personal), porque BilboPlanet no
puede asignar feeds RSS a usuarios sin
sitios web.
Si no añadimos un sitio web cuando cre-
amos un usuario, podemos hacerlo más
tarde pulsando el enlace Add a new website
que se encuentra situado junto al usuario
en la lista de todas las cuentas existentes.
En teoría, deberíamos añadir un sitio web
por cada feed RSS que planeamos asignar
al usuario. En la práctica, sin embargo,
podemos unir múltiples feeds a un único
sitio web. Este proceso puede sonar ligera-
mente confuso, pero es bastante fácil de
captar cuando comenzamos a añadir feeds
RSS.
Una vez que hayamos rellenado Bilbo-
Planet con usuarios, podemos añadir feeds
RSS. Vamos a Administration | Manage
feeds y pulsamos el botón Add a feed
(Figura 3). Aquí necesitaremos asignar el
feed a un miembro específico usando la
lista desplegable User id. También necesita-
remos unir el feed RSS a un sitio web (lo
cogemos de la lista desplegable Website id).
Como se ha mencionado antes, lo ideal
es unir cada feed RSS al sitio web con el
que está relacionado. Por ejemplo, el feed
RSS de Linux Magazine deberá enlazarse a
http:// www. linux-magazine. com y el feed
Slasdot estará conectado a http:// slashdot.
org/. Pero en realidad, no parece existir nin-
guna diferencia con los feeds RSS con los
que están asociados los sitios web, de
modo que podemos enlazar todos los feeds
RSS a un único sitio web asignado al usua-
rio.
El siguiente paso es buscar los artículos
más recientes de los feeds RSS añadidos
para asegurarnos de que todo funciona
adecuadamente. Para hacer esto manual-
mente apuntamos nuestro navegador a
http:// wxy. 0. 0. z/ Bilboplanet/ inc/
update_manual. php (donde wxy.0.0.z es la
dirección IP de nuestro servidor). Luego,
una vez que el script ha hecho su trabajo,
podemos comprobar la salida para ver los
errores. Si todo transcurrió sin problemas,
veremos nuevos artículos en la página prin-
cipal de BilboPlanet.
Por defecto, BilboPlanet publica automá-
ticamente todos los artículos buscados, aun-
que podemos administrarlos
manualmente a través de
Administration | Manage
posts. Aquí podemos cam-
biar el estado de cada artí-
culo de active a inactive o
pending, o borrar el artículo
totalmente. Las capacidades
de filtrado de BilboPlanet
nos permiten mostrar artícu-
los solamente para un deter-
minado usuario o limitar la
lista solamente a artículos
con un estado específico. Bil-
boPlanet ofrece aún otro modo de moderar
artículos usando la sección Moderation |
Moderation (Figura 4).
Para deshabilitar un artículo específico
pulsaremos el icono Refuse. Luego tenemos
la opción de componer y enviar un email al
usuario que presentó el artículo explicando
por qué ha sido deshabilitado. Habilitar
artículos es igual de fácil: pulsamos el
icono Accept que hay junto al artículo que
deseamos y ya está.
Workspace: BilboPlanet • LINUX USER
69Número 78W W W . L I N U X - M A G A Z I N E . E S
Figura 2: Panel Dashboard de BilboPlanet.
Figura 1: BilboPlanet cuenta con un asistente de instalación
muy amigable.
Figura 3: Añadiendo un feed.
cripción para permitir a los visi-
tantes añadir sus propios feeds
a nuestro planeta. Si habilita-
mos la funcionalidad de subs-
cripción, también debemos edi-
tar el contenido predetermi-
nado de la página de subscrip-
ción, la cual explica las reglas y
requerimientos de nuestro pla-
neta.
Las opciones de la sección
Import/ Export nos permiten
exportar datos para su archi-
vado. La exportación de datos es tan fácil
como seleccionar las tablas de la base de
datos deseada y pulsar el botón Export.
Obtener los datos exportados a BilboPlanet
tampoco es particularmente difícil: selec-
cionamos el fichero de copia de seguridad
.json.gz y pulsamos el botón Import.
BiboPlanet también soporta varias
maneras de actualizar los feeds RSS, los
cuales podemos habilitar y configurar en
Feed fetching (Figura 5) . Probablemente la
opción más fácil sea permitir al sistema
actualizarlos cuando un visitante accede a
la página principal. Para activar esta fun-
ción marcamos el cuadro de comprobación
Enable update on loading of index page. La
principal desventaja de este método es que
podría ralentizar nuestro sitio. Afortunada-
mente, BilboPlanet nos permite configurar
un trabajo cron para buscar feeds RSS
automáticamente a intervalos regulares.
Finalmente, la sección System | Permis-
sions nos permite especificar roles y privi-
legios para cada usuario de BilboPlanet. La
funcionalidad de acceso de BilboPlanet es
bastante simplista, pero podemos elegir
distintos roles y habilitar ciertos privile-
gios, tales como la capacidad de moderar
artículos y administrar la instalación de
BilboPlanet.
Tal y como podría esperarse, usar Bilbo-
Planet no es particularmente difícil. La
página principal muestra todos los artículos
buscados con sus resúmenes cortos (Figura
6). Los visitantes pueden votar los artículos
y también subscribirse a un feed RSS de
BilboPlanet. La página principal ofrece ade-
más algunas opciones de filtrado, de modo
que los visitantes pueden ver los artículos
posteados en el día, semana o mes actual.
La página Top 10 muestra los artículos con
más votos, y la sección Archives lista todos
los artículos agrupados por mes.
En términos generales, BilboPlanet no
sustituirá una aplicación lectora de RSS,
pero puede resultar bastante útil cuando
necesitamos agregar y publicar contenido
de múltiples fuentes RSS. �
Además de actuar como un planeta para
los miembros de la comunidad, BilboPla-
net también se puede usar como solución
de lista de correos interna. En Administra-
tion | Newsletter, podemos componer un
mensaje y enviarlo a todos los usuarios
seleccionados registrados en BilboPlanet.
La sección Configuration nos permite
ajustar algunas configuraciones clave. En
Planet Author podemos editar nuestra
información, incluyendo dirección de
correo, sitio web, cuenta de mensajería ins-
tantánea y resumen de nuestra biografía.
La sección Planet configuration nos per-
mite configurar las configuraciones de
nuestra instalación BilboPlanet. Aquí pode-
mos editar el nombre y descripción del pla-
neta, elegir un tema diferente y especificar
un mensaje de información para que se
muestre en la página principal. También
podemos habilitar o deshabilitar la página
de contacto y la funcionalidad de votación
y moderación.
Si deseamos hacer un seguimiento de las
estadísticas del planeta, podemos habilitar
la opción Planet Analytics Engine y especi-
ficar el motor de estadísticas que queremos
usar. BilboPlanet soporta Google Analytics
y su popular alternativa de código abierto,
Piwik. Si elegimos el primero, tendremos
que proporcionar nuestro identificador
Google Analytics para unir nuestro planeta
a nuestra cuenta de Google Analytics. Tam-
bién podemos habilitar la opción de subs-
LINUX USER • Workspace: BilboPlanet
70 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Figura 4: BilboPlanet nos permite moderar artículos.
Figura 5: Configuración de las opciones de
búsqueda del feed.
Figura 6: BiboPlanet en todo su esplendor, con accesos fáciles para los posts más recientes,
los 10 posts Top y los posts filtrados.
[1] BilboPlanet: http:// www. BilboPlanet.
com
RECURSOS
Línea de Comandos: GPG (II) • LINUX USER
71Número 78W W W . L I N U X - M A G A Z I N E . E S
mentación libre de Pretty Good Privacy.
Utiliza dos claves para cifrar y descifrar
mensajes: nuestra clave pública, que distri-
buimos a la gente con la que queremos
intercambiar mensajes, y una clave pri-
vada o secreta, que usamos para descifrar
mensajes que recibimos. Las claves
pública y privada se denominan par de cla-
ves y se guardan en un llavero, junto con
las claves públicas que hemos recogido de
nuestros corresponsales. Usando las claves
podemos cifrar y descifrar ficheros de
texto. También podemos exportarlas a un
fichero de texto para compartirlas.
Y ahora, profundicemos un poco más.
Herramientas para laAdministración de ClavesTres herramientas nos ayudan a adminis-
trar claves: El comando gpg, ideado princi-
palmente para claves que se han exportado
El mes pasado destaqué las nocio-
nes elementales del envío de men-
sajes cifrados usando GNU Privacy
Guard (GPG) [1]. Este mes daré más deta-
lles acerca de cómo usar GPG – en particu-
lar, cómo administrarlo y personalizarlo,
cómo usar servidores de claves y el papel
de firmar claves y crear una red de con-
fianza.
Sin embargo, en primer lugar, ahí va un
rápido resumen: GPG [2] es una imple-
Continuamos nuestro mini-tuto -
rial sobre el uso de GNU Privacy
Guard para el cifrado y descifrado
de mensajes.
POR BRUCE BYFIELD
Cifrado de mensajes con GNU Privacy Guard – Parte II
Más GPGa ficheros y para la administración de alto
nivel de claves de nuestro llavero; la línea
de comandos de GPG para las claves de
nuestro llavero; y el fichero ~/ .gnupg/
gpg.conf, que establece el comportamiento
por defecto de GPG en su conjunto. Como
cabría esperar, estas herramientas se sola-
pan parcialmente en lo que se refiere a su
funcionalidad, aunque las diferencias entre
unas y otras nos permiten llevar a cabo
varias tareas.
El formato para el comando es gpg
OPCIONES FICHERO o CLAVE. Como des-
cribí en mi artículo del mes pasado, su pro-
pósito general es generar claves, exportar-
las e importarlas y cifrar y descifrar fiche-
ros de texto.
Además, el comando gpg incluye algu-
nas opciones para ver los contenidos de un
llavero. Aparte de las opciones básicas
--list-keys y --fingerprint, también podemos
especificar --list-public-keys y --list-secret-
keys. Este comando es además útil para
borrar claves – usando el formato --delete-
key-nombre o --delete-secret-key nombre.
Sin embargo, si tanto la clave pública
como la privada se encuentran en el lla-
vero, debemos eliminar la clave secreta pri-
mero o bien usar --delete-secret-
and-public-key nombre. También podemos
deshabilitar una clave con --gen-revoke
NOMBRE.
Para modificar una clave pública especí-
fica podemos hacerlo con el comando
gpg --edit-key NOMBRE (Listado 1).
Cuando lo introducimos se nos mostrará
un resumen de la clave asociada con este
nombre – incluyendo quién la ha firmado
y qué grado de confianza tiene. Luego se
muestra el prompt de GPG.
Desde este prompt podemos introducir
varias docenas de sub-comandos, ninguno
de los cuales va precedido de dos guiones.
LINUX USER • Línea de Comandos: GPG (II)
72 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Tampoco tienen efecto hasta que los intro-
ducimos, guardamos y salimos del prompt.
Si deseamos salir sin hacer cambios per-
manentes, escribimos quit y pulsamos n
cuando se nos pregunta si queremos guar-
darlos.
Los subcomandos disponibles en el
prompt varían ampliamente. Por ejemplo,
si introducimos list, se repite la informa-
ción mostrada al principio, y con fpr se
muestra la huella digital de la clave. Lo que
es más importante, podemos editar los
contenidos de la clave. Con expire podre-
mos cambiar su fecha de caducidad, mien-
tras que con passwd cambia la frase de
paso para la clave (Listado 2). También
podemos habilitarla o deshabilitarla, o
cambiar la clave por defecto con primary.
Otra opción especialmente útil es crear
una subclave. Una subclave posee la
mayoría de las características de la clave
que hemos creado con el comando
gpg --gen-key, pero tiene un ID de usuario
diferente y – opcionalmente – una direc-
ción email distinta. Una subclave también
puede ser útil cuando queremos una única
clave para diferentes destinatarios, tales
como una clave para enviar mensajes a
nuestra familia y otra para nuestros amigos
(Listado 3). En lugar de tener que pasar
por el largo proceso que supone generar
una clave diferente completamente, pode-
mos introducir adduid y dar el nombre,
dirección email y frase de paso. Con deluid
NOMBRE la haremos innecesaria, pues la
borra.
Si queremos cambiar el comportamiento
general de GPG podemos editar el fichero
~/ .gnupg/ gpg.conf. Este fichero de
configuración está extensamente comen-
tado, con cada opción explicada detallada-
mente. Podemos usar gpg.conf para cam-
biar la locale para mostrar y cifrar mensa-
jes, para cambiar la localización de los
ficheros o para especificar un fichero con
opciones adicionales (véase la página
man).
Aunque GPG supone que el primer par
de claves que introducimos es la predeter-
minada – es decir, la nuestra – podemos
usar la pantalla default-key para anularla.
También podemos descomentar default-
recipient-self para asegurarnos de que obte-
nemos una copia de cada mensaje que
enviamos. Aunque probablemente no utili-
cemos gpg.conf muy a menudo, debería-
mos considerar editarlo al menos una vez.
Con las configuraciones adecuadas,
gpg.conf puede ayudarnos a conseguir que
01 $ gpg --edit-key Bruce Byfield
02 gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
03 This is free software: you are free to change and redistribute it.
04 There is NO WARRANTY, to the extent permitted by law.
05
06 Clave secreta disponible.
07
08 pub 2048R/86C27624 creado: 2011-11-05 caduca: nunca uso: SC
09 confianza: absoluta validez: absoluta
10 sub 2048R/61503B0D creado: 2011-11-05 caduca: nunca uso: E
11 [ absoluta ] (1). Bruce Byfield (Esto es de prueba)
12
13 gpg>
Listado 1: Edición de Claves
01 gpg> passwd
02 La clave está protegida.
03
04 Necesita una frase contraseña para desbloquear la clave secreta
05 del usuario: “Bruce Byfield (Esto es de prueba) <[email protected]>”
06 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05
07
08 Introduzca la nueva frase contraseña para esta clave secreta.
09
10 Repita frase contraseña:
Listado 2: Comando passwd
01 gpg> adduid
02 Nombre y apellidos: Paul Brown
03 Dirección de correo electrónico: [email protected]
04 Comentario: Amiguete
05 Ha seleccionado este ID de usuario:
06 “Paul Brown (Amiguete) <[email protected]>”
07
08 ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V
09
10 Necesita una frase contraseña para desbloquear la clave secreta
11 del usuario: “Bruce Byfield (Esto es de prueba) <[email protected]>”
12 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05
13
14 pub 2048R/86C27624 creado: 2011-11-05 caduca: nunca uso: SC
15 confianza: absoluta validez: absoluta
16 sub 2048R/61503B0D creado: 2011-11-05 caduca: nunca uso: E
17 [ absoluta ] (1) Bruce Byfield (Esto es de prueba)
18 [desconocida] (2). Paul Brown (Amiguete) <[email protected]>
Listado 3: Subclaves
GPG se comporte exactamente como de -
seemos.
Uso de KeyserversUn servidor de claves es exactamente lo
que su nombre indica: un sitio web
público donde se intercambian claves.
Podemos pensar en él como un paso más
en lo que a complejidad se refiere de un
intercambio informal de claves públicas
entre amigos y asociados.
El proyecto GPG mantiene sus propios
servidores, pero la mayoría de los servido-
res de claves son para grupos específicos,
de modo que existe uno para MIT [3] y
otro para Ubuntu [4], por ejemplo. A pesar
de esta especialización, las claves pueden
difundirse ampliamente entre servidores
de claves, de manera que debemos estar
muy seguros de querer difundir las claves
públicas que estamos pensando subir.
Muchos servidores de claves tienen sus
propias interfaces gráficas, aunque GPG en
sí tiene todas las opciones necesarias.
Habitualmente viene con keys.gnupg.net
como servidor de claves por defecto, si
bien podemos añadir el campo key-server a
gpg.conf para cambiar la URL del nuevo
servidor predeterminado quitando el
http:// www.
Para localizar una clave en un servidor
de claves lo hacemos con la opción --
search-keys NOMBRE. Una vez que hemos
localizado la clave pública que buscamos,
usamos --recv-keys NOMBRE para descar-
garla a nuestro llavero o --send-keys NOM-
BRE para subirla al servidor.
Firmas y Webs deConfianzaSi intercambiamos mensajes cifrados con
poca gente, entonces presumiblemente
podemos confiar en que son quienes dicen
ser. Pero ¿qué ocurre si de repente necesita-
mos una correspondencia cifrada con un
amigo de un amigo o un completo desco-
nocido? ¿Cómo sabemos que nuestro
nuevo corresponsal es de confianza?
Nuestra decisión sobre si confiar en
alguien probablemente esté basada en ele-
mentos que van más allá de los límites de
cualquier aplicación de software. Sin
embargo, GPG incluye funcionalidades que
nos facilitan resolver estos problemas. Una
de dichas funcionalidades es la capacidad
de firmar claves públicas de otra gente.
Basándonos en quién ha firmado una
clave, podemos decidir que la persona a la
que pertenece es quien dice ser (Listado 4).
De manera similar, si nosotros firmamos
la clave de otro, estaremos ayudando a ter-
ceros a decidir si pueden confiar en la
clave. Estas son dos de las razones por las
que la firma de claves sea una tradición en
muchos encuentros Debian. En persona,
podemos asegurar más fácilmente la iden-
tidad de alguien. Evidentemente, la firma
de claves también nos da una razón para
presentarnos a desconocidos.
Podemos firmarlas de distintas maneras.
Cuando se trate de una clave exportada, el
comando es gpg -s FICHERO o gpg --sign
FICHERO. Si la clave que estamos firmando
se exportó a un fichero binario, usare-
mos --detach sign o -b para colocar nuestra
firma en un fichero de firmas adjunto.
Desde el prompt gpg, introducimos sign
para dejar una firma para la clave pública
que estamos editando.
Si confiamos plenamente en el titular de
la clave, también podemos usar nrsign
para crear una firma no revocable. De
manera similar, si la firma sólo es para
nuestros propósitos y no queremos la res-
ponsabilidad de declarar la fidelidad del
propietario de la clave, podemos usar
lsign. También podemos combinar los pre-
fijos para introducir un comando como
nrlsign.
Cuando deseamos ver si una clave
exportada ha sido firmada, el comando es
gpg - verify FICHERO (Listado 5). Para ver
una lista de firmas usamos la
opción --check-sigs. Desde el prompt, el
comando es check.
Para ayudarnos más a tomar decisiones
sobre los titulares de las claves, GPG usa el
concepto de confianza en el prompt de
GPG para especificar el nivel de confianza
que tenemos (Listado 6). Introduciendo el
subcomando trust podemos clasificar la
confianza de 1 (no sé o no quiero compro-
meterme) a 5 (confío en última instancia).
Esta información se almacena en la base
de datos de confianza que está instalada en
~/ .gnugp cuando comenzamos a usarla.
La definición exacta de cada nivel puede
ser subjetivo (por ejemplo, ¿cuál es la dife-
rencia entre confiar plenamente y confiar
en última instancia?), pero, aunque sea
imprecisa esta clasificación, aún nos ayuda
a indicar cuánto confías en una clave o en
su propietario (una distinción que no siem-
pre es clara en GPG).
La firma de claves y la confianza se utili-
zan por GPG para crear una “red de con-
fianza” – una lista de conexiones que
sugieren fiabilidad general. Los detalles de
una red de confianza dependen de cómo
Línea de Comandos: GPG (II) • LINUX USER
73Número 78W W W . L I N U X - M A G A Z I N E . E S
01 gpg> sign Linux Magazine
02
03 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC
04 confianza: desconocido validez: desconocido
05 Huella de clave primaria: B0EA 732B 6DF1 4767 9B5C 55FE FAC7 4165 28C7
7251
06
07 Linux Magazine (Linux New Media) <[email protected]>
08
09 ¿Está realmente seguro de querer firmar esta clave
10 con su clave: “Paul Brown (Amiguete) <[email protected]>”
(86C27624)?
11
12 ¿Firmar de verdad? (s/N) s
13
14 Necesita una frase contraseña para desbloquear la clave secreta
15 del usuario: “Paul Brown (Amiguete) <[email protected]>”
16 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05
Listado 4: Firma de Claves
01 $ gpg --verify LM.gpg.gpg
02 gpg: Firmado el vie 02 dic 2011 23:57:05 CET usando clave RSA ID 86C27624
03 gpg: Firma correcta de “Paul Brown (Amiguete) <[email protected]>”
04 gpg: alias “Bruce Byfield (Esto es de prueba) <bbyfield@nan-
day.com>”
Listado 5: Verificación de claves
entre éste y el del mes pasado ya tenemos
información suficiente para manejar situa-
ciones cotidianas. Si necesitamos más,
siempre podemos consultar la página man.
Nótese, sin embargo, que la documenta-
ción para el proyecto es generalmente más
completa, especialmente porque nos ofrece
más información de fondo que necesita-
mos para comprender GPG [5].
Incluso así, si nuestra meta es com-
prender GPG completamente, pasaremos
horas con sus herramientas. GPG es una
aplicación compleja incluso para lo que es
normal en la línea de comandos, y aún
tiene una clasificación baja en lo que a
usabilidad se refiere, incluso a pesar de
que sus limitaciones se empezaron a dis-
cutir por primera vez hace más de una
década [6].
Dada la complejidad de GPG y lo poco
amigable que es para el usuario, antes o
después probablemente nos preguntaremos
si aprender más merece la pena. Evidente-
mente, la respuesta depende de lo impor-
tante que sea para nosotros la capacidad
para enviar mensajes cifrados (y en algu-
nos casos, si GPG es legal en nuestro país).
Sólo nosotros tenemos la respuesta.
Pero, para algunos, merece la pena indicar
que GPG no es simplemente una utilidad,
sino parte de un contexto social geeky. El
intercambio de claves públicas, sin decir
nada de la firma de claves, puede ser un
momento importante de aceptación en una
comunidad.
De hecho, el uso de GPG se ha llegado a
formalizar en numerosos sitios a través del
software libre. En el proyecto Debian, por
ejemplo, la propuesta de una clave pública
y de quién la ha firmado son pasos impor-
tantes en la aplicación para llegar a ser
nuevo mantenedor: como parte del pro-
ceso de presentación de candidaturas, los
aspirantes a nuevos mantenedores deben
presentar una clave firmada por dos man-
tenedores ya existentes [7].
Este proceso constituye un medio de
identificación práctico. Pero en Debian, la
firma de claves se ha convertido en un
importante rito social. Tanto es así, que
GPG probablemente aún sería importante
incluso si no existiera la necesidad de
identificar a la gente formalmente. En pro-
yectos como Debian, GPG ha ido mucho
más lejos, siendo una útil aplicación y lle-
gando a formar parte de la cultura de sus
usuarios. Bajo este contexto, si no enten-
demos lo básico de GPG, el riesgo del
ostracismo se convierte en una posibilidad
muy real. �
esté compilado GPG, aunque general-
mente tiene una profundidad limitada. Es
decir, si GPG se configuró para permitir
una profundidad de tres, alguien separado
de nosotros por cuatro conexiones no
podría validar una clave.
Una confianza parcial cuenta menos que
una confianza total. Típicamente, se necesi-
tan dos o tres personas que marquen una
clave como parcial para igualar una persona
en la que se confía totalmente. Podemos ver
cómo se lleva la cuenta de la confianza intro-
duciendo gpg --check-trustdb. La respuesta
muestra qué índices de confianza parciales
igualan a un índice de confianza completa,
el alcance, el número de claves firmadas y
los niveles de confianza en uso (Listado 7).
El Contexto SocialDos artículos no son suficientes para expli-
car GPG completamente. Sin embargo,
LINUX USER • Línea de Comandos: GPG (II)
74 Número 78 W W W . L I N U X - M A G A Z I N E . E S
[1] “Línea de Comandos: GPG” por
Bruce Byfield, Linux Magazine – Edi-ción en Castellano número 77.
[2] GnuPG: http:// www. gnupg. org
[3] Servidor de claves MIT: http:// pgp. mit. edu/
[4] Servidor de claves de Ubuntu:
http:// keyserver. ubuntu. com:11371/
[5] Documentación GnuPG: http:// www. gnupg. org/ documentation/
[6] “Usability of Security: A Case Study”
por Alma Whitten and J. D. Tygar, Car-
negie Mellon University, Diciembre
1988: http:// reports-archive. adm. cs. cmu. edu/ anon/ 1998/ abstracts/ 98-155. html
[7] Rincón de Desarrolladores Debian:
http:// www. debian. org/ devel/ join/ nm-step2
RECURSOS
01 gpg> trust
02 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC
03 confianza: desconocido validez: desconocido
04 sub 1024g/B55ACCE2 creado: 2004-12-23 caduca: nunca uso: E
05 [desconocida] (1). Linux Magazine (Linux New Media) <subs@linux-
magazine.com.es>
06
07 Por favor, decida su nivel de confianza en que este usuario
08 verifique correctamente las claves de otros usuarios (mirando
09 pasaportes, comprobando huellas dactilares en diferentes fuentes...)
10
11
12 1 = No lo sé o prefiero no decirlo
13 2 = NO tengo confianza
14 3 = Confío un poco
15 4 = Confío totalmente
16 5 = Confío absolutamente
17 m = Volver al menú principal
18
19 ¿Su decisión? 4
20
21 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC
22 confianza: total validez: desconocido
23 sub 1024g/B55ACCE2 creado: 2004-12-23 caduca: nunca uso: E
24 [desconocida] (1). Linux Magazine (Linux New Media) <subs@linux-
magazine.com.es>
25 Por favor, advierta que la validez de clave mostrada no es necesariamente
26 correcta a menos de que reinicie el programa.
Listado 6: Niveles de Confianza
01 $ gpg --check-trustdb
02 gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,
03 modelo de confianza PGP
04 gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u
Listado 7: Comprobación Base Datos de Confianza
Konsultorio • COMUNIDAD
75Número 78W W W . L I N U X - M A G A Z I N E . E S
4. ¿Errores de lectura del disco de instala-ción? Aunque me dijo que ha probadovarias veces con distros diferentes, sudispositivo de CD-ROM podría estardañado, de manera que no puede leerlos datos correctamente después deestar funcionando durante un rato. Aveces incluso se puede oír cómo lacabeza lectora se mueve de un lado aotro para intentar localizar un sector. Enese caso, puede intentar repetir la insta-lación desde un lector de CD (o DVD)por USB. Si la máquina no permite elarranque desde USB, puede probar acopiar de nuevo el medio de instalación,poner ambas copias en cada medio ysacar la primera del dispositivo internoen cuanto se carguen el kernel y la ram-disk inicial. El pequeño sistema de laramdisk debería ser capaz de encontrarel dispositivo USB externo y continuar lainstalación desde él.
5. ¿No se puede montar el sistema dearchivos raíz? Si la instalación finalizacorrectamente pero el sistema fallainmediatamente después del primerarranque, lo más frecuente es que sedeba a un mensaje que dice “cannotmount root file system”. Suele ocurrircuando el instalador no es capaz de aña-dir todos los módulos para activar elcontrolador del disco duro. Es un fallodel instalador que tiene difícil solución.Quizá tenga que compilar su propio ker-nel para que contenga el módulo nece-sario y añadirlo al sistema instaladoarrancando en modo rescate desde elCD de instalación, para luego iniciar unaterminal chroot en el sistema previa-mente instalado.
6. ¿Error en un driver de hardware? Unavez más, si la instalación finalizó correc-tamente y el sistema falla incluso antesde intentar acceder al sistema de archi-
repentino o un simple número por panta-lla. ;-)
Pido disculpas si las típicas sospechassuenan algo primitivas, pero me aventu-raré …1. ¿Falta de memoria? Si el proceso de ins-
talación necesita más memoria física dela que la máquina dispone, especial-mente si no se ha creado aún ningunapartición swap, el kernel va matandoprogramas de manera más o menos ale-atoria (probablemente el instalador) ymuestra un mensaje del tipo “no moreprocesses in this runlevel”.
2. ¿RAM defectuosa? Suele provocar reini-cios repentinos de la máquina o corrom-per los datos que se leen o escriben encualquier medio. En el mejor de loscasos, el kernel muestra diferentes men-sajes de error indicando que la longitudde los datos en la memoria no es laesperada. Lo más probable es que NOreciba nunca un mensaje que diga “laRAM es defectuosa”, a menos que elchipset de la máquina incorpore algúnmecanismo de detección y correcciónde errores de memoria.
3. ¿Problemas con el disco o el controla-dor? Si falla la lectura de algún archivoen un punto crítico del proceso de insta-lación, como por ejemplo para la activa-ción de módulos del kernel modules(drivers) para algún hardware, o a lahora de desempaquetar la ramdisk delsistema base o alguna librería, lo másprobable es que el sistema se detenga yel kernel informe de que no se puedemontar el (nuevo) sistema de archivos oque falló init. Puede deberse a un discodefectuoso, a un controlador de discocon el DMA en mal estado, o simple-mente a un cable defectuoso o un con-tacto en el conector en el caso de unamáquina más antigua.
ELCONSULTORIODE KLAUS
Klaus Knopper es el creador de
Knoppix y co-fundador de la
LinuxTag Expo. En la actuali-
dad trabaja como profesor,
programador y consultor. Si
tiene algún problema de
configuración, o simplemente
quiere conocer mejor cómo
funciona Linux, no dude en
escribir sus preguntas a:
El Kernel de Fedora FallaMe gusta el aspecto de Fedora y heintentado instalar varias versiones,
desde la Fed 10 a la Fed 14, pero siempre,después de instalar, me muestra un men-saje de error del kernel unos segundosantes de iniciar el sistema operativo. Unavez, con una versión de Fedora, me mos-tró el mensaje durante la propia instala-ción, y el proceso se detuvo. Curioso perofrustrante a la vez, ¿sabe usted por qué mefalla tanto Fedora? John Bennetto
Hubiera estado bien disponer delmensaje de error que menciona. El
motivo es porque es más sencillo encon-trar el problema con él que con un reinicio
COMUNIDAD · Konsultorio
76 Número 78 W W W . L I N U X - M A G A Z I N E . E S
vos raíz, o DESPUÉS de montar el sis-tema de archivos raíz (en ese caso apa-rece algo como “init verstion xxx star-ting …”), entonces el problema es queun driver de hardware que NO era nece-sario durante la instalación pero quearranca en el sistema instalado, comopor ejemplo un driver gráfico, podríahaber fallado. Dependiendo de la causadel fallo (aquí resulta de gran ayuda elmensaje de error concreto), se puedeintentar deshabilitar el driver defec-tuoso editando las opciones de arranquedesde el cargador de arranque (en elcaso de GRUB, se hace presionando latecla e de “edit” y añadiendo las opcio-nes a la línea de KERNEL). Las más típi-cas son
linux acpi=off noapic U
nolapic nomodeset nodma
pero una vez localizado el driver queprovoca el problema, se debe quitar elresto, porque de lo contrario se puedeacabar con un disco duro insufrible-mente lento (nodma) o con componen-tes de hardware que no funcionan (porcausa de acpi=off, que se puede reem-
plazar por la menos invasivaacpi=noirq).
7. De verdad que me hubiera gustadosaber lo que decía ese mensaje de errordel kernel … ;-)
Gráficos BorrososLos gráficos se ven borrososcuando trato de ejecutar el Live CD
que venía con la Especial Linux Shell 1
[Knoppix 6.7]. No estoy muy familiarizadocon Linux y pensé que me podrías ayudaro darme alguna indicación.
Gracias por tu tiempo. Jared.Lo cierto es que algunas tarjetasgráficas están mejor soportadas
que otras. Debido a la falta de un estándarcomún, los fabricantes suelen añadir “fun-ciones especiales” que mejoran las esta-dísticas de sus tarjetas, pero a cambio, lashacen incompatibles con versiones ante-riores de las mismas. El subsistema gráficode Linux está compuesto por una parte decomponentes del kernel para los driversde hardware y una parte en espacio deusuario para los drivers de software (Tabla1) que soporta la mayoría (pero pocasveces todas) las funciones de un chipsetdado.
Depende totalmente del modelo de tar-jeta gráfica y de cómo de bien funcionecon los drivers, con aceleración y sin ella(framebuffer, VESA). Una estimación apro-ximada es: si la tarjeta es mucho másnueva que el kernel y que los drivers deXorg en uso, probablemente no esté biensoportada aún y no funcionen bien algu-nas funcionalidades como el 3D, la resolu-ción de la pantalla no se maneje correcta-mente, o la pantalla parpadee al no esta-blecerse correctamente las frecuencias delmonitor.
Con el fin de no tener que tirar la toalla yesperar a una nueva versión de kernel o deXorg, se suelen utilizar algunos trucos quepermiten usar estas tarjetas, aunque seacon unos gráficos lentos o de baja calidad.
Una característica específica de Knoppixes que deshabilita la extensión “Compo-site”, la cual se encarga de manejar lastransparencias y que, aunque atractivavisualmente, consume muchos recursos ysólo es útil para efectos ajenos al trabajodiario productivo. Esta extensión se puededeshabilitar con los códigos
knoppix no3d
o
knoppix nocomposite
Si con ello no bastara, puede probar con elmodo VESA sin aceleración:
knoppix xmodule=vesa
Y si tampoco fuese suficiente, puede inten-tarlo con los modos VESA framebuffer deresolución fija,
fb800x600
o
fb1024x768
o
fb1280x1024
esta vez sin el knoppix delante.Cabe aclarar que en el modo VESA fra-
mebuffer, sólo están soportadas algunasresoluciones, entre las que no se encuentrael modo “widescreen”. Lo mejor de todo esque estos pequeños trucos funcionan concasi todas las tarjetas, incluso con aquellas
Tabla 1: Módulos del Kernel y Módulos de Xorg
01 (Reading database … 10%dpkg: unrecoverable fatal error, aborting:
failed in buffer_read(fd): files list for package `xinput’: Input/
output error
02
03 E: Sub-process /usr/ bin/ dpkg returned an error code (2)
04
05 dpkg: warning: files list file for package `xinput’ missing, assuming
package has no files currently installed
06
07 dpkg: warning: files list file for package `xbk-data’ missing,
assuming package has no files currently installed
08
09 […logs truncated, you can probably delete most of the above, too…]
Listado 1: Errores xinput y xkb-data
Tarjeta Módulo del kernel Módulo de Xorg
Intel i915 intel
ATI/ AMD radeon radeon or ati
NVidia nouveau (libre), nvidia (priva-
tivo)
Nouveau (libre) o nvidia
(priva tivo), nv (libre pero
actualmente sin desarrollo)
Drivers Accelerated acelera-
dos (varios)
cirrusfb, neofb, … fbdev (framebuffer sólo) o cir-
rus, neomagic, … (con acele -
ración)
Genérico Modo VESA
(interno en el kernel)
vesa
Konsultorio • COMUNIDAD
77Número 78W W W . L I N U X - M A G A Z I N E . E S
que no están soportadas en absoluto porlos módulos que disponen de aceleracióngráfica.
Problemas Arrancandodesde Pendrive USB
Hola Klaus: tengo una UbuntuLucid 10.04 LTS en un pendrive
USB. El kernel que usa es un linux-image-2.6.32-26-generic. La lista completa de ker-nels es linux-generic, linux-image-2.6.32-24-generic, linux-image-2.6.32-25-generic,linux-image-2.6.32-26-generic y linux-image-2.6.32-30-generic. He estado arran-cando el sistema desde USB en unos portá-tiles Dell D420 y Lenovo X201s.
Lo que ahora quiero hacer es actualizarmi sistema para que use la última versiónde kernel con el fin de aligerar/ aliviar elsistema, pero, por algún motivo, el sistemano funciona correctamente. Mis atajos deteclado no funcionan en absoluto (el escri-torio o las ventanas no pueden rotar). Heprobado a hacer
apt-get update
apt-get upgrade
apt-get dist-upgrade
y me he encontrado con un problema condos paquetes, xinput y xkb-data. Al tratarde reinstalarlos, recibo algunos mensajesde error (Listado 1), y también cuandointento eliminarlos. Al intentar actualizarel sistema me dice:
Squashfs error: Unable to U
read page, block,U
Unable to read fragment U
cache entry
La información sobre el espacio de discoutilizado se puede ver en los listados ane-xos. También he adjuntado logs de lossiguientes archivos:
$ ls -l /var/log
/var/log/syslog
/var/log/messages
/var/log/daemon.log
kernel_boot.txt
Agradecería enormemente tu ayuda. Gib-son
La parte más significativa de esoslogs es el extracto que se muestra
en el Listado 2.Significa que la parte comprimida de
sólo lectura (SquashFS) del sistema de
archivos Live estáincompleta. Puede serporque no se copióbien la primera vez,porque se haya rees-crito después acciden-talmente, o porque eldispositivo USB tengaproblemas de lectura(en ese caso DEBE-RÍAN aparecer erroresen el log del kernel enforma de “block readerrors”, pero no se veninguno).
Los errores de lecturadesde el sistema dearchivos original pueden derivar en erro-res de todo tipo. Para la instalación de nue-vos paquetes hay que leer antes variosarchivos de la base de datos de informa-ción de paquetes de Debian/ Ubuntu, demanera que se conozcan los metadatospara su posterior almacenamiento. Estepaso siempre falla en sus intentos poractualizar ciertas partes del servidor deXorg; no tiene que ver con los paquetesque está intentando instalar, sino que ocu-rrirá cada vez que el sistema intente leerdesde el sistema de archivos SquashFSroto.
La única solución que se me ocurre esreemplazar el archivo SquashFS defec-tuoso con el sistema parado, por ejemplodesde un sistema distinto, y verificar lasuma checksum del archivo antes deintentar reiniciarlo.
Seguridad de mi Servidor¡Hola Klaus! Estoy tratando de ins-talar y configurar un servidor. La
idea es que haga de servidor de archivos ypuede que de cliente de BitTorrent. Estabapensando en montar un Ubuntu Server yusar FTP para acceder a los archivos.
Sin embargo, mi principal preocupaciónes cómo mantenerlo seguro. En estemomento no estoy seguro de si hacer quesea accesible desde Internet o sólo desde
mi red local. ¿Qué pasos debería llevar acabo para que sea lo más seguro posibleen ambos casos, tanto en el sistema en sícomo en la pasarela de acceso a la red?
En lo que respecta al cliente de BitTo-rrent, ¿hay alguna forma de restringir lostorrents que se ejecutan por tracker? Noquiero acabar compartiendo nada sospe-choso. Y otra pregunta, ¿crees que esmejor usar alguna otra distro más especí-fica para esto? ¡Gracias! Ashwin
Excepto para el acceso público desólo lectura, no es recomendable
usar FTP para servir archivos, principal-mente porque las contraseñas viajan sincifrar. Al menos para las subidas y todoslos accesos personales, yo recomendaríaalgún servicio cifrado como SSH, SSHFS oHTTPS con autenticación.
Para estar seguro de que no hay ningúnservicio accesible desde el exterior, apartede los que elija, puede usar las reglas deiptables que se muestran en el Listado 3,suponiendo que sea eth0 la interfaz de redexterna.
La primera regla crea un nuevo destinoDESDEINTERNET, a la que se pasa cadavez que un paquete llega a través de eth0
(segunda regla). La tercera regla permite lavuelta de todo el tráfico generado en lasconexiones que ha iniciado el propio servi-dor, de manera que las descargas hechas
01 May 16 22:54:37 ubuntu kernel: [ 1515.600386]
SQUASHFS error: squashfs_read_data failed to read
block 0x190bfa
02 May 16 22:54:37 ubuntu kernel: [ 1515.600389]
SQUASHFS error: Unable to read fragment cache
entry [190bfa]
03 May 16 22:57:41 ubuntu kernel: [ 1700.384133]
SQUASHFS error: zlib_inflate error, data probably
corrupt
04 May 16 22:57:41 ubuntu kernel: [ 1700.384139]
SQUASHFS error: squashfs_read_data failed to read
block 0x190bfa
05 ...
Listado 2: Extracto de la Salida desyslog.txt
01 iptables -N DESDEINTERNET
02 iptables -I INPUT -i eth0 -j DESDEINTERNET
03 iptables -A DESDEINTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
04 iptables -A DESDEINTERNET -p tcp -m multiport --dports
21,22,443,6881:6889 -j ACCEPT
05 iptables -A DESDEINTERNET -p icmp --icmp-type echo-request -j ACCEPT
06 iptables -A DESDEINTERNET -j REJECT
Listado 3: Reglas de iptables
algo en la máquina en comparación conotras distros Live:1. sudo funciona, así sin más2. Knoppix detecta todos los discos y
añade las entradas a /etc/fstab.Supongo que son cosas muy simples,
¡pero son tan útiles! Gracias una vez más ymis mejores deseos para el futuro. Salu-dos, Jeremy
PS: ¿Qué tal una versión DVD de 64 bits?Gracias por sus amables comenta-rios. Knoppix no es más que una
Debian preconfigurada. Desde que decidíque no era buena idea distribuirla con con-traseñas preestablecidas, no hay ningunacontraseña predefinida. Las únicas formasde hacerse root es con una terminalabierta en la que ya se sea root (consola detexto), o usando sudo sin contraseña.
El script que se encarga de poblar/etc/fstab se escribió cuando aún no exis-tían HAL ni udev. Ahora el script(rebuildfstab) lo ejecuta directamenteudev durante la detección de particionespara que los sistemas de archivos se pue-dan montar fácilmente usando las entra-das del archivo /etc/fstab, sin tener quellamar a HAL o udisks, ni tener que ejecu-tar el gestor de archivos con permisos deroot.
En cuanto al DVD en versión de 64 bits:por desgracia, no puedo mantener las ver-siones de 32 y 64 bits en paralelo, peroahora que junto al kernel de 32 bits seincluye en Knoppix también el de 64 bits,quizá sea más fácil crear derivados con unentorno de 64 bits puro usando Debian-amd64 como base y copiando los scriptsde arranque y las configuraciones deKnoppix.
Disco DuroQuerido Klaus: Gracias por deleitar-nos con tu talento. Aparte de 12.2
Slackware, Fedora 14 y Ubuntu 11.04 (ade-más de Kubuntu 10.10 durante algúntiempo) como sistemas operativos, mislíos también han tenido que ver con el car-gador de arranque GRUB 2. Al reiniciarcon el botón hardware de la máquina,tengo que esperar hasta que expire algúncontador, esperar a que la BIOS termine dereconocer el disco duro o reiniciar por soft-ware inmediatamente conCtrl+Alt+Supr. Muchas veces el LED deldisco duro continúa encendido y puedoesperar sentado. Conseguí arreglarlo porun tiempo con update-grub, pero final-mente pude instalar el antiguo GRUB (gra-
cias a la ayuda de Linux Magazine); des-pués de un tiempo, volvió a ocurrir.
La última vez, apagué el sistema rápida-mente y fsck reparó el sistema de archivosext3 dañado. ¿Qué está ocurriendo? Unavez se me apagó el sistema automática-mente sin previo aviso ¡y se reinició al pul-sar una tecla al azar! ¡La prueba de algúnbot zombi! Además, otra vez, ejecutandotop, me pareció ver un “rtkit-daemon”.¿Podrías explicarme todo esto?
La esencia de GNU/ Linux es la libertad.¿Cómo puedo evitar las trampas que con-vierten a mi sistema en un esclavo? Ya hehecho dd /dev/zero sobre mis discos durosde 200GB, pero los retardos en el arranquevuelven una y otra vez. Suelo usar Firefox,que ya es lo bastante popular como paraconvertirse en una pieza codiciada. ¿Ayu-daría eliminar mi partición DOSe? ¿Debe-ría hacer dd /dev/zero sobre todos mispendrives USB? Ya empiezo a desconfiarincluso de dd.
De un usuario de Linux abrumado, Wil-fred
En lo que respecta al “rtkit-dae-mon”, he de prevenirte de que NO
significa “rootkit daemon”, como parecescreer; “rt” significa “real-time (schedu-ler)”. Es una herramienta de ayuda paradotar al kernel de una extensión paratiempo real [1].
Francamente, desconozco la razón porla cual la máquina se reinicia repentina-mente o se modifica el cargador de arran-que por arte de magia, pero tiene pintamás bien de un problema de hardware, uncable defectuoso o problemas de RAM. Enel caso de problemas de software/ kernel,suelen aparecer mensajes de error del ker-nel indicando que se produjo un fallo odando algún “panic”. El sobrecalenta-miento de la CPU o de otras partes delchipset por culpa de algún ventiladorestropeado también podrían ser la causadel problema. Otra posibilidad es que lafuente de alimentación esté fallando y pro-voque oscilaciones en el nivel de potencia,lo que podría dar lugar a cuelgues o reini-cios de los discos duros y de otros periféri-cos. Son errores difíciles de encontrar si noes experimentando con las distintas partesdel hardware para ver cuándo se produceel problema. �
desde el servidor, las consultas DNS, etcé-tera, funcionen. La cuarta regla abre lospuertos 21 (FTP), 22 (SSH), 443 (HTTPS) y6881 a 6889 (torrent) para que los clientesde Internet puedan acceder a los serviciosofrecidos por el servidor. Si su intención esusar el cliente de torrent en modo sólo-cliente, probablemente quiera eliminar elrango 6881:6889 para que los intentos dedescarga provenientes de los clientesesclavos sean bloqueados mientras usteddescarga. La quinta regla le permite com-probar desde el exterior si el servidor estáactivo o no. Y la última regla impide cual-quier otra conexión entrante con un men-saje ICMP connection refused. Si le preocu-pan los ataques de tipo flood, puede usarDROP en lugar de REJECT, que hace que elservidor parezca “muerto” y no conteste aningún intento de conexión excepto aaquellos dirigidos a los puertos permiti-dos.
Si tanto el servidor como el proveedorsoportan IPv6, deberá aplicar estas mis-mas reglas con ip6tables o, alternativa-mente, deshabilitar IPv6 para que nadie sesalte las reglas aplicadas a IPv4 utilizandoIPv6 para llegar hasta el servidor.
Si quiere ofrecer HTTP sin cifrar paraproporcionar acceso anónimo a los archi-vos, deberá abrir también el puerto 80.
Además de todo esto, puede que quierapermitir conexiones FTP pasivas, para locual tendrá que cargar el módulo de kernelip_conntrack_ftp con objeto de que lasconexiones FTP entrantes puedan accedera puertos aleatorios para establecer lacomunicación de datos. Esto por supuestoes un riesgo de seguridad potencial, por loque mi recomendación es la de no usarFTP en absoluto y que todas las descargasse hagan a través de HTTP(S):.
Knoppix es una PasadaHola Klaus, sólo quiero agradecertetodo el trabajo hecho con Knoppix
y hacerte saber lo mucho que lo aprecio.Un par de cosas. Hace unos años, me lopasé genial y aprendí un montón sobreLinux creando mi propia distro Livebasada en Knoppix (llamada JNX). Dehecho, ¡pasé más tiempo y me divertí máspersonalizándola que usándola! Knoppixcambió mi vida.
Hoy me he cargado mi máquina Linuxprincipal y Knoppix 6.5 me ha salvado lavida (una vez más). Hay un par de cosasque quizá te parezcan triviales, pero quefacilitan mucho todo a la hora de arreglar
COMUNIDAD · Konsultorio
78 Número 78 W W W . L I N U X - M A G A Z I N E . E S
[1] rtkit: http:// packages. ubuntu. com/
lucid/ rtkit
RECURSOS
COMUNIDAD · Blogs: Para Mamá
80 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Mi madre, la célebre mitad del
equipo “Mamá y Papá (TM)”,
murió el 7 de marzo del 2011.
He escrito y hablado muchas veces
sobre mi madre y mi padre y de su tradi-
cional incapacidad para hacer frente a la
tecnología orientada a los dispositivos,
lo cual es tremendamente irónico al ser
su hijo más joven adicto de toda la vida
a cualquier cosa técnica.
Hace cuarenta años, si trabajabas con
un ordenador, lo normal es que tuvieras
un título universitario en ciencias de la
computación (o en lo que se convirtió
ciencias de la computación), tal vez un
máster o incluso un doctorado. Si no
podías entender lo que estaba mal con
tu programa o el sistema, podías pregun-
tar a la persona sentada en el cubículo
de al lado, que tenía un nivel similar al
tuyo. Con el tiempo compartido comen-
zaron a aumentar el número de mainfra-
mes, pero aún así, sólo personas forma-
das instalaban el software, configuraban
la red y realizaban las copias de seguri-
dad. En esencia, se hacían cargo de “la
máquina” por ti. El equipo de soporte
con el que se trabajaba en esos días tam-
bién era atendido por titulados en cien-
cias de la computación.
Luego, hacia 1977, tanto Bill Gates
como Steve Jobs pusieron mainframes
en las mesas de todos, y se esperaba que
cada uno fuera capaz de cuidarlo por si
mismo. Es cierto que a los mainframes
se les llamaba “ordenadores personales”
y que los sistemas operativos eran sim-
ples en comparación con los de las
monstruosas unidades centrales de la
época, pero todavía se necesitaba insta-
lar el software, hacer copias de seguri-
dad y configurar las redes. Pasó el
tiempo y la tecnología se hizo más com-
pleja y el equipo de soporte que necesi-
taba el usuario final “Mamá y Papá” se
trasladó más y más lejos, hasta que
finalmente la persona a la que llamabas
se encontraba en un país extranjero.
Ya no podías ir tan fácilmente con el
problema a alguien y sentarte a averi-
guar qué estaba mal. En vez de eso, a
menudo primero se te preguntaba si
estabas sosteniendo el ratón correcta-
mente o si acababas de reiniciar el sis-
tema. La “ayuda” se volvía más centrali-
zada en nombre de la “eficiencia” (y
rentabilidad) para las personas y las
empresas que la prestan.
La mayoría de las grandes empresas
tenían sus propios equipos de soporte,
pero las pequeñas y los particulares no.
En la mayoría de los países, las peque-
ñas y medianas empresas constituyen
una gran parte del producto interior
bruto (incluso más con el agregado agrí-
cola), y no suelen tener la ayuda profe-
sional que necesitan. Conozco a un
ingeniero eléctrico que dirige su propia
empresa y que normalmente pasa al
menos tres horas por semana cuidando
de tres de sus ordenadores. Por
supuesto, el software que utiliza es
sofisticado, pero él preferiría pasar esas
tres horas semanales dirigiendo su nego-
cio. A partir de este ejemplo, suponga-
mos que cada usuario final de un orde-
nador de sobremesa gasta 15 minutos al
día, a un coste de cinco dólares,
haciendo lo que podría considerarse
“tareas no esenciales” para el negocio.
Esto significa que los (aproximada-
mente) 125 mil millones de ordenadores
de sobremesa malgastan 6.250 millones
de dólares al día. Si se estima que 300
“trabajadores del conocimiento” pierden
15 minutos al día, es como si nueve per-
sonas nunca se presentaran a trabajar.
Muchos creen que la computación en
nube soluciona este problema. La gente
que utiliza software “en la nube” tendrá
a otras personas que le arreglen las apli-
caciones, elimine los virus, haga las
copias y demás, pero incluso si el sis-
tema funcionase perfectamente, el soft-
ware que están utilizando esas personas
no está hecho a la medida de sus necesi-
dades. Tendrán que cambiar la forma en
la que trabajan para amoldarse al soft-
ware, y esto creará ineficiencia en sus
negocios.
Vivimos en un mundo cada vez más
diverso. Dar soporte a los 5 (o incluso
50) idiomas principales del mundo no es
suficiente y ¿cómo van a poder influir
las pequeñas comunidades de varios
cientos de personas en empresas que tie-
nen que satisfacer las necesidades de
miles de millones? He oído muchas
veces a representantes de las grandes
compañias declarar que implementar
cierta característica o realizar un cambio
en su software no era “lo mejor para los
intereses de su negocio”, haciendo caso
omiso de lo que es mejor para los intere-
ses de sus clientes. Como el software era
de código cerrado, los clientes no
podían tomar sus propias decisiones
empresariales sobre la manera de usar el
software existente o cambiarlo para
satisfacerlas mejor.
Necesitamos parar la producción
masiva del software como producto,
cambiarlo por la venta de un servicio y
volver a introducir el concepto de la
venta de desarrollo de software, en el
que se adapta el software como un servi-
cio, para satisfacer las necesidades del
usuario final. De esta manera, el control
del software podrá por fin volver a
manos del cliente. �
PARA MAMÁUn cambio de vida hace que maddog revisite el soporte para sus usua-
rios finales tipo “Mamá y Papá” y pondere un modelo de negocio dife-
rente para los desarrolladores de software.
POR JON “MADDOG” HALL
PRÓXIMO NÚMEROPRÓXIMO NÚMERO©
Ph
oo
san
i-foto
lia.c
om
HERRAMIENTAS
WEB
A LA VENTA: FEBRERO 2012
82 Número 78 W W W . L I N U X - M A G A Z I N E . E S
Ya puedes seguir el día a díade lo que sucede en elmundo de GNU/ Linuxconectando con las noticiasdiarias en nuestro Facebook:
http:// www. facebook. com/ linuxmagazine.
y Twitter:
http:// twitter. com/ linux_spain
También puedes recibir noti-cias de lo que te espera enlos si guientes números deLinux Maga zine, así comoofertas, regalos y novedadessubscribiéndote a nuestroboletín en http:// www. linux-magazine. es/ Readers/ Newsletter.
Las más recientes tecnologías webvienen cargadas con nuevas her-ramientas, nuevas técnicas, nuevosdispositivos y nuevos modelos denegocios... Parece un buen momentopara repasar el mundo cambiante dela administración y desarrollo web. Elmes que viene veremos algunas de lasherramientas más importantes uti-lizadas en la actividad para la creacióny administración de la última ge - neración de sitios web
Top Related