# [portage] Messages lors de la mise à jour

## morsafr

Salut à tous,

Lorsque je fais une mise à jour du style "emerge -u world", il se peut qu'emerge affiche différents messages pour avertir de manipulations à effectuer après la mise à jour du système. Par exemple, lors de l'install des pilotes nVidia, emerge indique qu'on peut changer la version d'OpenGL pour utiliser celle fournie par nVidia...

Pour être honnête, je dois avouer que je ne reste pas des heures devant mon PC à attendre la fin de la mise à jour.   :Smile: 

Ma question est donc la suivante : y a t-il un moyen de consulter ces messages après que la mise à jour ait eu lieu ?   :Question: 

 :Question:  Merci d'avance.

----------

## Tucs

normalement tu as les infos dans le .ebuild que tu as "emergé"

----------

## morsafr

Ok merci pour l'info   :Razz: 

----------

## DuF

Et sinon ce serait bien de faire le sujet de ton thread comme tous les autres, de la forme [CLASSE] problème

----------

## yaubi

Si ton fichier /etc/make.conf contient une ligne de la forme PORT_LOGDIR=/var/log/portage, chaque installation laissera un fichier d'évènements dans le répertoire indiqué. Dans le cas d'un emerge world, ce n'est pas très pratique.

Une autre solution consiste à utiliser script (packet sys-apps/util-linux) avant ton emerge. Script lance une nouvelle instance de ton shell et enregistre tout ce qui s'y passe. Par défaut, le fichier résultant est ./typescript. On peut sortir de la session script en tapant exit ou avec la combinaison de touches Ctrl+d.

