切腹倶楽部
日々是切腹
GentooのOverlay入門
情報が散ってて若干戸惑ったのでメモ。(自分の検索能力が低いだけ)
リンク
以下のリンクの内容を読めば,この記事の残りの部分を読む必要は無い。
当然ではあるが,gentoo/gentooも大変参考になる。
- 基本
- https://wiki.gentoo.org/wiki/Eselect/Repository :
eselect-repositoryについて - https://wiki.gentoo.org/wiki/Pkgdev :
pkgdevについて - https://wiki.gentoo.org/wiki/Ebuild_repository : リポジトリについて
- https://wiki.gentoo.org/wiki/Creating_an_ebuild_repository : リポジトリの作成
- https://devmanual.gentoo.org/ebuild-writing/misc-files/metadata/ :
metadata.xmlについて
- https://wiki.gentoo.org/wiki/Eselect/Repository :
- Ebuild / EAPI
- https://devmanual.gentoo.org/quickstart/ : Ebuildクイックスタート
- https://wiki.gentoo.org/wiki/Basic_guide_to_write_Gentoo_Ebuilds : Ebuild執筆の基本
- https://devmanual.gentoo.org/general-concepts/dependencies/ : パッケージの依存関係について
- https://devmanual.gentoo.org/ebuild-writing/eapi/ : EAPIについて
- https://devmanual.gentoo.org/ebuild-writing/variables/ : 使える変数
- https://wiki.gentoo.org/wiki/Eclass : Eclassについて
- https://devmanual.gentoo.org/eclass-reference/ : 各Eclassの詳細
- おまけ
- https://wiki.gentoo.org/wiki/Repository_format/metadata/layout.conf :
layout.confについて - https://devmanual.gentoo.org/general-concepts/manifest/ :
Manifestについて - https://devmanual.gentoo.org/general-concepts/slotting/ : Slottingについて
- https://devmanual.gentoo.org/general-concepts/sandbox/ : Sandboxについて
- https://wiki.gentoo.org/wiki/Repository_format/metadata/layout.conf :
作ってみる
今回は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
旧い手順
まず,目的のディレクトリに
metadataとprofilesというディレクトリを掘る。 そしてprofiles/repo_nameにリポジトリ名を,meta/layout.confにmasters = 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)に置いて運用している。