概要
今回はGentoo Linuxで提供されているLaymanの仕組みを図解し、基本的なコマンドをまとめていきます。
Laymanは複数のOverlay(外部のebuildリポジトリ)を管理しやすくするためのツールです。コマンドラインインターフェースを提供するため、簡単なコマンドで操作することができます。
当記事では、Laymanの具体的なイメージを掴めるように、基本的な概念(ebuild、リポジトリ、overlay等)を分かりやすくまとめた上で、Laymanの図解をしていきます。
イメージを掴めた後は、基本的な操作コマンドを紹介しながら実践していきます。
当記事はLayman – Gentoo Wikiを参考に、自分なりの解釈でまとめたものです。より詳しく知りたい方はぜひこちらを参考にしてみてください。
ebuildとは
ebuildはGentooのパッケージ管理システム(Portage等)によって使用されるテキストファイルで、ソフトウェアごとに個別のebuildが用意されています。
では具体的にebuildには何が書かれているかというと、そのソフトウェア自身についての情報(ソフトウェア名、バージョン等)や、どうやってインストールするか、どのパッケージと依存しているか、といった情報などです。これらの情報がbashスクリプトで記述されています。

パッケージ管理システムはこのebuildを参照して、ユーザがインストールしたいソフトウェアのパッケージを取得し、ローカルPC上でコンパイルします。
また、ebuildは自由に作成することができます。難しそうに思えるかもしれませんが、設定の雛形が用意され、実際に記述する量が少なくても機能するようになっています。詳しくはGentoo Ebuild 執筆基本ガイドを参考にしてみてください。
Gentoo repoとは
ebuildはソフトウェアごとに用意されるため、とてつもない量になります。これらを一箇所にまとめたのがリポジトリです。リポジトリといっても実体は、ebuildやその他関連ファイルが格納されたディレクトリ構造のことです。

ハンドブックに沿ってインストールした場合は、公式のリポジトリが/var/db/repos/gentooディレクトリにあります。以下のように実際に確認してみるとイメージが掴みやすいかと思います。
$ ll /var/db/repos/gentoo
total 1108
drwxr-xr-x 295 root 12288 Jan 30 13:53 acct-group
drwxr-xr-x 270 root 12288 Jan 30 13:53 acct-user
drwxr-xr-x 28 root 4096 Jan 30 13:53 app-accessibility
drwxr-xr-x 194 root 4096 Jan 30 13:53 app-admin
drwxr-xr-x 5 root 4096 Dec 22 16:22 app-antivirus
drwxr-xr-x 99 root 4096 Jan 30 13:53 app-arch
drwxr-xr-x 52 root 4096 Jan 30 13:53 app-backup
drwxr-xr-x 31 root 4096 Jan 30 13:53 app-benchmarks
drwxr-xr-x 48 root 4096 Jan 16 10:52 app-cdr
・・・
特にこのようなGentooの公式リポジトリのことを、Gentoo repo、Portage tree、Gentoo ebuildリポジトリなどと呼びます。これはGentooの開発者たちによってメンテナンスされ続けているリポジトリです。
Overlayとは
先程ebuildを自由に作成することができると言いましたが、ebuildを配布するときは、自分でリポジトリを作成し、そこに配置して配布します。このようなGentoo repo以外のリポジトリのことをOverlayと呼びます。
下記サイトでは世界中のいろんな人が作成したOverlayが公開されています。
Overlayのイメージとしては、以下のようにGentoo repoの上に覆い被さるような感じです。

リポジトリには優先度と言うものがあり、優先度の高いリポジトリの方が先にパッケージ管理システムによって参照されます。Gentoo repoの優先度はデフォルトで-1000というかなり低い優先度になっているため、基本的にOverlayの方が優先されます。このように外部のリポジトリが覆い被さり、優先して参照されるように設計されているため、Overlay(lay over)という名前が付けられたそうです。
参考:https://wiki.gentoo.org/wiki/Ebuild_repository#Priorities
Laymanの図解

世の中には非常に多くのOverlayがあるわけですが、複数のOverlayを使用する場合、自分で追加や削除、更新等の管理を行うのは骨が折れます。
そこで活躍するのがOverlay管理ツールであるLaymanです。Laymanはユーザに対して、Overlayを管理するためのコマンドラインインターフェースを提供します。具体的には、laymanというコマンドを使用することで、簡単にOverlayをローカルに追加、削除、更新等の操作を行います。

