Sqlite pour l'administrateur systeme AIX

Creation: 19 avril 2010
Mise à jour: 12 decembre 2014
Version: 1.2
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2010-2014 Jean-Louis BICQUELET-SALAÜN

sqlite pour l administration systeme sous AIX

sqlite pour l administration systeme sous AIX

Pourquoi utiliser Sqlite ?

Et bien, J’avais un script écrit en shell, qui listait les packages de tous mes serveurs AIX, et qui regroupait et triait le tout dans un tableau au format <b>html</b>. Malheureusement, ce script était très long. J’ai donc eu l’idée d’utiliser un outil souple performant et léger.

sqlite fournit une base de donnée sans pour autant mettre en oeuvre toute une machine en oeuvre comme mysql ou PostgreSQL.

Ou trouver sqlite sous AIX ?

Le site où se trouve sqlite est PmWiki SQLite

Il est possible de recompiler sqlite, ce qui permet de disposer d’une version 32 bits ou 64bits.

Sinon les rpms sont disponibles en version précompilé en 32 bits, ce qui est suffisant pour l’utilisation qu’on désire en faire. J’ai mirroré ces fichiers et vous pouvez les télécharger ici:

Package Description

pkg-config-0.23-1.aix5.1.ppc.rpm

dependance necessaire

readline-6.1-3.aix5.1.ppc.rpm

readline

sqlite-3.6.23-1.aix5.1.ppc.rpm

sqlite3

Script d’exemple

Le script qui suit va créer une base lslpp.s3 qui va contenir une extraction des packages installés sur les serveurs du réseau. Le fichier liste_machines contient la liste de nos serveurs à raison d’un serveur par ligne. Le compte intranet est un compte présent sur tous nos serveurs, qui possède un certificat ssh permettant de lancer un script sur tous les serveurs sans avoir à entrer de mots de passe.

On extrait sur chaque serveur la liste des applications installées, puis on la formate en format csv en choisissant le caractère séparateur :. En effet, une virgule peut poser des problèmes puisque se caractère existe dans la description des packages.

Enfin, j’ajoute par la commande sed le nom du serveur avec chaque package.

#!/usr/bin/ksh

db="lslpp.s3"
sqlite3 $db "create table lpp(serveur varchar(12), package varchar(20),fileset varchar(30),
                              level varchar(8),state varchar(1),description varchar(50))"


for i in `cat liste_machines`
do
   echo $i
   ssh c92intra@$i lslpp -Lc | grep -v "#" | awk  -F ":" '{ print $1,":",$2,":",$3,":",
                                                            $6,":",$8 }' > lslpp.imp
   sed "s/^/$i: /" lslpp.imp > lslpp.imp2
   sqlite3 $db <<  'EOC'
.separator :
.import lslpp.imp2 lpp
EOC

done

Mise en forme

Nous disposons maintenant d’une base locale lslpp.s3 qui contient nos informations. On va écrire un petit script tout simple de mise en forme, composé d’un header de document, d’un tableau extrait par une requête SQL, et d’une fin de page. Cela donne ce script.

#!/usr/bin/ksh

db="lslpp.s3"

cat << 'HEAD'  > lslpp.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso8859_15" />
<meta name="generator" content="script shell 1.0" />
<title>Packages des serveurs  systeme AIX</title>
<body>
<p>
<table border=1>
<tr>
<th>serveur</th>
<th>package</th>
<th>fileset</th>
<th>level</th>
<th>state</th>
<th>description</th>
</tr>
HEAD

sqlite3 $db 'select * from lpp order by serveur,package,level' |awk -F "|" '{ printf 
   "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
   $1,$2,$3,$4,$5,$6 }' >> lslpp.html
   cat << 'FOOT' >> lslpp.html
</table>
</body>
</html>
FOOT