Juin 232011
 

Voici un script qui regarde si l’espace disponible pour un crash dump est suffisant ou pas.
bien évidemment, il faut le lancer avant que la machine ne freeze.

Download : checkdumpsize.sh

#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin
SAVECRASH_DIR="/var/adm/crash"

[ -f /etc/rc.config.d/savecore ] && . /etc/rc.config.d/savecore
[ -f /etc/rc.config.d/savecrash ] && . /etc/rc.config.d/savecrash
[ -f /etc/rc.config.d/savecrash ] || {
	echo "ERROR: /etc/rc.config.d/savecrash defaults file MISSING"
	exit 0
}

Print_data () {
	printf " %4s Size Mem dump %6d\n" "$1" $MEM_DUMP_SIZE

	if [ "$MEM_DUMP_SIZE" -lt "$LV_DUMP_SIZE" ]
	then 
		printf " Size Disk dump     %6d OK\n" $LV_DUMP_SIZE
	else
		printf " Size Disk dump     %6d Error\n" $LV_DUMP_SIZE
	fi

	if [ "$MEM_DUMP_SIZE" -lt "$FS_DUMP_SIZE" ]
	then 
		printf " Size free Dir      %6d OK\n" $FS_DUMP_SIZE
	else
		printf " Size free Dir      %6d Error\n" $FS_DUMP_SIZE
	fi

	printf "\n"
}

MEM_DUMP_SIZE=$( /sbin/crashconf -v |grep "Total pages included in dump"| cut -d":" -f2 )
MEM_DUMP_SIZE=$( echo $MEM_DUMP_SIZE |awk '{ printf ("%d\n", ($1 * 4 / 1024)) }' )
FS_DUMP_SIZE=$( bdf $SAVECRASH_DIR |grep -v used | awk '{ print $4 }' )
FS_DUMP_SIZE=$( echo $FS_DUMP_SIZE |awk '{ printf ("%d\n", ($1 / 1024)) }' )
LV_DUMP_SIZE="0"

for SIZE in $( /sbin/crashconf -v |grep "dev" | awk '{ print $3 }' )
do
	LV_DUMP_SIZE=$(expr $SIZE + $LV_DUMP_SIZE)
done

LV_DUMP_SIZE=$( echo $LV_DUMP_SIZE |awk '{ printf ("%d\n", ($1 / 1024)) }')

printf "\n                     Data in Mb\n"
Print_data ""

MEM_DUMP_SIZE=$(echo $MEM_DUMP_SIZE |awk '{ printf ("%d\n", ($1 * 105 / 100)) }')
Print_data "+5%"

MEM_DUMP_SIZE=$(echo $MEM_DUMP_SIZE |awk '{ printf ("%d\n", ($1 * 1047 / 1000)) }')
Print_data "+10%"

MEM_DUMP_SIZE=$(echo $MEM_DUMP_SIZE |awk '{ printf ("%d\n", ($1 * 1091 / 1000)) }')
Print_data "+20%"

il affiche l’espace dispo pour maintenant et aussi si la mémoire utilisée augmente de +5, +10 et +20%.
on peut donc prévoir un rajout d’espace disque.

exemple de sortie du script:
Continue reading »

Juin 202011
 

script permettant un affichage amélioré de : bdf

bdf affiche généralement sur 2 ligne une info concernant un point de montage si celui-ci dépasse 80 caractère, ce qui est souvent le cas.

ce script affiche chaque enregistrement sur une seule ligne, avec en sus, des infos comme le nombre d’inodes et le type de filesystème.

la version perl de ce script fonctionne très bien.
cependant, perl n’est pas présent sur tout les serveurs.

voici donc la version ksh.

Download : bdfa.sh


 Publié par à 12 h 47 min  Taggué avec :
Juin 152011
 

j’ai eu un filesystème à 90% ce Week-End.
j’ai eu beau chercher partout avec « find » et « du », rien a faire, je ne trouvais pas ce qui clochait.

la seule explication que j’ai pu trouver était : les fichiers sont sous un point de montage,on ne peut pas les voir.
seulement voila, on ne démonte pas un filesystem sur un serveur en production pour voir s’il y a des fichiers en dessous !
heureusement, il y a toujours une solution xD
Continue reading »

 Publié par à 13 h 03 min  Taggué avec : ,
Juin 152011
 

Testé sur HP-UX

veuillez vérifier le chemin de /bin/printf et /bin/echo

détection de la taille de l’écran.
affichage sans débordement à moins que l’un des choix soit lui même plus grand que le taille de cet écran.

cette fonction prend en argument un liste de valeur et retourne cette liste comme un menu.
ce menu sera adapté à la taille de votre terminal.

si la taille ne peut pas être détectée, l’affichage sera un choix par ligne.
Continue reading »

Juin 152011
 

avec awk sur des multiples de 1024
pour mémoire

petit awk pour calculer les octets en Koctet