La méthode que j'emploie est de lancer l'emerge dans un screen (packet app-misc/screen)avec l'option -L, qui lui demande de logguer tout ce qui se passe sur l'écran. Le fichier résultant est ./screenlog.0. L'avantage de screen par rapport à script est que s'y tu lances ton emerge à distance et que la connection est perdue (à cause d'une déconnection quotidienne par exemple). L'inconvénient de screen est qu'il redéfinit quelques raccourcis clavier bien pratiques utilisés par readline, comme Ctrl+a par exemple (= revenir au début de la ligne de commande) et qu'il devient alors impossible de remonter dans la console avec Shift+PageUp.

<OFF>

Tant que l'on parle de petits utilitaires de ce genre, laissez-moi vous présenter splitvt (packet app-misc/splitvt). Celui-là permet de découper une console en deux horizontalement, avec possibilité de naviguer entre les deux, de modifier le rapport de taille. C'est très pratique lorsqu'on veut avoir une page de manuel ouverte devant les yeux en même temps qu'un interpréteur de commande.

</OFF>

----------

## yuk159

 *yaubi wrote:*   

> Une autre solution consiste à utiliser script (packet sys-apps/util-linux) avant ton emerge. Script lance une nouvelle instance de ton shell et enregistre tout ce qui s'y passe. Par défaut, le fichier résultant est ./typescript. 

 

Merci pour l'astuce yaubi je connaissais pas  :Very Happy: 

Ya toujours la possibilte de rediger les sorties standards vers des fichiers (d'accord c'est un peut archaique mais c'est tres simple  :Razz: )

----------

## TGL

Thanks Yaubi, bon post.

 *yaubi wrote:*   

> Si ton fichier /etc/make.conf contient une ligne de la forme PORT_LOGDIR=/var/log/portage, chaque installation laissera un fichier d'évènements dans le répertoire indiqué. Dans le cas d'un emerge world, ce n'est pas très pratique.

 

Pas tres pratique c'est vrai :

 - y'a plein de fichiers, prefixes par des numeros ce qui rend pas la recherche du "bon" fichier tres pratique

 - les messages " * un info capitale" contiennent des caracteres d'echappement qui rendent les grep peu pratiques

Du coup, je me suis fait un ch'tit script qui :

 - sans arguments, affiche les einfos et autres ewarnings de tous les logs

 - avec un argument, affiche juste ceux des paquets dont le nom matche l'argument

Ca donne ca :

```
thomas@gromit gentoo $ ./portlog-info baselayout

########## baselayout-1.8.6.10 ##########

 

 * Checking if we need to tweak CONFIG_PROTECT_MASK

 

 * Building utilities...

 

 * Building sysvinit...

 

 * Installing utilities...

 

 * Installing sysvinit...

 

 * Removing invalid backup copies of critical config files...

 

 * Please be sure to update all pending '._cfg*' files in /etc are updated,

 * else things might break at your next reboot!  You can use 'etc-update'

 * to accomplish this:

 

 *   # etc-update

 

 * Please note that /sbin/update-modules moved to /sbin/modules-update

 * for consistency reasons.
```

Et voila le script ("portlog-info" chez moi) : 

```
#!/bin/bash

PORTLOGDIR="/var/log/portage"

cd ${PORTLOGDIR}

nocolor() {

   sed -e s:'[^[:print:]]'::g \

       -e s:'\[3.;01m'::g \

       -e s:'\[0m'::g $1

}

for logfile in *$1*

do 

   if [ 0 -ne "`nocolor ${logfile} | grep -c "^\ \*\ "`" ]

   then 

      echo

      echo -n "########## "

      echo -n ${logfile} | sed -e s:"^[0-9]*-":: -e s:".log$"::

      echo " ##########" 

      nocolor ${logfile} | sed -n -e "

      /^\ \*\ /{ 

      i

      p

      n

      :block

      /^\ \*\ /{

      p

      n

      b block

      }

      }"

   fi

done
```

 En gros, il vire les couleurs des fichiers, trouve ceux qui ont le bon nom et des lignes en " * qqch", et affiche ces lignes en essayant de garder separes les blocs de lignes. C'est ameliorable (on pourrait surement conserver les couleurs), mais bon, la flemme, c'est un peu chaud le sed comme ca la rentree...

<semi-off>

Ah, et puis je devie, mais tant qu'on parle de ce repertoire de logs... Il est pas gerable avec les scripts de rotation de logs classique (multitude de petits fichiers au lieu d'un seul gros fichier), donc moi ce que je fait c'est que je le nettoie avec "tmpreapper". Cf. la derniere ligne de mon "/etc/cron.daily/tmpreaper":

```
#!/bin/sh

/usr/sbin/tmpreaper --mtime-dir --symlinks 7d \

    --protect '/tmp/.X*-{lock,unix,unix/*}' \

    --protect '/tmp/.ICE-{unix,unix/*}' \

    /tmp

/usr/sbin/tmpreaper --mtime-dir --symlinks 7d /var/tmp

/usr/sbin/tmpreaper --mtime-dir --symlinks 14d /var/log/portage
```

 (enfin bon, le "clean" de portage vide deja les vieux logs, donc c'est pas indispensable, mais je sais pas, j'aime pas les vieux fichiers moi...)

</semi-off>

<off>

Desole pour les accents, ma touche Compose marche plus, bizarre... flemme de chercher pourquoi.

</off>

----------

## yuk159

Puree, faudrait carrement le mettre en tips ce thread   :Cool: 

----------

## TGL

Allez, le même, mais qui conserve les couleurs:

```
#!/bin/bash

# Usage: "portlog-info [pkg-name]"

PORT_LOGDIR="`sed -n s:^PORT_LOGDIR=::p /etc/make.conf`"

if [ -d "${PORT_LOGDIR}" ]

then

   cd ${PORT_LOGDIR}

else

   echo "PORT_LOGDIR not found."

   exit 1

fi

for logfile in $( ls *$1* 2> /dev/null )

do 

   if [ 0 -ne "`cat -v ${logfile} | grep -c "^\ \^\[\[..;01m\*"`" ]

   then 

      echo -n "########## "

      echo -n ${logfile} | sed -e s:"^[0-9]*-":: -e s:".log$"::

      echo " ##########" 

      sed -n -e "

      /^\ \o033\[..;01m\*/{ 

      i

      p

      n

      :block

      /^\ \o033\[..;01m\*/{

      p

      n

      b block

      }

      }" ${logfile}

      echo

   fi

done
```

----------

## yuk159

Merci encore m'sieur TGL pour ce script je viens encore de m'en servir et c'est tres pratique  :Mr. Green: 

----------

## TGL

J'ai une version plus complète sur le feu, mais c'est pas pour tout de suite, j'ai peu de temps ces jours ci. Les "features" seront en gros (copy/paste d'une vieille TODO):

