SlideShare a Scribd company logo
1 of 23
Download to read offline
Introduction ELOG Ebuild Phase Hook
emerge のログと通知
ELOG と Ebuild Phase Hook について調べた
Yasuhiro Asaka @grauwoelfchen
Gentoo 勉強会 #2
2014-05-11
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
1 Introduction
2 ELOG
3 Ebuild Phase Hook
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
自己紹介
Yasuhiro Asaka
プログラマ (フリーランス)
Gentoo, Funtoo
StumpWM, Xterm
Dvorak, Vim
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
目的、調べたこと
emerge のログを取りたい、完了を知りたい
ELOG でモジュールを使う
ELOG でカスタムコマンドでを使う
emerge のフェーズの経過を知りたい
Ebuild Phase Hook を使う
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
内容
ELOG のロギング機能
ELOG ってどんなのか
モジュールを使う
カスタムコマンド を使う
Ebuild Phase Hook
Ebuild Phase Hook ってど
んなのか
パッケージ毎に用意して
使う
/etc/portage/bashrc におい
て使う
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
内容
ELOG のロギング機能
ELOG ってどんなのか
モジュールを使う
カスタムコマンド を使う
Ebuild Phase Hook
Ebuild Phase Hook ってど
んなのか
パッケージ毎に用意して
使う
/etc/portage/bashrc におい
て使う
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
ELOG ってどんなのか
Portage-2.0.* では enotice という ebuild があった
ELOG になって Portage に組み込まれた (enotice と非互換)
保存されたログは eread で確認できる
設定に使う変数 (make.conf)
PORTAGE_ELOG_CLASSES ELOG 対象を指定する (info, warn, error など)
PORTAGE_ELOG_SYSTEM モジュールを指定する (空だと ELOG は disabled)
PORTAGE_ELOG_COMMAND $PACKAGE ($PF, $PN-$PVR) と $LOGFILE (パス) の
2 つの値を渡せる (正規表現)
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
ELOG ってどんなのか
設定例 e.g. GentWoo
PORTAGE_ELOG_CLASSES="log warn error qa"
PORTAGE_ELOG_SYSTEM="custom:* echo save"
PORTAGE_ELOG_COMMAND="/usr/bin/gentwoo ’${PACKAGE}’ ’${LOGFILE}’"
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
モジュールを使う
一度に複数のモジュールを使うことができる
コロンで区切って、PORTAGE_ELOG_CLASSES を上書きできる
"echo save:log mail:*"
コードは /usr/lib/portage/pym/portage/elog/ にある (Python)
標準で用意されている echo, save, custom, syslog, mail,
mail_summary, save, save_summary
PORTAGE_ELOG_COMMAND を使うには custom を指定する
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
モジュールを使う
Email モジュール
PORTAGE_ELOG_SYSTEM に
mail または mail_summary モジュールを追加して使う
mail_summary は emerge が終了すると
すべてのメッセージを 1 通にまとめて送る
${ACTION} (merge, unmerge) は mail でのみ使える
PORTAGE_ELOG_MAILURI /usr/share/portage/config/make.conf.example 参照
PORTAGE_ELOG_MAILFROM "portageexample.org"
PORTAGE_ELOG_MAILSUBJECT "[portage] euild log for ${ACTION} ${PACKAGE} on ${HOST}"
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
email モジュールの注意、まとめ
SystemExit などで中止しても送られる (成否によらない)
認証などで失敗すると例外のメッセージを出してくれる
!!! An error occured while trying to send logmail: ...
Sure you configured PORTAGE_LOG_MAILURI correctly?
Python (socket.getfqdn()) で、/etc/hosts をちゃんと読めるか
確認しておく (${HOST})
portage 2.1.1 から アドレスの user 部分にも が使える
(gmail だと, user@gmail.com@gmail.com:100587)
port は SMTP 認証を使う場合は 465 や 587 じゃなくて、
100465 とか 100587 にする
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
モジュールを使う
ログ (通知) 例: Email モジュール
INFO: setup
Package: app-editors/vim-7.4.273
Repository: gentoo
Maintainer: vim@gentoo.org
USE: X acl amd64 cscope elibc_glibc kernel_linux lua ... 
racket userland_GNU
FEATURES: preserve-libs sandbox
INFO: prepare
Applying vim-patches-7.4.273.patch ...
INFO: postinst
Updating documentation tags in /usr/share/vim/vim74
Calling eselect vi update...
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
jabber モジュール
http://projects.usrportage.de/index.fcgi/
portage-mod-jabber/wiki
% epkginfo portage-mod_jabber
* app-portage/portage-mod_jabber [gentoo]
Maintainer: hanno@gentoo.org
Upstream: None specified
Homepage: http://usrportage.de/
Location: /usr/portage/app-portage/portage-mod_jabber
Keywords: 0.0.3:0:
Keywords: 0.0.5.1:0: ~amd64 ~arm ~x86
License: GPL-2
# configuration (make.conf)
PORTAGE_ELOG_SYSTEM="jabber"
PORTAGE_ELOG_JABBERFROM="sender:password@host.com[/resource]"
PORTAGE_ELOG_JABBERTO="jid1@host.com jid2@host.com admin@foo.com"
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
モジュールを使う
カスタムコマンドで通知する
root ユーザのプロセスになる
X-Session に接続する工夫が必要
DISPLAY ":0.0"
XAUTHORITY "/home/user/.Xauthority" (X-session のクッキー)
#!/bin/sh
if [ $# -lt 1 ]; then
echo "Usage: ‘basename $0‘ command" >&2
exit 2
fi
su -c "exec env DISPLAY=’$DISPLAY’ XAUTHORITY=’$XAUTHORITY’ ’$SHELL’ -c ’$*’"
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
デモ
Stumpish の例
https://gist.github.com/grauwoelfchen/4f64480526d8aa1b15b4
https://gist.github.com/grauwoelfchen/3d64c13cf473667123d6
# xroot-stumpish ’package name’ ’log file name’
+--------------------+
| package name |
| log file name |
+--------------------+
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook とは
Ebuild の各段階の前後 (pre, post) で評価されれる Bash スクリプト
Ebuild を直接書き換えたりせずに各 Phase で環境変数などを
上書きしたりできる
カテゴリや SLOT を絞って評価されるようにもできる
Ebuild で使われる変数のほかヘルパー関数 (einfo など) も使える
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
bashrc の場所と順序
評価される順序 (上から)
$PN Package name
$P Package name and version
$PF Full-Package name (${PN}-${PVR})
1 /etc/portage/bashrc
2 /etc/portage/env/${CATEGORY}/${PN}
3 /etc/portage/env/${CATEGORY}/${PN}:${SLOT}
4 /etc/portage/env/${CATEGORY}/${P}
5 /etc/portage/env/${CATEGORY}/${PF}
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の例
ML (gentoo-portage-dev) にあった例
$ cat /etc/portage/env/sys-libs/glibc
pre_pkg_setup() {
local x
for x in installsources splitdebug ; do
if ! has $x $FEATURES ; then
elog "bashrc is adding $x to FEATURES for $PN"
FEATURES="$FEATURES $x"
fi
done
...
}
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の例
グローバルでフックする例
$ cat /etc/portage/bashrc
if [ "${EBUILD_PHASE}" == "postinst" ]; then
einfo "postinst"
...
elif [ "${EBUILD_PHASE}" == "postrm" ]; then
einfo "postrm"
...
fi
...
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
Ebuild Phase の一覧
1 pretend
2 clean
3 setup
4 unpack
5 prepare
6 configure
7 compile
8 test
9 install
10 ?
11 preinst
12 ?
13 prerm
14 postrm
15 cleanrm
16 postinst
17 ?
18 clean
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の注意、まとめ
同期的 に呼ばれる (sleep すると emerge とまっちゃう)
対象の Phase が定義されていない場合もある (ebuild による)
${EBUILD_PHASE} が空文字列で呼ばれる時がある ?
本来は Ebuild を直接ハックせずに、環境変数や設定などを
行うもの
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
参考リンク
Portage Documentation http://dev.gentoo.org/~zmedico/portage/doc/
Ebuild Phase Hook http://dev.gentoo.org/~zmedico/portage/doc/ch01s02.html
Ebuild Phases http://dev.gentoo.org/~zmedico/portage/doc/ch06.html#package-ebuild-phases
Helper Functions http://dev.gentoo.org/~zmedico/portage/doc/ch06s02.html
Ebuild Writing http://devmanual.gentoo.org/ebuild-writing/index.html
EAPI http://devmanual.gentoo.org/ebuild-writing/eapi/
Variables http://devmanual.gentoo.org/ebuild-writing/variables/
Working with Portage > Files and Directories
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=1
Gentoo Wiki - Project:Portage http://wiki.gentoo.org/wiki/Project:Portage
Portage log http://wiki.gentoo.org/wiki/Portage_log
mod_jabber for Portage http://projects.usrportage.de/index.fcgi/portage-mod-jabber/wiki
Remote X Apps mini-HOWTO http://zweije.home.xs4all.nl/xauth.html#toc7
7. X Applications from Another User-id http://zweije.home.xs4all.nl/xauth-7.html
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知
Introduction ELOG Ebuild Phase Hook
おわり
ありがとうございました
Gentoo Security Team の方作成の LaTeX テーマを
使わせてもらいました
http://a3li.li/2014/04/gentoo-latex-beamer-theme/
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
emerge のログと通知

More Related Content

What's hot

Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3
Naotoshi Seo
 

What's hot (20)

ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
libcのputcharについて
libcのputcharについてlibcのputcharについて
libcのputcharについて
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)カーネルモジュールプログラミング超入門 #1(仮)
カーネルモジュールプログラミング超入門 #1(仮)
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
Stack pivot
Stack pivotStack pivot
Stack pivot
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3
 
