systemx

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - solaris

Fil des billets - Fil des commentaires

mardi, juin 23 2009

Compilation plugins nagios sous Solaris 10

Les plugins nagios compilent sans problème sous solaris 10 excepté check_mysql. La cause est la methode de creation des options de compilation lors du ./configure.
Solaris 10 dispose de packages mysql lors de l'install (SFW). Ceux ci sont compilés avec le Sun Studio et contiennent des flags incompatibles avec gcc. Faisant la compilation des plugins nagios avec gcc, ca plante immanquablement. Un moyen de résoudre le problème est d'utiliser une version des librairies et utilitaires de mysql compilés avec gcc. Pour ce faire il faut utiliser le package coolstack de sun. Ensuite bien positionner son environement :
Correct
plugins $ which mysql_config 
/opt/coolstack/mysql_32bit/bin/mysql_config
plugins $ mysql_config --cflags
-I/opt/coolstack/mysql_32bit/include/mysql -I/opt/coolstack/include -D_REENTRANT
-fPIC -DHAVE_RWLOCK_T -DUNIV_SOLARIS
Pas bon
plugins $ which mysql_config
/usr/sfw/bin/mysql_config
plugins $ mysql_config --cflags
-I/usr/sfw/include/mysql -xstrconst -mt
En effet le -xstrconst n'est pas reconnu par gcc. La compile plantera avec un message du genre :
gcc: language strconst not recognized
gcc: check_mysql.c: linker input file unused because linking not done
Finalement il reste à positionner son environement :
plugins $  env | grep PATH
LD_LIBRARY_PATH=/opt/coolstack/lib/:/usr/lib:/usr/sfw/lib

PATH=/opt/coolstack/mysql_32bit/bin/:/usr/sfw/bin/:/usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/ccs/bin
Et utiliser la commande suivante pour compiler le tout :
plugins $ ./configure --without-ipv6 --with-openssl=/usr/sfw/lib \
--with-ps-command="/usr/bin/ps -eo 's uid pid ppid vsz rss pcpu etime comm args'"\
--with-ps-format="%s %d %d %d %d %d %f %s %s %n" --with-ps-cols=10\
--with-ps-varlist='procstat,&procuid,&procpid,&procppid,&procvsz,&procrss,&procpcpu,procetime,procprog,&pos'
plugins $ gmake
Les arguements à rallonge sur ps est pour faire comprendre la syntaxe de ps solaris à Nagios, ne pas utiliser ipV6 et donner la bonne lib ssl.

jeudi, mars 19 2009

Quel process ouvre quel port sous solaris

Comment savoir qui écoute sur quel port, question inévitable sur unix/linux.
On utilise en général lsof mais sur solaris on peut faire plus simple grace au script pcp.
se-srm-dev srmadm # ./pcp -p 587 
PID Process Name and Port
_________________________________________________________
9163 /usr/lib/sendmail 587
sockname: AF_INET 0.0.0.0 port: 587
_________________________________________________________
Pratique non !
C'est un script trouvé sur cette page.
Voici le code modifé pour checker si l'utilisateur est bien root :
#!/usr/bin/ksh
ID=`id | cut -f 2 -d '=' | cut -f 1 -d '('`
if [ $ID -ne 0 ] ;
then
echo >&2 "Need to be run by root"
exit 1
fi
i=0
while getopts :p:P:a opt
do
case "${opt}" in
p ) port="${OPTARG}";i=3;;
P ) pid="${OPTARG}";i=3;;
a ) all=all;i=2;;
esac
done
if [ $OPTIND != $i ]
then
echo >&2 "usage: $0 [-p PORT] [-P PID] [-a] (Wildcards OK) "
exit 1
fi
shift `expr $OPTIND - 1`
if [ "$port" ]
then
# Enter the port number, get the PID
#
port=${OPTARG}
echo "PID\tProcess Name and Port"
echo "_________________________________________________________"
for proc in `ptree -a | awk '/ptree/ {next} {print $1};'`
do
result=`pfiles $proc 2> /dev/null| egrep "port: $port$"`
if [ ! -z "$result" ]
then
program=`ps -fo comm= -p $proc`
echo "$proc\t$program\t$port\n$result"
echo "_________________________________________________________"
fi
done
elif [ "$pid" ]
then
# Enter the PID, get the port
#
pid=$OPTARG
# Print out the information
echo "PID\tProcess Name and Port"
echo "_________________________________________________________"
for proc in `ptree -a | awk '/ptree/ {next} $1 ~ /^'"$pid"'$/ {print $1};'`
do
result=`pfiles $proc 2> /dev/null| egrep port:`
if [ ! -z "$result" ]
then
program=`ps -fo comm= -p $proc`
echo "$proc\t$program\n$result"
echo "_________________________________________________________"
fi
done
elif [ $all ]
then
# Show all PIDs, Ports and Peers
#
echo "PID\tProcess Name and Port"
echo "_________________________________________________________"
for proc in `ptree -a | sort -n | awk '/ptree/ {next} {print $1};'`
do
out=`pfiles $proc 2>/dev/null| egrep "port:"`
if [ ! -z "$out" ]
then
name=`ps -fo comm= -p $proc`
echo "$proc\t$name\n$out"
echo "_________________________________________________________"
fi
done
fi
exit 0
Sous linux
/ # fuser -n tcp 8080
8080/tcp:             8349
/ # lsof -i :8080
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
java    8349 tomcat    3u  IPv4 2435417       TCP *:tomcat (LISTEN)
#### SHOW TIMER
/ # netstat -nao
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Timer
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0     48 172.31.208.143:22       172.26.44.48:13277      ESTABLISHED on (0.33/0/0)
tcp        0      0 172.31.208.143:22       172.28.120.138:4508     ESTABLISHED keepalive (1857.58/0/0)
udp        0      0 172.31.208.143:32770    172.31.208.50:514       ESTABLISHED off (0.00/0/0)
#### SHOW PID/PRG
/ #  netstat -lnp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      8349/java           
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      8349/java           
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2473/portmap        
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      8349/java           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2980/sshd