O HAI THIS BLOG PURPZIEZ 2 B UZED AZ MAH PLESIOUS MEM. :)

2010/12/15

epatch_user; # FTW

これはGentoo Advent Calendarの5日目の記事です. :D

  ボブ「やぁ,ジョニー,聞いてくれよ.」
ジョニー「なんだい,ボブ.」
  ボブ「もうすぐクリスマスだよ!」
ジョニー「オタクのボクらにはあんまりカンケーないケドね.」
  ボブ「んにゃ,技術系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}による階層的管理
  ボブ「確かにオレオレパッチだけでManifest更新はダルいね.devが元のebuildを変更したら追従する必要もあるし.」
ジョニー「だね.それから,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で言及してたので禁断の技でもないと思うよ.」
  ボブ「じゃ,なんでepatch_userってドキュメントに載ってないのさ?」
ジョニー「bugzieには挙ってるよ.
     a "hack" in an eclassだとか言ってるケド,単にメンドイからやってないだけじゃないかな.」
  ボブ「お,いい感じのオチがついたね!」
ジョニー「HAPPY HACKING w/ Gentoo!!1」