unix4fun

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

vendredi 30 décembre 2011

Et son nom, il le signe de la pointe de l'épée ...

... ou à la fin de son mail (je sais c'est pas ça la chanson).

Et comme il est fainéant, il aimerait bien que ce soit automatique. Enfin surtout ses copains (qui sont pires que lui).

Si vous avez suivi vous avez vu que je découvre Postfix et son monde merveilleux. Ainsi j'ai découvert (bin oui puisque je découvre) que dans ce contexte là, quand on parle de signature, on en revient souvent à altermime.

J'ai donc mis en place cet outil plutôt sympa grâce à tous les supers tutoriaux qu'on trouve sur le net. Ma maigre contribution de cette fin d'année sera de vous donner le script qui permet d'avoir :

  • un mécanisme simple pour gérer les signatures user par user
  • un mécanisme simple pour gérer un disclaimer générique à un domaine
  • un mécanisme, je vous le donne en mille, simple, pour ne pas bégayer (signature en double etc)

Voilà le bousin :

#!/bin/sh
ALTERMIME=/usr/bin/altermime
ALTERMIME_DIR=/var/spool/altermime
SENDMAIL=/usr/sbin/sendmail
TEMPFAIL=75
UNAVAILABLE=69
cd $ALTERMIME_DIR || { echo $ALTERMIME_DIR does not exist; exit $TEMPFAIL; }
trap "rm -f in.$$" 0 1 2 3 15
cat >in.$$ || { echo Cannot write to $ALTERMIME_DIR; exit $TEMPFAIL; }

# d'abord on teste le mail pour voir si on n'a pas déjà rajouté le disclaimer
processed=`grep -m 1 "X-Disclaimer: yes" in.$$`
if [ -z "$processed" ]; then
        from_address=`grep -m 1 "From:" in.$$ | cut -d '<' -f 2 | cut -d '>' -f 1 | tr '@' '_'`
        from_domain=`grep -m 1 "From:" in.$$ | cut -d '@' -f 2 | cut -d '>' -f 1`
        signature_file="/etc/postfix/altermime/signatures/$from_address"
        disclaimer_file="/etc/postfix/altermime/disclaimers/$from_domain"
        # on cherche si on a une signature pour cet expéditeur
        if [ -e ${signature_file}.txt -a -e ${signature_file}.html ]; then
                $ALTERMIME --input=in.$$ \
                --disclaimer=${signature_file}.txt \
                --disclaimer-html=${signature_file}.html \
                --xheader="X-Disclaimer: yes" || \
                { echo Message content rejected; exit $EX_UNAVAILABLE; }
        fi
        # puis si on a un disclaimer générique pour son domaine
        if [ -e ${disclaimer_file}.txt -a -e ${disclaimer_file}.html ]; then
                $ALTERMIME --input=in.$$ \
                --disclaimer=${disclaimer_file}.txt \
                --disclaimer-html=${disclaimer_file}.html \
                --xheader="X-Disclaimer: yes" || \
                { echo Message content rejected; exit $EX_UNAVAILABLE; }
        fi
fi

$SENDMAIL "$@" <in.$$
exit $?

Si vous vous intéressez un peu au sujet vous verrez qu'une grosse partie de ce script se trouve sur quasiment toutes les pages qui parlent d'altermime, je remercie donc son auteur initial.

En ce qui concerne mes ajouts :

  • pour les signatures il suffit de rajouter des fichiers utilisateur_domaine.tld.{txt,html} dans /etc/postfix/altermime/signatures avec dedans ce qui va bien
  • pour les disclaimers génériques, dans /etc/postfix/altermime/disclaimers des fichiers domaine.tld.{txt,html} selon la même philosophie
  • pour l'anti bégaiement (qui se produit rarement mais dans des cas de redirection entre domaines), un simple X-Header

Voilà, je pense que c'est à peu près tout !

lundi 17 octobre 2011

Chacun sa route, chacun son chemin, passe le message à ton voisin ...

En ces temps de restriction budgétaire et de dégraissage du mammouth, chacun se doit d'y aller de son petit effort pour réduire les coût. En ce qui me concerne, cela s'est concrétisé par un peu de tuning sur un serveur de mail postfix/docevot/amavis-et-ses-copains increvable afin de l'utiliser pour plusieurs domaines qui n'ont rien à voir entre eux.

Mon besoin, simple en soit, et, au final, simple à traiter, se résume ainsi :

  • 2 organisations, avec deux domaines (organisation1.fr et organisation2.com)
  • 2 smarthosts (mx.organisation1.fr et mx.organisation2.com)
  • 1 serveur mail pour gérer les deux domaines, mais chacun utilisant en entrée et en sortie son smarthost (relayhost chez postfix) respectif


Je n'insulterai personne en expliquant comment gérer un smarthost (transport.map et relayhost sont nos amis) ou comment rajouter le support d'un domaine ...

Pour ce qui est d'utiliser un smarthost spécifique en sortie, c'est là que la magie de postfix opère : il suffit d'utiliser la directive bien nommée sender_dependent_relayhost_map avec en paramètre un fichier au format "transport", ce qui donne la chose suivante :

@organisation1.fr       [mx.organisation1.fr]
@organisation2.com      [mx.organisation2.com]


Et voilà, comme ça tout le trafic entrant et sortant passe par les smarthosts respectifs des deux organisations.

vendredi 16 septembre 2011

SPLONK !

Si, comme moi, vous vous battez continuellement dans vos logs avec grep/sed/awk/cut/tail/paprika (cherchez pas c'est de l'humour), alors vous avez certainement deja entendu parlé de splunk. Pour faire très court, splunk, c'est un peu le Google des logs : c'est ultra pratique (et intuitif) si vous cherchez à faire une recherche dans 45 millions de logs.

Seulement voilà, splunk est payant, et même plutot cher si vous souhaitez l'intégrer dans un environnement de hosting par exemple. Alors le reflexe habituel quand on est un gros radin comme moi, c'est de trouver une alternative gratuite, mais jusqu'à présent, c'etait un peu l'age de pierre chez la concurrence (non je ne citerai personne).

Jusqu'à present :)

Tout a fait par hasard, je suis tombe sur un billet de ce monsieur en chemise a carreaux (kof). Et la.. ce fut l'illumination alors je souhaitais -sous la menace- vous faire partager cette découverte !

jeudi 31 décembre 2009

Vas-y, montre moi tes doigts ?!

Tu aimes Netfilter mais voilà, tu voudrais bien aussi faire... de l'OS fingerprinting ? C'est possible depuis la version 2.6.31, grâce au module xt_osf qui a été inclu officiellement. Donc voilà comment ça marche, un petit exemple :

  1. insmod ./xt_osf.ko
  2. ./nfnl_osf -f ./pf.os
  3. iptables -I INPUT -j ACCEPT -p tcp -m osf log 0 ttl 2

Tout d'abord un commentaire sur pf.os, c'est le fichier utilisé par packet filter, donc le fichier de définition de p0f, le tool de mister Zalewski. Ensuite on fait un test de connexion, et on voit dans les logs :

Windows 2000:SP4 : 192.168.028.131:2007 -> 192.168.028.124:22 hops=0

L'archive pour le programme userland (nfnl_osf) et les infos sont sur le bleurg de l'auteur du patch initial : http://ioremap.net/projects/osf

samedi 20 juin 2009

un week end de glande, netbsd, un macmini..

J'ai recu un mac mini et j'ai installe un NetBSD dessus, comme c'est un tout petit peu different, voici quelques liens qui peuvent etre utiles a d'autres :

Alors comme c'est relou de compiler sur un truc pareil et que netbsd te permet de cross compiler sans effort, voila deux ligne de plus:

# ./build.sh -m macppc -T tooldir.NetBSD-5.0_STABLE-macppc tools
# ./build.sh -m macppc -T tooldir.NetBSD-5.0_STABLE-macppc kernel=GENERIC

et pratiques, au moins ca traine pas sur mon laptop de compet multicore avec une hotte et des plaques a inductions integree..

et voila la bete:

capsule# uname -a
NetBSD capsule.unix4fun.net 5.0 NetBSD 5.0 (GENERIC) #0: Sun Apr 26 22:53:55 UTC 2009  builds@b4.netbsd.org:/home/builds/ab/netbsd-5-0-RELEASE/
macppc/200904260229Z-obj/home/builds/ab/netbsd-5-0-RELEASE/src/sys/arch/macppc/compile/GENERIC macppc
capsule#

me reste juste a cross compiler qqes package!

mercredi 13 mai 2009

salade, tomates, oignons, sauce rouge, sauce blanche?!

A l'epoque j'ai fantasme sur un NAS NetBSD a base de HW RAID (ou du RAIDframe) et de cgd le tout en sfs, nfs, cifs etc...

un petit NAS maison, avec du hotplug tout ca, les finances n'etaient pas terribles a l'epoque alors j'ai laisse tomber...

Aujourd'hui je me demande comment refaire le coup, j'ai bien reflechis a Solaris X ou OpenSolaris mais bon niveau empreinte memoire,

je cite: "c'est sympa Solaris, mais qu'est ce que ca suce..." et c'est clair qu'il suce, j'apprends petit a petit a domestiquer le "biniou" (c) et avec ZFS y a quand meme un joli fantasme...

En cherchouillant un peu je suis tombe sur les deux projets suivants:

En gros, des gens (bravo messieurs) qui se sont dit, on va gzip, bzip (ou soyons fou, soyons jeune, soyons mode) xz une installation et son empreinte memoire afin que ca puisse de "runner"sur du "petit" matos.

Ca a l'air sympa, le monsieur arrive a faire tenir un OpenSolaris sur 50 MB avec ZFS/NFS/SAMBA et l'admin qui faut pour runner ca...

Ca m'a fait tout chose, il ne me reste plus qu'a patienter (ou participer pour ceux qui ont du temps libre) pour que ca:

soit enfin stable et puisse encrypter le root pool. a suivre!!

lundi 20 avril 2009

OpenSolaris c'est bon comme des pates aux jambon

Alors voila, j'etais en b104, j'ai decide de tenter la premiere methode d'upgrade pour SXCE aka "liveupgrade"

J'ai suivi betement des instructions que de gentilles personnes ont ecrites (comme un bon mouton!), genre:

Ca a marche du premier coup...*blaze*...

mais bon petit suspense au reboot, plus d'opengl, plus de "desktop effects", donc plus de compiz-pour-brancher-les-filles-quand-elles-viennent-chez-toi... du coup, j'ai vu ca et la COUP DE THEATRE:

# svccfg -s application/opengl/ogl-select setprop options/vendor=nvidia
# svcadm restart application/opengl/ogl-select
# reboot

et au reboot, opengl etait revenu!!! la raison est expliquee ici

voila now:

[3] eau@deep:~ 
$ uname -a
SunOS deep 5.11 snv_112 i86pc i386 i86pc

Et le tour est joue (merci google!), alors comme je sais qu'il y a bcp de moutons comme moi, si ca peut aider!

mercredi 14 janvier 2009

Dtrace le seul tool qui transforme tes testicules en boule a facettes! (c) bibi

J'ai decouvert Dtrace, alors pour partager mon bonheur et commencer avec dtrace, je conseille THE GUIDE, simple, rapide, clair, didactique, etanche! j'en suis au chapitre 12!!

Pour ceux qui sont curieux ou on envie de tester/voir/gratouiller et avoir une vision full poilue!

DTRACE la TORAH

Bonne lecture!!.


[...]

bordel... qu'est ce que... elfsign(1) ?!?!?!

$ elfsign 
elfsign: invalid number of arguments
usage:
        elfsign sign [-a] [-v] [-e <elf_object>] -c <certificate_file>
                [-F <format>] -k <private_key_file> [elf_object]...
        elfsign sign [-a] [-v] [-e <elf_object>] -c <certificate_file>
                [-F <format>] -T <token_label> [-P <pin_file>] [elf_object]...
...
*COMMUNICATION COUPEE*

mardi 13 janvier 2009

C'est dans les vieux pots...

Bon, pour le boulot, je dois coder pas mal de trucs relatifs aux réseaux. Et c'est suite à mes pérégrinations sur le web que je suis tombé sur ce lien. Un vieuuuux lien, de plus de 10 ans d'âge, mais mis à jour, et très intéressant. Il parle notamment des mesures de la qualité d'un réseau, des méthodes à employer, et renvoie vers plein d'autres documentations. Je me régale, personnellement.

Je mets le tag "code", parce que ça file plein d'idées de trucs à coder :-)

Youpla, c'est par ici

mardi 4 novembre 2008

Fait *wizwiz* avec ton rezal

En étant tombé sur ce truc il y a déjà un ptit moment, je trouvais sympa le visuel. Le problème est que INAV ne gère pas le format netflow. Alors quand on a déjà son archi sous netflow, on peut être intéressé par nvis, dont vous remarquerez (ou pas) la ressemblance.

En creusant un ptit peu plus, on tombe sur la thèse d'un bonhomme qui en parle (entre autre) et nous renvoie sur le toolkit du projet.

Enfin, après vous avoir fait baver, sachez que les sources de ce truc sont introuvables, donc si quelqu'un les a vu passer !@#?

PS : pour ceux qui trouvent que netflow sent pas bon du genou, il y a ce cher sflow, jdis ca comme ca.

dimanche 24 août 2008

NetBSD, openvpn et les 42 passphrases...

J'ai un blem j'utilise assez souvent openvpn et en fonction de l'endroit ou je vais j'ai besoin de tel ou tel access VPN sur telles ou telles resources plus ou moins en meme temps etc.. bref j'ai besoin de plusieurs "profils" utilisateur.

Depuis des mois, je me tape l'edition du /etc/rc.conf et apres je tape la passphrase 2 ou 3 fois vu que j ai 2 ou 3 necessaires... enfin bref, j'en ai eu marre alors j 'ai fait un "hack" tout bete et tout simple en qqes etapes.

le plan:

  • un fichier encrypted avec ma clef pub qui contient la passphrase.
  • un script qui mets a la disposition d'openvpn cette passphrase
  • qqes hack dans les scripts de demarrage et les fichiers de conf.

1 . le fichier: key.asc
il contient la clef utilise pour unlocker le cert utilise pour l'auth, il doit donc rester prive!

2. le script de demarrage /usr/pkg/etc/rc.d/openvpn:

la ligne suivante a ete modifie:

openvpn_start()
{
    : ${openvpn_cfg="*.conf"}
[...]
  for f in $openvpn_cfg; do
      doit="$command --askpass `/bin/cat /home/user/.openvpn` 
$command_args --config $f"
      if ! eval $doit; then
[...]
}

3. le fichier /etc/rc.conf, legerement modifie:

[...]
openvpn=YES
. /etc/openvpn_current
[...]

4. le script moisi, ovpn.sh

ce script va choisir/preparer mon "profil" et demarrer les instances openvpn en utilisant la cle temporairement accessible.

#!/bin/sh
#
#
# I sick of typing my password for all VPN instances 
# all the time... $#@!$#@!$#@! :(
#
# there is probably some potential races
#

export TMPDIR=/home/user

MKTEMPCMD=/usr/bin/mktemp
GPGCMD=/usr/pkg/bin/gpg
VPNCMD=/usr/pkg/etc/rc.d/openvpn
RMCMD=/bin/rm
TOUCHCMD=/usr/bin/touch
CHMODCMD=/bin/chmod
CHOWNCMD=/usr/sbin/chown


TMPPREFIX=".openvpn"
VPNCIPHR=/home/user/.local/key.asc
VPNPLAIN=/home/user/.openvpn

VPNCMD_STOP=stop
VPNCMD_RESTART=restart

# OPENVPN PRECONFIG
CURR_CFG=/etc/openvpn_current
HOME_CFG="openvpn_cfg=\"client_vpn1.conf client_vpn2.conf client_vpn3.conf client_vpn4.conf\""
LABS_CFG="openvpn_cfg=\"client_vpn1.conf client_vpn2.conf client_vpn3.conf client_vpn4.conf\""
OUTR_CFG="openvpn_cfg=\"client_vpn1.conf client_vpn2.conf client_vpn3.conf client_vpn4.conf client_vpn5.conf\""


TMPFILE=`${MKTEMPCMD} -t ${TMPPREFIX}`
#echo "[+] using ${TMPFILE}"

ovpn_start()
{
        ${TOUCHCMD} ${VPNPLAIN}
        ${CHOWNCMD} root:wheel ${VPNPLAIN}
        ${CHMODCMD} 600 ${VPNPLAIN}
        echo "$TMPFILE" > ${VPNPLAIN}
        ${GPGCMD} -d ${VPNCIPHR} > ${TMPFILE}
        ${VPNCMD} start
        ${RMCMD} -fP ${VPNPLAIN}
        ${RMCMD} -fP ${TMPFILE}
}

ovpn_stop()
{
        ${VPNCMD} stop
}

CMD=$1
CNF=$2

case ${CMD} in
        start)
                case ${CNF} in
                        home)
                                echo ${HOME_CFG} > ${CURR_CFG}
                        ;;
                        lab)
                                echo ${LABS_CFG} > ${CURR_CFG}
                        ;;
                        out)
                                echo ${OUTR_CFG} > ${CURR_CFG}
                        ;;
                esac
                ovpn_start
        ;;
        stop)
                ovpn_stop
        ;;
        restart)
                $0 stop
                $0 start ${CNF}
        ;;
        *)
                echo "$0 <start|stop|restart> [<home|lab|out>]"
                echo "home: home configuration"
                echo "lab : lab configuration"
                echo "out : untrusted out configuration"
        ;;

