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 |
---|---|
dependance necessaire |
|
readline |
|
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