Instalación de Agentes OCS Inventory en Windows y distros Linux

Éste artículo es la continuación del artículo publicado hace ya un tiempo referente a la instalación del servidor OCS Inventory, herramienta que como ya sabrán sirve para inventariar nuestro parque de equipos informáticos.

A continuación veremos como empaquetar y configurar el instalador del agente para Windows, la instalación del agente para CentOS Linux desde repositorios y la creación de un script bash que facilite la instalación del agente para los sistemas operativos openSUSE Linux.

Descarga de Agentes OCS

  1. Lo primero que tenemos que hacer es conseguir las versiones de los agentes compatibles para nuestros Sistemas Operativos, para lo cual tenemos que acceder al apartado de descargas del sitio web de la herramienta OCS Inventory:

    https://ocsinventory-ng.org/?page_id=1548&lang=en

  2. Luego nos dirigimos donde se encuentran los links a las diferentes versiones de Agentes según el sistema operativo en el cual deseamos instalarlo:
  3. Hacemos clic en cualquiera de los links, ya que en cualquier caso nos llevará a un formulario donde debemos especificar nuestra cuenta de correo y descomentar el botón de selección si no desean recibir promociones de sus productos. Al presionar el botón Send nos enviarán un correo con los links de descarga de los agentes y demás software que componen la herramienta:
  4. El correo que nos debería llegar es similar al siguiente:
  5. En las siguientes secciones veremos los procedimientos de instalación de los agentes para los diferentes sistemas operativos.

