Comandos GNU Linux indispensables para llevar a cabo un inventario de hardware

En el principio nosotros, como Humanidad, creamos los ordenadores. Y dijimos “sea la electricidad” y fue la luz sobre nuestros cálculos de trayectoria balística. Y vimos que los números coincidían, y que eran buenos. Y llamamos al conjunto de instrucciones de cálculo como “programas”, que eran cargados directamente en las memorias de las computadoras. Y fue así la primera década de la computación. Y aún no existían los comandos GNU Linux, porque tampoco existían sistemas operativos.

Vamos, que los primeros ordenadores eran la mar de aburridos, parecidos a los hornos microondas, muy útiles, pero al final solo sirven para calentar. Pronto también los científicos y/o matemáticos (sí, los programadores como profesión tardaríamos otro tanto en llegar) se dieron cuenta de que las instrucciones, tan cuidadosamente estampadas como unos y ceros en tarjetas de cartón, solo servían para las máquinas para las que fueron creadas y era muy difícil usarlas en otros modelos de ordenadores.

comandos-gnu
Tarjeta perforada con una instrucción en lenguaje Fortran (Arnold Reinhold, Wikipedia) https://commons.wikimedia.org/wiki/File:FortranCardPROJ039.agr.jpg

Por ello nacieron lenguajes de programación como Fortran y Cobol, para ayudar a formar el personal de manera uniforme y estandarizada. He resumido así más de 170 años de Historia, desde que Ada Lovelace le propuso a Charles Babbage que su Máquina Analítica ejecutara algo más que simples programas. Y henos aquí en el siglo XXI con sistemas operativos interconectados a redes por todo el mundo.

Pronto los sistemas operativos (SO) resolvieron el problema de la compatibilidad de hardware y desarrollamos una manera normalizada -con normas tales como POSIX– para nuestra interacción con los dispositivos y el intercambio de información entre ellos.

Esto permite actualmente que a sistemas de monitorización como Pandora FMS (PFMS) les sea muy útil usar los comandos GNU Linux para retribuir métricas desde un Servidor Pandora FMS.

Lo que yo expreso aquí no es la posición oficial de Pandora FMS ni el parecer ni la opinión de su equipo de desarrollo. Aquí podéis consultar la hoja de ruta oficial en este enlace.

Como vimos de manera bien clara en el vídeo anterior, Pandora FMS utiliza pero que muy bien los comandos GNU Linux y de una manera muy práctica y sencilla, de manera centralizada. Además en los Agentes Software PFMS (pequeños programas que ejecutan nuestros comandos GNU Linux u otros ejecutables que devuelvan valores de métricas que luego son enviadas al Servidor PFMS) dichos comandos operan prácticamente de la misma manera.

¿Recuerdan que les dije que, en principio, fue un problema el desarrollo de aplicaciones que pudieran migrar a otros laboratorios con distinto hardware? Los sistemas operativos se encargaron de solucionar esto por medio de la recolección de controladores, es decir, instrucciones binarias específicas que permiten que el hardware se comunique con el SO. Esto permite que las aplicaciones, por medio de un lenguaje de programación para dicho SO, puedan olvidarse por completo del equipo subyacente (en inglés a esto lo denominan «metal al desnudo» o bare-metal).

Pandora FMS, en su versión Enterprise, tiene una ingente cantidad de MIB para el protocolo SNMP (si os gustan los detalles técnicos, escogí este ejemplo en inglés que ilustra cómo monitorizar dispositivos de respaldo de datos en cintas magnéticas), y no es para menos. Pandora FMS se encarga de monitorizar sistemas operativos, redes completas y, en fin, lo que tengamos a bien realizar en nuestro trabajo de administración de redes locales y redes amplias.

Sí, señoras y señores, esto ya es tela marinera. Pero cuando un trabajo o tarea es muy grande o compleja, como por ejemplo el de llevar un inventario de hardware detallado, es recomendable seccionar la labor e ir a la raíz del asunto. Veamos.

Comandos GNU Linux

