Copiar un disco en vmware, lo más rápida e indoloramente posible

Cuando las cosas se van al guano, o sea, pocas veces pero más que las que uno quiere, a veces se acaba necesitando sacar máquinas virtuales de un almacenamiento, a mano, con las mayores garantías de integridad pero sobre todo tardando lo menos posible, para que los usuarios de las mismas no sufran más que lo mínimo y esa noche, a ser posible, se pueda dormir un ratito.

Hay más de una forma de pelar un gato, y cuando se trata de mover máquinas virtuales a mano en entornos vmware, hay muchas: scp, el explorador de archivos del cliente de vCenter, cp o mv sobre los directorios en que están montados los almacenamientos, rsync (que no va de serie, pero un binario estático va de maravilla) y algunas más.

Pues bien, para mover rápido y con garantías, lo más conveniente es una herramienta que:

  • Tire de la librería de discos del hipervisor
  • Conozca y respete los discos “thin provisioned”
  • A ser posible, venga ya de serie.

Esta maravilla existe: se llama vmkfstools. Así en plural.

El procedimiento no es directo pero tampoco es ciencia aeroespacial:

  1. Eliminar la máquina virtual del inventario, para evitar interferencias.
  2. Copiar el fichero de definición de la máquina virtual (.vmx y .vmxf al directorio destino) con un vulgar cp
  3. Clonar el/los disco(s) con vmkfstools -i /volumen/origen/disco.vmdk /volumen/destino/disco.vmdk -d thin.
  4. Añadir la máquina destino al inventario.
  5. Limpieza y acabado.

Et voilá. Esta estrategia es la más rápida y, al usar disklib, nos garantiza el trato más correcto al fichero del disco de la máquina virtual, así como la mayor velocidad de copia.

Lo básico para un servidor HP con Linux

Hoy me he encontrado por el centro de datos alante un servidor HP de un cliente. El típico del que no se sabe gran cosa, porque lo gestiona el propio cliente y por tanto para nosotros es una caja con lucecitas.

El caso es que el cliente nos pidió que le pusiéramos la mano encima para resolver unos problemas que estaba teniendo. Y ya que estaba en ello, me miré un poco cómo dejarlo redondo.

En varias distros (al menos, en la Ubuntu en que lo probé) funciona hacer lo siguiente:

wget http://downloads.linux.hpe.com/SDR/add_repo.sh
chmod +x add_repo.sh
sudo ./add_repo.sh mcp

Esto añade el “repo” de software de HP adecuado según la distribución instalada. Y a partir de aquí, hay dos cosas que encuentro particularmente útiles.

Gestionar la iLO

apt-get install hponcfg

Este paquete instala la pequeña utilidad del mismo nombre. Permite hacer varias cosas con la iLO. Por ejemplo, muy útil, crear usuarios aunque no se sepa cuál es la clave que dejó puesta en el iLO el que montó el servidor:

alfredo@servidor:~$ sudo hponcfg  -i
<RIBCL VERSION="2.0">
<LOGIN USER_LOGIN="Dontcare" PASSWORD="UsingAutologin">
<USER_INFO MODE="write">
  <ADD_USER
    USER_NAME="darthmaul"
    USER_LOGIN="darthmaul"
    PASSWORD="vaderpichafloja">
    <ADMIN_PRIV value ="Yes"/>
    <REMOTE_CONS_PRIV value ="Yes"/>
    <RESET_SERVER_PRIV value ="Yes"/>
    <VIRTUAL_MEDIA_PRIV value ="Yes"/>
    <CONFIG_ILO_PRIV value="Yes"/>
  </ADD_USER>
</USER_INFO>
</LOGIN>
</RIBCL>
^D

Otras recetas útiles: https://gist.github.com/drolfe/b91ea113714ab823f2df

Actualizar firmware de la iLO

