WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Portage (emerge) のログを残す

最近(といってもけっこう前ですが ^^;)、 Portage の 2.1 が stable になりました。このバージョンの特徴のひとつに、ログ機能の大幅強化があります。以前は "emerge –update world" などで大量のパッケージをアップデートした際、アップデート後に手動で実行するコマンドなどの警告を見逃しがちだったのですが、それらを選別してログに残すことができます。さらに設定次第では、ログをメールで送信したり、任意のコマンドを実行したりすることも可能です。これは使わない手はありませんね。

そんなわけで、本日は Portage 2.1 で追加されたログ機能をご紹介しようと思います。

ログの種類

従来の Portage にも、出力メッセージをすべて残すためのログ機能は存在していました。 Portage 2.1 ではそれとはまったく独立した形で新しいログ機能が追加されています。そのため、ここでは従来からあるログ機能を「基本ログ」、新しく追加されたものを「拡張ログ」と呼ぶことにします。以下のような感じですね。

基本ログ
従来からあったログ機能です。 emerge が出力したメッセージがそのまま保存されます。ファイルとして保存されるのみで自動的にメールを送信するなどの機能はありません。
拡張ログ
Portage 2.1 で追加されたログ機能です。ログレベルごとに出力するか否かを指定でき、出力方法もファイル以外に syslog, メール, コマンド実行が選べます。