Preparación e instalación de Agentes para Windows 7 o superior

  1. En este tutorial solo se abarcará la instalación en Windows 7 o superior con arquitecturas 64 bits utilizando una versión pre-configurada del agente que facilite la instalación del agente ya sea de forma manual como a través de políticas de Active Directory. Para comenzar procedemos a descargar la versión 2.6 del Agente y del Packager mediante sus correspondientes enlaces:
    - OCS Windows Agent 2.6.0.0 (64 bits only)
    - OCS Windows Packager 2.6 (64 bits only)

    También necesitamos descargar el paquete de herramientas PSTools, de entre las cuales estaremos necesitando la herramienta PsExec que permite la ejecución de procesos desde la línea de comandos y que es un requerimiento para el programa OCS Windows Packager:
    - PsTools

    Una vez descargadas los programas arriba mencionados a nuestra máquina Windows, procedemos a des-compactarlos.

  2. Abrimos una consola CMD y ejecutamos el comando ping testsrv.gknet.local para comprobar que desde la máquina Windows podemos conectarnos al servidor sin especificar la dirección IP, ya que debería resolverlo nuestro servidor DNS local. Caso contrario podemos agregar una entrada en el archivo hosts del directorio C:\Windows\System32\drivers\etc.
  3. De nuestro servidor testsrv descargamos el archivo apache.crt del directorio /etc/httpd/ssl a nuestra máquina Windows y lo renombramos como cacert.pem.

  4. Una vez que tengamos todos los programas y archivos anteriores, procedemos a copiar el programa PsExec.exe de la carpeta PSTools y el archivo cacert.pem dentro de la carpeta del programa OCS-Windows-Packager-2.6 junto al programa OcsPackager.exe.
  5. A continuación ejecutamos el programa OcsPackager.exe para empaquetar el instalador y asignamos los siguientes valores en cada campo:
    • Agent Setup File: Especificamos la ruta al instalador del agente OCS-NG-Windows-Agent-Setup.exe
    • Certificate file: Especificamos la ruta al certificado cacert.pem
    • Command line options: Se le agregan los parámetros que el empaquetador luego utiliza para instalar el agente. Las directivas que se recomiendan cargar como ser la url del servidor, activar la conexión SSL, usuario, contraseña de autenticación, ejecución en modo silencioso entre otros: /server=https://testsrv.gknet.local/ocsinventory /USER=ocsagentes /PWD=passwagentes /SSL=1 /S /NOW /NO_SYSTRAY
    • User: Para especificar la cuenta del administrador de dominio admin@gknet.local.
    • Password: Para especificar la contraseña del usuario de dominio.
  6. En el siguiente paso el asistente nos permite seleccionar el directorio en donde se va a generar el instalador empaquetado del agente, dejamos todo por defecto para que genere el archivo en el escritorio y presionamos el botón OK para iniciar el procedimiento de generación del instalador.
  7. Al finalizar el asistente presionamos el botón Close para finalizar el proceso.
  8. A continuación ya podemos proceder con la instalación del agente, pero antes cambiamos su nombre de OcsPackage.exeOcsAgentPackage-Win7.exe y con clic derecho lo ejecutamos como administrador, ya que sino la instalación no funcionará de forma adecuada:
  9. Una vez ejecutado el instalador lo único que nos aparecerá en pantalla será un banner que diga OCS Inventory NG, que nos permite saber que el asistente se está instalando de forma silenciosa. Para corroborar que el agente se haya instalado correctamente tenemos que verificar que el servicio OCS Inventory Service esté iniciado.
  10. Podemos verificar el archivo de configuración ocsinventory.ini o los archivos logs del Agente especificando la siguiente dirección en el explorador de Windows:
    %programdata%\OCS Inventory NG\Agent
    
  11. Con la herramienta WinSCP procedemos a subir el Agente instalador OcsAgentPackage-Win7.exe al directorio /srv/ocsinventory/agents/Windows de nuestro servidor OCS Inventory (testsrv.gknet.local) a fin de facilitar la distribución y descarga del agente de instalación de Windows.

  12. Para facilitar la instalación desde una política GPO de Active Directory nos conectamos por consola al servidor testsrv.gknet.local y nos ubicamos en el directorio /srv/ocsinventory/agents/Windows, en donde creamos un archivo llamado ocsinstallgpo.bat y luego lo editamos.
    [root@testsrv ~]# cd /srv/ocsinventory/agents/Windows
    [root@testsrv Windows]# touch ocsinstallgpo.bat
    [root@testsrv Windows]# vim ocsinstallgpo.bat
    
    Al mismo le agregamos las siguientes directivas shell de Windows que permiten la instalación del agente previa verificación si ya se encuentra instalado o no en el equipo:
    @echo off
    
    rem Script que permite la instalación del Agente desde recursos compartidos.
    
    rem Se verifica que el agente aún no esté instalado.
    if exist "%programfiles(x86)%\OCS Inventory Agent\OCSInventory.exe" goto end
    if exist "%programfiles%\OCS Inventory Agent\OCSInventory.exe" goto end
    
    rem Se procede a ejecutar el instalador desde el recurso compartido.
    start \\testsrv.gknet.local\ocsagents\Windows\OcsAgentPackage-Win7.exe
    
    :end
    
    Además, aprovechamos la ocasión para crear un archivo Readme.txt:
    [root@testsrv Windows]# touch Readme.txt
    [root@testsrv Windows]# vim Readme.txt
    
    Al cual le agregamos el siguiente contenido para recordarnos los pasos importantes que debemos seguir para que la instalación del agente se realice de forma adecuada:
    README:
    =======
    
    El instalador se tiene que ejecutar como "Administrador", ya que 
    se requiere dicho nivel de acceso para poder instalar y registrar
    la aplicacion OCS Inventory como un servicio que corre en segundo
    plano.
    
  13. Solo resta mencionar que con los pasos anteriores ya dispondremos de un instalador pre-configurado del Agente OCS Inventory para nuestros equipos Windows 7 o superior, disponible para ser descargado desde nuestro servidor OCS Inventory colocando la URL \\testsrv.gknet.local\ocsagents\Windows en el explorador de Windows:


Instalación del Agente OCS en equipos con openSUSE Linux

