Portage Log
The Portage log provides information when installing, updating, or removing packages.
Wenn Sie emerge zum Bau eines Paketes verwenden, ist es nicht ungewöhnlich Meldungen die von Portage selbst kommen zu bemerken. Weil sie wichtige Informationen von Gentoo Entwicklern beinhalten können, ist es eine gute Idee sie zu lesen. Das ist aber oft nicht sofort möglich, weil sie schnell aus dem Bildbereich scrollen. Dies kann leicht durch die Aktivierung einer Portage Funktion genannt elog gelöst werden, deren Zweck es ist Meldungen zur späteren Durchsicht auf Festplatte zu speichern. Es bestehen aber auch noch andere Aufzeichnungsmöglichkeiten ...
Portage elog Teilsystem
Das Portage elog Teilsystem behält bestimmte von ebuild gelieferte Log-Meldungen im Auge, die von Entwicklern in die ebuilds gepackt wurden um die Aufmerksamkeit des Administrators oder der Benutzer auf sich zu ziehen. Diese Meldungen beinhalten oft wichtige oder interessante Informationen in Bezug zu den genannten Paketen.
Einrichtung
Wählen Sie durch die Variable PORTAGE_ELOG_CLASSES
welche Art von Informationen geloggt werden sollen. Mögliche Werte sind info
, warn
, error
, log
und qa
:
PORTAGE_ELOG_CLASSES="log warn error"
Konfiguration für Datei-basierte Speicherung
Portage kann die elog Ereignisse auf mehrere Arten handhaben.
Um die elog Ereignisse auf Festplatte zu speichern aktivieren Sie das save
Modul in der Variable PORTAGE_ELOG_SYSTEM
:
PORTAGE_ELOG_SYSTEM="save"
- Show messages after emerging *and* save
PORTAGE_ELOG_SYSTEM="echo save" }}
Die Meldungen werden in /var/log/portage/elog oder ${PORT_LOGDIR}/elog gespeichert, wenn die genannte Variable gesetzt ist.
Um in Kategorien unterteilte elog Dateien zu erzeugen, aktivieren Sie die Portage Funktion split-elog
. Sie wird Portage dazu bringen Kategorie-basierte Unterverzeichnisse im Verzeichnis /var/log/portage/elog zu erzeugen.
Additionally, to create per-category build logs, enable the split-log
Portage feature. It will force Portage to create category-based subdirectories of the /var/log/portage/build location.
Script to lookup logs
When the logs are split up, it's a bit annoying to look through them one by one. Here's an example script to print them using the date:
#!/bin/bash
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# This script is assuming that portage is configured to log in
# /var/log/portage/elog and that it's configured to split the logged files.
#
# If you want specific dates, run the script like so:
# GET_DATES="20230101 20230102" ./print_elog_messages.sh
#
# If you want all files to be printed, run the script like so:
# GET_ALL="true" ./print_elog_messages.sh
#
# If the script filename is different, adjust accordingly!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Check if running as root and stop if it is.
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
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Set periods to check. These strings are interpreted by the "date" tool.
declare -a days=("today" "yesterday")
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Change the array to the custom dates if they're declared.
[ -n "$GET_DATES" ] && declare -a days=("$GET_DATES")
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# If we're printing everything, there's no reason to loop multiple times and
# it would make sense to change the period to "all".
[ "$GET_ALL" == "true" ] && declare -a days=("all")
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Go through the periods set in the array "days" and format to find filenames
# containing YYYYmmdd, for example 20221215, since that's the format that's
# part of the filenames by default. After this, run the command cat with the
# found filenames as arguments, which adds the file contents
# to the terminal output. Remove the -n argument from cat if you don't want
# it to print the line numbers as well.
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
Für E-Mail Konfigurieren
Um Logdateien an einen Empfänger zu mailen aktivieren Sie das Modul mail
. Die Mail-Option erfordert dass einige zusätzliche Variablen gesetzt sind. Lesen Sie /usr/share/portage/config/make.conf.example für weitere Informationen.
Unterhalb ist eine Beispiel-Konfiguration gezeigt, die hoffentlich selbsterklärend ist:
PORTAGE_ELOG_SYSTEM="mail"
# Zuerst die Empfangs-Mail Adresse, dann der SMTP Server
PORTAGE_ELOG_MAILURI="log-intake@example.com mail.example.com"
PORTAGE_ELOG_MAILFROM="portage@$(hostname).example.com"
PORTAGE_ELOG_MAILSUBJECT="${PACKAGE} is ${ACTION} on ${HOST}"
Ein weiteres Beispiel mit nullmailer oder sendmail:
PORTAGE_ELOG_SYSTEM="mail"
# Zuerst die Empfangs-Mail Adresse, dann der SMTP Server
PORTAGE_ELOG_MAILURI="users@host /usr/sbin/sendmail"
PORTAGE_ELOG_MAILFROM="portage@$(hostname).example.com"
PORTAGE_ELOG_MAILSUBJECT="${PACKAGE} is ${ACTION} on ${HOST}"
Ähnliche Software
Das folgende ist eine Liste von elog-ähnlichen Softwarepaketen:
- app-portage/elogv - Curses basiertes Werkzeug zum Parsen des Inhalts von elogs.
- app-portage/elogviewer - Python basierter elog Betrachter.
Build-Logs
Mit dem Portage elog Teilsystem werden Paketerzeugungs-Logdateien auf Festplatte gespeichert oder zu einem entfernten Empfänger geschickt, unabhängig von Erfolg oder Misserfolg. Dies erlaubt es Administratoren den Bau später zu überprüfen oder Bau-Logdateien für Support-Tickets abzurufen.
By default, when emerge is running, Portage temporarily saves the build log of a package to /var/tmp/portage/<category>/<packagename-version>/temp/build.log. The build directory will be deleted when emerge finishes successfully, so successful build logs will be lost. If a build fails however, the logs will be retained, so the build.log will still be available for attaching to support tickets.
n.b. The build.log may be followed by an extra extension if compress-build-logs
is set in FEATURES. The default PORTAGE_TMPDIR is /var/tmp, adjust path accordingly if it is set to something different in make.conf.
Build-Logs immer speichern
Um die Portage Protokollierung zu aktivieren bearbeiten Sie /etc/portage/make.conf und setzen Sie PORT_LOGDIR
auf ein Verzeichnis in dem die Logdateien aufbewahrt werden sollen. Standardmässig verwendet Portage /var/log/portage:
PORT_LOGDIR="/var/log/portage"
It is customary to choose /var/log/portage as the location for log files, because it is where the elog subsystem's elog directory would be if PORTAGE_LOGDIR has been previously empty or unset.
Als Nächstes beeinflusst eine Anzahl von FEATURES
Einstellungen wie Portage mit Build-Logs umgeht.
- Mit gesetztem
binpkg-logs
werden selbst die Protokolle von Binärpaketen gespeichert - Wenn
clean-logs
gesetzt ist werden regelmässig Logdatei-Säuberungsoperationen durchgeführt. Der Befehl der ausgeführt wird ist durchPORT_LOGDIR_CLEAN
definiert und standardmässig beträgt die Aufbewahrungsdauer der Dateien 7 Tage. - Mit gesetztem
split-log
werden Build-Logs in Kategorie-benannten Unterverzeichnissen von${PORT_LOGDIR}/build
aufbewahrt.
Until Portage version 2.3.53, PORTAGE_LOGDIR variable used to be named PORT_LOGDIR. This old name is now deprecated.
Aufräumen
Wenn clean-logs
gesetzt ist, wird Portage nach jeder Build oder unmerge Operation den Befehl ausführen, der durch PORT_LOGDIR_CLEAN
definiert ist. Standardmässig wird der folgende Befehl verwendet:
PORT_LOGDIR_CLEAN="find \"\${PORT_LOGDIR}\" -type f ! -name \"summary.log*\" -mtime +7 -delete"
Falls Sie ein benutzerdefiniertes Kommando definieren, vergessen Sie nicht die Variable ${PORT_LOGDIR}
zu "escapen" (oder geben sie den richtigen Ort hartkodiert an).
Until Portage version 2.3.53, PORTAGE_LOGDIR_CLEAN variable used to be named PORT_LOGDIR_CLEAN. This old name is now deprecated.
Other Portage log files
Portage also can have log files in /var/log/emerge.log, and /var/log/emerge-fetch.log.