(Courriels de diversion: <maintiendrions@merites-repensons.com> <epaississement@feutrer-adverbiaux.com> <commanditer@bacteriologie-numeroterait.com> <postiches@taille-issues.com> <benir@surmenerez-cariaient.com> <vouvoieront@tournebroche-enrobions.com> <voua@rarefieraient-dogmatiques.com> <devoile@egides-empesant.com> <absorbaient@terrassent-expeditifs.com> <coagulerais@elinguer-suspensions.com> )


Le Tue, 21 Dec 2004 01:36:23 +0100
jeanmichel.123@free.fr écrivait :
#!/bin/bash
# Distributed under the terms of the GNU General Public License v2

#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: 21 décembre 2004

#   TODO:  man page
#          
# Change History:
#               0.1 :
#		Philippe Coulonges (cphil@cphil.net)#			Introduction du changelog
#			Parsing des paramètres
#			Traitement du mode verbose
#			Traitemenent du help
#			Différentiation dans la détection de la distrib
#			Ajout du mode texte
#			Ajout de l'option de fichier de sortie
#			Passage en mode texte par défaut (mieux sur la sortie standard)

program_name=`basename $0`
program_version="0.1"
#on ne genre que du html; pas de texte
OUTPUT=txt
FILE=`hostname`
verbose=0

#########" Routines générales

vecho()
{
if [  1 = $verbose  ]; then
    echo $program_name: "$1" 1>&2;
fi
}

version()
{
    echo "$program_name $program_version"
    exit 0
}

aide()
{
    echo "\
Usage: $program_name [OPTION]
Détecte la configuration de la machine

  -h, --help                      affiche l'aide
  -o fichier                      sélectionne un fichier de sortie
  -t type                         sélection le type de la sortie.
                                  types valides : txt html
  -v                              mode verbeux (plus de messages)
      --version                   affiche la version du programme "

    exit 0
}

# loop over arguments
while [ $# -ne 0 ]; do
    case "$1" in
	-o)
	    shift
	    FILE=$1
	    ;;
	-t)
	    shift
            if [[ html = $1 ||txt = $1 ]]
	    then
	    	OUTPUT=$1
	    else
	        echo "Type $1 non reconnu"
		exit 0
	    fi
	    ;;
	-h)
	    aide
	    ;;
	--help)
	    aide
	    ;;
	--version)
	    version
	    ;;
	-v)
	    verbose="1"
	    ;;
	*)
	    aide
	    ;;
    esac
    shift
done

#########" Routines HTML
#html:balise de début de table
html_tab_start ()
{
	if [ html = $OUTPUT ]
	then
	echo "<table>"
	fi
}

#html:balise de fin de table
html_tab_stop ()
{
	if [ html = $OUTPUT ]
	then
	echo "</table>"
	fi
}

#html:balise internes à la table
html_tab_line ()
{
	if [ html = $OUTPUT ]
	then
	echo "<tr>"
	echo "<td>"
	fi
	echo $1
	if [ html = $OUTPUT ]
	then
	echo "</td>"
	echo "<td>"
	fi
	echo $2
	if [ html = $OUTPUT ]
	then
	echo "</td>"
	echo "</tr>"
	fi
}

#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.
#TODO : changer 
detect_sys ()
{
	kern=`uname -r  `

# On teste d'abord /etc/distrib-release
	distro_version_file=`find /etc -name *-release`
	vecho $distro_version_file
# Si ça marche pas, on essaye d'autres trucs connus
# pour deviner la distrib
	if [ ! -f $distro_version_file ]
	then
		[ -f /etc/slackware-version ] &&
distro_version_file="/etc/slackware-version"
		[ -f /etc/debian_version ] &&
distro_version_file="/etc/debian_version"
	fi

	syst_lsb='Distribution non basée sur la linux standard base'

# Une fois détectée, on applique un traitement adapté
	if [ -f $distro_version_file ]
	then
		distro_version=`cat $distro_version_file`
    		case "$distro_version_file" in
		/etc/lsb-release)
			syst_lsb=`cat | grep "ID" `
	       		syst_lsb="$syst_lsb",`cat /etc/lsb-release | grep
"RELEASE" `
	    		distro="";;
		/etc/redhat-release)
		distro="redhat"
	    	;;
		/etc/mandrake-release)
		distro="mandrake"
	    	;;
		/etc/gentoo-release)
		distro="gentoo"
	    	;;
		/etc/slackware-version)
		distro="slackware"
	    	;;
		/etc/debian_version)
		distro="debian"
	    	;;
		*)
		distro="inconnue"
		;;
		esac
	else
	distro="inconnue"
	fi
	vecho "distribution : $distro"

	html_tab_start
	html_tab_line "noyau" "$kern"
	html_tab_line "système LSB " "$syst_lsb"
	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 [ 1 = $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>"
else
	today="$today"
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
if [ `hostname` = $FILE ]
then
	detect_all
else
	RESULT=$FILE.$OUTPUT
	detect_all  > $RESULT
fi
#cat $RESULT



-- 
    > Toute machine qui se respecte a sa console sur un port serie...
:-)
     La question n'est pas de savoir si elle a une console sur port
série,
     mais de savoir de quelle planète provient le connecteur ;-)
        -- fr.comp.ordinosaures ---


-- 
Si dieux avait créé l'Homme avec de la toile émeri au creux des mains,
Il y aurait moins de branleurs.
	-- Pierre Desproges.

--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>