summaryrefslogtreecommitdiffstats
path: root/client/engine/Inventory.lib
diff options
context:
space:
mode:
Diffstat (limited to 'client/engine/Inventory.lib')
-rwxr-xr-xclient/engine/Inventory.lib233
1 files changed, 233 insertions, 0 deletions
diff --git a/client/engine/Inventory.lib b/client/engine/Inventory.lib
new file mode 100755
index 00000000..a7076fe0
--- /dev/null
+++ b/client/engine/Inventory.lib
@@ -0,0 +1,233 @@
+#!/bin/bash
+#/**
+#@file Inventory.lib
+#@brief Librería o clase Inventory
+#@class Inventory
+#@brief Funciones para recogida de datos de inventario de hardware y software de los clientes.
+#@version 0.9
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogGetOsVersion int_ndisk int_npartition
+#@brief Devuelve la versión del sistema operativo instalado en un sistema de archivos.
+#@arg \c ndisk nº de orden del disco
+#@arg \c npartition nº de orden de la partición
+#@return TipoSistema:Versión
+#@note TipoSistema = { Linux, Windows }
+#@note Requisitos: awk, head, chroot
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositiv
+#@exception OG_ERR_PARTITION Fallo al montar el sistema de archivos.
+#@version 0.1 - Primeras pruebas con OpenGNSys
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-15
+#*/
+function ogGetOsVersion () {
+
+# Variables locales.
+local MNTDIR TYPE VERSION FILE
+
+#/// Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME"
+ return
+fi
+#/// Error si no se reciben 2 parametros.
+[ $# = 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Montar la particion, si no lo estaba previamente.
+MNTDIR=$(ogMount $1 $2) || return $?
+
+#/// Elección del tipo de sistema operativo.
+case "$(ogGetFsType $1 $2)" in
+ EXT[234] | REISERFS | REISER4)
+ TYPE="Linux"
+ #/// Para Linux: leer descripción.
+ VERSION=$(chroot $MNTDIR lsb_release -d 2>/dev/null| awk -F: '{gsub (/\t/,""); print $2}')
+ #/// Si no se puede obtener, buscar en ficheros del sistema.
+ if [ -z "$VERSION" ]; then
+ FILE="$MNTDIR/etc/lsb-release"
+ [ -r $FILE ] && VERSION="$(awk 'BEGIN {FS="="}; $1~/DESCRIPTION/ {gsub(/\"/,"",$2); print $2}' $FILE)"
+ FILE="$MNTDIR/etc/redhat-release"
+ [ -r $FILE ] && VERSION="$(head -1 $FILE)"
+ FILE="$MNTDIR/etc/SuSE-release"
+ [ -r $FILE ] && VERSION="$(head -1 $FILE)"
+ fi
+ [ -e $MNTDIR/lib64 ] && VERSION="$VERSION 64 bits"
+ ;;
+ NTFS | HTNFS | FAT32 | HFAT32)
+ TYPE="Windows"
+ #/// Para Windows: leer la version del registro.
+ VERSION=$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows NT\CurrentVersion\ProductName')
+ ;;
+esac
+
+#/// Mostrar resultado y salir sin errores.
+[ -n "$VERSION" ] && echo "$TYPE:$VERSION"
+return 0
+}
+
+
+#/**
+# ogListHardwareInfo
+#@brief Lista el inventario de hardware de la máquina cliente.
+#@return TipoDispositivo:Modelo (por determinar)
+#@warning Se ignoran los parámetros de entrada.
+#@note TipoDispositivo = { ata, bio, boa, cdr, cpu, dis, fir, mem, mod, mul, net, ser, vga }
+#@note Requisitos: lshw, awk
+#@version 0.1 - Primeras pruebas con OpenGNSys
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-07-28
+#*/
+function ogListHardwareInfo () {
+
+#/// Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME"
+ return
+fi
+
+#/// Recopilación de disposibivos procesando la salida de \c lshw
+ogEcho info "$MSG_HARDWAREINVENTORY}"
+lshw | awk 'BEGIN {type="mod";}
+ /product:/ {sub(/ *product: */,""); prod=$0;}
+ /vendor:/ {sub(/ *vendor: */,""); vend=$0;}
+ /version:/ {sub(/ *version: */,"v.");vers=$0;}
+ /size:/ {sub(/ *size: */,""); size=$0;}
+ /\*-/ {if (type=="mem")
+ print type"="size;
+ else
+ if (type!="" && prod!="")
+ print type"="vend,prod,size,vers;
+ type=prod=vend=vers=size="";}
+ /-core/ {type="boa";}
+ /-firmware/ {type="bio";}
+ /-cpu/ {type="cpu";}
+ /-memory/ {type="mem";}
+ /-ide/ {type="ide";}
+ /-disk/ {type="dis";}
+ /-cdrom/ {type="cdr";}
+ /-display/ {type="vga";}
+ /-network/ {type="net";}
+ /-multimedia/ {type="mul";}
+ /-usb/ {type="usb";}
+ /-firewire/ {type="fir";}
+ /-serial/ {type="bus";}
+ END {if (type!="" && prod!="")
+ print type"="vend,prod,size,vers;}
+ '
+# */ (necesario para Doxygen)
+}
+
+
+#/**
+# ogListSoftware
+#@brief Lista el inventario de software instalado en un sistema operativo.
+#@return programa versión
+#@warning Se ignoran los parámetros de entrada.
+#@note Requisitos: ...
+#@todo Detectar software en Linux
+#@version 0.1 - Primeras pruebas con OpenGNSys
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-23
+#*/
+function ogListSoftware () {
+
+# Variables locales.
+local MNTDIR TYPE DPKGDIR RPMDIR KEYS k PROG VERS
+
+#/// Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME 1 1"
+ return
+fi
+#/// Error si no se reciben 2 parametros.
+[ $# = 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+#/// Obtener tipo de sistema de archivos y montarlo.
+TYPE=$(ogGetFsType $1 $2) || return $?
+MNTDIR=$(ogMount $1 $2) || return $?
+
+case "$TYPE" in
+ EXT[234]|REISERFS|REISER4)
+ # Procesar paquetes dpkg.
+ DPKGDIR="${MNTDIR}/var/lib/dpkg"
+ if [ -r $DPKGDIR ]; then
+ # dpkg --admindir=$DPKGDIR -l | \
+ # FIXME Sólo 32 bits
+ chroot "$MNTDIR" /usr/bin/dpkg -l | \
+ awk '$1~/ii/ {sub(/-dev$/,"",$2); sub(/^.*:/,"",$3);
+ sub(/-.*$/,"",$3); print $2,$3}' | sort | uniq
+ fi
+ # Procesar paquetes RPM.
+ RPMDIR="${MNTDIR}/var/lib/rpm"
+ if [ -r $RPMDIR ]; then
+ # Correccion inconsistencia de version de base de datos.
+ # rm -f ${RPMDIR}/__db.*
+ # rpm --dbpath $RPMDIR -qa --qf "%{NAME} %{VERSION}\n" | \
+ # FIXME Sólo 32 bits
+ chroot $MNTDIR /bin/rpm -qa --qf "%{NAME} %{VERSION}\n" | \
+ awk '$1!~/-devel$/ {sub(/-.*$/,"",$2); print $0}' | \
+ sort | uniq
+ # rm -f ${RPMDIR}/__db.*
+ fi
+ ;;
+ NTFS|HNTFS|FAT32|HFAT32)
+ # Claves de registro para programas instalados: formato "{clave}".
+ KEYS=$(ogListRegistryKeys $MNTDIR software '\Microsoft\Windows\CurrentVersion\Uninstall')
+ # Mostrar los valores "DisplayName" y "DisplayVersion" para cada clave.
+ (for k in $KEYS; do
+ PROG=$(ogGetRegistryValue $MNTDIR software "\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayName")
+ if [ -n "$PROG" ]; then
+ VERS=$(ogGetRegistryValue $MNTDIR software "\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayVersion")
+ echo "$PROG $VERS"
+ fi
+ done) | sort | uniq
+ ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$1,$2"
+ return $? ;;
+esac
+}
+
+function ogInfoCache () {
+#/** @function ogInfoCache: @brief muestra la informacion de la CACHE.
+#@param sin parametros
+#@return texto que se almacena en $IP.-InfoCache. punto_montaje, tama?oTotal, TamanioOcupado, TaminioLibre, imagenes dentro de la cahce
+#@warning Salidas de errores no determinada
+#@warning printf no soportado por busybox
+#@attention
+#@version 0.1 Date: 27/10/2008 Author Antonio J. Doblas Viso. Universidad de Malaga
+#*/
+if ogMountCache
+then
+ info=`df -h | grep $OGCAC`
+ infoFilesystem=`echo $info | cut -f1 -d" "`
+ infoSize=`echo $info | cut -f2 -d" "`
+ infoUsed=`echo $info | cut -f3 -d" "`
+ infoAvail=`echo $info | cut -f4 -d" "`
+ infoUsedPorcet=`echo $info | cut -f5 -d" "`
+ infoMountedOn=`echo $info | cut -f2 -d" "`
+ if `ls ${OGCAC}$OGIMG > /dev/null 2>&1`
+ then
+ cd ${OGCAC}${OPENGNSYS}
+ #content=`find images/ -type f -printf "%h/ %f %s \n"` busybox no soporta printf
+ content=`find images/ -type f`
+ cd /
+ echo $info
+ echo -ne $content
+ echo " "
+ #echo "$info" > ${OGLOG}/${IP}-InfoCache
+ #echo "$content" >> {$OGLOG}/${IP}-InfoCache
+ else
+ echo $info
+ #echo "$info" > {$OGLOG}/${IP}-InfoCache
+ fi
+ ogUnmountCache
+else
+ echo " "
+ #echo " " > {$OGLOG}/${IP}-InfoCache
+
+fi
+}