Agent d’inventaire OCS-NG et clients légers

Depuis quelques années nous utilisons des clients légers HP pour lesquels nous avons développé une image sous linux (t5tux). Cette drôle d’idée présente de nombreux avantages:

  • On ne dépend de personne pour les mises à jour des client ( RDP, Citrix et autres… ).
  • Cette image a été faite quand HP ne proposait pas linux sur ses clients légers.
  • La même image fonctionne sur plusieurs générations de clients.
  • La config est téléchargée en TFTP.
  • L’image se met à jour toute seule avec PXE.
  • On apprend plein de choses…

Bref… l’histoire continue avec un nouveau problème: inventorier ces postes avec OCS-NG.

OCS dispose d’un agent d’inventaire pour linux mais celui-ci est assez lourd. De plus, il dispose d’un grand nombre de fonctionnalités inutiles dans notre cas. Nous souhaitons un minimum d’infos: numéro de série, model, ip, mac…

La communication entre l’agent et le serveur se fait avec un fichier XML compressé ou non avec ZLIB et transmis dans une reqûete de type POST. Pourquoi ne pas générer un XML minimaliste et l’envoyer nous même ?

Un simple script bash, épaulé de quelques utilitaires: dmidecode, busybox, wget fera l’affaire.


#! /bin/sh

model=`/usr/local/sbin/dmidecode -s system-product-name`
type=`/usr/local/sbin/dmidecode -s baseboard-product-name`
bytes=`free -k | grep Mem | awk '{ print $2 }'`
memory=$(($bytes/1024))
bytes=`fdisk -l | grep Disk | grep da | cut -f2 -d, | awk '{ print $1 }'`
disk=$(($bytes/1024/1024))
serial=`/usr/local/sbin/dmidecode -s system-serial-number`
hwaddr=`ifconfig eth0 | grep HWaddr | sed "s/.*HWaddr \(.*\)/\1/"`
ip=`ifconfig eth0 | grep "inet addr" | sed "s/.*addr:\(.*\) B.*/\1/"`
tag=`hostname | cut -f1 -d-`
hostname=`hostname`

echo "Model: $model"
echo "Ram: $memory"
echo "Disk: $disk"
echo "Serial: $serial"
echo "Mac: $hwaddr"
echo "ip: $ip"
echo "tag: $tag"
echo "hostname: $hostname"

cat << EOF > /tmp/inventory.xml


  
    
      TAG
      $tag
    
    
      $serial
      Hewlett-Packard
      Hewlett-Packard
      $serial
      Hewlett-Packard
      $model - $type
      $serial
    
    
      131071
      $memory
      $hostname
      T5TUX
      t5tux
      Physical
    
    
      eth0
      $ip
      $hwaddr
      Ethernet
    
    
      FLASH
      $disk
      disk
    
  
  $hostname-9999-01-01-01-01-01
  INVENTORY


EOF

wget --post-file=/tmp/inventory.xml http://ocs-ng.xxxx.fr/ocsinventory

Quelques astuces:

  • wget avec un « –post-file monfichier » ou curl avec un « –binary-data @monfichier » permettent de poster des données.
  • le CHECKSUM à 131071 indique que toutes les données sont modifiées. J’ai trouvé cette info sur un forum mais pas dans la doc officielle.
  • Le client léger est en lecture seule du coup le DEVICEID ne peut être stocké. La date servant à sa génération est falsifiée: « 9999-01-01-01-01-01 »

Très simple et pas forcément très élégant mais ça marche très bien !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.