From 5b064fc43ab91493b70f965e342255a18984424a Mon Sep 17 00:00:00 2001 From: Dominique Fournier Date: Thu, 18 Aug 2011 12:40:54 +0000 Subject: [PATCH] Suppression de la majuscule dans le nom du paquet domcheck (Paquets Debian en minuscule) git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@410 bf3deb0d-5f1a-0410-827f-c0cc1f45334c --- check | 251 +++++++++++++++++++++++++++++++++++++++++++ check.conf | 55 ++++++++++ debian/README.Debian | 0 debian/changelog | 6 ++ debian/compat | 1 + debian/conffiles | 1 + debian/control | 11 ++ debian/copyright | 10 ++ debian/dirs | 1 + debian/docs | 0 debian/install | 2 + debian/rules | 57 ++++++++++ debian/source/format | 1 + debian/watch | 12 +++ 14 files changed, 408 insertions(+) create mode 100755 check create mode 100644 check.conf create mode 100644 debian/README.Debian create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/conffiles create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/dirs create mode 100644 debian/docs create mode 100644 debian/install create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch diff --git a/check b/check new file mode 100755 index 0000000..7c88227 --- /dev/null +++ b/check @@ -0,0 +1,251 @@ +#!/bin/bash + +## CHECK + +## Verifie que les programmes fonctionnent et les relance si ils sont en panne +## Doit etre lance par cron. On peut par exemple mettre un /etc/cron.d/check +## qui contient : +## * * * * * root /usr/sbin/check + +PATH="/sbin:/bin:/usr/sbin:/usr/bin" + +## Configuration dans un fichier exterieur : /etc/check.conf + +if [ "`whoami`" != "root" ]; then + echo "Check lance par un autre utilisateur que root : EXIT" + exit +fi + +RUNLEVEL=`runlevel | cut -f 2 -d ' '` +if [ $RUNLEVEL -eq 0 ] || [ $RUNLEVEL -eq 6 ]; then + echo "Arret ou reboot en cours : on sort" + exit +fi + +if [ -f "/tmp/check-bloque" ]; then + # Check est bloque par un programme externe : on sort + exit +fi + +function checklog() +{ + # Loggue dans /var/log/check.log tous les arguments passes a la fonction + # Ne doit pas se retrouver dans le fichier de configuration (sauf pour test + # de demarrage de l'application check) + echo "`date +"%b %d %T"` `hostname` check - $@" >> /var/log/check.log + if [ "$alerteAudio" == "TRUE" ]; then + rc=`/usr/bin/alerte.php "$@"` + if [ "$rc" != "OK" ]; then + echo $rc + fi + fi + if [ "$alerteNotify" == "TRUE" ]; then + rc=`/usr/bin/notify-send -u critical -t 2000 "$@"` + if [ "$rc" != "OK" ]; then + echo $rc + fi + fi +} + +function testps() +{ + if [ ! -e "/etc/init.d/$1" ]; then + echo "ERREUR : /etc/init.d/$1 introuvable (testps)" + else + if [ `ps -edf | grep -v grep | grep "$*" | wc -l` -eq 0 ]; then + checklog "Relance de '$*'" + /etc/init.d/$1 stop + /etc/init.d/$1 start + fi + fi +} + +function testpsStrict() +{ + # On rend le test plus strict en mettant un slash devant le nom du demon + if [ ! -e "/etc/init.d/$1" ]; then + echo "ERREUR : /etc/init.d/$1 introuvable (testpsStrict) " + else + if [ `ps -edf | grep -v grep | grep "/$*" | wc -l` -eq 0 ]; then + checklog "Relance de '$*'" + /etc/init.d/$1 stop + /etc/init.d/$1 start + fi + fi +} + +function testiptables() +{ + # Verifie que iptables est bien ferme + if [ ! -e "/etc/init.d/ipt4" ] && [ ! -e "/etc/init.d/ipt" ]; then + echo "ERREUR : /etc/init.d/ipt4 ou /etc/init.d/ipt introuvable (testiptables) " + else + if [ `/sbin/iptables -L -n | wc -l` -lt 10 ]; then + checklog "Relance de IPTables IPv4" + if [ -e "/etc/init.d/ipt4" ]; then + /etc/init.d/ipt4 start + else + /etc/init.d/ipt start + fi + fi + fi +} + +function testip6tables() +{ + # Verifie que ip6tables est bien ferme + if [ ! -e "/etc/init.d/ipt6" ]; then + echo "ERREUR : /etc/init.d/ipt6 introuvable (testip6tables) " + else + if [ `/sbin/ip6tables -L -n | wc -l` -lt 10 ]; then + checklog "Relance de IPTables IPv6" + /etc/init.d/ipt6 start + fi + fi +} + +function testDNS() +{ + # Verifie si le DNS a change pour l'adresse passe en argument + NEW="`host -t A $1 2>/dev/null`" + if [ "$?" != "0" ]; then return; fi + if [ "$NEW" != "`cat /var/lib/check 2>&1 /dev/null`" ]; then + checklog "Changement d'adresse pour $1 : `host -t A $1`" + echo "ALERTE : Nouvelle adresse DNS pour $1 :" + echo " Ancienne : `cat /var/lib/check 2>&1 /dev/null`" + echo " Nouvelle : $NEW" + host -t A $1 > /var/lib/check + fi +} + +function testdf() +{ + # Teste tous les disques et renvoie si le disque est plein a plus de 84% + # On peut aussi tester les disques unitairement : + # testdf /mnt + # On peut aussi tester unitairement avec une limite differente de 84% + # testdf /mnt 90 + if [ -z "$2" ]; then + limite=84 + else + limite=$2 + fi + if [ ! -z "$1" ]; then + fs="$1" + fi + IFS=" +" + for ligne in `df -P -l -x tmpfs -x devtmpfs $fs | sed '/Used Available/d'`; do + fs_space=`echo $ligne | awk '{print $5}'| sed 's/\%//'` + filesys=`echo $ligne | awk '{print $6}'` + if [ $fs_space -gt $limite ]; then + checklog "Systeme de fichier $filesys plein a $fs_space %" + echo "Systeme de fichier $filesys plein a $fs_space %" + fi + done +} + +function testPort() +{ + # Verifie si un port est actif + # Attend 3 parametres : l'adresse IP a tester, le port a tester et le + # fichier /etc/init.d/XX a relancer + if [ ! -e "/etc/init.d/$3" ]; then + echo "ERREUR : /etc/init.d/$3 introuvable (testPort)" + else + RESULTAT=`echo "QUIT" | nc -w1 $1 $2 2>&1` + if [ "$?" != "0" ]; then + checklog "Relance de $3 car injoignable par reseau" + echo "ALERTE : La machine `hostname` ne peut plus se connecter a " + echo "$1 port $2 : $RESULTAT" + echo "Relance de $3" + /etc/init.d/$3 stop + /etc/init.d/$3 start + fi + fi +} + +function testDDClient() +{ + # Verifie si ddclient est toujours actif. Pour cela, le processus doit avoir + # une ligne 'ddclient - sleeping for'. Si ce n'est pas le cas (test en cours) + # on attend 15 s et on refait le test. Si le test est toujours negatif on + # relance. + if [ ! -e "/etc/init.d/$3" ]; then + echo "ERREUR : /etc/init.d/$3 introuvable (testDDClient)" + else + LIGNE1=`ps -edf | grep -v grep | egrep "ddclient "` + LIGNE2=`echo $LIGNE1 | egrep 'ddclient - sleeping for|ddclient - (connecting to|reading from) checkip.dyndns.com port 80'` + if [ $? -ne 0 ]; then + checklog " DDCLIENT ERREUR 1 (LIGNE1=$LIGNE1///LIGNE2=$LIGNE2)" + ps -edf >> /var/log/check.log + checklog "ddclient non lance ou pas en mode sleep : relance" + echo "Relance de ddclient" + /etc/init.d/ddclient stop + /etc/init.d/ddclient start + fi + fi +} + +function testMount() +{ + # Verifie si le point de montage passe en argument est bien monte et en RW + # Si pas monte, on le monte. Si en RO, on le passe en RW + PNT=$1 + MNT=`egrep -v "^{none|rootfs|binfmt_misc|gvfs-fuse-daemon} " /proc/mounts | cut -d " " -f 2 | egrep "^$PNT$"` + if [ "$MNT" == "" ]; then + checklog "Disque $PNT non monte : remonte" + echo "Disque $PNT non monte : remonte" + mount $PNT + fi + ST=`egrep -v "^{none|rootfs|binfmt_misc|gvfs-fuse-daemon} " /proc/mounts | cut -d " " -f 2,4| egrep "^$PNT " | cut -d " " -f 2 | cut -d "," -f 1` + + if [ "$ST" == "ro" ]; then + checklog "Disque $PNT en RO : Passage en RW" + echo "Disque $PNT en RO : Passage en RW" + mount -o remount,rw $PNT + fi +} + +function testRepertoireVide() +{ + # Verifie que le repertoire passe en argument est bien vide + REP=$1 + if [ "`ls -1 $REP`" != "" ]; then + checklog "Repertoire $1 non vide" + echo "Repertoire $1 non vide :" + ls -1 $REP + fi +} + +function testBatterie() +{ + # Cette fonction teste la batterie de l'ordinateur si elle est dispo et envoie + # une erreur si le niveau tombe sous le seuil defini pour la batterie + # Recherche du seuil : + SEUIL=`grep "design capacity warning:" /proc/acpi/battery/BAT1/info 2>/dev/null | cut -d " " -f 4` + # Recherche de la capacite restante : + CAPA=`grep "remaining capacity:" /proc/acpi/battery/BAT1/state 2>/dev/null | cut -d " " -f 8` + if [ -n $SEUIL ] && [ -n $CAPA ] && [ $CAPA -lt $SEUIL ]; then + checklog "Batterie faible ($CAPA/$SEUIL)" + fi +} + +if [ ! -f "/etc/check.conf" ]; then + echo "Le fichier /etc/check.conf n'existe pas : EXIT" + exit +fi + +. /etc/check.conf + +if [ "$alerteNotify" == "TRUE" ] && [ ! -f "/usr/bin/notify-send" ]; then + echo "Check : alerteNotify demande mais /usr/bin/notify-send non disponible" + echo " apt-get install libnotify-bin" + exit +fi + +if [ "$alerteAudio" == "TRUE" ] && [ ! -f "/usr/bin/alerte.php" ]; then + echo "Check : alerte audio demandée mais /usr/bin/alerte.php non disponible" + echo " apt-get install cric-alerte" + exit +fi diff --git a/check.conf b/check.conf new file mode 100644 index 0000000..af17fa9 --- /dev/null +++ b/check.conf @@ -0,0 +1,55 @@ +## Le support de alerteAudio necessite l'installation du paquet cric-alerte +alerteAudio=TRUE +## Le support de notify necessite l'installation du paquet libnotify-bin +alerteNotify=FALSE + +## Liste des processus qui doivent etre actifs. +## Le lanceur doit porter le meme nom que le processus +#for process in {"apache2","sshd","postfix","ntpd","dovecot","spamd","mysql","qpsmtpd"}; do +# testps $process; +#done + +## On rend le test plus strict en mettant un slash devant le nom du demon +## Le lanceur doit porter le meme nom que le processus +#for process in {"postfix","ntpd","dovecot"}; do +# testpsStrict $process; +#done + +## Verifie que le pare-feu IPv4 est actif. Lanceur /etc/init.d/ipt4 +#testiptables + +## Verifie que le pare-feu IPv6 est actif. Lanceur /etc/init.d/ipt6 +#testip6tables + +## Penser que le point de montage DOIT etre dans /etc/fstab +## Ne mettre QUE le point de montage, pas le disque +## Cette fonction remonte le montage ou le repasse en RW si il passe RO +## Ne fonctionne pas sur les filesystems suivants : +## none,rootfs,binfmt_misc,gvfs-fuse-daemon +## voir dans /proc/mounts +#testMount /home + +## Verifie si le DNS change pour le nom passe en parametre +#testDNS fournier.homedns.org + +## Verifie la place occupee sur les partitions +## Par defaut, reagit si l'occupation depasse 84% pour tous les disques +#testdf +## Verifie seulement la partition passee en parametre +#testdf /mnt +## Verifie seulement la partition passee en parametre et avec l'occupation max +#testdf /mnt 90 + +## Verifie que le service est actif sur la machine et le port passé en argument +## Si le port ne fonctionne pas, utilise le lanceur passe en 3e argument +#testPort localhost 25 postfix +#testPort fournier.homedns.org 25 qpsmtpd + +## Verifie si le processus DDClient est bien present et pas bloque +#testDDClient + +## Verifie si le repertoire passe en argument est bien vide +#testRepertoireVide /var/spool/postfix/corrupt + +## Verifie si le seuil de la batterie est depasse et donc qu'il faut recharger +#testBatterie diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..e69de29 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..64eb4eb --- /dev/null +++ b/debian/changelog @@ -0,0 +1,6 @@ +domcheck (0.3-1) unstable; urgency=low + + * Initial release + + -- Dominique Fournier Thu, 2 Jun 2011 23:07:16 +0100 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/conffiles b/debian/conffiles new file mode 100644 index 0000000..0c7c6f0 --- /dev/null +++ b/debian/conffiles @@ -0,0 +1 @@ +etc/check.conf diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..80efa58 --- /dev/null +++ b/debian/control @@ -0,0 +1,11 @@ +Source: domcheck +Section: admin +Priority: optional +Maintainer: Dominique Fournier +Build-Depends: debhelper (>= 4.0.0) +Standards-Version: 3.6.2 + +Package: domcheck +Architecture: all +Depends: bash +Description: This software check if the system is correct : all the checked daemons are actives, the filesystem is not full, some special directories are empty... diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..ce25a7a --- /dev/null +++ b/debian/copyright @@ -0,0 +1,10 @@ +This package was debianized by Dominique Fournier on +Thu, 2 Jun 2011 23:12:16 +0100 for the first time. + +Copyright Holder: Dominique Fournier + +License: GPL v3 + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-3'. + diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..127051d --- /dev/null +++ b/debian/dirs @@ -0,0 +1 @@ +usr/sbin/ diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..e69de29 diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..e4fb7af --- /dev/null +++ b/debian/install @@ -0,0 +1,2 @@ +check usr/sbin/check +check.conf /etc/check.conf diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..a5d07aa --- /dev/null +++ b/debian/rules @@ -0,0 +1,57 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +clean: + dh_testdir + dh_testroot + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + dh_installdocs + dh_install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs +# dh_installdocs +# dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo +# dh_installman + dh_link +# dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_python +# dh_makeshlibs + dh_installdeb +# dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..6b2037b --- /dev/null +++ b/debian/watch @@ -0,0 +1,12 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +# Uncomment to examine a Webpage +# +# Uncomment to examine a Webserver directory +http://svn.fournier38.fr/ProgSVN/release/domcheck/domcheck-(.*)\.tgz