More Related Content Similar to Elog and Ebuild Phase Hook (20) Elog and Ebuild Phase Hook1. 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 のログと通知