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

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

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

【Gentoo】ebuild ファイルを書いてみる 第3回

前回の続きです。

前回は、実際に書いた ebuild ファイルの実例を示しました。 モリサワ、じゃなくて、 kazesawa フォントをインストールする ebuild ファイルです。

デフォルトで済めばあらためて書く必要なし

結局は、 inherit が function (「関数」)であるのを除けば、全て variable (「変数」)の格納(「代入」)になりました。 フォントのインストールも、 font.eclass が必要な処理、例えばフォントキャッシュの更新などはデフォルトでやってくれますので、書く必要がないのです。

このように、デフォルトの処理で済むかぎりは書かなくてもよいため、 ebuild ファイルの内容は短く済ませることが可能になっています。 デフォルトではうまくいかないときにかぎって、「変数」や「関数」の内容を上書きする必要があるのです。 そのため、ebuild システムの中身を熟知しなくても、 ebuild ファイルは書けるようになっています。 慣れれば思ったより容易です。

さて、今回は、 ebuild ファイルを所定のディレクトリに置いて、実際にうまくいくかテストします。

ファイルの置きかた

Gentoo Wiki に例があります。 Overlay/Local overlay - Gentoo Wiki

root # mkdir -p /usr/local/portage/app-dicts/artha
root # cp ~myuser/artha-1.0.2.ebuild /usr/local/portage/app-dicts/artha/artha-1.0.2.ebuild
root # chown -R portage:portage /usr/local/portage
root # pushd /usr/local/portage/app-dicts/artha
root # repoman manifest
root # popd 

これは解りにくすぎます。

今回は /usr/local/portage/local-overlay という場所にリポジトリを作成し、その中に置くということにしました。

カテゴリは media-fonts ですので /usr/local/portage/local-overlay/media-fonts/kazesawa というディレクトリを作成し、その中に kazesawa-2015.12.18.ebuild というファイル名で作成します。

必要に応じて、 sudo などで root 権限で行ったり、あるいは sudo -u portageportage ユーザ権限で作業してください。 簡単なのは、

$ sudo gpasswd [username] portage

で自分の一般ユーザを portage グループに追加して

$ sudo chown portage:portage -R /usr/local/portage/local-overlay
$ sudo chmod ug+w -R /usr/local/portage/local-overlay
$ chmod g+s /usr/local/portage/local-overlay
$ mkdir -p /usr/local/portage/local-overlay/media-fonts/kazesawa

のようにしていけば、 portage グループのユーザとして書き込み権限がありますので作業がはかどります。*1

そして、テキストエディタで、作成した ebuild ファイルを編集し保存するわけです。

manifest

次に、 アーカイブをダウンロードしてハッシュ値を取得して、 同じディレクトリに Manifest という名称のファイルで書き出します。*2

$ cd /usr/local/portage/local-overlay/media-fonts/kazesawa
$ ebuild kazesawa-2015.12.18.ebuild manifest

この ebuild はコマンドのほうです。 man 1 ebuild を参照。 ダウンロードしたファイルは、デフォルト設定では /usr/portage/distfiles/ の中に保存されます。

Gentoo Wiki にある repoman というコマンドはここでは奨めません。repomanは公式のパッケージメンテナになったら役だつと思いますが、リポジトリをプライベートで自作するだけならば、ebuild コマンドで足ります。

install

そしていよいよ、インストール作業のテストです。

$ sudo ebuild kazesawa-2015.12.18.ebuild install

これで、 Portage パッケージマネージャが、サンドボックス内へのインストール作業をします。 デフォルト設定では、 /var/tmp/portage/ の中にディレクトリが作成され、そこで処理がなされます。*3

今回の ebuild ファイルでは、 /var/tmp/portage/media-fonts/kazesawa-2015.12.18/ というディレクトリの中で処理されます。 /var/tmp/portage/media-fonts/kazesawa-2015.12.18/work というディレクトリにアーカイブが展開されます。 今回はビルド(コンパイルやリンク)の処理はありません(フォントファイルをコピーするだけ)ですが、一般的には work ディレクトリの中でビルドするわけです。

そして、サンドボックスへのインストールに成功すると、そのイメージは /var/tmp/portage/media-fonts/kazesawa-2015.12.18/image の中に入ります。

$ sudo ls -R /var/tmp/portage/media-fonts/kazesawa-2015.12.18/image

としてみると、ディレクトリ構造を模してインストールイメージが構築されていることが判るでしょう。

qmerge

このインストールイメージを、システム本体(「本番環境」)にマージするには

$ sudo ebuild kazesawa-2015.12.18.ebuild qmerge

をします。

ちなみに、ebuild コマンドの、 install は実は fetchcompile といった前段階も自動的に処理してくれます。

qmerge は、先に install をしないといけません、これは安全策です。しかしあえてすっ飛ばしてマージしたければ、 merge というのもあります。

$ ebuild kazesawa-2015.12.18.ebuild digest
$ sudo ebuild kazesawa-2015.12.18.ebuild merge

ebuild ファイルの自作などで自信がなければ、 install をしてインストールイメージを確認すべきですから、 merge までやらない方を奨めます。

成功したか確認

成功したか確認しましょう。各自でアプリケーションソフトウェアや「デスクトップ環境」などのフォント設定をみて、 Kazesawa があるか、つかえるか、試してみます。

emerge でインストール可能にするには

emerge でもインストール可能にするには、リポジトリの設定 (/etc/portage/repos.conf) が完了していなければなりません。

【Gentoo】リポジトリのつくりかた - 解き放たれしソフトウェア 参照


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

*1:2つめ(ug+w)は、所有するユーザとグループに書き込み権限を加える。3つめ(g+s)は、SETGID で、中に今後作成するディレクトリの所有グループが同じになります。

*2:必要ならば sudo -u portage してください。

*3:そのため、ここからは root 権限が必要です。