```
# - des options pour dire quoi afficher: 

#   -e, --errors

#   -w, --warnings

#   -i, --infos

#   -p, --portage (les message portage "!!! blabla" et autres)

# (et on prend tout par défaut)

# - match + précis des noms de paquets (et version précise si spécifiée ?)

#   (regexp sur le nom, et '.*' par défaut)

# - option pour dire depuis quand les logs nous intérressent:

#   -s[x][u], --since=[x][u]

#   avec [x] un nombre et [u] une unité (h, d, m, y)

# - option pour accepter les logs monochrome: -m, --monochrome

#   (resultats ? si bon, alors virer option et conserver par défaut)

# - afficher la date du log
```

Si vous avez d'autres idée, c'est le moment.

----------

## yuk159

Bin deja t'as pense a plus de choses que moi   :Laughing: 

Mais effectivement, le script et deja bien pratique mais la ca deviendrait carrement royal  :Mr. Green: 

----------

## TGL

Voilà donc, après un petit oubli et un salutaire rappel de yuk dans un autre thread, une version plus évoluée du script "portlog-info". Vu qu'il  a grossi considérablement, je l'ai mis en téléchargement. 

En éspèrant que ce sera effectivement «royal», mais j'ai comme un doute...  :Wink: 

PS: il est nul ce nom, "portlog-info", y'a pas qlq'un qui aurait une meilleure idée ?

----------

## yuk159

Pourquoi pas portlog-tout-court  ?  :Laughing: 

Merci en tout cas TGL

----------

## ercete

Bon un ptit up parce qu'on en parle ces temps-ci  :Smile: 

et pour le nom:

emerlog --bof

emerde --ouais ok  :Very Happy: 

logaport ?

----------

## yoyo

 *TGL wrote:*   

> En éspèrant que ce sera effectivement «royal», mais j'ai comme un doute... 

 

J'utilise "portlog-info" depuis quelque temps déja et je le trouve "princier".

Il serait "royal" ( :Wink: ), s'il était possible de spécifier une date (par exemple) comme argument, afin qu'il n'affiche que les logs du dernier "emerge world" par exemple.

----------

## cylgalad

 *raoulchatigre wrote:*   

> Bon un ptit up parce qu'on en parle ces temps-ci 
> 
> et pour le nom:
> 
> emerlog --bof
> ...

 

emerde, il y a déjà un truc qui s'appelle comme ça :

http://emerde.freaknet.org/ en gros c'est portage pour slackware  :Laughing: 

Sinon portlog-info, très pratique (un peu lent toutefois  :Wink:  )

----------

## TGL

 *yoyo wrote:*   

> Il serait "royal" (), s'il était possible de spécifier une date (par exemple) comme argument, afin qu'il n'affiche que les logs du dernier "emerge world" par exemple.

 

Le --since (-s) ne fait pas l'affaire pour ça ? Moi je fait généralement des "-s1d" par exemple pour voir ce qui s'est fait dans la journée. Je vois pas exactement ce que tu voudrais, si tu peux détailler, je suis preneur. Mais bon, ce qu'il faudrait vraiment c'est exploiter le emerge.log aussi, ça permettrai par exemple d'avoir une option --last qui donne juste les infos relatives au dernier appel d'emerge, des trucs comme ça. Ce qui m'embête, c'est que ça va commencer à faire un truc compliqué pour du bash, faudrait que je le refasse en python. Enfin, un soir de désoeuvrement, pourquoi pas... Ah ouais, et puis si, y'a le problème que le emerge.log moi je le logrotate, et je suis probablement pas le seul. Comme logrotate est un peu crétin et fait les rotations sur des fichiers complets au lieu de les faire sur des demi-fichiers (ce qui assurerait qu'on a toujours du log à se mettre sous la dent), il faudrait que je feinte en allant aussi chercher dans le emerge.log.1.gz quand il existe, ou qqch comme ça.