Se baja un fichero scpexe de la web de HPE (con un poco de suerte, aquí). Es un script que corre bien en varias distribuciones. Tan sencillo como ejecutarlo. Verbigracia:

alfredo@servidor:~$ sudo ./CP032487.scexe
/home/alfredo
FLASH_iLO4 v1.17 for Linux (Sep 30 2015)
(C) Copyright 2002, 2015 Hewlett-Packard Enterprise Development Company, L.P.
Firmware image: ilo4_255.bin
Current iLO 4 firmware version  2.10; Serial number ILOSERIALZ
Component XML file: CP032487.xml
CP032487.xml reports firmware version 2.55
This operation will update the firmware on the
iLO 4 in this server with version 2.55.
Continue (y/N)?y
Current firmware is  2.10 (Jan 15 2015 00:00:00)
Firmware image is 0x1001b1c(16784156) bytes
Committing to flash part...
******** DO NOT INTERRUPT! ********
Flashing is underway... 100 percent programmed. \
Succeeded.
***** iLO 4 reboot in progress (may take more than 60 seconds.)
***** Please ignore console messages, if any.
iLO 4 reboot completed.

Gestionar RAID

apt-get install hpssacli

Y ya podemos hacer lo que queramos con todos esos discos, incluso cargarnos todo y volver a empezar.

Referencias

http://ximunix.blogspot.com.es/2013/08/hp-toolsfirmware-for-proliantdebian.html

http://downloads.linux.hpe.com/SDR/repo/mcp/

Los Samsung Evo 850: Una maravilla en todo, salvo cuando llegan

Cuando uno se compra un disco para, digamos, el ordenador de jugar, casi le hace ilusión que el embalaje sea incluso un poquillo complicado de abrir. Es el momento del descubrimiento; hace un poquillo de ilusión.

Cuando uno compra los discos por docenas, no le hace a uno maldita la gracia que el embalaje sea un coñazo de abrir, que haya que invertir varios minutos para acceder al chisme, y varios más en clasificar los residuos. Multiplicado por docenas, claro.

Todo esto viene a cuento de mis discos de estado sólido favoritos, los Samsung Evo 850. Son unos trastos estupendos, muy fiables y de un precio no barato pero relativamente contenido. Los hay desde 256 GB hasta 4 TB (estos últimos de un precio astronómico, pero démosles tiempo). Y hasta estéticamente tienen su gracia.

¿Inconveniente? El embalaje.

En primer plano, siete Evo 850 de 1 TB; detrás, todo el embalaje con el que vienen

Los discos en cuestión, según me han explicado en varias ocasiones, no se suministran en bulk, o sea, en una caja que contiene una o dos docenas de discos. Solo se suministran en caja bonita. Lo cual está muy bien cuando uno pide, digamos, a PC Componentes una unidad para su ordenador de jugar. Pero no cuando uno tiene sobre la mesa tres docenas de discos, y a cada uno de ellos tiene que:

  • Romper el sello para abrir la caja (lo cual requiere una cuchilla, porque no viene trepado ni nada parecido).
  • Sacar el disco de la caja, que viene en una bandeja de polipropileno.
  • Montarlo en su bandeja.
  • Separar la bandeja de polipropileno del sobre que contiene el manual, que está adherido con un pegamento del juicio final. Samsung: aunque venga sin pegar, tampoco se va a perder.
  • Separar del sobre que contiene el manual el CD (¡sí, en 2017!) en que vienen cosas que se pueden descargar de la web de Samsung en el improbable caso de que hagan alguna falta.
  • Separar por un lado el CD y la bandeja del disco, por otro la caja y los manuales
  • Tirar todo a su cubo correspondiente

No solamente es un desperdicio de material. También lo es de tiempo. De verdad, Samsung, ¿no podéis vender estos discos en bruto? Ni siquiera estoy discutiendo el precio. Solo quiero no perder tiempo y que no me duela tirar todo ese material inútil.

Debian 9 con RAID por software… Y que arranque, y todo

