Portage log

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Portage log and the translation is 12% complete.
Outdated translations are marked like this.
Other languages:

The Portage log provides information when installing, updating, or removing packages.

Во время использования emerge для компиляции пакета часто можно заметить сообщения от самого Portage. Так как они могут содержать важную информацию от разработчиков Gentoo их рекомендуется читать. Но часто, это получается не сразу, так как они быстро прокручиваются на экране. Это можно легко решить с помощью возможности Portage, которая называется elog. Цель этой возможности заключается в сохранении сообщений на диск для последующего просмотра. Но существуют и другие возможности ведения журнала ...

Подсистема 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:

ФАЙЛ /etc/portage/make.conf
PORTAGE_ELOG_SYSTEM="save"
  1. 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:

ФАЙЛ print-elog-messages.sh
#!/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.

Ниже, показан пример настройки, который говорит, надеемся, сам за себя:

ФАЙЛ /etc/portage/make.conf
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:

ФАЙЛ /etc/portage/make.conf
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:

ФАЙЛ /etc/portage/make.conf
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, после каждой операции компиляции или удаления. По умолчанию используется следующая команда:

ФАЙЛ /usr/share/portage/config/make.globals
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.

See also

  • Elogv — a curses-based tool that parses the contents of elogs created by Portage.

Внешние ресурсы