Sinon, pour le nom, j'aimais bien "emerde" (j'ai passé le WE avec le dévelopeur de la "libcaca", ça influence...), c'est dommage que ce soit déjà pris ça. Je piocherai dans vos autres suggestions pour la prochaine release (quand y'en aura une...). Peut être qu'un truc commençant par "e" serait bien, vu que c'est +/- la convention pour les utilitaires gentoo. "elog" serait peut-être le nom le plus logique en fait, mais c'est un peu bateau...

----------

## yoyo

 *TGL wrote:*   

> Le --since (-s) ne fait pas l'affaire pour ça ? Moi je fait généralement des "-s1d" par exemple pour voir ce qui s'est fait dans la journée. Je vois pas exactement ce que tu voudrais, si tu peux détailler, je suis preneur.

 Ça, c'est déja excellent, c'est clair ... En fait, ce que je souhaiterai, c'est afficher les logs d'une date précise (pas forcément les derniers).

Je sais, c'est du chippotage alors ne te prends pas la tête pour ça (il est déja excellent comme ça ton soft) !!!

Sinon, pour le nom, tu peux jouer sur l'othographe et l'appeler "emmerde" mais comme c'est un soft qui permet justement de les éviter en accédant aux logs qu'on ne regarde pas forcément pendant l'emerge, j'aurais plutôt pensé à quelque chose du style "emmerde-free".  :Mr. Green: 

----------

## Mickael

Salut,

j'ai une petite question de débutant.

Dans le script de TGL on retrouve la ligne de code faisant référence à  PORT_LOGDIR dans le fichier /etc/make.conf.

Ma question est:

Doit-on remplacer dans le script la ligne suivante:

```

# Change this if you want to force PORT_LOGDIR

PORT_LOGDIR="$(/usr/lib/portage/bin/portageq envvar PORT_LOGDIR)"

```

par:

```

 PORT_LOGDIR=/var/log/portage

```

ou par:

```

PORT_LOGDIR="`sed -n s:^PORT_LOGDIR=::p /etc/make.conf`"

```

Voilà. Question qui peut vous paraître stupide mais je n'ai jamais écrit de script bash.

Merci

EDIT1: @TGL Je viens de tester et..... C'EST tout simplement EXCELLENT!!!!!!!!

EDIT2:@TGL Juste une remarque: je n'ai rien touché.Last edited by Mickael on Wed Dec 07, 2005 5:33 pm; edited 2 times in total

----------

## TGL

 *MickTux wrote:*   

> Doit-on remplacer dans le script la ligne suivante: 
> 
> ```
> # Change this if you want to force PORT_LOGDIR
> 
> ...

 

Bah en fait en principe y'a pas besoin de la remplacer par quoi que ce soit. 

Essaye donc ça dans ta ligne de commande : 

```
 % /usr/lib/portage/bin/portageq envvar PORT_LOGDIR
```

 Si ça marche, c'est à dire si ça te renvoie un truc du genre /var/log/portage, alors touche à rien, tu es bon.

Si ça ne marche pas, alors c'est dans ton /etc/make.conf que tu as du changement à faire : là, il faut que tu ajoutes la définition du répertoire de log, genre : 

```
PORT_LOGDIR=/var/log/portage
```

Et après vérifie si la commande précédente (portageq) fonctionne.

----------

## p0uLp3

lu,

je crois que enotice fait le meme boulot mais en loggant juste les messages interessants:

http://www.gentoo.org/news/fr/gwn/20050801-newsletter.xml

(section 7)

++

----------