Con lo refinado que está el software libre en general, y el esmero con que está implantado en Debian en particular, es cada vez más raro encontrar, especialmente en una instalación limpia, una situación en que hay que hacer algo siquiera un pelín fuera de guión.

El caso de hoy ha sucedido al instalar en un servidor físico que arranca por BIOS, un RAID 1 por software.

Debian installer, en su versión actual, tiene previsto lo necesario para arrancar con un RAID 1 de discos grandes (y por tanto, GPT), y que además contiene el sistema. Para ello, se necesitan unas pequeñas particiones (1 MB es suficiente) que Debian llama BIOS boot area. Aquí es donde GRUB tiene un sitio para instalar el sector de arranque.

Pues bien, aunque Debian Installer lo ofrece, si estamos particionando manualmente (porque no creemos en la memoria virtual, porque nos gusta usar solo particiones primarias, o porque simplemente somos de la vieja escuela), entonces no acaba el trabajo. Para que el tinglado funcione, hay que hacer lo siguiente.

  1. En todos los discos que participen del RAID, crear al principio de los mismos sendas particiones de 1 MB.
  2. Marcarlas, todas ellas, como BIOS boot area.
  3. Crear el/los RAID oportunos en el resto del disco
  4. Instalar Debian

Si todo va bien hasta ahora, GRUB se ha podido instalar en el primer disco. Pero no hemos acabado:

  1. Rearrancar. Debian arranca con el sector de arranque del primer disco (o el que hayamos elegido en el instalador Y en la BIOS)
  2. Reconfigurar GRUB:
  3. dpkg-reconfigure grub-pc

    Y marcar todos los discos para que Grub, en lo sucesivo, mantenga en todos ellos actualizado el arranque.

Y esto es todo. ¿Qué hemos conseguido? Pequeños detalles: Que si el primer disco es (Ley de Murphy) el que se va al guano, el sistema pueda seguir arrancando. Típico problema que se queda agazapado hasta el momento más inoportuno.

Las LSI 9211-8i y el modo IT

La madre de las tarjetas interesantes fabricadas por LSI que son útiles para algo como FreeNAS o (probablemente) BlueStore, es la 9211-8i: Dos conectores SFF-8087 y, algo de magia negra mediante, ningún software RAID entre los discos y el sistema operativo principal. Es básicamente la misma tarjeta que la Dell H310 o la IBM M1015.

Sin embargo, para convertir estas tarjetas a modo IT, he tenido que hacer algo distinto. En algunas placas base, los sas2flsh.exe de DOS no funcionan. Ni idea del motivo; da un error diciendo algo de PAL, que me suena a tele analógica en color. Así que he tenido que recurrir al shell UEFI.

Como no todo podía ser bonito, el shell UEFI de la Supermicro X9SCM-F tiene dificultades para ver un sistema de ficheros que no sea el de un disco SATA (tampoco ni idea de por qué: tenía que flasear las malditas tarjetas, así que simplemente fui aceptando los hechos tal como me los iba encontrando). Adiós al brillante plan de cascar los ficheros en un pincho USB y terminar.

Total, que con un FreeDOS instalado en el disco C:, me bajé el paquete Installer_P20_for_UEFI de Broadcom (ex Avago, ex LSI), creé un directorio 9211 y le copié:

  • sas2flsh.efi
  • MPTSAS2.ROM
  • 2118IT.BIN

Si se intenta meter el firmware IT sin más, el chisme se niega, indicando (un tanto estúpidamente) que nada de flasear un firmware IT sobre uno IR. Así que, igual que con toda la familia, lo primero que hay que hacer es

sas2flas.efi -o -e 6

Al carallo, ya no hay firmware. Ahora ya nada nos lo impedirá:

sas2flas.efi -o -f 2118IT.BIN -b MPTSAS2.ROM

