読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Gentoo】リポジトリのつくりかた

公式メインリポジトリPortageツリー)にないソフトウェアを(パッケージマネージャの管理下で)インストールするためには、 ebuild ファイルを書く必要があります。

しかしまず第一歩としては、メインリポジトリや公式の追加リポジトリ、ユーザのリポジトリなどに既に存在する ebuild ファイルをコピーして改変して使うことから始めることが多いと思われます。

そこで ebuild ファイルの書きかたよりまず、手元に自前のリポジトリ(オーバーレイ)を作成する方法です。(Gentooでは歴史的経緯により、メインリポジトリのことを「Portageツリー」、それ以外のリポジトリのことを「オーバーレイ」とも呼びます。)

Gentoo Wiki の記事の説明

Overlay/Local overlay - Gentoo Wiki の記事にありますが、物凄い「飛んでけ」感のある投げかたの記事です。(こういう「わかるだろ」と言わんばかりの態度がよくないところです。しかも、CLI で短い行数でまとめるのは効率が良いですが、エディタなどを用いる初級者を無視しています。つまり、ワンライナーのシェル芸のたぐいです。) ですので、もう少しまともに説明します。

root # mkdir -p /usr/local/portage/{metadata,profiles}
root # echo 'NameOfYourOverlay' > /usr/local/portage/profiles/repo_name
root # echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf
root # chown -R portage:portage /usr/local/portage

mkdir-p オプションは、作成するよう指定されたディレクトリの途中階層が存在しなければ、それも作成します。

{metadata,profiles} の部分は、シェルの brace expansion (ブレース展開)を使用しています。

# mkdir -p /usr/local/portage/{metadata,profiles}

$ sudo mkdir /usr/local/portage
$ sudo mkdir /usr/local/portage/metadata
$ sudo mkdir /usr/local/portage/profiles

に相当します。*1

# echo 'NameOfYourOverlay' > /usr/local/portage/profiles/repo_name

は、/usr/local/portage/profiles/repo_name を無ければ作成し、その一行目に NameOfYourOverlay と書き込みます。*2

# echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf

は、 /usr/local/portage/metadata/layout.conf を無ければ作成し、その一行目に `masters = gentoo' と書き込みます。

# chown -R portage:portage /usr/local/portage

は、 /usr/local/portage ディレクトリと、その中身すべての所有を、ユーザ portage 、グループ portage に変えます(-R は recursive オプション)。

# mkdir -p /etc/portage/repos.conf

/etc/portage/repos.conf というディレクトリを作成する(この例では、 repos.conf はファイルではなくディレクトリです。ディレクトリではなくファイルで管理する方法もあります)。

/etc/portage/repos.conf/local.conf というファイルを作成し、中身が

[NameOfYourOverlay]
location = /usr/local/portage
masters = gentoo
auto-sync = no

以上は、gksudo などで特権昇格したファイラでディレクトリを作成したり、テキストエディタでファイルを作成したりしてもかまいません。

実際にやってみる

上記 Gentoo Wiki の記事はおいといて、やってみましょう。

リポジトリの置き場

まず、作成するリポジトリの置き場を決めます。 /usr/local/ の下に作成するのは無難ですが、~($HOME) の下に作成するのもありうるでしょう。 自動的な管理の外の(「ローカルな」)ディレクトリに作成することが重要です。 パッケージマネージャと干渉してエラーが出たりしても困りますから。

ここでは、 /usr/local/portage/local-overlay ということにします。

リポジトリの名称

ここでは、ディレクトリの名称と同じで local-overlay にします。

リポジトリの中身をつくる

特殊ディレクトリをつくる

/usr/local/portage/local-overlay というディレクトリを作成します。 その中に、 profiles というディレクトリと、metadata というディレクトリを作成します。 profiles は、リポジトリに関する設定を置く場所で、metadata はパッケージマネージャ用のデータの置き場です。

リポジトリの名称を指定する

/usr/local/portage/local-overlay/profiles/repo_name というテキストファイルを作成し、中身は

local-overlay

と書きます。 言うまでもなくこの repo_name というファイルは、リポジトリの名称を保持するテキストファイルです。

親のリポジトリを指定する

/usr/local/portage/local-overlay/metadata/layout.conf というテキストファイルも作成し、中身には

masters = gentoo

と書きます。 これは、上位のリポジトリの名が gentoo であることを意味していて、gentoo という名のリポジトリとは、いわゆる「Portageツリー」です。

layout.conf の設定項目はもっと多いのですが、ここでは必須のものだけを書いています。

リポジトリの所有者を portage にする

Portage パッケージマネージャもファイルを生成したり書き換えたりするので、所有を portage:portage に変えます。

$ sudo chown -R portage:portage /usr/local/portage/local-overlay

repos.conf の設定

なお、repos.conf の説明は以前に書きました。

gnu.hatenablog.com

さて、ディレクトリが無ければ作成します。(もし単一ファイルの repos.conf で管理するならば、ここは飛ばして repos.conf に追記していきます。)

$ sudo mkdir /etc/portage/repos.conf

/etc/portage/repos.conf/local-overlay.conf というテキストファイルを作成し、中身を

[local-overlay]
location = /usr/local/portage/local-overlay
masters = gentoo
auto-sync = no

と書きます。 auto-syncリポジトリの中身をパッケージマネージャに同期させる(ダウンロードする)か否かの設定で、ここではローカルにリポジトリを置くので、同期させるリポジトリではありません。


この投稿は Gentoo Advent Calendar 2015 - Qiita 19日めの記事です。

もうすぐ冬至(≒Christmas)です。 このところ寒気が入ってきて気温が下がっているのですが、それでも例年並みという感のある暖冬少雪です。 エルニーニョの長期的周期もありましょうが、それでも明らかに気候が崩壊してきていると思います。

*1:ちなみにそれ以前の話ですが、 # のプロンプトはスーパユーザ、 $ や % のプロンプトは一般ユーザを指します。 $ は Bash など、 % は tcsh などでのプロンプトです。

*2:ちなみに、 echo コマンドは末尾に改行を自動的に出力します。