Introduction ELOG Ebuild Phase Hook
emerge のログと通知
ELOG と Ebuild Phase Hook について調べた
Yasuhiro Asaka @grauwoelfchen
Gentoo 勉強...
Introduction ELOG Ebuild Phase Hook
1 Introduction
2 ELOG
3 Ebuild Phase Hook
Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2
...
Introduction ELOG Ebuild Phase Hook
自己紹介
Yasuhiro Asaka
プログラマ (フリーランス)
Gentoo, Funtoo
StumpWM, Xterm
Dvorak, Vim
Yasuhiro ...
Introduction ELOG Ebuild Phase Hook
目的、調べたこと
emerge のログを取りたい、完了を知りたい
ELOG でモジュールを使う
ELOG でカスタムコマンドでを使う
emerge のフェーズの経過を知りた...
Introduction ELOG Ebuild Phase Hook
内容
ELOG のロギング機能
ELOG ってどんなのか
モジュールを使う
カスタムコマンド を使う
Ebuild Phase Hook
Ebuild Phase Hook...
Introduction ELOG Ebuild Phase Hook
内容
ELOG のロギング機能
ELOG ってどんなのか
モジュールを使う
カスタムコマンド を使う
Ebuild Phase Hook
Ebuild Phase Hook...
Introduction ELOG Ebuild Phase Hook
ELOG ってどんなのか
Portage-2.0.* では enotice という ebuild があった
ELOG になって Portage に組み込まれた (enoti...
Introduction ELOG Ebuild Phase Hook
ELOG ってどんなのか
設定例 e.g. GentWoo
PORTAGE_ELOG_CLASSES="log warn error qa"
PORTAGE_ELOG_SY...
Introduction ELOG Ebuild Phase Hook
モジュールを使う
一度に複数のモジュールを使うことができる
コロンで区切って、PORTAGE_ELOG_CLASSES を上書きできる
"echo save:log mai...
Introduction ELOG Ebuild Phase Hook
モジュールを使う
Email モジュール
PORTAGE_ELOG_SYSTEM に
mail または mail_summary モジュールを追加して使う
mail_sum...
Introduction ELOG Ebuild Phase Hook
email モジュールの注意、まとめ
SystemExit などで中止しても送られる (成否によらない)
認証などで失敗すると例外のメッセージを出してくれる
!!! An ...
Introduction ELOG Ebuild Phase Hook
モジュールを使う
ログ (通知) 例: Email モジュール
INFO: setup
Package: app-editors/vim-7.4.273
Repositor...
Introduction ELOG Ebuild Phase Hook
jabber モジュール
http://projects.usrportage.de/index.fcgi/
portage-mod-jabber/wiki
% epkgi...
Introduction ELOG Ebuild Phase Hook
モジュールを使う
カスタムコマンドで通知する
root ユーザのプロセスになる
X-Session に接続する工夫が必要
DISPLAY ":0.0"
XAUTHORITY...
Introduction ELOG Ebuild Phase Hook
デモ
Stumpish の例
https://gist.github.com/grauwoelfchen/4f64480526d8aa1b15b4
https://gist...
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook とは
Ebuild の各段階の前後 (pre, post) で評価されれる Bash スクリプト
Ebuild を直接書き換えたりせずに...
Introduction ELOG Ebuild Phase Hook
bashrc の場所と順序
評価される順序 (上から)
$PN Package name
$P Package name and version
$PF Full-Pack...
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の例
ML (gentoo-portage-dev) にあった例
$ cat /etc/portage/env/sys-libs/gli...
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の例
グローバルでフックする例
$ cat /etc/portage/bashrc
if [ "${EBUILD_PHASE}" == ...
Introduction ELOG Ebuild Phase Hook
Ebuild Phase の一覧
1 pretend
2 clean
3 setup
4 unpack
5 prepare
6 configure
7 compile
8 t...
Introduction ELOG Ebuild Phase Hook
Ebuild Phase Hook の注意、まとめ
同期的 に呼ばれる (sleep すると emerge とまっちゃう)
対象の Phase が定義されていない場合もある...
Introduction ELOG Ebuild Phase Hook
参考リンク
Portage Documentation http://dev.gentoo.org/~zmedico/portage/doc/
Ebuild Phase H...
Introduction ELOG Ebuild Phase Hook
おわり
ありがとうございました
Gentoo Security Team の方作成の LaTeX テーマを
使わせてもらいました
http://a3li.li/2014/0...
Upcoming SlideShare
Loading in …5
×

Elog and Ebuild Phase Hook

600 views

Published on

LT at Gentoo users group study meet up in japan #2

Published in: Software, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
600
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Elog and Ebuild Phase Hook

  1. 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. 2. Introduction ELOG Ebuild Phase Hook 1 Introduction 2 ELOG 3 Ebuild Phase Hook Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  3. 3. Introduction ELOG Ebuild Phase Hook 自己紹介 Yasuhiro Asaka プログラマ (フリーランス) Gentoo, Funtoo StumpWM, Xterm Dvorak, Vim Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  4. 4. Introduction ELOG Ebuild Phase Hook 目的、調べたこと emerge のログを取りたい、完了を知りたい ELOG でモジュールを使う ELOG でカスタムコマンドでを使う emerge のフェーズの経過を知りたい Ebuild Phase Hook を使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  5. 5. Introduction ELOG Ebuild Phase Hook 内容 ELOG のロギング機能 ELOG ってどんなのか モジュールを使う カスタムコマンド を使う Ebuild Phase Hook Ebuild Phase Hook ってど んなのか パッケージ毎に用意して 使う /etc/portage/bashrc におい て使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  6. 6. Introduction ELOG Ebuild Phase Hook 内容 ELOG のロギング機能 ELOG ってどんなのか モジュールを使う カスタムコマンド を使う Ebuild Phase Hook Ebuild Phase Hook ってど んなのか パッケージ毎に用意して 使う /etc/portage/bashrc におい て使う Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  7. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. Introduction ELOG Ebuild Phase Hook Ebuild Phase Hook の注意、まとめ 同期的 に呼ばれる (sleep すると emerge とまっちゃう) 対象の Phase が定義されていない場合もある (ebuild による) ${EBUILD_PHASE} が空文字列で呼ばれる時がある ? 本来は Ebuild を直接ハックせずに、環境変数や設定などを 行うもの Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知
  22. 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. 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 のログと通知

×