これらは私が勝手に定義した言葉なので、他の場所で使っても、たぶんわかってもらえません。ご注意を(^^;

ログ設定

それでは設定方法を見ていきましょう。 Portage のログに関する設定はすべて "/etc/make.conf" で行います。ログ関連の設定項目には以下のものがあります。

設定記述内容
PORT_LOGDIR保存するディレクトリ
PORTAGE_ELOG_CLASSES保存するログレベル
PORTAGE_ELOG_SYSTEM保存方法
PORTAGE_ELOG_COMMAND実行するコマンド
PORTAGE_ELOG_MAILURIメールアドレスなど
PORTAGE_ELOG_MAILFROMメールの送信者名
PORTAGE_ELOG_MAILSUBJECTメールのタイトル

これらを適切に設定することで自在にログ出力をコントロールできます。これらの "make.conf" の設定項目は "/etc/make.conf.example" のコメントでも解説されていますが、以下で簡単にご紹介しておきます。

PORT_LOGDIR

ログを保存するディレクトリを指定します。この変数を設定するだけで、指定したディレクトリに基本ログが出力されます。 "/var/log/portage" を設定するのが推奨されているようです。さらに PORTAGE_ELOG_SYSTEM に "save" を設定することで、拡張ログが "${PORT_LOGDIR}/elog" ディレクトリに出力されます。もし基本ログが必要なければ、この変数を設定しないようにします。

PORTAGE_ELOG_CLASSES

拡張ログとして出力するメッセージの種類を "info", "warn", "error", "log" で指定します。通常は "warn error log" を指定すればよいと思います。この変数を設定しないと拡張ログが機能しないので注意してください。

PORTAGE_ELOG_SYSTEM

拡張ログを出力する方法を指定します。以下の値を空白区切りで複数指定できます。

ログ出力の方法
save"${PORT_LOGDIR}/elog" に個別ファイルとして出力
custom${PORTAGE_ELOG_COMMAND} で設定したコマンドを実行
syslogsyslog に送信
mail${PORTAGE_ELOG_MAILURI} で設定したアドレスにメール送信
save_summary"${PORT_LOGDIR}/elog/summary.log" にすべてのメッセージをまとめて出力
mail_summary${PORTAGE_ELOG_MAILURI} にすべてのメッセージをまとめてメール送信

"save", "save_summary" を指定して ${PORT_LOGDIR} が指定されていなかった場合は、 "/var/log/portage/elog" に出力されます。基本ログが必要ない場合はこうすると良いでしょう。

PORTAGE_ELOG_COMMAND

PORTAGE_ELOG_SYSTEM に "custom" を指定した場合に実行するコマンドを指定します。コマンド内では以下の変数が使用できます。

変数展開内容
${PACKAGE}パッケージ名
${LOGFILE}ログを格納したファイルのフルパス名

ログの内容は ${LOGFILE} のファイルから読み込むことになります。もし標準入力から読みたければ、リダイレクトを使えば良いでしょう。なお、両変数共にシングルクォーテーションで囲み、 "$" をエスケープして記述する必要があるようです。

PORTAGE_ELOG_COMMAND="/path/to/logprocessor -p '\${PACKAGE}' -f '\${LOGFILE}'"

こんな感じだそうです。 make.conf.example ベタ張りですが(^^;。

PORTAGE_ELOG_MAILURI

PORTAGE_ELOG_SYSTEM に "mail" を指定した場合にメールの宛先・送信方法を指定します。以下のような書式で記述します。

address [user:password@]mailserver[:port]

address
宛先メールアドレスです。
user:password
SMTP 認証が必要な場合のユーザー名とパスワードです。省略すると認証を行いません。
mailserver
送信に使用する SMTP サーバーを指定します。 "make.conf.example" には省略可能なように書いてありますが、私が試した限り省略するとメールが送信されませんでした。きちんと指定したほうが良いと思います。
port
SMTP サーバーに接続するポート番号です。デフォルトは 25 。詳細は不明ですが、 100000 以上の値を指定すると、 TLS を有効にして「指定した値 - 100000」のポート番号に接続するようです。

まだ stable にはなっていませんが、 Portage 2.1.1 からは以下の指定で sendmail 経由のメール送信ができます。

PORTAGE_ELOG_MAILURI="hokousya@example.com /usr/sbin/sendmail"

メールサーバーや ssmtp をインストールしてあるマシンではこちらのほうが手軽かもしれません。

PORTAGE_ELOG_MAILFROM

メール送信する際の送信元を指定します。省略すると "portage" が使用されます。

PORTAGE_ELOG_MAILSUBJECT

メールの件名を指定します。以下のような変数展開が有効です。

変数展開内容
${PACKAGE}パッケージ名
${HOST}ホストの FQDN

PORTAGE_ELOG_COMMAND と違ってシングルクォーテーションは必要ありませんが、 "$" のエスケープは必要です。例としては以下のような感じになります。

PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} merged on \${HOST} with notice"

こちらも make.conf.example ベタ張りです。

記述例

最後に実際に "make.conf" にログの設定をして見ます。ここではファイルとメールでログを残す設定に挑戦してみましょう。

  • 基本ログは "/var/log/portage" 以下に出力。
  • 拡張ログはファイルとメールで出力。
  • 拡張ログのファイルは "/var/log/portage/elog" に出力。
  • メールは hokousya@example.com 宛てに送信。
  • メールの送信には SMTP サーバー "mx.example.com" を使用し、 SMTP 認証のためにユーザー名 "hokousya" 、パスワード "password" でログインする。
  • メールの送信者は root@example.com とする。
  • メールの件名は「[emerge log] パッケージ名 on ホスト名」とする。

という条件で設定するなら、 "/etc/make.conf" に以下の記述を追加すれば OK です。

PORT_LOGDIR="/var/log/portage"
PORTAGE_ELOG_CLASSES="warn error log"
PORTAGE_ELOG_SYSTEM="save mail"
PORTAGE_ELOG_MAILURI="hokousya@example.com hokousya:password@mx.example.com"
PORTAGE_ELOG_MAILFROM="root@example.com"
PORTAGE_ELOG_MAILSUBJECT="[emerge log] \${PACKAGE} on \${HOST}"

このほかにもニーズに合わせて柔軟な設定が可能です。個人で使っているマシンでログ管理の手間を省きたいなら、ファイル出力しないでメール送信のみというのも手かもしれませんね。皆さんもいろいろと工夫してみてください!(^^)

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles