ボブ「やぁ,ジョニー,聞いてくれよ.」
ジョニー「なんだい,ボブ.」
ボブ「もうすぐクリスマスだよ!」
ジョニー「オタクのボクらにはあんまりカンケーないケドね.」
ボブ「んにゃ,技術系Advent Calendarってのがあるよ.」
ジョニー「Gentooもあるのかい?」
ボブ「12/25まで人数が全然足りないケド,どうすんだろうね?!」
ジョニー「そいつぁ言わないお約束さ!」
ボブ「で,なんかイイネタは無いかな?」
ジョニー「ん〜,epatch_userとかどう?」
ボブ「なんだい,それは?」
ジョニー「epatchは知ってるよね?」
ボブ「ebuildで使われるパッチを扱う関数だね,eutils.eclassの一部だよ!」
ジョニー「うん.これでボクらはパッケージをインストールする直前にソースコードを変更出来るって寸法さ.」
ボブ「ソースベースディストロの強みだね!」
ジョニー「まぁ,その後に怒濤のコンパイルが走るけどね.」
ボブ「で,具体的にeptach_userについて説明してくれる?」
ジョニー「Gentooでフツーのパッケージの場合,パッチってどこにあるか知ってるよね?」
ボブ「${FILESDIR}以下だね.サイズが大きかったり,数が多い場合には${DISTDIR}以下にダウンロードされてるよ!」
ジョニー「epatch_userもパッチを扱う関数なんだけど,基本的には/etc/portage/patches/以下に保存してあるオレオレパッチが対象になるんだ.」
ボブ「へぇ,でもオレオレoverlayにforkしてepatchを書き足せば同じだよね?」
ジョニー「それでも幾つか利点はあるよ.」
- パッチの追加/削除/更新にManifestを更新する必要が無い.
- 元々,幾つかのeclassやebuildはepatch_userを呼んでいる.
- ${PORTAGE_CONFIGROOT}, ${CATEGORY}/{${PF},${P},${PN}}, ${CHOST}による階層的管理
ジョニー「だね.それから,toolchain.eclassやwww-client/firefoxがepatch_userを呼んでいるのは知ってたかい?
他にもepatch_userを呼んでいるモノは沢山あるよ.」
ボブ「じゃあ,その手のパッケージのパッチは/etc/portage/patches/以下にガンガン突っ込んでもOKって訳ね.」
ジョニー「うん.最後の階層管理に関しては想像がつく?」
ボブ「つまり,こう言う事かい?」
/etc/portage/patches/ | +- sys-devel/gcc-4.4.4-r2/omg_optimized.patch | +- sys-devel/gcc-4.4.4/need_more_speed.patch | +- sys-devel/gcc/of_course_no_brake.patchジョニー「そうそう.で,このパッチって何?」
ボブ「それは秘密さ! ${PORTAGE_CONFIGROOT}ってなんだい?」
ジョニー「/etc/portage/patches/を切り替えられる様にするprefixだね.あと${CHOST}がpostfixについてもOKだよ.」
ボブ「なるほど,こう言う感じ?」
/usr/local/portage/config/ | +- etc/portage/patches/ | +- sparc-unknown-linux-gnu/ | +- sys-devel/gcc-4.4.4-r2/rip_sun.patch | +- sys-devel/gcc-4.4.4/beat_oracle.patch | +- sys-devel/gcc/fork_all.patchジョニー「そうそう.で,このパッチって何?」
ボブ「それは秘密さ!」
ボブ「でさ,実際のトコロさ.epatch_userって推奨されてんの?」
ジョニー「公式の見解はキチンと調べてないけど,SpanKYがbugzieで言及してたので禁断の技でもないと思うよ.」
- app-emulation/wine could support applying of user-provided patches
- xbmc-9999 enable epatch_user
- >=sys-devel/gcc-4.5: Add "dragonegg" USE flag that patches GCC with dragonegg patches
- dev-libs/openssl-1.0.0+: SSLv2 is disabled by default which can cause "tlsv1 alert decode error"
ジョニー「bugzieには挙ってるよ.
a "hack" in an eclassだとか言ってるケド,単にメンドイからやってないだけじゃないかな.」
ボブ「お,いい感じのオチがついたね!」
ジョニー「HAPPY HACKING w/ Gentoo!!1」