Para automatizar y agilizar la instalación, he decidido crear un script que se almacene en la carpeta de agentes del servidor testsrv, y que desde los equipos con openSUSE Linux se pueda descargar y ejecutar para proceder con la instalación del agente. A continuación veremos la creación del script y el proceso de instalación del Agente con el mencionado script:
  1. Nos conectamos al servidor testsrv con el usuario root y nos dirigimos al directorio /srv/ocsinventory/agents/openSUSE en el cual descargamos desde Github el archivo Ocsinventory-Unix-Agent-2.6.1.tar.gz con los fuentes para instalar el agente:
    [root@testsrv ~]# cd /srv/ocsinventory/agents/openSUSE
    [root@testsrv openSUSE]# wget https://github.com/OCSInventory-NG/UnixAgent/releases/download/v2.6.1/Ocsinventory-Unix-Agent-2.6.1.tar.gz --no-proxy
    
    Para este ejemplo se va a utilizar la versión del agente 2.6.1 (Que no aparece sugerido como opción de descarga en el correo), sin embargo, pueden verificar en éste enlace para obtener las últimas versiones disponibles.

  2. Luego creamos el archivo ocsinstaller-opensuse-agent.sh, le asignamos los permisos correspondientes y lo editamos:
    [root@testsrv openSUSE]# touch ocsinstaller-opensuse-agent.sh
    [root@testsrv openSUSE]# chmod 644 ocsinstaller-opensuse-agent.sh
    [root@testsrv openSUSE]# vim ocsinstaller-opensuse-agent.sh
    
    Y le agregamos el siguiente script bash:
    #/bin/bash
    # REFS: http://wiki.ocsinventory-ng.org/03.Basic-documentation/Setting-up-the-UNIX-agent-on-client-computers/ 
    
    # Verificacion que el operador haya pasado la contrasenia
    # de conexión del usuario OCS_USER.
    if [ -z "$1" ]; then
        echo ""
        echo "ATENCION: Debe pasar como argumento la contraseña del usuario $OCS_USER"
        echo ""
        exit 1
    fi
    
    # Definicion de la ruta de descarga de los instaladores. 
    OCS_BIN_FILE="/usr/bin/ocsinventory-agent"
    OCS_LOG_FILE="/var/log/ocsinventory-agent.log"
    OCS_CFG_FILE="/etc/ocsinventory-agent/ocsinventory-agent.cfg"
    OCS_SRV_NAME="testsrv.gknet.local"
    OCS_HTTP_USER="ocsagentes"
    OCS_HTTP_REALM="OCS Inventory agent area"
    TEMP_DIR=/tmp/ocsinstaller
    
    # Encriptamos el nombre de usuario y la contrasenia en Base64, ya que seran guardados en el archivo de
    # configuracion del agente y ademas es un requisito para que el metodo de autenticacion Apache Basic
    # del servidor no genere errores tipo "AH01618: user \xa6\xbb\x9em not found".
    OCS_HTTP_USER_ENCRYP=$(echo -n $OCS_HTTP_USER | base64)
    OCS_HTTP_PASS_ENCRYP=$(echo -n $1 | base64)
    
    # Verificacion del nombre de la version y distribucion Linux. 
    arch=$(uname -m) 
    kernel=$(uname -r) 
    if [ -n "$(command -v lsb_release)" ]; then 
        distroname=$(lsb_release -s -d | tr -d '="') 
    elif [ -f "/etc/os-release" ]; then 
        distroname=$(grep PRETTY_NAME /etc/os-release | sed 's/PRETTY_NAME=//g' | tr -d '="') 
    elif [ -f "/etc/debian_version" ]; then 
        distroname="Debian $(cat /etc/debian_version)" 
    elif [ -f "/etc/redhat-release" ]; then 
        distroname=$(cat /etc/redhat-release) 
    elif [ -f "/etc/SuSE-release" ]; then 
        distroname=$(cat /etc/SuSE-release | grep openSUSE) 
    else 
        distroname="$(uname -s) $(uname -r)" 
    fi 
    
    # Verifica si la distribucion de linux en la que se ejecuta el script corresponde con la version de 
    # openSUSE para el cual fue desarrollado el script. 
    if [ "$distroname" == "openSUSE Leap 15.0" ] || [ "$distroname" == "openSUSE Leap 15.1" ]; then
        # Instalacion de paquetes requeridos mediante zypper:
        zypper -n in -l gcc pciutils dmidecode nmap perl-App-cpanminus perl-XML-Simple perl-Net-IP perl-Digest-MD5 perl-Net-SSLeay perl-IO-Socket-SSL perl-Crypt-SSLeay perl-LWP-Protocol-https perl-Net-SNMP perl-Net-Netmask
    
        # Instalacion de dependencias PERL con la herramienta CPAN MINUS: 
        cpanm Compress::Zlib
        cpanm LWP::UserAgent
        cpanm Data::UUID 
        cpanm Proc::Daemon 
        cpanm Proc::PID::File
        
        # Instalacion de dependencias PERL opcionales con la herramienta CPAN MINUS:
        cpanm Nmap::Parser
        cpanm Module::Install
        cpanm Net::CUPS
        cpanm Parse::EDID
    else
        echo "Este instalador no funciona con la distribucion de Linux '$distroname'." 
        exit 1
    fi
    
    # Creacion del directorio de instalacion y ubicacion en el mismo:
    mkdir $TEMP_DIR 
    cd $TEMP_DIR 
    
    # Descarga del Agente OCS Inventory del servidor: 
    wget http://$OCS_SRV_NAME/ocsagents/openSUSE/Ocsinventory-Unix-Agent-2.6.1.tar.gz --no-proxy 
    
    # Descompactado de los paquetes de instalacion:
    tar -xzf Ocsinventory-Unix-Agent-2.6.1.tar.gz 
    
    # Instalacion del paquete Perl Ocinventory::Unix::Agent
    cd $TEMP_DIR/Ocsinventory-Unix-Agent-2.6.1 
    env PERL_AUTOINSTALL=1 perl Makefile.PL && make && make install && perl postinst.pl --nowizard --server=https://$OCS_SRV_NAME/ocsinventory --nossl --logfile=$OCS_LOG_FILE --user="$OCS_HTTP_USER_ENCRYP" --password="$OCS_HTTP_PASS_ENCRYP" --proxy="" --crontab 
    
    # Como en el comando de compilacion anterior no podemos pasar un realm con 
    # espacios en la cadena de texto usando la directiva --realm="", y por ende 
    # tampoco la directiva --now, procederemos a continuación a agregar la directiva
    # realm de forma manual al archivo de configuración y a ejecutar el agente por
    # primera vez con las siguientes dos comandos:
    echo 'realm="'$OCS_HTTP_REALM'"' >> $OCS_CFG_FILE
    $OCS_BIN_FILE
    
    # Eliminacion de la carpeta temporal:
    cd /tmp 
    rm -Rf ocsinstaller/ 
    
    # Salida:
    exit 0
    
    Como se puede observar más arriba el script se encuentra desarrollado de forma preliminar para que sea compatible solo con openSUSE 15.0 y 15.1.

  3. En el mismo directorio creamos el archivo Readme.txt, asignamos los permisos, lo editamos:
    [root@testsrv openSUSE]# touch Readme.txt
    [root@testsrv openSUSE]# chmod 644 Readme.txt
    [root@testsrv openSUSE]# vim Readme.txt
    
    Y le agregamos el siguiente contenido que permitirá recordar en el futuro como proceder con la instalación del agente pre-configurado en una máquina cliente con la distro openSUSE:
    README:
    
    1)- Para instalar el Agente OCS Inventory en una openSUSE Linux
    tenemos que abrir una consola o conectarnos desde PuTTY a la pc
    openSUSE, conectarnos al equipo con el usuario root y
    verificamos la version de openSUSE que tiene instalado el equipo:
    
        opensusecli:~ # cat /etc/os-release
    
    
    2)- Descargamos el script ocsinstaller-opensuse-agent.sh desde
    el servidor testsrv.gknet.local con el siguiente comando:
    
        opensusecli:~ # wget -N http://testsrv.gknet.local/ocsagents/openSUSE/ocsinstaller-opensuse-agent.sh --no-proxy
    
    
    3)- Ejecutamos el script instalador del Agente OCS y pasamos
    como argumento la contrasenia del usuario de conexion con el
    siguiente comando:
    
        opensusecli:~ # sh ocsinstaller-opensuse-agent.sh password_ocsagents
    
    
    4)- Con estos pasos al finalizar el agente ya deberia estar
    instalado correctamente y haber informado al servidor sobre
    el estado del equipo en donde se instalo el agente.
    
  4. A continuación solo nos resta seguir los pasos del archivo Readme.txt para instalar el agente en una pc con la distro openSUSE 15.0 o 15.1. Comenzamos por conectarnos con el usuario root y verificar la versión:
    opensusecli:~ # cat /etc/os-release
    NAME="openSUSE Leap"
    VERSION="15.1"
    ID="opensuse-leap"
    ID_LIKE="suse opensuse"
    VERSION_ID="15.1"
    PRETTY_NAME="openSUSE Leap 15.1"
    ANSI_COLOR="0;32"
    CPE_NAME="cpe:/o:opensuse:leap:15.1"
    BUG_REPORT_URL="https://bugs.opensuse.org"
    HOME_URL="https://www.opensuse.org/"
    opensusecli:~ #
    
    Descargamos el script de instalación ocsinstaller-opensuse-agent.sh:
    opensusecli:~ # wget -N http://testsrv.gknet.local/ocsagents/openSUSE/ocsinstaller-opensuse-agent.sh --no-proxy
    --2020-04-27 00:36:34--  http://testsrv.gknet.local/ocsagents/openSUSE/ocsinstaller-opensuse-agent.sh
    Resolviendo testsrv.gknet.local (testsrv.gknet.local)... 192.168.1.10
    Conectando con testsrv.gknet.local (testsrv.gknet.local)[192.168.1.10]:80... conectado.
    Petición HTTP enviada, esperando respuesta... 200 OK
    Longitud: 2269 (2,2K) [application/x-sh]
    Grabando a: “ocsinstaller-opensuse-agent.sh”
    
    ocsinstaller-opensuse-agent.sh             100%[========================================================>]   2,22K  --.-KB/s    en 0s      
    
    2020-04-27 00:36:34 (265 MB/s) - “ocsinstaller-opensuse-agent.sh” guardado [2269/2269]
    
    opensusecli:~ #
    
    Y finalmente lo ejecutamos para instalar el agente:
    opensusecli:~ # sh ocsinstaller-opensuse-agent.sh passwagentes
    Cargando datos del repositorio...
    ...
    ...
    Setting OCS Inventory NG server address... 
    Looking for OCS Invetory NG Unix Unified agent installation... 
    ocsinventory agent presents: /usr/bin/ocsinventory-agent 
    Setting crontab... 
    Creating /etc/ocsinventory-agent directory... 
    Writing OCS Inventory NG Unix Unified agent configuration 
    Creating /var/lib/ocsinventory-agent/https:__testsrv.gknet.local_ocsinventory directory... 
    Copying SNMP MIBs XML files... 
    Activating modules if needed...
    New settings written! Thank you for using OCS Inventory 
    Can't open display
    opensusecli:~ #
    
  5. Una vez finalizado la instalación recomendamos revisar la hora en que está programada la ejecución diaria del agente OCS Inventory, ya que suele asignar horarios aleatorios que pueden caer a media noche donde probablemente el equipo esté apagado. Para ello editamos el archivo ocsinventory-agent ubicado en el directorio /etc/cron.d:
    opensusecli:~ # vim /etc/cron.d/ocsinventory-agent
    
    Y verificamos que la hora programada (resaltada en rojo) sea correcta, si figura un horario en que el equipo probablemente esté apagado (medianoche, madrugada, etc.) cambiamos a una hora en que el equipo normalmente se encuentra encendido.
    PATH=/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/lib/mit/sbin
    0 15 * * * root /usr/bin/ocsinventory-agent --lazy > /dev/null 2>&1
    
    Si hemos realizado un cambio al archivo cron ocsinventory-agent reiniciamos el servicio crontab:
    opensusecli:~ # systemctl restart cron
    
  6. Por otro lado, si queremos ejecutar el agente de forma manual podemos ejecutar desde la línea de comandos la siguiente directiva:
    opensusecli:~ # /usr/bin/ocsinventory-agent
    Can't open display 
    opensusecli:~ #
    
  7. Finalmente podemos verificar en la consola de administración OCS Inventory del servidor testsrv donde ya debería aparecer la entrada para el equipo opensusecli:


