切腹のイラスト

GentooのOverlay入門

{
  date: "",
  update: "",
  category: "/unix-like",
  tags: ["Gentoo"]
}

情報が散ってて若干戸惑ったのでメモ。(自分の検索能力が低いだけ)

リンク

以下のリンクの内容を読めば,この記事の残りの部分を読む必要は無い。
当然ではあるが,gentoo/gentooも大変参考になる。

作ってみる

今回はapp-eselect/eselect-repositoryを前提に話を進める。 Laymanを使った方法もあるが,時代はeselect-repositoryだ。

初期化

まずは空のプロファイルを作成,登録する。

# eselect repository create hoge

/var/db/repos/hogeに出力されるので,必要に応じてGitを導入したりする。
ちなみに.gitignoreはこんな感じ。

/metadata/md5-cache

cf. https://wiki.gentoo.org/wiki/Creating_an_ebuild_repository

旧い手順

まず,目的のディレクトリにmetadataprofilesというディレクトリを掘る。 そしてprofiles/repo_nameにリポジトリ名を,meta/layout.confmasters = gentooを書けばGentooオーバーレイの完成。 ちなみにこの2つのファイルは両方必須なので,忘れずに作成する。

以下に,コマンドの一例を示す。

% mkdir /path/to/repo && cd /path/to/repo
% mkdir metadata profiles
% echo "hoge" > profiles/repo_name
% echo "masters = gentoo" > metadata/layout.conf

次に,layout.confのWikiを見ながらmetadata/layout.confを適当に編集する。 編集しなくても良い。
thin-manifestsを設定しておくとManifestファイルにebuildのハッシュが載らなくなる。 Portageプロファイルを置く予定のある人は以下のようにprofile-formatsの行を設定すると良い。

masters = gentoo
thin-manifests = true
profile-formats = portage-2

cf. https://wiki.gentoo.org/wiki/Profile_(Portage)#Creating_custom_profiles

ebuildを書く

gentoo/gentoo等を参考にして書く。

また,必要に応じてWikiを参考にmetadata.xmlを作成する。 例えば,GitHubからソースのtar球を落としてくるなら<upstream><remote-id type="github">を, use.descにない独自のUSEフラグを利用するなら<use><flag>を記述する。 しないとpkgcheck(QAツール; 後述)に怒られる。

% mkdir -p hoge-category/fuga
% vim hoge-category/fuga/fuga-1.2.3.ebuild hoge-category/fuga/metadata.xml

次に,Manifestというファイルを生成する。 内容を見て察せられる通り,これはリポジトリを編集する度に更新する必要がある。 Manifestの管理にはdev-util/pkgdevを使う。 前まではrepomanというツールが使えていたのだが,現在では廃止されているようだ。
リポジトリ内の任意の場所で,以下を実行する。

% pkgdev manifest -f

このコマンドは${DISTDIR-/var/cache/distdir}にダウンロードキャッシュを置こうとする。 一般ユーザ権限しかない環境にあるときは-d hoge(--distdir hoge)でキャッシュの保存先を変更することができる。

完成

一旦これで完成。

使い方

とりあえずGitHubで公開・使用する方法を紹介する。

ebuild

*.ebuildを取り扱うためのお便利ツール。 Ebuildを各ステップごとにデバッグできたりする。 コマンドは複数指定できる。

% ebuild hoge-1.2.3.ebuild clean compile test install
% ebuild hoge-1.2.3.ebuild manifest

ebuild installは実際にはファイルをインストールしてくれない。 インストールファイルは/var/tmp/portage/*/*/imageに出力される。

QAツール

リポジトリ内のまずいところを教えてくれる。

% pkgcheck scan --net

pkgdev commit

Gitでコミットする際に,コミットメッセージを自動で書いてくれたり,Manifestの更新をしてくれたりする。

% pkgdev commit --signoff

別マシンに登録する

# eselect repository add hoge git https://github.com/hoge/fuga.git
# emerge --sync hoge

これだけ。 emerge --sync hogeの部分でemaint sync -r hogeとする記事もあるが,どうせやる事は一緒なので覚えやすい方を使うと良い。

プライベートリポジトリで使用する

調べましたが,わかりませんでした! いかがでしたか?

一応,Wikiが参考になりそうではある。 また,2022年8月現在ではここらへん(/usr/lib/python3.10/site-packages/portage/sync/modules/git/git.py)のファイルに同期関連の内容が確認できる。

蛇足

用語の知識さえあれば簡単に作れることがわかった。 Gentooはそのエコシステムに魅力があるので,ローカルでmake installなんかしてないで是非ツールを活用して欲しい。

自分は個人用のものをGitHub(yamader/overlay)に置いて運用している。