esac

5. L'explication,
le fichier rc.conf inclus un fichier qui est genere dynamiquement (/etc/openvpn_current) a chaque demande d'un nouveau "profil" celui ci donne a openvpn les fichier de conf a utiliser pour demarrer les differents VPN.

Le script de demarrage du package openvpn lance openvpn avec un nouveau parametre supplementaire " --askpass file " qui donnera la passphrase pour unlocker le certificat d'authentification.

Le script utilisateur ovpn.sh lui s'occupe simplement de cree le /etc/openvpn_current, il gpg -d le fichier de clef key.asc le rajoute dans un fichier temporaire, demarre openvpn et efface ce fichier immediatement apres.

La derniere mouture qui tourne chez moi est tres legerement different en cela que je ne stocke pas la passphrase de mon cert dans un fichier encrypted en gpg, je "read" directement du tty et je feed immediatement le fichier temporaire.

Voila c'etait tout con mais maintenant pour demarrer mes 4-5 vpns en tapant juste ma passphrase gpg, je fais en sudo :

# ovpn.sh start home
You need a passphrase to unlock the secret key for
user: "..."
1024-bit ELG-E key, ID XXXXXXXX, created 2004-05-27 
(main key ID XXXXXXXX)

Enter passphrase:

Et voila! En esperant que ca en inspire d'autres, commentaires are welcome! :)

