Portage log
The Portage log provides information when installing, updating, or removing packages.
Во время использования emerge для компиляции пакета часто можно заметить сообщения от самого Portage. Так как они могут содержать важную информацию от разработчиков Gentoo их рекомендуется читать. Но часто, это получается не сразу, так как они быстро прокручиваются на экране. Это можно легко решить с помощью возможности Portage, которая называется elog. Цель этой возможности заключается в сохранении сообщений на диск для последующего просмотра. Но существуют и другие возможности ведения журнала ...
Подсистема elog в portage
Подсистема elog в Portage отслеживает конкретные сообщения из ebuild, которые разработчики поместили в ebuild, чтобы привлечь внимание администратора или пользователя. Часто эти сообщения содержат важную или интересную информацию, связанную со сборкой упомянутого пакета.
Настройка
С помощью переменной PORTAGE_ELOG_CLASSES выберите какой тип информации нужно журналировать. Возможные значения info
, warn
, error
, log
и qa
:
PORTAGE_ELOG_CLASSES="log warn error"
Настройка для хранения в виде файлов
Portage может обрабатывать события elog в ряде случаев.
Для того чтобы сохранить события elog на диск, включите модуль save
в переменной PORTAGE_ELOG_SYSTEM:
PORTAGE_ELOG_SYSTEM="save"
- Show messages after emerging *and* save
PORTAGE_ELOG_SYSTEM="echo save" }}
Сообщения будут сохранены в файл /var/log/portage/elog или в файл ${PORT_LOGDIR}/elog, если указанная переменная установлена.
Для того чтобы создать файлы elog для каждой категории, включите split-elog
. Это заставить Portage в каталоге /var/log/portage/elog создавать подкаталоги для каждой категории.
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
Настройка для e-mail
Для того чтобы отправить журнал по почте, включите модуль mail
. Для модуля mail необходимо установить некоторые дополнительные переменные. Чтобы получить больше информации, прочитайте /usr/share/portage/config/make.conf.example.
Ниже, показан пример настройки, который говорит, надеемся, сам за себя:
PORTAGE_ELOG_SYSTEM="mail"
# Сперва ящик для сообщений, затем сервер SMTP
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}"
Другой пример для nullmailer или sendmail:
PORTAGE_ELOG_SYSTEM="mail"
# Сперва ящик для сообщений, затем сервер SMTP
PORTAGE_ELOG_MAILURI="users@host /usr/sbin/sendmail"
PORTAGE_ELOG_MAILFROM="portage@$(hostname).example.com"
PORTAGE_ELOG_MAILSUBJECT="${PACKAGE} is ${ACTION} on ${HOST}"
Сопутствующее программное обеспечение
Далее идет список сопутствующего для elog программного обеспечения:
- app-portage/elogv - утилита сделанная на библиотеки curses для разбора содержимого файлов elog
- app-portage/elogviewer - просмотрщик файлов elog сделанный на основе Python
Журналы компиляции
При использовании подсистемы Portage elog журналы сборки пакетов сохраняются на диске или отправляются по почте удаленному получателю, независимо от сбоя или успеха. Это позволяет администраторам просматривать журнал компиляции позже или использовать журналы компиляции для получения сторонней поддержки.
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.
Настройка
Чтобы включить журналирование Portage, отредактируйте файл /etc/portage/make.conf и установите в переменной PORT_LOGDIR каталог, где файлы журналов будут храниться. По умолчанию 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.
Далее несколько настроек для переменной FEATURES влияющих на то, как Portage будет обрабатывать журналы компиляции.
- С включенным
binpkg-logs
журнал будет сохраняться даже при установки из бинарных пакетов. - С включенным
clean-logs
будет выполнятся операция по очистке файлов с журналами. Команда, которая будет выполняться, определена в PORT_LOGDIR_CLEAN и по умолчанию удаляются файлы старше 7 дней. - С включенным
split-log
журналы компиляции сохраняются в субкаталогах каталога${PORT_LOGDIR}/build
, которые используют категорию в качестве имени.
Until Portage version 2.3.53, PORTAGE_LOGDIR variable used to be named PORT_LOGDIR. This old name is now deprecated.
Очистка
Если установлен clean-logs
, Portage будет выполнять команду, которая определена в переменной PORT_LOGDIR_CLEAN, после каждой операции компиляции или удаления. По умолчанию используется следующая команда:
PORT_LOGDIR_CLEAN="find \"\${PORT_LOGDIR}\" -type f ! -name \"summary.log*\" -mtime +7 -delete"
Если определяете пользовательскую команду, не забудьте зазеркалировать переменную PORT_LOGDIR (или сразу жестко запишите правильное месторасположение).
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.