RとWeb API
RとWeb APIRとWeb API
RとWeb API
 
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~Trema day#4 Pio盛り ~Tremaのパケットパーサ~
Trema day#4 Pio盛り ~Tremaのパケットパーサ~
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
VSTiつくるよゼミ
VSTiつくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミ
 
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
Jjug2009 Fall
Jjug2009 FallJjug2009 Fall
Jjug2009 Fall
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 

Similar to Elog and Ebuild Phase Hook

GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
 
Perl logging
Perl loggingPerl logging
Perl logging
keroyonn
 
アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2
Eikichi Gotoh
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知
Yoshiyuki MIKAMI
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
takesako
 

Similar to Elog and Ebuild Phase Hook (20)

GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
Hacking Vox and Plagger
Hacking Vox and PlaggerHacking Vox and Plagger
Hacking Vox and Plagger
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
Perl logging
Perl loggingPerl logging
Perl logging
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 
アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
 
Hachiojipm41
Hachiojipm41Hachiojipm41
Hachiojipm41
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
gen-class とバイトコード(第3回 gen-class 勉強会資料)
gen-class とバイトコード(第3回 gen-class 勉強会資料)gen-class とバイトコード(第3回 gen-class 勉強会資料)
gen-class とバイトコード(第3回 gen-class 勉強会資料)
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 