$ echo 1023 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
1
$ echo 1024 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
1
$ echo 1025 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
2
$ echo 4095 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
4
$ echo 4096 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
4
$ echo 4097 |awk '{ if($1<1025){print "1";exit}else{x=$1}; x = $1<1025 ? 1025 : $1 ; x /= x>1024 ? 1024 : 0 ; printf("%dn", x += int(x)<x ? 1 : 0) }'
5
Juin 152011
 

si vous avez un netmask du style: fffcac00
voici comment le convertir avec sed/awk:

$ echo fffcac00 |sed 's/\(..\)/\1 /g' |awk '{printf ("%d.%d.%d.%d\n","0x"$1,"0x"$2,"0x"$3,"0x"$4)}'
255.252.172.0

– on sépare tout les deux caracteres par un espace.
– on utilise awk pour travailler sur chaque champ séparé par un espace.
– on utilise le printf de awk pour convertir l’hexa en décimal.

Juin 152011
 

pas trop besoin d’explication pour ce script, a prendre tel quel quasiment:

Download : disable_inetd_svcs.sh

#!/usr/bin/ksh

echo "   --> Configuration des services inetd"

# Liste des services à désactiver.
DISABLES="bootps finger uucp gssd ncpm-pm registrar
         rpc.rexd rpc.rstatd rpc.rusersd rpc.rwalld rpc.rquotad rpc.sprayd
         ncpm-hip ftp telnet shell exec ntalk swat
         klogin klogind discard chargen kshell klogin
         recserv tftp daytime printer time echo"

awk -v TODEL="$DISABLES" '
   BEGIN { split(TODEL ,del) ; }
   {
      for ( n = 1 ; n in del ; n++) {
         if (del[n] == "") {
            next ;
         } else if ($1 == del[n]) {
            printf("#%s\n",$0) ;
            next ;
         }
      }
      if ($1 ~ /^rpc$/) {
         for ( n = 1 ; n in del ; n++) {
            if (del[n] == "") {
               next ;
            } else if ($9 == del[n]) {
            printf("#%s\n",$0) ;
            next ;
         }
      }
   }
      print $0 ;
   }' template.txt >| template.new.txt

PS: si c’est pour utiliser tout de suite, oubliez pas de recharger la config avec inetd -c

Juin 152011
 

ce script n’est pas de moi mais c’est un bon aide mémoire sur les bitwise

#!/bin/ksh
 
typeset -i2 mask=255
 
[[ $# != 2 ]] && {
   echo "Usage: $0 ipaddress subnetmask"
   exit 1
}
 
SaveIFS=$IFS
IFS=.
set -A IParr $1
set -A NMarr $2
IFS=$SaveIFS
 
typeset -i2 ipbin1=${IParr[0]}
typeset -i2 ipbin2=${IParr[1]}
typeset -i2 ipbin3=${IParr[2]}
typeset -i2 ipbin4=${IParr[3]}
 
typeset -i2 nmbin1=${NMarr[0]}
typeset -i2 nmbin2=${NMarr[1]}
typeset -i2 nmbin3=${NMarr[2]}
typeset -i2 nmbin4=${NMarr[3]}
 
echo
echo "       IP Address: $1"
echo "      Subnet Mask: $2"
echo "  Network Address: $((ipbin1 & nmbin1)).$((ipbin2 & nmbin2)).$((ipbin3 & nmbin3)).$((ipbin4 & nmbin4))"
echo "Broadcast Address: $((ipbin1 | (mask ^ nmbin1))).$((ipbin2 | (mask ^ nmbin2))).$((ipbin3 | (mask ^ nmbin3))).$((ipbin4 | (mask ^ nmbin4)))"
echo
Juin 152011
 
Download : nettl.sh

#!/bin/ksh

PATH="/usr/sbin:/usr/bin:${PATH}"

TMPCONF=/tmp/${0##*/}.${RANDOM}.conf
cp /dev/null ${TMPCONF}
V_PROG=${0}

#------------------------------------------------------------------------------#
###                   fonction d'arret du programme                         ####
arret_du_prog () {
	echo "Vous trouverez l'historique de l'affichage dans le fichier /tmp/${V_PROG##*/}.log"
	[ -f "${V_LOCK}" ] && rm "${V_LOCK}"
	[ -f "${TMPCONF}" ] && rm "${TMPCONF}"
	nettl -traceoff -entity all 2>/dev/null
	exit ${1:-0}
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
###                   fonction d'affichage de l'aide                        ####
Usage () {
	cat <<EOF
Usage:
       $V_PROG &#91; -e entity &#93; -f filtre valeur &#91; ... -f filtre valeur ... &#93;

   entity est 'all' par defaut et peut etre:
      ip
      tcp
      udp
      driver
      icmp
      nfs
      loopback
      x25
      igmp

   filtre peut etre une des valures suivantes:
           Layer Type     Filtre         Description
           _____________________________________________________________
           Layer 1        dest           hardware destination address
                          source         hardware source address
                          interface      software network interface
           _____________________________________________________________
           Layer 2        ssap           IEEE802.2 source sap
                          dsap           IEEE802.2 destination sap
                          type           Ethernet type
           _____________________________________________________________
           Layer 3        ip_saddr       IP source address
                          ip_daddr       IP destination address
                          ip_proto       IP protocol number
           _____________________________________________________________
           Layer 4        tcp_sport      TCP source port
                          tcp_dport      TCP destination port
                          udp_sport      UDP source port
                          udp_dport      UDP destination port
                          connection     a level 4 (TCP, UDP) connection
           _____________________________________________________________
           Layer 5        rpcprogram     RPC program
                          rpcprocedure   RPC procedure
                          rpcdirection   RPC call or reply

   pour valeur a vous d'associer en fonction du filter.

exemples:
	# pour voir les paquets tcp source et destination du port 21:
	$V_PROG -e all -f tcp_sport 21 -f tcp_dport 21
EOF
exit ${1:-0}
}
#------------------------------------------------------------------------------#

#------------------------------------------------------------------------------#
###                   Analyse des arguments                                 ####
while &#91; "${#}" -ne "0" &#93;
do
	case $1
	in
		-e) # nettl entity
			if &#91; "$2" = "all" &#93;
				then
					V_ENTITY=all
				else
					V_ENTITY=ns_ls_${2}
			fi
			shift 2
		;;
		-f) # netfmt filters
			&#91; -z "$2" -o -z "$3" &#93; && echo "Merci de specifier un filtre" && usage
			&#91; "$(echo $2 |cut -c1)" = "-" -o "$(echo $3 |cut -c1)" = "-" &#93; && {
				echo "'-f ${2} ${3}' n'est pas une liste d'arguments valides"
				Usage
			}
			echo "filter $2 $3">> ${TMPCONF}
			shift 3
			;;
	esac
