Journaux de portage
Les journaux de Portage procurent des informations lorsque sont installés, mis à jour ou supprimés des paquets.
Lorsque emerge est en train de construire un paquet, il n'est pas rare de voir des messages provenant de Portage en personne. Au vu de l'importance des informations qui peuvent être contenu dans ceux-ci de la part des développeurs de Gentoo c'est une bonne idée de les lire, mais parfois cela n'est pas immédiatement possible car ils défilent trop rapidement à l'écran. Cela peut être facilement résolu en activant une fonctionnalité de Portage nommé elog, dont l'objectif est de sauvegarder sur le disque les messages pour une consultation ultérieure. Cependant d'autres méthodes de journalisation existent…
Sous-système d'elog pour Portage
Le sous-système d'elog pour Portage surveille les retours procurés par les messages des ebuilds que les développeurs ont ajoutés dans ceux-ci pour attirer l'intention des administrateurs (NdT: du système) ou de l'utilisateur root.
Paramètres
Sélectionner quel genre d'informations sont journalisés à travers la variable PORTAGE_ELOG_CLASSES. Les valeurs possibles sont info
(NdT: informations), warn
(NdT: warning, c-à-d avertissement), error
, log
(NdT: journaux), ainsi que qa
(NdT: q pour quiet (silencieux, c-à-d moins verbeux) & a pour alphabétique) :
PORTAGE_ELOG_CLASSES="log warn error"
Configuration pour un stockage par fichier
Portage peut s'occuper des événements elog de différentes façons.
Afin de sauvegarder les événements elog sur le disque, il faut activer le module save
dans la variable PORTAGE_ELOG_SYSTEM :
# Avertissement: utiliser 'save' ne vas pas afficher les messages durant l'installation. Ajouter 'echo' à 'save' *ET* 'show'.
#PORTAGE_ELOG_SYSTEM="save"
# Affiche les messages après l'installation *et* save
PORTAGE_ELOG_SYSTEM="echo save"
Les messages seront sauvegardés dans /var/log/portage/elog ou dans ${PORTAGE_LOGDIR}/elog si la dites variable est paramétré.
Afin de pouvoir créer par catégorie des fichiers elogs, activer la fonctionnalités split-elog
de Portage. Cela forcera Portage à créer des sous-répertoires par catégorie dans l'emplacement /var/log/portage/elog.
En sus, pour créer un journal par catégorie, activer la fonctionnalité de Portage split-log
. Cela forcera Portage à créer des sous-répertoires classés par catégorie dans l'emplacement /var/log/portage/build.
Script pour consulter les journaux
Lorsque les journaux sont séparés, il peut être un peu ennuyant de les consulter un par un. Voici un exemple de script qui les imprimes en utilisant la date :
#!/bin/bash
# Ce script part du principe que portage est configuré pour enregistrer les journaux dans /var/log/portage/elog et qu'il fonctionne avec une configuration séparé (NdT: par catégorie) des journaux.
#
# Si une date spécifique est souhaitée, lancer le script comme ceci:
# GET_DATES="20230101 20230102" ./print_elog_messages.sh
#
# S'il faut imprimer tout les fichiers, lancer le script comme ceci:
# GET_ALL="true" ./print_elog_messages.sh
#
# Si le nom du fichier script est différent, l'ajuster en conséquence !
# Vérifie que le lancement est fait en tant que root et l'arrête si c'est le cas
current_user=$(whoami)
[ -z "$current_user" ] && echo "whoami returns an empty string" && exit 1
[ "$current_user" == "root" ] && echo "Don't run as root, there's no need!" && exit 1
# Définit la fréquence de vérifications. Ces chaînes (NdT: de caractères) sont interprétés par l'outil "date".
declare -a days=("today" "yesterday")
# Modifie le tableau vers la date personnalisée si déclarée.
[ -n "$GET_DATES" ] && declare -a days=("$GET_DATES")
# Si tout doit être imprimé, il n'y a pas de raisons de parcourir de
# multiples fois et cela ne ferait pas sens de modifier la
# fréquence à "all".
[ "$GET_ALL" == "true" ] && declare -a days=("all")
# Parcourir les fréquences paramétrés dans le tableau "days" et ses formats pour trouver
# le nom des fichiers contenant YYYYmmdd, par exemple 20221215, car le format
# fait partie des noms de fichier par défaut. Ensuite, lancer la commande cat avec le nom des fichiers trouver en tant qu'argument, ce qui ajoute le contenu du fichier dans la sortie du terminal. Enlever l'argument -n de cat si on ne veut pas imprimer les numéros de lignes.
for val in ${days[@]}; do
echo " ===== $val ====="
find /var/log/portage/elog -name \
"*$([ "$GET_ALL" == "true" ] || date --date=$val +%Y%m%d)*" \
-type f -print -exec cat -n '{}' \;
done
Configuration pour l'e-mail
Pour envoyer par e-mail des journaux à un destinataire, activer le module mail
. L'option mail requiert quelques variables additionnel qui doivent être paramétrés. Lire /usr/share/portage/config/make.conf.example pour de plus amples informations.
Ci-dessous, un exemple de paramétrages très explicite :
# Cela enverra _seulement_ un e-mail; il peut être souhaité d'utiliser "mail save" ou tout autre chose de similaire à la place.
PORTAGE_ELOG_SYSTEM="mail"
# En premier l'adresse de destination, puis le serveur SMTP.
PORTAGE_ELOG_MAILURI="reception-journaux@exemple.com email.exemple.com"
PORTAGE_ELOG_MAILFROM="portage@$(hostname).exemple.com"
PORTAGE_ELOG_MAILSUBJECT="\${PACKAGE} is \${ACTION} on \${HOST}"
Un autre exemple avec nullmailer ou sendmail :
# Cela enverra _seulement_ un e-mail; il peut être souhaité d'utiliser "mail save" ou autre chose de similaire à la place.
PORTAGE_ELOG_SYSTEM="mail"
# En premier l’adresse du destinataire, puis le serveur SMTP.
PORTAGE_ELOG_MAILURI="utilisateur@hote /usr/sbin/sendmail"
PORTAGE_ELOG_MAILFROM="portage@$(hostname).exemple.com"
PORTAGE_ELOG_MAILSUBJECT="\${PACKAGE} is \${ACTION} on \${HOST}"
Logiciels associés
Ce qui suit est une liste des logiciels associés aux elogs :
- app-portage/elogv - Utilitaire basé sur curses pour parcourir le contenu des elogs.
- app-portage/elogviewer - Lecteur d'elog en Python
Journaux de compilations (NdT: build)
Les journaux de compilations peuvent être sauvegardés sur le disque ou envoyer par e-mail à un destinataire, en paramétrant les variables dans make.conf. Cela autorise l'administrateur système à consulter les compilations plus tard.
Par défaut, quand emerge est lancé, Portage sauvegarde automatiquement et temporairement les journaux de compilations dans /var/tmp/portage/<catégorie>/<nomdupaquet-version>/temp/build.log. Le dossier (NdT: des journaux) de compilation sera supprimé quand emerge aura terminé avec succès, de ce fait les (NdT: journaux de) compilations réussis seront perdus. Cependant si cela échoue, les journaux seront conservés, de ce fait le build.log sera toujours disponibles pour l'attacher à une demande de support.
À noter que build.log peut être suivit d'une extension (NdT: de fichier) supplémentaire si compress-build-logs
est paramétré dans la variable FEATURES. Le répertoire par défaut dans la variable PORTAGE_TMPDIR est /var/tmp, ajuster ce chemin en accord avec ce qui a été paramétré si cela a été modifié dans make.conf.
Toujours conserver les journaux de compilations (NdT: build)
Pour activer la sauvegarde des journaux de compilations, éditer le fichier /etc/portage/make.conf et paramétrer la variable PORTAGE_LOGDIR vers une destination où les journaux seront conservés :
PORTAGE_LOGDIR="/var/log/portage"
Il est d'usage de sélectionner /var/log/portage en tant qu'emplacement des journaux, car c'est ici que le sous-système du répertoire d'elog se trouverai si la variable PORTAGE_LOGDIR était au préalable vide ou non-paramétré.
Un nombre de paramètres pour FEATURES peuvent être ajoutés dans /etc/portage/make.conf et peuvent influencer comment Portage gère les journaux :
- Avec
binpkg-logs
paramétré, même les déploiements de paquets binaires seront conservés dans les journaux. - Quand
clean-logs
est paramétré, les opérations usuelles de nettoyage des journaux sont exécutés. La commande qui est exécuté est définit par la variable PORTAGE_LOGDIR_CLEAN et conserve par défauts les fichiers durant 7 jours. - Avec
split-elog
paramétré, les informations d'elog seront sauvegardés dans le sous-répertoire "catégorie-nom" de la variable${PORTAGE_LOGDIR}/elog
. - Avec
split-log
paramétré, les journaux de compilations sont sauvegardés dans le sous-répertoire "catégorie-nom" de la variable${PORTAGE_LOGDIR}/build
.
Avant la version 2.3.53 de Portage, la variable PORTAGE_LOGDIR était nommée PORT_LOGDIR. Ce nom est désormais obsolète.
Nettoyage
Lorsque l'option clean-logs
est activé dans la variable FEATURES de /etc/portage/make.conf, Portage exécutera la commande définit par PORTAGE_LOGDIR_CLEAN après chaque compilation ou opération de suppression (NdT: d'un paquet). Par défaut, la commande par défaut est utilisée :
PORTAGE_LOGDIR_CLEAN="find \"\${PORTAGE_LOGDIR}\" -type f ! -name \"summary.log*\" -mtime +7 -delete"
Lorsqu'une commande personnalisée est définit, ne pas oublier d’échapper la variable PORTAGE_LOGDIR (ou entrer les informations en brut directement à l'emplacement adéquate).
Avant la version 2.3.53 de Portage, la variable PORTAGE_LOGDIR_CLEAN était nommée PORT_LOGDIR_CLEAN. Ce nom est désormais obsolète.
Autres journaux de Portage
Portage peut aussi journaliser les fichiers dans /var/log/emerge.log et /var/log/emerge-fetch.log.
Voir aussi
Ressources externes
- Sven Vermeulen. "Underestimated or underused: Portage (e)logging ", September 25th, 2013. Retrieved on May 30th, 2019.