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

Répondre à