done

# Il faut des options de filtre a netfmt, sinon, pas d'interet
[ -z "$(cat ${TMPCONF})" ] && {
	echo "Merci d'ajouter un filtre avec l'option '-f'."
	Usage
}

trap arret_du_prog 1 2 3 11 13 15

V_LOCK=/tmp/${0##*/}.lock
if [ -f "${V_LOCK}" ]
	then
		echo "Erreur: ${0##*/} est deja en cours d'utilisation"
		arret_du_prog 1
	else
		touch "${V_LOCK}"
fi

# Test de demarrage de nettl
if [ -z "$(UNIX95= ps -e -o args |grep "^/usr/lbin/ntl_reader " |grep -v grep)" ]
	then
		echo "nettl n'est pas demarre, veuillez lancer nettl pour activer les fonction de trace reseaux"
		echo "pour lancer nettl il faut que la variable NETTL soit positionne avec '1' dans le fichier /etc/rc.config.d/nettl"
		echo "ensuite, lancer la commande suivante: /sbin/init.d/nettl start"
		arret_du_prog
fi

# affichage des infos resales
nettl -traceon all -entity ${V_ENTITY:-all} |netfmt -F -N -n -l -c ${TMPCONF} |tee /tmp/${0##*/}.log

arret_du_prog

faut avouer, je suis un peu pro hpux mais dès fois, on se rend compte qu’il y a des choses bien chez les autres, je prend l’exemple de snoop chez solaris, une commande livrée en standard qui équivaut à un nmap allégé.
sous hpux, on a bien nettl mais son utilisation est tellement obscure qu’il n’est pas facile de s’y retrouver.

voici donc un script qui va résoudre ce problème en simplifiant tout ça, lancer et arrêter le daemon nettl lancer les bonnes commandes etc…, voici son usage:

Usage:
 ./nettl.sh [ -e entity ] -f filtre valeur [ ... -f filtre valeur ... ]
 
 entity est 'all' par defaut et peut etre:
 ip
 tcp
 udp
 driver
 icmp
 nfs
 loopback
 x25
 igmp
 
 filtre peut etre une des valures suivantes:
 Layer Type     Filtre         Description
 _____________________________________________________________
 Layer 1        dest           hardware destination address
 source         hardware source address
 interface      software network interface
 _____________________________________________________________
 Layer 2        ssap           IEEE802.2 source sap
 dsap           IEEE802.2 destination sap
 type           Ethernet type
 _____________________________________________________________
 Layer 3        ip_saddr       IP source address
 ip_daddr       IP destination address
 ip_proto       IP protocol number
 _____________________________________________________________
 Layer 4        tcp_sport      TCP source port
 tcp_dport      TCP destination port
 udp_sport      UDP source port
 udp_dport      UDP destination port
 connection     a level 4 (TCP, UDP) connection
 _____________________________________________________________
 Layer 5        rpcprogram     RPC program
 rpcprocedure   RPC procedure
 rpcdirection   RPC call or reply
 
 pour valeur a vous d associer en fonction du filter.
 
exemples:
 # pour voir les paquets tcp source et destination du port 21:
 ./nettl.sh -e all -f tcp_sport 21 -f tcp_dport 21

ce script m’a déjà fait gagner du temps, j’espère qu’il en sera de même pour vous.