elog and ebuild phase hook

Post on 08-May-2015

271 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Introduction ELOG Ebuild Phase Hook

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

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

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

Introduction ELOG Ebuild Phase Hook

1 Introduction

2 ELOG

3 Ebuild Phase Hook

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

Introduction ELOG Ebuild Phase Hook

自己紹介

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

StumpWM, XtermDvorak, Vim

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

Introduction ELOG Ebuild Phase Hook

目的、調べたこと

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

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

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

Introduction ELOG Ebuild Phase Hook

内容

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

カスタムコマンドを使う

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

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

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

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

Introduction ELOG Ebuild Phase Hook

内容

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

カスタムコマンドを使う

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

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

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

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

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のログと通知

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のログと通知

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のログと通知

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のログと通知

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

Introduction ELOG Ebuild Phase Hook

モジュールを使う

ログ (通知)例: EmailモジュールINFO: setupPackage: app-editors/vim-7.4.273Repository: gentooMaintainer: vim@gentoo.orgUSE: 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のログと通知

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.orgUpstream: 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:password@host.com[/resource]"PORTAGE_ELOG_JABBERTO="jid1@host.com jid2@host.com admin@foo.com"

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

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のログと通知

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のログと通知

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookとは

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

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

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

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のログと通知

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のログと通知

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のログと通知

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のログと通知

Introduction ELOG Ebuild Phase Hook

Ebuild Phase Hookの注意、まとめ

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

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

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のログと通知

Introduction ELOG Ebuild Phase Hook

おわり

ありがとうございました

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

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

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

top related