lundi 31 mars 2008

hack, carton, clavier, keyboard, solaris 10

Groumpf, j'ai des ptites merdes et je m y fais tout doucement a ce solaris convivial en station de travail pour bosser, il restait neanmoins un probleme a la con que je n'arrivais pas a regler.

le KEYBOARD!!!!

eh ouais, j ai un clavier sun type6 USB sur une sunblade 1500 et ce gentil clavier, bah il est tellement intelligent qu'il dit a solaris de quel type il est, du coup moi je suis bien nique et je me retrouve avec le mapping de roumains suisse (QWERTZ$#@$!@, fr ou de j en sais rien!).

Du coup je cherche un truc qui ressemble a "setxkbmap" avec Xorg et la horreur, je ne trouve rien! Comme ca me saoule, je tripatouille et je tombe sur les fichiers suivants :

  • /usr/openwin/share/etc/keytables/keytable.map
  • /usr/openwin/share/etc/keytables/xkbtable.map

En mattant dedans je trouves un moyen hyper laid d'avoir mon keyboard mapped en US, comme ca : keytable.map:

[...]
#6  27 Switzer_Fr6.kt
#6  28 Switzer_Ge6.kt
6 27 US6.kt
6 28 US6.kt
[...]

et xkbtable.map:

[...]
#6   27   sun/all(Switzer_Fr6_usb)     type6_euro_usb  fr_CH
#6   28   sun/all(Switzer_Ge6_usb)     type6_euro_usb  de_CH
6    27   sun/all(Switzer_Fr6_usb)     type6_euro_usb  us
6    28   sun/all(Switzer_Ge6_usb)     type6_euro_usb  us
[...]