La BIOS no creo que sea necesaria, pero ya estaba un poco cansado y decidí que ya experimentaría con quitarla de en medio en otro momento, si eso.

Como cosa curiosa, al borrarles la flash a estas tarjetas, no han perdido su dirección SAS.

Como cosa más curiosa aún, el proceso de pasarlas a IT ha sido el más sencillo de la familia.

Referencias y créditos:

  • http://brycv.com/blog/2012/flashing-it-firmware-to-lsi-sas9211-8i/
  • https://linustechtips.com/main/topic/104425-flashing-an-lsi-9211-8i-raid-card-to-it-mode-for-zfssoftware-raid-tutorial/

Un disco de estado sólido para usar con FreeNAS, rápido y barato

Hay dos buenos motivos para tener en un servidor con FreeNAS, al menos un disco lo más rápido posible. Uno es poder usarlo para L2ARC, y el otro es usarlo para SLOG/ZIL.

No voy a entrar en los detalles de una y otra cosa, porque para eso se ha molestado jgreco en escribir el artículo antes referido en los foros. En lugar de esto, voy simplemente a compartir lo que he hecho.

Un disco rápido, en los tiempos que corren, quiere decir SSD. Pero dentro de los SSD, también hay clases. No me refiero a los discos “Enterprise” o “Pro”, sino a algo más básico y es que hay discos SSD con puerto SATA, SAS, mSATA y M.2. Para acabar de confundir el asunto, este último formato puede llevar, según le parezca al fabricante, presentado en su conector un puerto SATA 3.0, un PCI Express 3.0, y/o un USB 3.0. De estos tres buses, el más rápido con diferencia es el PCI Express, así que el siguiente paso es elegir un disco M.2 con bus PCI Express y un adaptador para poder pincharlo en la placa base del servidor en cuestión.

Siendo uno de natural perfeccionista y rata a la vez, he acabado con esta solución de lo más afinado en ambos: Un disco Samsung 960 Evo, un poco más caro que los tradicionales 850 Evo SATA pero no una barbaridad en capacidades modestas, y un adaptador que Amazon está encantado de vender por la principesca suma de 7 euros y 99 céntimos, porte incluído:

Este adaptador funciona, no hay mucha ciencia en ello, pues se trata básicamente de llevar las líneas adecuadas del conector PCI Express al conector M.2. Viene con chapita para ranuras de altura completa, y la que se ve en la foto es una adaptación hecha en mi taller de una que agarré en la pila de los trastos.

Tal cual, no hay más que pincharla y contarle a FreeNAS para qué la queremos usar.

Usando una tarjeta Dell H310 con FreeNAS

Es vox populi que FreeNAS, o cualquier cosa que use ZFS como la versión 5 de Proxmox VE, quiere acceso directo a los discos para que el ZFS los gestione directamente. Es decir, no queremos una tarjeta RAID presentando un único volumen gordo con todos los discos que tiene detrás; solamente queremos que el sistema operativo vea todos y cada uno de los discos.

Para hacer esto, la opción más sencilla es tener una placa base con todos los conectores necesarios. Pero a veces tenemos una cierta cantidad de discos, por ejemplo 12 o 24, conectados a un backplane que, típicamente, cuenta con un par de conectores SFF a partir de los cuales conecta todos los discos.

La Dell H310 es una de bastantes versiones remarcadas de la LSI 9211-8i. Es una tarjeta RAID, pero LSI, en su infinita sabiduría, suministra un firmware que la convierte en una sencilla HBA. Es decir, una tarjeta que se limita a conectar discos y presentarlos de manera visible al sistema operativos. O sea, lo que queremos.

Otra encarnación de la LSI 9211-8i es la popular IBM M1015.

¿Por qué comprar la H310? Por lo de siempre: Por dinero. Van más baratas que las LSI. Además, no hay tantas copias chinas como de las M1015.

