Anotaciones para un CPD

Montar un centro de procesamiento de datos o una sala de máquinas es de esas cosas sobre las que todo el mundo sabe pero que pocos quieren echarse al hombro. Es fácil acabar aglutinando a un montón de empresas de distinto oficio y beneficio, cada una encargándose de una cosa, pero sin una supervisión común ni fina. Lo cual suena a tiquismiquis, pero asegurarse de que todo quede como debe ahorrará muchos quebraderos de cabeza y misterios a futuro.

El que escribe esto es como todos, con muchas ideas, pero que tampoco sabe diseñar la construcción de un Centro de Procesamiento de Datos de principio a fin. Sin embargo puedo aportar algunos detalles.

Ubicación. Partimos de la base de que vamos a tener una sala llena de máquinas con un considerable valor económico, pero que a su vez van a albergar una información y prestar un servicio con mucho más valor, que es el que realmente va a dar dinero. De manera que es necesario elegir un lugar con:

  • Acceso restringido. Que no sea el c**o de la Bernarda.
  • Unas variables físicas estables. No como el desierto con sus cambios de temperatura.
  • Una temperatura del aire que absorben las máquinas comprendida entre 24 ºC y 26 ºC o incluso mayor. Es una moda de los últimos años a favor de un menor derroche energético, que depende también de las máquinas y sus especificaciones. En CPD de lugares públicos, esos cuya factura de la luz pagamos entre todos, siguen con configuraciones de 19 ºC y tan pichis.
  • Una humedad relativa en torno a un 50 %. Este valor también depende de las especificaciones de las máquinas, pero si es baja pueden soltarnos chispotazos porque se carguen de electricidad estática, y si es alta los componentes empezarán a enrobinarse y tendrán una vida útil menor, cuando no empiecen antes a dar problemas misteriosos que nos hagan perder muchas horas intentado resolverlos.
  • Un entorno con bajo riesgo de catástrofes. Poco importa ponerle la puerta de un búnker, si luego está en un sótano, vienen lluvias torrenciales, el alcantarillado se inunda, los sumideros empiezan a expulsar agua en lugar de succionarla, las bombas de achique no dan abasto o se quedan sin suministro de electricidad,.. Como levantino sé bien que eso puede pasar.

[…] (continuar leyendo)

Listar sólo ficheros ordenados por fecha de modificación

Lo intuitivo sería pensar en usar ls -lt, pero si se quieren evitar directorios, ficheros con un determinado nombre, seguir enlaces simbólicos, que los caracteres de nueva línea nos la puedan jugar,.. find es más fiable que andar filtrando con grep los resultados. Aunque hay que pensar un poco para combinarlo con sort para ordenar los resultados por el primer campo (en tiempo POSIX con parte decimal) y sed para eliminar después el tiempo, que ya no nos sirve.

Algo así:

find -P . -maxdepth 1 -type f -printf '%C@ %p\0' | sort -znrk1 | sed -e 's/^[^ ]* //' -e 's/\x0[^ ]* /\x0/g' | while IFS= read -r -d '' i

OjO a ISF= y -d ”, que permiten dividir las ocurrencias y no zamparse los espacios en blanco que pudiera tener el nombre de un fichero al final.

Actualizar DNS de cPanel desde Bash

Hoy Dyn ha dejado de prestar de manera gratuita su servicio de DNS dinámico. Avisaron con un mes de antelación y yo que ya llevaba tiempo dándole vueltas a cómo poder utilizar un dominio y un hosting propio para eso, me puse a investigar y tuve suerte.

En los foros de cPanel encontré un mensaje con un script en Bash para actualizar desde consola nuestros registros DNS —que por motivos de licencias no puedo reproducir aquí—. Utiliza la api de cPanel para gestionar los dominios y es ideal por ejemplo para crearnos un subdominio y llamar al script periódicamente desde el cron de una máquina con Linux. Incluso una Raspberry Pi con una distribución a medida, al no necesitar de librerías extrañas. Está bien pensado, comprobando en cada ejecución si la IP actual es la misma que la anterior para ahorrar actualizaciones innecesarias y hasta puede mandar un correo electrónico en caso de errores.

La configuración para un ejemplo podría ser:

CONTACT_EMAIL="perico@delospalotes.com"
DOMAIN="delospalotes.com"
SUBDOMAIN="micasa"
CPANEL_SERVER="cpanel.delospalotes.com"
CPANEL_USER="usuario de cpanel"
CPANEL_PASS="contraseña de cpanel"

Y fuera dependencias de servicios de terceros.

Fedora 20, Eclipse y Google Talk

Eclipse y el plugin de Google Talk no se llevan bien los toques en Fedora 20. Cada vez que Eclipse necesita renderizar contenido como si de un navegador web se tratase, intenta utilizar WebKit y se cierra inesperadamente. Por ejemplo al abrir su Marketplace.

La solución oficial no sé muy bien si corresponde a Eclipse o a Google Talk, pero de momento las dos formas más famosas de arreglarlo son:

  • Eliminar Google Talk:
# yum erase google-talkplugin
  • O bien editar el fichero de configuración de Eclipse (eclipse.ini) y esta opción para que utilice Mozilla:
-Dorg.eclipse.swt.browser.DefaultType=mozilla

Fuente → Google Talk plugin presence breaks Eclipse in Fedora 20 @ Chris Daniel.

Combinar múltiples imágenes con ImageMagick

En ocasiones puede hacer falta la típica composición de imágenes, una al lado de otra, de m x n celdas. Para eso el comando montage de ImageMagick viene de perlas:

montage -mode concatenate -tile mxn <archivos de entrada> <nombre de salida>

Donde m es el número de columnas y n de filas.

Fuente → Combine multiple images using ImageMagick [superuser.com].

Solución al «Argument list too long» en Linux

Cuando se quiere aplicar una operación masiva como copiar, mover y borrar archivos se suelen usar combinaciones de asteriscos y comodines para no ir de uno en uno. Luego Bash se encarga de expandir los nombres. El problema es que entonces se forma un chorizo de comando con demasiados argumentos. La solución pasa por ejecutar el comando en cuestión archivo a archivo, como por ejemplo con find y xargs para borrar:

find . -name "*" -print0 | xargs -0 rm

Pero ojo, que en este caso find es recursivo, así que habría que acotarlo con -maxdepth 1. Además, así también se pueden ejecutar comandos sobre archivos según fechas y otras características.

Vía → Argument list too long error for rm, cp, mv commands @ Stack Overflow.

Obtener la IP de cada interfaz en Perl

Obtener la IP de la máquina no tiene mucho misterio. Pero cuando se trata de servidores con varias interfaces de red, algunas incluso virtuales, la cosa cambia. Y se trata de algo que puede tener muchas aplicaciones, como por ejemplo un script que distinga entre si las copias que se van a realizar son realmente desde/hacia una máquina remota o en local y agilizar el proceso.

La manera más resumida en el caso de Linux es filtrar la salida de ifconfig:

my @IP = (`ifconfig -a` =~ /inet addr:(\S+)/g);

Pero es cierto que algún día los desarrolladores de la distribución de turno pudieran decidir traducir las palabras inet addr por direccion inet o a saber, por lo que ya estarían fastidiando la expresión regular y por tanto el invento. Así que por eso para soluciones más elegantes y multiplataforma, que para eso es Perl, se puede hacer uso de algún módulo como […] (continuar leyendo)