Instalación del Agente OCS en equipos con CentOS 8 Linux

  1. Para las distribución Linux CentOS 8 podemos instalar los paquetes a partir del repositorio oficial, para lo cual comenzamos por conectarnos a nuestro equipo cliente e instalamos y activamos el repositorio EPEL (Extra Packages for Enterprise Linux) requerido para suplir algunas dependencias.
    [root@centoscli ~]# yum --enablerepo=extras install epel-release
    
  2. Luego procedemos a descargar e instalar el repositorio ocsinventory-release-latest que contiene los paquetes requeridos para instalar el agente OCS Inventory:
    [root@centoscli ~]# wget https://rpm.ocsinventory-ng.org/ocsinventory-release-latest.el8.ocs.noarch.rpm
    [root@testsrv ~]# yum install ocsinventory-release-latest.el8.ocs.noarch.rpm
    
  3. Para la instalación del Agente OCS Inventory debemos ejecutar el siguiente comando:
    [root@centoscli ~]# dnf --enablerepo=PowerTools --enablerepo=epel-playground install ocsinventory-agent
  4. A continuación tenemos que agregar en el archivo de configuración ocsinventory-agent.cfg del directorio /etc/ocsinventory las directivas de configuración del usuario y la contraseña de autenticación HTTP requerida por el servidor OCS Inventory, que deben ir encriptados en Base64 para que el servidor no los rechace:
    [root@centoscli ~]# echo user=$(echo -n 'ocsagentes' | base64) >> /etc/ocsinventory/ocsinventory-agent.cfg
    [root@centoscli ~]# echo password=$(echo -n 'passwagentes' | base64) >> /etc/ocsinventory/ocsinventory-agent.cfg
    
    Luego editamos el archivo ocsinventory-agent.cfg:
    [root@centoscli ~]# vim /etc/ocsinventory/ocsinventory-agent.cfg
    
    Y comentamos la directiva local (resaltada en rojo), descomentamos la directiva server que debe tener asignada la URL del servidor (resaltado en amarillo) y al final le agregamos las directivas adicionales ssl y realm (resaltadas en verde). Debería quedar similar a lo que sigue:
    # 
    # OCS Inventory "Unix Unified Agent" Configuration File
    #
    # options used by cron job overides this (see /etc/sysconfig/ocsinventory-agent)
    #
    
    # Server URL, unconmment if needed
    server = https://testsrv.gknet.local/ocsinventory
    #local = /var/lib/ocsinventory-agent
    
    # Administrative TAG (optional, must be filed before first inventory)
    # tag = your_tag
    
    # How to log, can be File,Stderr,Syslog
    logger = Stderr
    logfile = /var/log/ocsinventory-agent/ocsinventory-agent.log
    
    # Server HTTP Basic Auth data:
    user=b2NzYWdlbnRlcw==
    password=cGFzc3dhZ2VudGVz
    ssl = 0
    realm = "OCS Inventory agent area"
    
    OBS: Es importante recordar que la directiva realm es muy importante y debe tener el mismo texto a la directiva AuthName configurada en la sección de Apache Auth Basic del servidor OCS Inventory, caso contrario el servidor generará un error 401 Unauthorized.

  5. A continuación ya podemos probar la ejecución del agente:
    [root@centoscli ~]# /usr/sbin/ocsinventory-agent
    
  6. Si bien ya existe una tarea programada configurada para el servicio OCS Inventory en el directorio /etc/cron.hourly, la misma solo funciona si se activa en el archivo de configuración /etc/sysconfig/ocsinventory-agent. En vez de eso yo prefiero configurar una tarea programada con una configuración personalizada para que el agente se ejecute por día, para lo cual primero creamos el archivo ocsinventory-agent en el directorio /etc/cron.d y luego lo editamos:
    [root@centoscli ~]# touch /etc/cron.d/ocsinventory-agent
    [root@centoscli ~]# vim /etc/cron.d/ocsinventory-agent
    
    Y una vez adentro agregamos la siguiente directiva para que cada tarde a las 15:30 horas se ejecute el agente:
    # Tarea programada para la ejecucion diaria del agente OCS Inventory.
    30 15 * * * root /usr/sbin/ocsinventory-agent --lazy > /dev/null 2>&1
    
    Realizado lo anterior salimos del archivo y reiniciamos el servicio crontab para que los cambios tomen efecto:
    [root@centoscli ~]# systemctl restart crond
    
    Y con eso ya tenemos el agente funcionando para la distribución Linux CentOS 8.


Captura de la información recopilada por el servidor OCS Inventory

Para finalizar quisiera compartir unas capturas de la interfaz de administración del servidor OCS Inventory con los registros de inventario de las computadores que fueron reportadas por los agentes instalados en los pasos previos.





Como se puede observar en las capturas previas, la información de los tres sistemas operativos fueron reportados adecuadamente al servidor por los agentes, un hito con el cual puedo dar por finalizado el artículo. 

Comentarios