Hook after emerge

emergeした後にhookの設定ができたら便利だなーと思っていたら実はできました.

Ref: https://forums-lb.gentoo.org/viewtopic-t-772340-start-0.html

/etc/portage/bashrcにpost_pkg_postinstというfunctionを定義することで,各パッケージのインストール後に実行してもらえます. 特定パッケージのインストール後のみ実行したい操作がある場合は,$CATEGORY,$PNという変数にそれぞれパッケージカテゴリとパッケージ名が入っているので,これらを利用して処理したい対象のパッケージか判定します.

firefoxのAdobeReaderがC:\nppdf32Log\debuglog.txtというファイル名を作る問題の件も以下のように設定することで,app-text/acroreadがemergeされる毎にnppdf.soの中身を書き換えてくれるので,手動で書き換える手間が省けて大変はかどりますね.

post_pkg_postinst() {
    if [ "$CATEGORY/$PN" = "app-text/acroread" ]; then
        cp /opt/netscape/plugins/nppdf.so /opt/netscape/plugins/nppdf.so.orig
        perl -i'' -pe's{C:\\nppdf32Log\\debuglog\.txt}{"/dev/null"."\0"x17}e' /opt/netscape/plugins/nppdf.so
    fi
}
$ diff <(od -tc /opt/netscape/plugins/nppdf.so.orig) <(od -tc /opt/netscape/plugins/nppdf.so)
8571,8573c8571,8573
< 0414460   e   s   s   a   g   e  \0   a   b  \0   C   :   \   n   p   p
< 0414500   d   f   3   2   L   o   g   \   d   e   b   u   g   l   o   g
< 0414520   .   t   x   t  \0   X   X   X   :   G   i   v   i   n   g    
---
> 0414460   e   s   s   a   g   e  \0   a   b  \0   /   d   e   v   /   n
> 0414500   u   l   l  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
> 0414520  \0  \0  \0  \0  \0   X   X   X   :   G   i   v   i   n   g    

ちゃんと置換できてます.