23
Introduction ELOG Ebuild Phase Hook emerge のログと通知 ELOG Ebuild Phase Hook について調べた Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 2014-05-11 Yasuhiro Asaka @grauwoelfchen Gentoo 勉強会 #2 emerge のログと通知

Elog and Ebuild Phase Hook

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

emergeのログと通知ELOGと Ebuild Phase Hookについて調べた

Yasuhiro Asaka @grauwoelfchenGentoo勉強会 #22014-05-11

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 2: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

1 Introduction

2 ELOG

3 Ebuild Phase Hook

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 3: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

自己紹介

Yasuhiro Asakaプログラマ (フリーランス)Gentoo, Funtoo

StumpWM, XtermDvorak, Vim

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 4: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

目的、調べたこと

emergeのログを取りたい、完了を知りたいELOGでモジュールを使うELOGでカスタムコマンドでを使う

emergeのフェーズの経過を知りたいEbuild Phase Hookを使う

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 5: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

内容

ELOGのロギング機能ELOGってどんなのかモジュールを使う

カスタムコマンドを使う

Ebuild Phase HookEbuild Phase Hookってどんなのか

パッケージ毎に用意して使う

/etc/portage/bashrcにおいて使う

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 6: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

内容

ELOGのロギング機能ELOGってどんなのかモジュールを使う

カスタムコマンドを使う

Ebuild Phase HookEbuild Phase Hookってどんなのか

パッケージ毎に用意して使う

/etc/portage/bashrcにおいて使う

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 7: Elog and Ebuild Phase Hook

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勉強会 #2emergeのログと通知

Page 8: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

ELOGってどんなのか

設定例 e.g. GentWooPORTAGE_ELOG_CLASSES="log warn error qa"PORTAGE_ELOG_SYSTEM="custom:* echo save"PORTAGE_ELOG_COMMAND="/usr/bin/gentwoo ’${PACKAGE}’ ’${LOGFILE}’"

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 9: Elog and Ebuild Phase Hook

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_summaryPORTAGE_ELOG_COMMANDを使うには customを指定する

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 10: Elog and Ebuild Phase Hook

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勉強会 #2emergeのログと通知

Page 11: Elog and Ebuild Phase Hook

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だと, [email protected]@gmail.com:100587)portは SMTP認証を使う場合は 465や 587じゃなくて、100465とか 100587にする

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 12: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

モジュールを使う

ログ (通知)例: EmailモジュールINFO: setupPackage: app-editors/vim-7.4.273Repository: gentooMaintainer: [email protected]: X acl amd64 cscope elibc_glibc kernel_linux lua ... \racket userland_GNU

FEATURES: preserve-libs sandboxINFO: prepareApplying vim-patches-7.4.273.patch ...INFO: postinstUpdating documentation tags in /usr/share/vim/vim74Calling eselect vi update...

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 13: Elog and Ebuild Phase Hook

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: [email protected]: None specifiedHomepage: http://usrportage.de/Location: /usr/portage/app-portage/portage-mod_jabberKeywords: 0.0.3:0:Keywords: 0.0.5.1:0: ~amd64 ~arm ~x86License: GPL-2

# configuration (make.conf)PORTAGE_ELOG_SYSTEM="jabber"PORTAGE_ELOG_JABBERFROM="sender:[email protected][/resource]"PORTAGE_ELOG_JABBERTO="[email protected] [email protected] [email protected]"

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 14: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

モジュールを使う

カスタムコマンドで通知するrootユーザのプロセスになるX-Sessionに接続する工夫が必要DISPLAY ":0.0"

XAUTHORITY "/home/user/.Xauthority" (X-sessionのクッキー)#!/bin/sh

if [ $# -lt 1 ]; thenecho "Usage: ‘basename $0‘ command" >&2exit 2

fi

su -c "exec env DISPLAY=’$DISPLAY’ XAUTHORITY=’$XAUTHORITY’ ’$SHELL’ -c ’$*’"

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 15: Elog and Ebuild Phase Hook

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勉強会 #2emergeのログと通知

Page 16: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookとは

Ebuildの各段階の前後 (pre, post)で評価されれる BashスクリプトEbuildを直接書き換えたりせずに各 Phaseで環境変数などを上書きしたりできる

カテゴリや SLOTを絞って評価されるようにもできるEbuildで使われる変数のほかヘルパー関数 (einfoなど)も使える

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 17: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

bashrcの場所と順序

評価される順序 (上から)$PN Package name$P Package name and version$PF Full-Package name (${PN}-${PVR})

1 /etc/portage/bashrc2 /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勉強会 #2emergeのログと通知

Page 18: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookの例ML (gentoo-portage-dev)にあった例

$ cat /etc/portage/env/sys-libs/glibcpre_pkg_setup() {local xfor x in installsources splitdebug ; doif ! has $x $FEATURES ; thenelog "bashrc is adding $x to FEATURES for $PN"FEATURES="$FEATURES $x"fi

done...

}

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 19: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookの例グローバルでフックする例

$ cat /etc/portage/bashrcif [ "${EBUILD_PHASE}" == "postinst" ]; theneinfo "postinst"...

elif [ "${EBUILD_PHASE}" == "postrm" ]; theneinfo "postrm"...

fi...

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 20: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

Ebuild Phaseの一覧1 pretend2 clean3 setup4 unpack5 prepare6 configure7 compile8 test9 install10 ?11 preinst12 ?13 prerm14 postrm15 cleanrm16 postinst17 ?18 clean

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 21: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookの注意、まとめ

同期的に呼ばれる (sleepすると emergeとまっちゃう)対象の Phaseが定義されていない場合もある (ebuildによる)${EBUILD_PHASE}が空文字列で呼ばれる時がある ?本来は Ebuildを直接ハックせずに、環境変数や設定などを行うもの

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知

Page 22: Elog and Ebuild Phase Hook

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.htmlEbuild Phases http://dev.gentoo.org/~zmedico/portage/doc/ch06.html#package-ebuild-phases

Helper Functions http://dev.gentoo.org/~zmedico/portage/doc/ch06s02.htmlEbuild 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 Directorieshttp://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=1

Gentoo Wiki - Project:Portage http://wiki.gentoo.org/wiki/Project:PortagePortage log http://wiki.gentoo.org/wiki/Portage_log

mod_jabber for Portage http://projects.usrportage.de/index.fcgi/portage-mod-jabber/wikiRemote 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勉強会 #2emergeのログと通知

Page 23: Elog and Ebuild Phase Hook

Introduction ELOG Ebuild Phase Hook

おわり

ありがとうございました

Gentoo Security Teamの方作成の LaTeXテーマを使わせてもらいました

http://a3li.li/2014/04/gentoo-latex-beamer-theme/

Yasuhiro Asaka @grauwoelfchen Gentoo勉強会 #2emergeのログと通知