(Courriels de diversion: <honorait@etudierai-reer.com> <nord-africaines@universaliser-grossiere.com> <brancherent@autopsie-escomptant.com> <taquinez@haranguerez-retreindre.com> <balayerez@patte-rimeur.com> <amertume@tacheriez-perseveraient.com> <oppressants@admissions-sechee.com> <barbouillant@desequilibrees-fouettant.com> <ramona@kilometrer-lamentiez.com> <anticonstitutionnelles@promontoires-betonneuse.com> )


L'un des princpaux bugs reste l'impossibilité d'imprimer sur une seule page.
Le script semble mieux marcher sous debian et mandrake.
Le script génére un fichier html du nom de la machine, par exemple
localhost.html

#!/bin/bash

#Ce script est sous licence GPL.
#Ce script a été créé pour répondre au besoin du CULTe (LUG de toulouse)
# http://www.culte.org

#Ce script donne certaines des caractéristiques principales d'une machine.
#auteur: Jean-Michel Gay
#date: 6 décembre 2004
#date:19 décembre 2004: retouches, suite aux tests de la veille (heure
française).

#on ne genére que du html; pas de texte
OUTPUT=html
verbose=off

###########################" Quelques routines générales

#html:balise de début de table
html_tab_start ()
{
	echo "<table>"
}

#html:balise de fin de table
html_tab_stop ()
{
	echo "</table>"
}

#html:balise internes à la table
html_tab_line ()
{
	echo "<tr>"
	echo "<td>"
	echo $1
	echo "</td>"
	echo "<td>"
	echo $2
	echo "</td>"
	echo "</tr>"
}

#html: création d'une table d'une ligne
html_make_sample_table ()
{
	html_tab_start
	sed 's!^\(.*\)$!<tr><td>\1</td></tr>!g' |
	sed 's!:!</td><td>!g'
	html_tab_stop
}

# création d'une table d'une ligne
make_sample_table ()
{
	if [ html = $OUTPUT ]
	then
		html_make_sample_table
	else
		cat
	fi
}

#indentation d'un flux
indent ()
{
	if [ html = $OUTPUT ]
	then
		if [ text2 = "$1" ]
		then
			sed 's!^\(.*\)$!\&nbsp;\&nbsp;\&nbsp;\1<br />!g'
		fi
		cat
	else
		sed "s/^/    /g"
	fi
}

#affichage d'un titre de section
section ()
{
	echo
	if [ html = $OUTPUT ]
	then
		echo "<h4>"
	fi
	echo $1 :
	if [ html = $OUTPUT ]
	then
		echo "</h4>"
	fi
}

###########################" Routines de détéction

#détection du système
#Donne la version du noyau, et le nom de la distribution
#note: j'ai un doute sur le issu. Dans mon cas, ca donne Mandrake 10.
detect-sys ()
{
	kern=`uname -r  `
	syst=`cat /etc/issue | head -n 1`
	# FIXME : issue semble intéressant pour une Debian, ou une Mandrake
	# Il ne l'est pas pour une s*ware

	html_tab_start
	html_tab_line "noyau" "$kern"
	html_tab_line "système" "$syst"
	html_tab_stop
}


#detection du cpu
#en se basant sur les infos de /proc
detect-cpu ()
{
	cat /proc/cpuinfo |
	grep -e "^\(model name\|cpu MHz\|bogomips\)"
}

#détéction de la mémoire RAM.
detect-mem ()
{
	cat /proc/meminfo |
	grep "MemTotal"

	#experimental: semmble détécter les barettes!
	cat /proc/mtrr | sed "s!^.*size=\(.*\):.*write-\(.*\),.*!\2 : \1!g" |
		sed "s/back/barette/g" |
		sed "s/combining/video/g"
}

#detection des modules  ''hard''
#En fait, on ne s'interesse qu'aux modules qui nous intéressent.
#Mais quels sont-ils?
detect-mod ()
{
	html_tab_start
	lsmod | grep -v Module|
	(
		while read a b
		do
		(
			#echo $a
			desc=`modinfo $a |
				grep  "^description:"  | sed 's/^description://g' `
				#grep -v "^depends:"  |
				#grep -v "^alias:" |
				#grep -v "^parm:"|
			case $desc in
				*Audio*  | *Midi*   | *sound*  | *Sound*   )
				#FIXME: est on intéréssé par les modules de son?
				;;
				*ether* | *Ether*  | *Modem*  )
					#echo $a $desc
				html_tab_line "$a" "$desc"
				;;
			esac
			#echo "### " $a $desc | indent
		)
		done
	)
	html_tab_stop
}

#detection des disques
#On récupére les informations principales sur les 4 disques IDE.
detect-disk ()
{
	for disk in hda hdb hdc hdd
	do
		DSK=/proc/ide/$disk
		if [ -d $DSK ]
		then
			media=`cat $DSK/media`
			model=`cat $DSK/model`
			echo $disk: $media: $model
			(
			if [ cdrom != $media ]
			then
				capacity=`cat $DSK/capacity`
				geometry=`cat $DSK/geometry`
				echo "capacité: " $capacity "blocs/secteurs"
				echo "géométrie:" $geometry
			fi
			#echo $media
			#echo $model
			) | indent text2 | sed "s!^!::!g"
		fi
		if [ on = $verbose ]
		then
			# Tant que l'on y est: liste des partitions
			fdisk -l /dev/$disk | indent text2 | indent text2
		fi
	done
}

#Detection de la configuration réseau courante. (adresses IP).
detect-net ()
{
	ifconfig | grep "inet add?r"   | grep -v 127.0.0.1
}

#Detéction du matériel présent sur le bus PCI.
detect-pci ()
{
	lspci | grep "controller:" | sed "s/^..:..\.. //g" | sed 's!controller:!:!g'
}



###########################" Routines de détéction principale

#detection de tout
detect-all ()
{
host=`hostname `
today=`date  "+%A %d %B %Y"`

if [ html = $OUTPUT ]
then
	today="<small>  $today </small>"
fi
echo ":$host:$today" | make_sample_table

section "Système"
detect-sys | indent

section "Processeur"
detect-cpu  | make_sample_table

section "Mémoire"
detect-mem  | make_sample_table

section "Disques"
detect-disk | make_sample_table

section "Réseau"
detect-net | indent

section "Modules spécifiques"
detect-mod   | indent

section "Pci"
detect-pci   | make_sample_table
}

###########################" Verification de l'environnement d'execution du
script.

verif ()
{
user=`whoami`

if [ root != $user ]
then
	echo "Vous devez être root, pour lancer ce script!"
	exit 1
fi

if [ /bin/bash != $BASH ]
then
	echo "Désolé, ce script n'a été testé que sous bash!"
	exit 1
fi
}

###########################" Programme principal
verif

#RESULT=fiche.txt
SUFFIXE=".html"
RESULT=`hostname`$SUFFIXE
detect-all  > $RESULT

#cat $RESULT