Laymanの導入
Laymanを導入する場合は、下記コマンドを実行します。
# emerge -a app-portage/layman
無事にインストールが完了すると、/etc/layman/layman.cfgという設定ファイルが作成されます。これは、/etc/portage/repos.confのフォーマットで様々な設定が行われています。
例えば以下の設定では、新しく追加したOverlayは/var/lib/laymanで管理するということを意味します。このようにデフォルトで様々な基本設定が記述されています。
# less /etc/layman/layman.cfg
[MAIN]
#-----------------------------------------------------------
# Defines the directory where overlays should be installed
storage : /var/lib/layman
#-----------------------------------------------------------
・・・
Laymanのコマンドオプション
ではlaymanコマンドでよく使用するオプションをいくつか紹介しながら実践していきます。
layman -L
-Lオプションを使用と、リモートで公開されているOverlayをリスト形式で一覧表示してくれます。
# layman -L
* Fetching remote list...
* Fetch Ok
* 0bs1d1an [Git ] (https://gitlab.com/0bs1d1an/0bs1d1an-overlay.git, git+ssh://git@gitlab.com/0bs1d1an/0bs1d1an-overlay.git )
* 0x4d4c [Git ] (https://github.com/0x4d4c/gentoo-overlay.git, git://github.com/0x4d4c/gentoo-overlay.git, git@github.com:0x4d4c/gentoo-o...)
* 2xsaiko [Git ] (https://git.sr.ht/~dblsaiko/ebuilds, git@git.sr.ht:~dblsaiko/ebuilds )
* 4nykey [Git ] (https://github.com/4nykey/4nykey.git, git://github.com/4nykey/4nykey.git, git@github.com:4nykey/4nykey.git )
* ace [Git ] (https://github.com/ananace/overlay.git, git://github.com/ananace/overlay.git, git@github.com:ananace/overlay.git )
・・・
layman -a
-aオプションは、指定したOverlayをリモートからローカルに追加します。
# layman -a zx2c4
* Adding overlay...
* Running Git... # ( cd /var/lib/layman && /usr/bin/git clone git://git.zx2c4.com/portage /var/lib/layman/zx2c4 )
Cloning into '/var/lib/layman/zx2c4'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 838 (delta 7), reused 0 (delta 0), pack-reused 815
Receiving objects: 100% (838/838), 310.95 KiB | 380.00 KiB/s, done.
Resolving deltas: 100% (234/234), done.
* Running Git... # ( cd /var/lib/layman/zx2c4 && /usr/bin/git config user.name "layman" )
* Running Git... # ( cd /var/lib/layman/zx2c4 && /usr/bin/git config user.email "layman@localhost" )
* Successfully added overlay(s) zx2c4.
ちなみに公式によって認められていないOverlayの場合は、以下のようにインストールする前に一度確認が行われます。
# layman -a 4nykey
* Adding overlay...
* Overlay "4nykey" is not official. Continue installing? [y/n]: y
* Running Git... # ( cd /var/lib/layman && /usr/bin/git clone https://github.com/4nykey/4nykey.git /var/lib/layman/4nykey )
Cloning into '/var/lib/layman/4nykey'...
・・・
こうしてlaymanコマンドによって追加したOverlayは下記ディレクトリで管理されています。
# ll /var/lib/layman/4nykey
total 100
drwxr-xr-x 3 root root 4096 Feb 1 20:12 app-arch
drwxr-xr-x 5 root root 4096 Feb 1 20:12 app-crypt
drwxr-xr-x 3 root root 4096 Feb 1 20:12 app-editors
drwxr-xr-x 3 root root 4096 Feb 1 20:12 app-i18n
drwxr-xr-x 9 root root 4096 Feb 1 20:12 app-text
drwxr-xr-x 5 root root 4096 Feb 1 20:12 dev-cpp
drwxr-xr-x 9 root root 4096 Feb 1 20:12 dev-libs
drwxr-xr-x 43 root root 4096 Feb 1 20:12 dev-python
drwxr-xr-x 19 root root 4096 Feb 1 20:12 dev-util
drwxr-xr-x 2 root root 4096 Feb 1 20:12 eclass
drwxr-xr-x 6 root root 4096 Feb 1 20:12 gnome-extra
drwxr-xr-x 2 root root 4096 Feb 1 20:12 licenses
・・・
layman -l
-lオプションはローカルに追加されているOverlayをリスト形式で表示します。
# layman -l
* 4nykey [Git ] (https://github.com/4nykey/4nykey.git)
* zx2c4 [Git ] (git://git.zx2c4.com/portage)
このように先程追加したOverlayが二つ表示されます。
layman -d
-dオプションはローカルにあるOverlayリストの中から指定したOverlayを削除します。
今回は先程追加したzx2c4を削除してみます。
# layman -d zx2c4
* Deleting selected overlay(s)...
* Deleting directory "/var/lib/layman/zx2c4"
* Successfully deleted overlay(s) zx2c4.
# layman -l
* 4nykey [Git ] (https://github.com/4nykey/4nykey.git)
layman -s
-sオプションは指定したOverlayを最新の状態に更新します。引数にALLを指定することで、ローカルにある全てのOverlayを更新することができます。
# layman -s ALL
* Fetching remote list...
* Fetch Ok
* Syncing selected overlay(s)...
* Running Git... # ( cd /var/lib/layman/4nykey && /usr/bin/git pull )
Already up to date.
*
* Succeeded:
* ------
* Successfully synchronized overlay "4nykey".
*
layman -S
-Sオプションはローカルにある全てのOverlayを最新の状態に更新します。つまり先程の-sオプションにALLを指定した時と同じ挙動をします。
# layman -S
* Fetching remote list...
* Fetch Ok
* Syncing selected overlay(s)...
* Running Git... # ( cd /var/lib/layman/4nykey && /usr/bin/git pull )
Already up to date.
*
* Succeeded:
* ------
* Successfully synchronized overlay "4nykey".
*
最後に
今回はOverlay管理ツールであるLaymanを図解し、基本的な使い方をまとめてみました。
個人的に興味深かったのは、Gentoo repoの優先度が既定で-1000に設定されているところです。公式リポジトリよりも、ユーザが自由に作成できるOverlayの方が優先されるので、本当にユーザの”選択”を大切に考えているディストリビューションだと思いました。
今後はhttps://gpo.zugaina.org/Overlaysを日頃からチェックし、面白そうなOverlayをLaymanで追加して、MyGentooをさらにカスタマイズしていきたいです。
Comments