Dije que LSI suministra un firmware para convertirla en HBA. Ahora bien, aquí acaban las buenas noticias: El proceso que hay que seguir es algo engorroso pero sobre todo plagado de puñetitas. Así que, ya que me he puesto, he decidido documentarlo.

Hay que decir que la tarjeta tiene un firmware y una BIOS, que son dos piezas separadas. En mi caso, decidí dejarla sin BIOS. Esto no es ningún sacrilegio (la tarjeta vive perfectamente sin ella) y ahorra tiempo en el arranque porque, al no tener BIOS, ya no tiene que echar su meadita en cada arranque del sistema.

Siendo uno de natural paranoico, por otra parte, decidí que solamente iba a descargar el software necesario de sitios de los que me fiara. Tuve que hacer un pequeño salto de fe con fdos.org, más que nada porque es la manera más práctica de generar una ISO de arranque con FreeDOS.

En fin. Vamos a por los ingredientes:

  • Una Debian o cosa similar con xorriso (apt-get install xorriso, sin más)
  • FDOEMCD.builder.zip de fdos.org. Unzip eso, suelta un directorio con el DOSero nombre de FDOEMCD
  • megarec.exe. El único sitio fiable que encontré fue, de una FAQ de Supermicroel FTP de Supermicro. Unzip eso dentro de FDOEMCD/CDROOT. Ya de paso, nos suministra megacli.
  • El firmware IT para la H310. Que, por supuesto, no puede estar en una página de descargas de Dell llamada H310. No, está en la página de los R410, que son uno de los modelos que la montaban. Y ni siquiera se llama H310, sino “6Gbps SAS HBA Firmware Package”. En fin, que está aquí y que espero que los de Dell tengan que encontrar su camino por Mongolia con un mapa de carreteras de Libia de 1978. Unzip (es uno de esos exe autoextraíbles que unzip también entiende) dentro de FDOEM/CDROOT también.
  • empty.bin, que es un firmware vacío. Es un fichero de 256 bytes que contiene:
    • 0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      *
      0000090 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
      00000a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      *0000100
    • Si te encuentras especialmente paranoico, créalo con un editor hexadecimal.
    • Y si no eres muy paranoico: empty.bin
    • En cualquier caso, también a FDOEM/CDROOT

Ya tenemos todo.

Ahora cogemos y desde FDOEM, y con fe: xorrisofs -o miiso.iso -p "Yo Claudio" -publisher "blog.tecnocratica.net" -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -N -J -r -c boot.catalog -hide boot.catalog -hide-joliet boot.catalog CDROOT

No todas las opciones son estrictamente necesarias, pero así queda más mono. Eso genera miiso.iso.

Bueno, pues arrancamos nuestro servidor con eso (si ese día le toca funcionar al KVM del servidor basado en una versión fosilizada de Java, claro) y ejecutamos:

  • En el directorio de Supermicro, tools:
    • megacli.exe -AdpAllInfo -aAll -page 20
    • Tomar nota de la dirección SAS, para ponérsela más tarde, porque nos la vamos a calzar.
    • megarec.exe -writesbr 0 \empty.bin
    • megarec.exe -cleanflash 0

En este punto, hay que rearrancar. No me preguntes por qué, pero si no, no funciona el invento. Venga, rearranca. Yo espero.

Sigamos:

  • Ahora nos vamos al directorio del firmware de Dell:
    • sas2flsh.exe -o -f 6GBPSAS.fw
    • sas2flsh.exe -o -sasadd <la dirección SAS>

Ya hemos acabado. Llegados a este punto, o tenemos una HBA, o algo con que sujetar la puerta. De nada.