Son utilerías creadas muchas de ellas para el sistema operativo Unix®, utilizado por -en aquel entonces- el muy joven Doctor Richard Matheus Stallman RMS en el Instituto Tecnológico de Massachusetts y que fueron modificadas para ser abiertas y libres y siempre pensando en otros ambientes de hardware.

Es motivo de mofa que el núcleo Hurd (su entorno es llamado GNU Hurd) es monolítico y complicado y muchos apuestan a que nunca llegará a ser un SO sólido para su uso masivo, como ahora sí lo es GNU Linux. Esa fue la genialidad del Doctor Linus Torvalds: saber reconocer el hardware novedoso de esa época (procesador Intel® 386) y crear un núcleo de SO moderno y funcional.

Es así, por ejemplo, que el equipazo de Pandora FMS pudiera decidir el desarrollar y difundir al mundo todas sus utilerías y hacer que se ejecuten directamente sobre el núcleo Linux, todo con licencia de libre software, y así nacer las distribuciones, hipotéticas, Pandora FMS Linux. Es por ello que siempre debemos escribir GNU Linux juntos para ser específicos; de allí que este artículo se denomine «comandos GNU Linux» (aunque algunos de ellos en realidad tienen licencia GNU y no están directamente desarrolladas ni alojadas por la Free Software Foundation).

Expongo entonces los comandos GNU Linux que considero esenciales a la hora de inventariar hardware para su posterior monitorización de manera teórica con PFMS.

fdisk

comando-gnu
fdisk –help

A este programa le guardo especial nostalgia desde la década de 1980, cuando lo usaba como utilidad de Microsoft MS-DOS® para crear y modificar particiones de discos fijos. Lo he elegido el primero en la lista porque sirve para ilustrar y advertir:

  • fdisk es un programa, y sirve como también como librería, es decir, lo podemos integrar en nuestro propio código fuente y compilar (recordad colocar los avisos de licencia correspondientes). En su última versión 2.36, liberada en julio de 2020, aún da soporte a DOS®. Tened en cuenta que ha sido bifurcado y migrado a muchas plataformas y es muy diferente de sus orígenes; tal como nosotros ahora de adultos somos diferentes de cuando éramos niños, empero somos los mismos.
  • fdisk debe ser ejecutado con derechos de administrador. Su función no es la de inventariar hardware alguno, pero tiene un parámetro llamado «–list» que bien muestra información de todos los dispositivos de almacenamiento en nuestro GNU Linux o de alguno en particular.
  • Tomando en cuenta el punto anterior, como todo en el libre software, nosotros y únicamente nosotros somos responsables del uso -y abuso- del software, el cual viene sin ninguna garantía. Tener derechos de usuario raíz (root user) es de nuestra exclusiva competencia, tomando como base que conocemos el código fuente de cada uno de los programas y comandos GNU Linux. Advertidos quedan.
  • fdisk también puede tomar valores de fichero llamado «/proc/partitions/»: Linux pone a nuestra disposición archivos y directorios que entregan directamente y en tiempo real información sobre nuestro hardware, que bien podemos abrir en una terminal de comando. Podemos abrir y listar la ubicación especial «/proc» y veremos gran cantidad de información que pudiéramos tomar «en crudo», lo que nos lleva al siguiente punto.
  • fdisk no tiene mayores opciones para reportar el hardware de almacenamiento; sin embargo podremos usar los comandos GNU Linux usuales (cat, ls, grep, awk, etc.) concatenando sus salidas por medio de la pleca o barra vertical para obtener y depurar nuestras métricas y que luego sean procesadas de manera local o remota por el Servidor Pandora FMS.

comando-gnu
comandos GNU Linux awk y grep

  • fdisk será útil para casos donde necesitemos o queramos saber la geometría del disco (de ser de plato magnético).

comando-gnu
sudo fdisk –list

free

Escojo como segundo al comando GNU Linux llamado free: fue el primer comando que conocí en acción dentro de un complemento PFMS. Antes de entrar en el inventario de hardware en sí mismo viene a ser un excelente ejemplo acerca de cómo desarrollar nuestros comandos GNU Linux; free obtiene su información desde «/proc/meminfo«. Además, dicho complemento utiliza la nomenclatura -y normas de buen desarrollo- utilizadas por PFMS para asimilar las métricas recogidas. Divertíos un rato y aprended, ¡pero regresad por favor!