Voila je suis une grosse truie, mais voila ca marche now je peux taper normalement sans faire AltGr + 1 pour avoir un | $#!@$#!$!#$!@ Bref c'est hyper laid, je trovuerai probablement la maniere clean de le faire plus tard ou si qqun veut bien me donner le truc..

HTH.

samedi 29 mars 2008

Unix Toolbox

Bon, ce lien a déjà probablement fait plein de fois le tour du Web Intéractif Multimédia Convivial 2.LOL, mais je le poste quand même :

 * UnixToolbox

Au menu : ben c'est simple, c'est un peu le couteau suisse de l'espace, il y a en gros TOUT ce qu'on a l'habitude d'oublier, pour diagnostiquer les problèmes qui apparaissent sur nos systèmes (Linux, *BSD, Solaris, ...), avoir des informations, etc.

A noter la racine de ce site, offrant un mini shell intéractif, avec des commandes à la con, genre "matrix", etc. Rigololesque.

Bref, à bookmarker/del.icio.us-iser, bleh.

vendredi 21 mars 2008

solaris, tips, crimes et botanique (planter des trucs)

dans les autres problemes de la semaine, je galere a avoir un beau firefox compile par mes soins, enfin ca compile mais ca runne pas. bref...

solaris 10 deja les systemes de packaging que j'ai teste et qui marche :

  • les packages natifs..
  • blastwave (pkg-get etc.. c'est hyper convi)
  • pkgsrc (cd /usr/pkgsrc && make blablablabla)

Je suis trop surpris par pkgsrc, ca marche quasi direct, avec le compilo SUN si on veut, j ai reussi (apres qqes patches quand meme) a compiler entierement xfce4 la derniere mouture en 64bits avec SUN Studio et ca fonctionne nickel, bref, pkgsrc bien!!!

et now je galere avec svcs... apres avor mendie a gauche a droite sur #u4f, alors maintenant j'ai trouve et je lis ca :

hth.

lundi 26 novembre 2007

encore un filesystem chiffre

Je ne le connaissais pas, eCryptfs utilise FIST et se veut "solide" (je ne sais pas vraiment ce qu'il en est), il rajoute des meta-data au files du FS pour que chaque fichier soit stockes avec ses params d'encryption etc.. enfin voyez par vous meme, je n'ai pas teste..

http://ecryptfs.sourceforge.net/

mardi 18 septembre 2007

ChironFS

Il y en a d'autres qui existent, ça n'est qu'un de plus sur la liste. Similaire à DRBD, voici ChironFS.

De nouveau, je n'ai pas testé, je ne sais pas si ça marche tout ça, ChironFS se base sur FUSE.

Faites partager l'expérience en cas de test.

edit#ppr : précision importante de Luis Furquim en commentaire. La différence conceptuelle majeure entre DRBD et ChironFS est au niveau auquel ils agissent : DRBD fonctionne au niveau du device là où ChironFS est au niveau du filesystem. Merci à lui.

jeudi 13 septembre 2007

openvpn et ocsp !

On est venu me parler dans l'oreille et me dire que openvpn parlait ocsp grâce à ça :

http://www.block64.net

Malheureusement je n'ai pas le temps de tester, donc si quelqu'un veut bien se donner la peine.

vendredi 7 septembre 2007

ubuntu jacky security

Un p'tit truc fait sympa et utile :

http://kernelsec.cr0.org/

Hope it helps.

mercredi 5 septembre 2007

Le noël argentin approche!

Ouhhhhh que c'est beau, le père noël existe alors vraiment !

http://www.netbsd.org/changes/#netbsd-4rc1 ftp://ftp.netbsd.org/pub/NetBSD-daily/netbsd-4-0-RC1/

NetBSD-4.0-RC1 !!!!!

Tout est dit !

vendredi 31 août 2007

le ps est en déroute

Alors là je suis fier de mon jeu de mot. Vraiment, hein..

Bon bah juste une petite news de rien : on remarque souvent qu'avec ps on a des résultats un peu chelous, voire parfois carrément aberrants, en terme d'utilisation de la mémoire. Y'a plusieurs raisons à ça. On regarde l'occupation mémoire d'un process via ps puis pmap :

$ ps -FC Thunar
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
poz       5426  5414  0  3409  4720   0 Aug26 ?        00:00:00 Thunar --sm-client-id 117f000101000118510838300000138390002 --daemon

Soit en gros 4M de RAM utilisée

$ pmap -d `pidof Thunar`
Address   Kbytes Mode  Offset           Device    Mapping
08048000     480 r-x-- 0000000000000000 008:00002 Thunar
080c0000       8 rw--- 0000000000077000 008:00002 Thunar
080c2000     260 rw--- 00000000080c2000 000:00000   [ anon ]
b727d000      64 r---- 0000000000000000 008:00002 Thunar.mo
b728d000      28 r---- 0000000000000000 008:00002 libexo-0.3.mo
[...]
b7eed000     100 r-x-- 0000000000000000 008:00001 ld-2.5.so
b7f06000       8 rw--- 0000000000019000 008:00001 ld-2.5.so
bff52000      84 rw--- 00000000bff52000 000:00000   [ stack ]
ffffe000       4 r-x-- 0000000000000000 000:00000   [ anon ]
mapped: 13640K    writeable/private: 792K    shared: 84K
$

On remarque que des segments de code sont comptés plusieurs fois (un segment pour la lecture, un pour l'exec, avec recouvrement). Bref, ça confirme juste ce qu'on sait déjà : ps se contente paresseusement d'afficher la quantité théorique maximale de mémoire utilisée (avec certains bouts de code en double, qui plus est), alors que les libs partagées sont pas exclusivement réservées à ce process... Bref, la "vraie" mémoire est indiquée en bas de l'output, "writeable/private: 792K".

$ cat > ~/bin/mem.sh
#!/bin/bash

function usage()
{
        echo "Usage: $(basename $0) PROCESS..."
        echo "display the (real) memory usage of processes"
}

if [ "$#" = "0" ]
then    usage
        exit 0
fi

OUT=
echo "memory usage:"

for i in $*
do
        OUT=$(pidof $i | cut -d' ' -f1)
        if [ "$OUT" = "" ]
        then    echo "[-] process '$i' does not exist"
        else    OUT2=$(pmap -d $OUT | grep private | awk '{print $4}')
                echo "[+] ${i} (pid ${OUT}): $OUT2"
        fi
done
^D
$ chmod +x ~/bin/mem.sh
$ shebang.sh ~/bin/mem.sh
$ mem.sh X firefox-bin ssh prout
memory usage:
[+] X (pid 4965): 415736K
[+] firefox-bin (pid 5582): 295068K
[+] ssh (pid 5580): 796K
[-] process 'prout' does not exist
$

Pour shebang.sh, cf. un commentaire ailleurs :)

Je sais pas trop sur les *BSD si pmap est dispo... feedback ? Pfff, 3:05 du mat', je vais être frais au taff, encore.

- page 1 de 2