Portage ログ

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Portage log and the translation is 100% complete.

Portage ログ は、パッケージのインストール、更新、または削除時に、情報を提示します。

emerge を使用してパッケージを構築すると、 Portage 自身から送られるメッセージに気づくのは珍しいことではありません。メッセージには Gentoo 開発者からの重要な情報が含まれる場合がありますので読むべきです。しかし、多くの場合には急速に画面の外にスクロールしてしまって、そのときには読めません。これは、elog と呼ばれる Portage の 機能 を有効にすることで、容易に解決することができます。elog の目的は、あとから読むためにメッセージをディスクに保存することです。しかし、他のロギング機能も同様に存在します……。

Portage elog サブシステム

Portage elog サブシステムは、システム管理者または root ユーザーの注意を引き付けるために ebuild に開発者が入れた特定の、ebuild が生成したログメッセージを追跡します。 これらのメッセージにはパッケージのビルドに関連した情報が含まれ、それはしばしば重要だったり関心をもつべきものだったりします。

セットアップ

PORTAGE_ELOG_CLASSES 変数を介してログに記録する情報の種類を選択してください。可能な値は、 info warn error log および qa です:

PORTAGE_ELOG_CLASSES="log warn error"

ファイルへの保存の設定

Portageは、多くの方法で elog イベントを処理することができます。

ディスクに elog のイベントを保存するためには、 PORTAGE_ELOG_SYSTEM 変数の save モジュールを有効化してください:

ファイル /etc/portage/make.conf
# 警告: 'save' だけでは emerge 時にメッセージが表示されません! 保存*および*表示を実行させるには 'echo' を追加してください。
#PORTAGE_ELOG_SYSTEM="save"
 
# emerge 後にメッセージを表示*および*保存する
PORTAGE_ELOG_SYSTEM="echo save"

メッセージは、 /var/log/portage/elog または ${PORTAGE_LOGDIR}/elog (当該の変数が設定されている場合)に保存されます。

カテゴリ毎に elog ファイルを作成するには、Portage の split-elog 機能を有効にしてください。これは、 /var/log/portage/elog という場所にカテゴリベースのサブディレクトリを作成することを、Portage に強制します。

さらに、カテゴリ毎にビルドログを作成するには、Portage の split-log 機能を有効にしてください。これは、 /var/log/portage/build という場所にカテゴリベースのサブディレクトリを作成することを、Portage に強制します。

ログを調べるためのスクリプト

ログが分割されていると、それらをひとつずつ確認するのはちょっと面倒です。以下は日付を使用して、それらを印字するスクリプトの例です:

ファイル print-elog-messages.sh
#!/bin/bash

# このスクリプトは、portage がログを分離して /var/log/portage/elog に
# 保存するように設定されていることを仮定しています。
#
# 特定の日の情報が欲しい場合は、次のようにスクリプトを実行してください:
# GET_DATES="20230101 20230102" ./print_elog_messages.sh
#
# すべてのファイルを印字したい場合は、次のようにスクリプトを実行してください:
# GET_ALL="true" ./print_elog_messages.sh
#
# スクリプトファイル名が異なる場合は、それに従って修正してください!

# root として実行されているか確認し、もしそうであれば停止します。
current_user=$(whoami)
[ -z "$current_user" ] && echo "whoami が空文字列を返しました" && exit 1
[ "$current_user" == "root" ] && echo "root として実行しないでください、その必要はありません!" && exit 1

# 確認する期間を設定します。これらの文字列は "date" ツールによって解釈されます。
declare -a days=("today" "yesterday")

# カスタム日付が宣言されている場合は、配列をそれに変更します。
[ -n "$GET_DATES" ] && declare -a days=("$GET_DATES")

# すべてを印字する場合は複数回ループする理由はなく、
# 期間を "all" に変更するのは筋が通っています。
[ "$GET_ALL" == "true" ] && declare -a days=("all")

# 配列 "days" 内で設定されている期間を走査し、YYYYmmdd、例えば 20221215 を
# 含むファイル名を見つけるためにフォーマットします。デフォルトではそれが
# ファイル名の一部であるようなフォーマットだからです。その後、見つかった
# ファイル名を引数としてコマンド cat を実行し、ファイルの内容を端末の
# 出力に追加します。行番号を印字したくない場合は、cat から -n 引数を
# 削除してください。
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

電子メール機能を設定

ログをメール送信するために、 mail モジュール有効化。 メールオプションは、いくつかの追加の変数を設定することが必要です。 詳細については、 /usr/share/portage/config/make.conf.example をお読みください。

以下のセット​​アップ例がわかりやすいでしょう:

ファイル /etc/portage/make.conf
# これは e メールの送信のみを行います; 代わりに "mail save" のようにしたほうがいいかもしれません。
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
# これは e メールの送信のみを行います; 代わりに "mail save" のようにしたほうがいいかもしれません。
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}"

PORTAGE_ELOG_MAILURI を設定する際、STARTTLS が必要な場合ポート番号の振る舞いが異なることに注意してください。

ファイル /usr/lib/python3.13/site-packages/portage/mail.py
# Syntax for PORTAGE_ELOG_MAILURI (if defined):
# address [[user:passwd@]mailserver[:port]]
# where address:    recipient address
#       user:       username for smtp auth (defaults to none)
#       passwd:     password for smtp auth (defaults to none)
#       mailserver: smtp server that should be used to deliver the mail (defaults to localhost)
#                                   alternatively this can also be the absolute path to a sendmail binary if you don't want to use smtp
#       port:       port to use on the given smtp server (defaults to 25, values > 100000 indicate that starttls should be used on (port-100000))

例えば、メールサーバが STARTTLS をポート 587 を待ち受けている場合、PORTAGE_ELOG_MAILURI に 100587 を指定しなくてはなりません。これにより STARTTLS が有効化され、内部で STARTTLS が有効化されたポートを 587 にマップします。

関連するソフトウェア

以下は、elog 関連のソフトウェアパッケージの一覧です。

ビルドログ

パッケージのビルドログは、 make.conf で変数を設定することにより、ディスク上に保存したりリモートの宛先にメールで送信したりすることができます。これにより、システム管理者が後でビルドを確認できるようになります。

デフォルトでは emerge の実行中、Portage はパッケージのビルドログを一時的に /var/tmp/portage/<カテゴリ>/<パッケージ名-バージョン>/temp/build.log に保存します。 emerge が成功したときにビルドディレクトリは削除されるため、成功したビルドログは失われるでしょう。一方、ビルドが失敗したときにはログは保持されるため、 build.log サポートチケットに添付する ために利用することができるでしょう。

注意 : FEATURES compress-build-logs が設定されていると、 build.log に追加の拡張子が続いているかもしれません。デフォルトの PORTAGE_TMPDIR /var/tmp です。それが make.conf で別の場所に設定されている場合は、それに従ってパスを微調整してください。

常にビルドログを保存する

ビルドログの保存を有効化するには、 /etc/portage/make.conf を編集して、 PORTAGE_LOGDIR にログファイルを保存する場所を設定してください:

ファイル /etc/portage/make.conf
PORTAGE_LOGDIR="/var/log/portage"

ログファイルの場所としては、 PORTAGE_LOGDIR が以前に空または未設定だった場合に elog サブシステムの elog ディレクトリとなる、 /var/log/portage を選択するのが慣習的です。

/etc/portage/make.conf 内で多数の FEATURES 設定を設定することができます。これらは Portage がビルドログをどのように処理するかに影響を与えます:

  • binpkg-logs を設定すると、バイナリパッケージの展開時にもログが保存されます。
  • clean-logs を設定すると、定期的にログファイルのクリーン操作が実行されます。実行されるコマンドは PORTAGE_LOGDIR_CLEAN によって定義され、デフォルトでは 7 日分のファイルが保持されます。
  • split-elog を設定すると、elog 通知は ${PORTAGE_LOGDIR}/elog の下の、各カテゴリの名前を付けられたサブディレクトリの中に保存されます
  • split-log を設定すると、ビルドログは ${PORTAGE_LOGDIR}/build の下の、各カテゴリの名前を付けられたサブティレクトリの中に保存されます

Portage バージョン 2.3.53 まで、 PORTAGE_LOGDIR 変数は PORT_LOGDIR という名前でした。この古い名前は現在は非推奨です。

後片付け

/etc/portage/make.conf FEATURES 変数で clean-logs が有効化されている場合、Portage は PORTAGE_LOGDIR_CLEAN で定義されているコマンドを、毎回のビルドあるいは unmerge 操作後に実行します。デフォルトでは、以下のコマンドが使用されます:

ファイル /usr/share/portage/config/make.globals
PORTAGE_LOGDIR_CLEAN="find \"\${PORTAGE_LOGDIR}\" -type f ! -name \"summary.log*\" -mtime +7 -delete"

もし任意のコマンドを定義する場合、 PORTAGE_LOGDIR 変数を エスケープ するのを忘れないでください (あるいは直接正しい場所にハードコードしてください)。

Portage バージョン 2.3.53 まで、 PORTAGE_LOGDIR_CLEAN 変数は PORT_LOGDIR_CLEAN という名前でした。この古い名前は現在は非推奨です。

その他の Portage ログファイル

Portage は /var/log/emerge.log および /var/log/emerge-fetch.log にもログファイルを作成することができます。

関連項目

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

外部資料