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

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

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

【Portage】「emerge する」と言う理由

Portage Gentoo Linux

Gentooでは、Portageパッケージマネージャのコマンドである emerge を用いてインストールすることも、動詞として "emerge"と言う人がいます。*1

なぜ emerge というコマンド名かというともともとは、 ebuild merge だからです。

今でも Portage には、ebuild (ebuild(1)) というコマンドがあります。man 1 ebuild参照

ebuild コマンドでは、 *.ebuild ファイルのあるディレクトリで

ebuild [ebuild file] merge

とやると、インストール作業が実行されます。

emergeebuild(1)の差異は、 ebuildコマンドは argument (いわゆる「引き数」)に指定するのは ebuild ファイルであること。emerge は、パッケージを特定する表現(パッケージ名やバージョン番号などで構成される "atom")つまりいつもやっているようなことや、world のような"set"や、パッケージのインストールイメージ(*.tbz)なども argument になることです。 また、 emergedependency の精査などをしますが、ebuild はそんなに親切ではありません。

"install" ではなく "merge" と言う方言

Gentooでは、"install" ではなく "merge" や "emerge" と言わないと紛らわしいことがよくあります。

なぜなら、Gentoo のパッケージ管理規格である、いわば「ebuild システム」では、"install"とはサンドボックスにインストールすることだからです。 つまり、サンドボックスにインストールしてから、システム本体(いわゆる「本番環境」)にマージするようになっています。(そのほうが無難だし、何をインストール(コピー)したかを正確に記録することが可能になります。)

実際に、内部の、サンドボックスにインストールするfunction(機能。いわゆる「関数」)の名称にも "src_install" というのがあります。

ebuild(1)のコマンドも、ebuild [ebuild file] [command] の形式であり、その [command] には、merge するまでの各段階のいずれかを指定することも(それと、"unmerge" なども)可能です。LC_ALL=C man 1 ebuild 参照 https://dev.gentoo.org/~zmedico/portage/doc/man/ebuild.1.html

ebuild [ebuild file] install は src_install までを行うコマンドであって、システム本体に実際にインストールには install のあとに qmerge をする必要があります。

こうした事情があって、Gentooでは、"install"と言うと、一般的に言う「インストール」ではないこともあります。 ですから、"install" という動詞ではなくて "emerge" という動詞で言う必要もあるのです。

ちなみに、こうした奇異な慣習を嫌う人も少なくありません。「emerge する」はGentoo系でしか通用しませんから、Gentooに詳しくない人には奇特に思えるでしょう。


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

しつこいようですが、Gentoo Foundation にもそうですが、 Free Software Foundation にも寄付しましょう。 2015 — Free Software Foundation — working together for free software

*1:Googleで検索することを"google"、いわゆる「ググる」と言う人がいるのと同様です。