Elog and Ebuild Phase Hook

  • 1. Introduction ELOG Ebuild Phase Hook emerge のログと通知 ELOG と Ebuild Phase Hook について調べた Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 2014-05-11 Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 2. Introduction ELOG Ebuild Phase Hook 1 Introduction 2 ELOG 3 Ebuild Phase Hook Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 3. Introduction ELOG Ebuild Phase Hook 自己紹介 Yasuhiro Asaka プログラマ (フリーランス) Gentoo, Funtoo StumpWM, Xterm Dvorak, Vim Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 4. Introduction ELOG Ebuild Phase Hook 目的、調べたこと emerge のログを取りたい、完了を知りたい ELOG でモジュールを使う ELOG でカスタムコマンドでを使う emerge のフェーズの経過を知りたい Ebuild Phase Hook を使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 5. Introduction ELOG Ebuild Phase Hook 内容 ELOG のロギング機能 ELOG ってどんなのか モジュールを使う カスタムコマンド を使う Ebuild Phase Hook Ebuild Phase Hook ってど んなのか パッケージ毎に用意して 使う /etc/portage/bashrc におい て使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 6. Introduction ELOG Ebuild Phase Hook 内容 ELOG のロギング機能 ELOG ってどんなのか モジュールを使う カスタムコマンド を使う Ebuild Phase Hook Ebuild Phase Hook ってど んなのか パッケージ毎に用意して 使う /etc/portage/bashrc におい て使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 7. Introduction ELOG Ebuild Phase Hook ELOG ってどんなのか Portage-2.0.* では enotice という ebuild があった ELOG になって Portage に組み込まれた (enotice と非互換) 保存されたログは eread で確認できる 設定に使う変数 (make.conf) PORTAGE_ELOG_CLASSES ELOG 対象を指定する (info, warn, error など) PORTAGE_ELOG_SYSTEM モジュールを指定する (空だと ELOG は disabled) PORTAGE_ELOG_COMMAND $PACKAGE ($PF, $PN-$PVR) と $LOGFILE (パス) の 2 つの値を渡せる (正規表現) Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 8. Introduction ELOG Ebuild Phase Hook ELOG ってどんなのか 設定例 e.g. GentWoo PORTAGE_ELOG_CLASSES="log warn error qa" PORTAGE_ELOG_SYSTEM="custom:* echo save" PORTAGE_ELOG_COMMAND="/usr/bin/gentwoo ’${PACKAGE}’ ’${LOGFILE}’" Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 9. Introduction ELOG Ebuild Phase Hook モジュールを使う 一度に複数のモジュールを使うことができる コロンで区切って、PORTAGE_ELOG_CLASSES を上書きできる "echo save:log mail:*" コードは /usr/lib/portage/pym/portage/elog/ にある (Python) 標準で用意されている echo, save, custom, syslog, mail, mail_summary, save, save_summary PORTAGE_ELOG_COMMAND を使うには custom を指定する Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 10. Introduction ELOG Ebuild Phase Hook モジュールを使う Email モジュール PORTAGE_ELOG_SYSTEM に mail または mail_summary モジュールを追加して使う mail_summary は emerge が終了すると すべてのメッセージを 1 通にまとめて送る ${ACTION} (merge, unmerge) は mail でのみ使える PORTAGE_ELOG_MAILURI /usr/share/portage/config/make.conf.example 参照 PORTAGE_ELOG_MAILFROM "portageexample.org" PORTAGE_ELOG_MAILSUBJECT "[portage] euild log for ${ACTION} ${PACKAGE} on ${HOST}" Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 11. Introduction ELOG Ebuild Phase Hook email モジュールの注意、まとめ SystemExit などで中止しても送られる (成否によらない) 認証などで失敗すると例外のメッセージを出してくれる !!! An error occured while trying to send logmail: ... Sure you configured PORTAGE_LOG_MAILURI correctly? Python (socket.getfqdn()) で、/etc/hosts をちゃんと読めるか 確認しておく (${HOST}) portage 2.1.1 から アドレスの user 部分にも が使える (gmail だと, user@gmail.com@gmail.com:100587) port は SMTP 認証を使う場合は 465 や 587 じゃなくて、 100465 とか 100587 にする Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 12. Introduction ELOG Ebuild Phase Hook モジュールを使う ログ (通知) 例: Email モジュール INFO: setup Package: app-editors/vim-7.4.273 Repository: gentoo Maintainer: vim@gentoo.org USE: X acl amd64 cscope elibc_glibc kernel_linux lua ... racket userland_GNU FEATURES: preserve-libs sandbox INFO: prepare Applying vim-patches-7.4.273.patch ... INFO: postinst Updating documentation tags in /usr/share/vim/vim74 Calling eselect vi update... Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 13. Introduction ELOG Ebuild Phase Hook jabber モジュール http://projects.usrportage.de/index.fcgi/ portage-mod-jabber/wiki % epkginfo portage-mod_jabber * app-portage/portage-mod_jabber [gentoo] Maintainer: hanno@gentoo.org Upstream: None specified Homepage: http://usrportage.de/ Location: /usr/portage/app-portage/portage-mod_jabber Keywords: 0.0.3:0: Keywords: 0.0.5.1:0: ~amd64 ~arm ~x86 License: GPL-2 # configuration (make.conf) PORTAGE_ELOG_SYSTEM="jabber" PORTAGE_ELOG_JABBERFROM="sender:password@host.com[/resource]" PORTAGE_ELOG_JABBERTO="jid1@host.com jid2@host.com admin@foo.com" Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 14. Introduction ELOG Ebuild Phase Hook モジュールを使う カスタムコマンドで通知する root ユーザのプロセスになる X-Session に接続する工夫が必要 DISPLAY ":0.0" XAUTHORITY "/home/user/.Xauthority" (X-session のクッキー) #!/bin/sh if [ $# -lt 1 ]; then echo "Usage: ‘basename $0‘ command" >&2 exit 2 fi su -c "exec env DISPLAY=’$DISPLAY’ XAUTHORITY=’$XAUTHORITY’ ’$SHELL’ -c ’$*’" Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 15. Introduction ELOG Ebuild Phase Hook デモ Stumpish の例 https://gist.github.com/grauwoelfchen/4f64480526d8aa1b15b4 https://gist.github.com/grauwoelfchen/3d64c13cf473667123d6 # xroot-stumpish ’package name’ ’log file name’ +--------------------+ | package name | | log file name | +--------------------+ Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 16. Introduction ELOG Ebuild Phase Hook Ebuild Phase Hook とは Ebuild の各段階の前後 (pre, post) で評価されれる Bash スクリプト Ebuild を直接書き換えたりせずに各 Phase で環境変数などを 上書きしたりできる カテゴリや SLOT を絞って評価されるようにもできる Ebuild で使われる変数のほかヘルパー関数 (einfo など) も使える Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 17. Introduction ELOG Ebuild Phase Hook bashrc の場所と順序 評価される順序 (上から) $PN Package name $P Package name and version $PF Full-Package name (${PN}-${PVR}) 1 /etc/portage/bashrc 2 /etc/portage/env/${CATEGORY}/${PN} 3 /etc/portage/env/${CATEGORY}/${PN}:${SLOT} 4 /etc/portage/env/${CATEGORY}/${P} 5 /etc/portage/env/${CATEGORY}/${PF} Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 18. Introduction ELOG Ebuild Phase Hook Ebuild Phase Hook の例 ML (gentoo-portage-dev) にあった例 $ cat /etc/portage/env/sys-libs/glibc pre_pkg_setup() { local x for x in installsources splitdebug ; do if ! has $x $FEATURES ; then elog "bashrc is adding $x to FEATURES for $PN" FEATURES="$FEATURES $x" fi done ... } Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 19. Introduction ELOG Ebuild Phase Hook Ebuild Phase Hook の例 グローバルでフックする例 $ cat /etc/portage/bashrc if [ "${EBUILD_PHASE}" == "postinst" ]; then einfo "postinst" ... elif [ "${EBUILD_PHASE}" == "postrm" ]; then einfo "postrm" ... fi ... Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 20. Introduction ELOG Ebuild Phase Hook Ebuild Phase の一覧 1 pretend 2 clean 3 setup 4 unpack 5 prepare 6 configure 7 compile 8 test 9 install 10 ? 11 preinst 12 ? 13 prerm 14 postrm 15 cleanrm 16 postinst 17 ? 18 clean Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 21. Introduction ELOG Ebuild Phase Hook Ebuild Phase Hook の注意、まとめ 同期的 に呼ばれる (sleep すると emerge とまっちゃう) 対象の Phase が定義されていない場合もある (ebuild による) ${EBUILD_PHASE} が空文字列で呼ばれる時がある ? 本来は Ebuild を直接ハックせずに、環境変数や設定などを 行うもの Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 22. Introduction ELOG Ebuild Phase Hook 参考リンク Portage Documentation http://dev.gentoo.org/~zmedico/portage/doc/ Ebuild Phase Hook http://dev.gentoo.org/~zmedico/portage/doc/ch01s02.html Ebuild Phases http://dev.gentoo.org/~zmedico/portage/doc/ch06.html#package-ebuild-phases Helper Functions http://dev.gentoo.org/~zmedico/portage/doc/ch06s02.html Ebuild Writing http://devmanual.gentoo.org/ebuild-writing/index.html EAPI http://devmanual.gentoo.org/ebuild-writing/eapi/ Variables http://devmanual.gentoo.org/ebuild-writing/variables/ Working with Portage > Files and Directories http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=1 Gentoo Wiki - Project:Portage http://wiki.gentoo.org/wiki/Project:Portage Portage log http://wiki.gentoo.org/wiki/Portage_log mod_jabber for Portage http://projects.usrportage.de/index.fcgi/portage-mod-jabber/wiki Remote X Apps mini-HOWTO http://zweije.home.xs4all.nl/xauth.html#toc7 7. X Applications from Another User-id http://zweije.home.xs4all.nl/xauth-7.html Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  • 23. Introduction ELOG Ebuild Phase Hook おわり ありがとうございました Gentoo Security Team の方作成の LaTeX テーマを 使わせてもらいました http://a3li.li/2014/04/gentoo-latex-beamer-theme/ Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知