inxi

Os presento inxi, aunque en realidad la versión que evalué no es un comando como tal sino diez mil líneas de código con guiones BASH. Suena impresionante, ¿cierto? inxi utiliza dos directorios infaltables para su ejecución: «/proc» y «/sys» (podéis utilizar el parámetro «–recommends» para conocer por completo si tenemos todas las herramientas necesarias para sacar el máximo provecho a inxi).

comando-gnu
Comando GNU Linux inxi (instalación y uso de parámetro -Fxz)

  • En la imagen anterior podéis observar la instalación (versión 2.3.56) en una máquina virtual arrendada a mi nombre, que ejecuta Ubuntu server 18.
  • Inmediatamente ejecuté el parámetro «-Fxz«: la letra efe para conocer todos los detalles, la letra equis para obtener más detalles (hasta 3 equis) y la más importante e interesante, la letra zeta que hace que la información única sea filtrada (por ejemplo, en la MAC de la tarjeta de red aparece la etiqueta «<filter>«).
  • Como administradores de red y dentro de nuestras tareas de monitorización debemos tener cuidado con la información que guardaremos en Pandora FMS, dado el caso que la red no sea de nuestra propiedad (trabajemos como empleados o autónomos). Por decir lo menos: muchos programas privativos identifican un ordenador por su conjunto de serial de placa madre y/o serial de tarjeta de red y/o serial de disco y/o cualquier otro componente. Cambiar alguno de ellos puede devenir en una licencia de uso inválida con la consecuente paralización de la empresa (en caso de ser software vital). En mi viejo ordenador portátil que tomé como conejillo de indias, mirad:

comandos-gnu
inxi -i -z

  • Escogí este ordenador porque es el último que queda de un lote que compramos, así que yo mismo lo he reparado con repuestos de unos y otros: toda una máquina Frankenstein. Además le conecto mi Kindle, un convertidor USB a PS/2, un viejo módem USB 3G y claro, tiene varias tarjetas de red, cámara y micrófono, etc. ¡Es representativa para un inventario de hardware con comandos GNU Linux!

comandos-gnu
inxi -Fz

El inxi a partir de la versión 3.X fue reescrito completamente en lenguaje Perl 5.X, lo que lo convierte en un comando GNU Linux propiamente dicho.

Otro uso curioso de filtrar información única del hardware es en la integración de inxi en clientes IRC, como por ejemplo Konversation. Esto para mostrar a otras personas en tiempo real la información de hardware (para ser franco no pude instalar esta característica al momento de finalizar este artículo).

comandos-gnu
Konversation version 1.7.4

df

El comando df fue uno de los primeros que aprendí en el año 2014 cuando me decidí en pleno a usar software completamente libre. Forma parte de las utilidades del núcleo GNU de la Free Software Foundation. Existe una utilidad escrita en lenguaje Python, llamada apropiadamente pydf, que colorea a nuestro gusto el resultado de df.

comandos-gnu
df –version

hwinfo

hwinfo debe ser instalado desde los repositorios de cada distribución GNU Linux. Tanto esta aplicación como los Agentes Software Pandora FMS pueden ser instalados de manera masiva con Ansible, Puppet o Chef, entre otras aplicaciones para la Administración de Configuración de Servidores (ACS).

comandos-gnu
hwinfo –short

Con hwinfo os expongo el concepto de categorías para el inventario de hardware. Podemos así consultar los ratones conectados al equipo, teclados, etc. Por cada categoría nos devuelve uno o varios valores; esto se conoce como clave valor y es muy importante para poder ser almacenadas en bases de datos no basadas en SQL. Junto con el nombre e identificador único de cada equipo podríamos echar mano de la inteligencia artificial y darle esta abundancia de datos para que nos genere una alerta de cambio (que uno de los ratones desconectado, por ejemplo). Fijaros en el concepto: no hablo de normalizar y fijar en detalle cada ratón en la empresa para su monitorización, hablo de autómatas que nos ayuden a trabajar de manera masiva.

No quiere decir tampoco que no podamos sacar métricas tradicionales: si se fijan de nuevo en la imagen, hwinfo es capaz de decirnos a qué velocidad de frecuencia trabaja cada núcleo del procesador central, ya que esto en los ordenadores portátiles varía según la carga de trabajo y contribuye al ahorro de batería.

comandos-gnu
sudo apt install hwinfo

dmidecode

¿Recordáis que los sistemas operativos nos permiten abstraernos del modelo de hardware que estemos usando? Aquí rizamos el rizo y tenemos el comando GNU Linux dmidecode, el cual obtiene sus valores directamente desde la placa madre. Son dos especificaciones: Desktop Management Interface (año 1994) y System Management BIOS (año 1999), muy complejas para ser explicadas aquí. Sin embargo, dmidecode también es práctico: de ser necesario puede obtener valores desde «/sys/devices/virtual/dmi/id».

Al igual que hwinfo podemos consultar por categoría de hardware con la opción «-t» (en GNU Linux los parámetros se pueden invocar de forma corta con un guion y una letra; para este caso la opción larga sería «–type«) acompañado de un valor entre cero y 255… pero dejemos eso del lenguaje de máquinas para la inteligencia artificial y que pruebe cada uno de esos valores.

Nosotros los seres humanos podemos usar el parámetro «-s» o «–string» acompañado de la palabra clave, mirad:

comandos-gnu
dmidecode

Afirmo que monitorizar es también es un arte, aparte de ser una ciencia: no solo es lo que tengamos sino hasta dónde podemos llegar. Veamos este caso práctico.

sudo dmidecode -t memory | grep Capacity

Esto devolverá una clave y un valor:

Maximum Capacity: 8 GB

Dado el caso de que la empresa decida «repotenciar» sus equipos, estaremos en la capacidad de determinar a qué dispositivos se les puede comprar más memoria RAM por la simple resta de la memoria instalada. PFMS tiene la capacidad de hacer cálculos posteriores a las métricas recogidas (el ejemplo más notable es convertir bits en bytes).

hdparm

Otro poderoso comando que debe ser invocado como usuario raíz: solamente usaremos su parámetro «-i» de forma sencilla e «-I» de forma ampliada (en ambiente GNU Linux las mayúsculas y minúsculas realmente importan, y mucho).

hdparm se especializa en escribir o establecer valores operativos en los dispositivos de almacenamiento; me llamó la atención que incluso puede ser usado para marcar un sector como dañado en un almacenamiento tipo RAID y evaluar si funciona como se espera. Es por ello que muchos de sus parámetros tienen las advertencias “DANGEROUS”. ¡Advertidos de nuevo quedan!

Nosotros solo lo usaremos para sacar información, nunca para escribir valores; existen los parámetros «–Istdout» (que exporta los identificadores hexadecimales de cada disco) y haciendo un filtrado enviamos de nuevo para una consulta específica, esta vez con el parámetro «–Istdin» (otra vez, dejemos esta tarea para la inteligencia artificial).

comandos-gnu
hdparm

La calidad del dato y la inteligencia artificial

Ya hemos rasguñado la superficie en los comandos GNU Linux para realizar inventario detallado de hardware; como veis la tarea es realmente titánica.

Sin entrar en largas teorías, diré que la calidad del dato va de qué tan confiable es la información recabada. Ya mencioné recoger de manera no tradicional en una base de datos SQL y la inteligencia artificial para detectar cambios en un equipo, pues la redundancia de valores similares y/o idénticos hablan de la calidad del dato recabado (para nuestro caso, pues son métricas).

Los siguientes comandos tienen la opción de exportar reportes en distintos formatos como XML (utilizado por PFMS), JSON, HTML, etc. El comando ls en GNU Linux sirve para listar ficheros y directorios; los siguientes comandos los he agrupado porque comienzan con ese prefijo, sin embargo no quiere decir que sean los mismos programadores, y/o que tengan origen común.

lshw

Me gusta este comando por su versatilidad, incluso tiene una interfaz gráfica que podemos instalar en ambiente Debian con la siguiente instrucción:

sudo apt install lshw lshw-gtk

Debemos tener en cuenta que si estamos conectados en remoto por terminal de comandos no tendremos acceso a la interfaz gráfica.

comandos-gnu
GTK+ front-end for lshw

XML es una tecnología que data desde 1998 y que fue pensada de forma realmente compleja, tanto que es una de las que saca de quicio al Dr. Linus Torvalds (aunque tampoco es que haga falta mucho para provocar enojo en él). XML necesita de programas para escribirlo y leerlo, con la ventaja de que podemos agregar fácilmente nuevos campos a su estructura de datos sin que ninguna aplicación pierda compatibilidad con los reportes. Para el caso de la inteligencia artificial podemos colocar todos los metadatos que deseemos, pero reconozco que es un tanto difícil para nosotros los humanos trabajar con ello de forma directa en su edición.

Como hicimos con dmidecode podemos pasar un parámetro con la clase de hardware que deseamos inventariar, acompañado del parámetro «-xml». También puede exportar en formato JSON con «-json».

comandos-gnu
sudo lshw -xml -class memory

lsscpu

Forma parte del paquete linux-util, un conjunto extenso de comandos cuidadosamente seleccionado por el equipo que desarrolla el kernel Linux. Prácticamente está en todas y cada una de las distribuciones, sirve para extraer información del procesador central y puede exportar en formato JSON; obtiene sus datos desde «/proc«.

comandos-gnu
lsscpu -json

lspci

Aunque ahora las placas madre traen casi todo integrado, en el mundo de los servidores abunda la tecnología PCI para tener redundancia en tarjetas de red, etc. lspci en su última versión de mayo de 2020 (3.7.0) permite trabajar en ambientes *nix, *BSD y hasta en Microsoft Windows. Excelente para recoger métricas en pares de clave y valor. Se retribuye de la comunidad en una base de datos que se actualiza de manera independiente del código, así que si tenéis algún hardware no reconocido por favor reportad en http://mj.ucw.cz/sw/pciutils/

comandos-gnu
lspci

lsscsi

SCSI, alguna vez conocida como la tecnología más rápida para discos, ha quedado eclipsada por cada una de las nuevas versiones SATA. Aún se incluye en hardware por retrocompatibilidad y podemos sacar alguna información que contribuya a que nuestra calidad del dato sea cercana a la perfección (si es que todos los programas coinciden en los valores obtenidos).

comandos-gnu
lsscsi –size

lsusb

lsusb, como su nombre sugiere, permite listar los dispositivos USB. Fijaros en el formato:

comandos-gnu
sudo lsusb

Si necesitamos ser más específicos con cada dispositivo conectado, recorremos la lista anterior y pasamos su identificador (obtiene sus nombres de «/var/lib/usbutils/usb.ids» ) y, dado el caso que haya sido desconectado, lsusb devolverá un número distinto de cero.

comandos-gnu
sudo lsusb –verbose -s

Forma parte del Proyecto Linux USB, así que mantiene actualizada una gran cantidad de dispositivos de esta muy popular tecnología de periféricos.

lsblks

lsblk obtiene sus datos desde «/sys/dev/block», permite exportar en formato JSON con «-J» y en pares de clave y valor de manera entrecomillada con «-P» . También forma parte del paquete util-linux que mencioné.

comandos-gnu
lsblk -d

Lista incompleta

Aunque esta lista es larga, faltan los comandos GNU Linux más importantes: los que vosotros desarrollaréis a gusto y conveniencia para monitorizar con Pandora FMS. ¡Recordad publicar y compartir!

Antes de despedirnos, recuerda que Pandora FMS es un software de monitorización flexible, capaz de monitorizar dispositivos, infraestructuras, aplicaciones, servicios y procesos de negocio.

¿Quieres conocer mejor qué es lo que Pandora FMS puede ofrecerte? Descúbrelo entrando aquí.

Si tienes que monitorizar más de 100 dispositivos también puedes disfrutar de una DEMO GRATUITA de 30 días de Pandora FMS Enterprise. Consíguela aquí.

No dudes en enviar tus consultas. ¡El equipo de Pandora FMS estará encantado de atenderte!

Shares