Créditos y enlaces de interés:

  • https://tylermade.net/2017/06/27/how-to-crossflash-perc-h310-to-it-mode-lsi-9211-8i-firmware-hba-for-freenas-unraid/
  • https://forums.freenas.org/index.php?threads/ibm-serveraid-m1015-and-no-lsi-sas-adapters-found.27445/
  • http://www.cgsecurity.org/wiki/Create_a_TestDisk_FreeDos_LiveCD
  • http://blog.asiantuntijakaveri.fi/2013/09/turning-dell-perc-h310-to-dumb-biosless.html
  • https://techmattr.wordpress.com/2016/04/11/updated-sas-hba-crossflashing-or-flashing-to-it-mode-dell-perc-h200-and-h310/
  • https://ciamician.wordpress.com/2015/03/06/flashing-your-dell-perc-h310-to-it-firmware-uefi/

Más difícil todavía: Partido y con las teclas en blanco

Desde la primera vez que noté que me dolían las muñecas, he estado buscando el teclado ideal.

Antaño, gustaba del tacto de aquellos IBM, ahora Unicomp. Durante años no pude usar otra cosa que Key Tronic. Pasé fugazmente por Logitech y, aunque nunca quedé totalmente convencido, Logitech fue mi primer teclado partido.

Hoy, tengo un teclado que tiene casi todo lo mejor de todos ellos: Un Ergodox-EZ.

Ergodox es un diseño de teclado abierto, tanto hardware como software. La electrónica se basa en Teensy, y las teclas en el caso del Ergodox-EZ son Cherry MX (la historia de la empresa Cherry es interesante, pero es otra historia y debe ser contada en otra ocasión).

Ergodox-EZ cogió el diseño Ergodox y, financiación de moda mediante, lo vende listo para funcionar. Perfecto para los que, como yo, tienen cierta tendencia a meterse en berenjenales y acabarlos al cabo de varios años.

El teclado parte de una filosofía de diseño, heredada de su antecesor Key64: No poner más teclas que las que se usan. Esto parece de perogrullo, pero cualquiera que tenga la costumbre de comer sandwiches de mermelada a la vez que usa el ordenador sabe que hay teclas que se usan, teclas que apenas se usan, y teclas que se usan poco pero no se puede pasar sin ellas. Ergodox tiene suficientes teclas para cubrir las que se usan y las que no se puede pasar sin ellas. Total, 76 teclas. Pero mediante el truco de disponer diferentes capas, se pueden tener disponibles hasta las que casi nunca se usan.

Ergodox EZ tiene un configurador por web con el que fácilmente se puede decidir la distribución de teclado,  y escupe un .bin que se larga al teclado con el cargador de Teensy. Facilito. Lo único que no es facilito, y es una pequeña desgracia dado el precio del juguete, es que el configurador solamente está disponible con el juego de teclas US. Así pues, ¿cómo se configura en castellano, que es lo que uso yo? Se coge un teclado US, se mira a qué símbolo corresponde la misma tecla en el teclado ES, y se pone la del teclado US en el configurador. Durante el proceso, recordar varias veces el árbol genealógico del que hizo la distribución de teclado ES. Y eso es todo. Esta es mi distribución en el momento de empezar a escribir este artículo:  ergodox_ez_firmware_kvpdlm_alfredo.hex. En esta distribución, está todo lo necesario para escribir en castellano y creo que también en gallego y euskera, pero le faltan algunas cosas para escribir en catalán.

Inspirado un tanto onanísticamente por mi propio artículo, me he hecho otra distribución que simplemente tiene accesible una capa con teclas de función y un teclado numérico bastante útil para picar direcciones IP, con el 5 centrado en la J, o sea, en la tecla que tiene el resalte, al igual que en un teclado numérico clásico: ergodox_ez_firmware_qgrdnj_alfredo.hex

Me ha llevado en torno a un par de semanas habituarme lo bastante como para encontrarlo razonablemente cómodo y empezar a pensar en exprimir algo más de él. Los primeros días fueron horrorosos. Al cabo de una semana, empieza a doler menos, y al cabo de dos, ya lo uso con cierta soltura.

Por la pasta que ha costado, espero que me dure muchos años… Y que no me duelan las muñecas mucho más.

