Portageではツリーごとのメタデータキャッシュを作ることができます。gentooツリーの場合はemerge --syncで一緒に更新されるんですけどね。
これをoverlayでも自分で作っておくことで、emergeする時の依存関係の解決を速くすることができたりします。というお話。
前提知識
- laymanで追加したリポジトリがどこに置かれているか知っている
- ローカルリポジトリを使えていれば多分余裕
あらまし
egencacheというコマンドを実行すると、指定したoverlayのmetadata/md5-cache/以下にebuildのキャッシュを作ります。のでgitとかで管理してたら.gitignoreで除外するといいかも。(著名なoverlayは既にそういう構成になってたりもします)
cache-formatsの設定
各overlay直下のmetadata/layout.confでキャッシュ形式の指定ができます。
master = gentoo
cache-formats = md5-dict # これ
thin-manifests = true
が、portage-2.1.11.32以降md5-dictがデフォルトになっているので、指定しなくても同様に動きます。
それ以前はpmsという形式で、更新日時ベースでキャッシュの有効性を判定してしまうので問題になることがあったようです。
キャッシュの生成
$ sudo egencache --repo=<repo_name> --update --update-use=local-desc
ローカルリポジトリをroot以外で管理してるならそのユーザーでもok。
makeでおなじみ--jobsもしくは-jも使えます。
eix-syncで自動生成
古いキャッシュが混在していても無視されるだけで問題はありませんが、意味がないので自動で生成したいですね。
例えば・・・
# overlayの更新
*
# metadataキャッシュの更新
@egencache --repo=<repo_name> --update --update-use-local-desc
こんな感じに。
ついでに-Mでemerge --metadataもさせるともうちょっと高速化できたりしますが、お好みで。
参考
- gentoo-haskell overlay
- man eix (SPEEDUPセクションにもう少し丁寧な説明が)
- man egencache
このエントリの元になった話や所要時間の比較がブログにあるので、こちらもどうぞ。
http://d.hatena.ne.jp/unarist/20140424/1398358540