Je pense que les ingénieurs compétents de Sun devraient se pencher sur
cette commande probablement responsable de la lenteur de smptach et
update_manager. Elle produit des séries de lignes par patch telles que :
120817-01.id=120817-01
120817-01.syn= SunOS 5.10_x86: at and batch patch
120817-01.rel=000 <<< bug ici
toujours 000
120817-01.pkg=SUNWcsu SUNWesu SUNWxcu4
120817-01.bko=true
120817-01.ins=CEST00septembre 2005,2005,2005, 09:02:20 <<< affichage
localisé anormal 3 fois 2005 aussi 00 bizare ?
120817-01.obs=
120817-01.req=
120817-01.inc= <<< toujours
vide
Cette commande est forkée régulièrement par update_manager avec l'option
-p.
On peut la lancer comme ceci car elle ne provoque que de l'affichage sur
stdout :
/usr/lib/patch/list_patches -p
et voir les horreurs affichées.
Pour voir le temps quelle consomme :
/bin/time /usr/lib/patch/list_patches -p > /dev/null
real 1:11.2
user 37.6
sys 9.0
Et cela sur un Pentium EM64T à 3,4 GHZ
Vous comprenez alors pourquoi on attend des minutes avec smpatch et
update_manager.
Si vous relisez le code, qui ne fait que 2 pages, il n'est pas optimisé
et comporte des bugs.
Le premier appel de la function convertDate est une aberration (la
function traite l'argument 6 alors qu'elle n'a qu'un seul argument le 1
qui lui n'est jamais utilisé ! ):
convertDate $RELEASE_DATE
Aussi l'affichage
echo $PATCHID=$CONVERTED_DATE
produit toujours NUMEROPATCH-XX=000
Soit c'est un bug soit c'est voulu et alors il est idiot de faire une
boucle sur tous les patchs pour trouver cette valeur.
Il y a des pipes qui pourraient être simplifiés de 3 à 2 niveaux
Pour trouver le numéro de patch,
showrev -p | grep '^Patch:' | cut -f2 -d
se remplace facilement par
showrev -p | cut -c 8-16
à condition toutefois qu'il y ait toujours un seul espace entre Patch:
et le numéro. Idem pour ce qui suit.
SYNOPSIS=`grep "^Synopsis: " $PATCH_HISTORY_DIR/$PATCHID/README.$PATCHID
| cut -f2- -d':'`
echo $PATCHID.syn=$SYNOPSIS
Qu'on peut remplacer par :
SYNOPSIS=`grep "^Synopsis: "
$PATCH_HISTORY_DIR/$PATCHID/README.$PATCHID`
echo $PATCHID.syn=${SYNOPSIS#Synopsis: }
Idem pour la ligne suivante où on peut répéter ceci avec RELEASE_DATE
Enfin même problème sur la fin sur la commande
echo $PATCHID.inc=$INC
car $INC semble être toujours vide.
Enfin je récupère aussi une multitude de lignes :
juillet: bad number
septembre: bad number
etc.
Probablement un bug de locale si root a une locale autre que C lorsque
les patchs sont installés.
Lancer la commande avec LC_ALL=C ne change pas les choses.
Pour terminer il est totalement aberrant que le README soit utilisé pour
prendre les décisions sauf s'il n'est pas produit avec un éditeur de
texte et qu'il est généré à partir d'une base de données. Même dans ce
cas, il devrait y avoir un deuxième fichier associé pour extraire ces
informations avec plus de sureté. Une deuxième ligne Patch: ou
Synopsys:, etc. dans le README du patch casse le patch.
--
Christian Pélissier
Office National d'Études et de Recherches Aérospatiales
BP 72 92322 Chatillon
Tel: 33 1 46 73 44 19, Fax: 33 1 46 73 41 50
_______________________________________________
Solaris_fr liste de diffusion en français pour Solaris, sur toutes architectures
[email protected]
http://x86.sun.com/mailman/listinfo/solaris_fr