phpipam: Mola mucho

Hace muchas, muchas lunas, tenía toda la red documentada con un MediaWiki. Incluso hice una ñapilla para recoger las descripciones de los puertos de los switches y generar con ellas una tabla automáticamente; la mandé a la lista de ExNIC hace ocho años:

Aquí os dejo una pequeña barbudez que he parido. Se trata de una extensión para MediaWiki que saca una tabla de interfaces de un trasto de Cisco; está pensado para switches. Disculpad los comentarios en espanglis y demás, resultado de copiar y pegar ejemplos de acá y allá.

Para hacerlo funcionar, hay que:

1. Ponerlo en un sitio adecuado (típicamente, extensions/tablainterfaces/tablainterfaces.php)
2. Añadirlo como extensión (añadir a LocalSettings.php, normalmente al final:

require_once “$IP/extensions/tablainterfaces/tablainterfaces.php”;

3. Meter en el código de la página que sea la llamada

{{#tablainterfaces:nombredeltrasto | community }}

(obviamente, nombredeltrasto puede ser un nombre o dirección IP, y es recomendable una community con solamente permiso de lectura).

Se admiten sugerencias.

Cuidado con los saltos de línea que introduce el editor de correo. Salud.

<?php

# Funcion de enganchar
$wgExtensionFunctions[] = ‘Iniciar_Tabla_Interfaces’;
# Add a hook to initialise the magic word
$wgHooks[‘LanguageGetMagic’][]       = ‘ElParseador_Magico’;

function Iniciar_Tabla_Interfaces() {
global $wgParser;
# Enlazar la palabra ‘tablainterfaces’ con nuestra funcion
$wgParser->setFunctionHook( ‘tablainterfaces’, ‘EscupirTablaInterfaces’ );
}

function ElParseador_Magico(&$magicWords, $langCode ) {
# Add the magic word
# The first array element is case sensitive, in this case it is not case sensitive
# All remaining elements are synonyms for our parser function
$magicWords[‘tablainterfaces’] = array( 0, ‘tablainterfaces’ );
# unless we return true, other parser functions extensions won’t get loaded.
return true;
}

function EscupirTablaInterfaces(&$parser, $dispositivo = ”, $community = ” ) {
# The input parameters are wikitext with templates expanded
# The output should be wikitext too
# Codigo SNMP inspirado por jmartinson(AT_nospam)info234.com en php.net

// Solamente valores. Sin esto, devuelve el tipo tambien, p.e.: INTEGER: 1
snmp_set_quick_print(TRUE);

// For sequence types, return just the numbers, not the string and numbers.
// snmp_set_enum_print(TRUE);

// Don’t let the SNMP library get cute with value interpretation.  This makes
// MAC addresses return the 6 binary bytes, timeticks to return just the integer
// value, and some other things.
// snmp_set_valueretrieval(SNMP_VALUE_PLAIN);

$ifIndex = snmp2_walk(“$dispositivo”,”$community”,”interfaces.ifTable.ifEntry.ifIndex”);
$ifDescr = snmp2_walk(“$dispositivo”,”$community”,”interfaces.ifTable.ifEntry.ifDescr”);
$ifAdminStatus = snmp2_walk(“$dispositivo”,”$community”,”interfaces.ifTable.ifEntry.ifAdminStatus”);
$ifOperStatus = snmp2_walk(“$dispositivo”,”$community”,”interfaces.ifTable.ifEntry.ifOperStatus”);

$tabla =  ‘{| border=”0″‘.”\n”;
$tabla .= ” |+ Tabla de interfaces de $dispositivo\n”;
$tabla .= ” ! Puerto !! Descripci&oacute;n !! Estado oper. !!
Estado adm.\n”;
$tabla .= ” |-\n”;

for ($i=0; $i<count($ifIndex); $i++) {
$tabla .= ” | $ifDescr[$i]\n”;
$tabla .= ” | “.snmp2_get(“$dispositivo”,”$community”,”IF-MIB::ifAlias.”.$ifIndex[$i]).”\n”;

$tabla .= ” | $ifOperStatus[$i]\n”;
$tabla .= ” | $ifAdminStatus[$i]\n”;
$tabla .= ” |-\n”;
}

$tabla .= ” |}\n”;

return $tabla;
}
?>

El tiempo no pasa en balde, y aquella ñapilla que iba bien para tres o cuatro armarios con un puñado de switches en total, ya no llega. No solo por su inexistente modelo de seguridad; es que no creo que nadie la haya probado en Mediawikis más modernos que la versión de hace ocho años.

Afortunadamente, existe Eslovenia. La “Suiza del Este” ha dado su cuota de gente interesante, pero de particular interés hoy es un tipo llamado Miha Petkovsek.

El hijo de su ingenio, phpipam, es justo lo que su nombre da a entender: Una aplicación en php, sencillita pero pulcramente escrita, que permite llevar un inventario de las direcciones IP. En versiones recientes, también cuenta con un sencillo, casi rudimentario, pero útil, inventario de equipos; incluyendo coordenadas tales como ubicación geográfica, armario y U. ¿A que mola?

Phpipam tiene, por supuesto, su API REST que permite engancharlo (a base de wget si es menester) con los escriptillos y ñapillas diversas que adornan cualquier NOC que en la vida es.

La instalación no puede ser más sencilla; usa una base de datos MySQL, como la mayor parte de este tipo de aplicaciones. Se colocan los ficheros en su sitio, se configura el acceso a la base de datos, y a correr.

dehydrated y Apache

Si antes lo digo… Hoy he tenido que instalar dehydrated con Apache.

Igual que con nginx, es la sencillez misma; pero no puedo pasar la oportunidad de dejar testimonio de una configuración de ejemplo con Apache, típicamente guardada (en Debian) en /etc/apache2/sites-available/midominio.mitld.conf:

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 ServerName midominio.mitld
 DocumentRoot /var/www
 <Directory />
  Options FollowSymLinks
  AllowOverride None
 </Directory>
 <Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
 </Directory>
 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 <Directory "/usr/lib/cgi-bin">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  Order allow,deny
  Allow from all
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/midominio.mitld.errores
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/midominio.mitld.accesos combined
 Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges/
 <Directory "/var/lib/dehydrated/acme-challenges">
  Require all granted
 </Directory>
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
 ServerAdmin webmaster@localhost
 ServerName midominio.mitld
 DocumentRoot /var/www
 <Directory />
  Options FollowSymLinks
  AllowOverride None
 </Directory>
 <Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
 </Directory>
 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
 <Directory "/usr/lib/cgi-bin">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  Order allow,deny
  Allow from all
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/midominio.mitld-ssl.errores
 LogLevel warn
 CustomLog ${APACHE_LOG_DIR}/midominio.mitld-ssl.accesos combined
 # SSL Engine Switch:
 # Enable/Disable SSL for this virtual host.
 SSLEngine on
 SSLCertificateFile /var/lib/dehydrated/certs/midominio.mitld/cert.pem
 SSLCertificateKeyFile /var/lib/dehydrated/certs/midominio.mitld/privkey.pem
 <FilesMatch "\.(cgi|shtml|phtml|php)$">
  SSLOptions +StdEnvVars
 </FilesMatch>
 <Directory /usr/lib/cgi-bin>
  SSLOptions +StdEnvVars
 </Directory>
</VirtualHost>
</IfModule>

El resto de la instalación es idéntico a nginx, y también con la salvedad de activar el módulo SSL después de ejecutar dehydrated -c por primera vez y por tanto tener el certificado ya preparado.

En Debian, esto se hace con la sencilla y elegante instrucción

sudo a2enmod ssl

Seguido, si es menester, por

sudo apache2ctl restart

A pasarlo pipa.