Gentooに関する世界観です。
Gentooはとにかくハンドブックを見ましょう。それだけでLinuxの全てが分かります。
Gentoo Linuxは、手動インストールと手動設定のカタマリです。
Portageという優れたパッケージ管理システムはありますが、ソースベースで、全てコマンドラインで操作してインストールし、パッケージのコンパイル画面を眺めて「ワクワク」しながら待ちながら、最後にきちんとファイルが入るところを確認して、ある時は「一晩かけてやっと終わった!」的な感じでパソコン画面に戻ります。
インストーラーはありません。コマンドから自分でインストールします。また、バイナリパッケージもありません。ebuildと呼ばれるシェルスクリプトのパッケージ記述システムと、Portageの強力な自動コンパイル・インストールシステムによって、何でも自動ダウンロード・自動コンパイルしてインストールします。
また、設定は手動で設定ファイルなどに記述して行います。
標準のデスクトップ環境もありません。まずコマンドでインストールしてから、X11をインストールし、お好みのウィンドウマネージャや統合デスクトップ環境をインストールします。
それこそ、標準のcronデーモンも、標準のシステムロガーもありません。全て、自分の選択したものを使います。
さらに言えば、標準のコンパイル設定もありません。make.confという設定ファイルに、自分のコンパイルオプションを書いて、最速に最適化します。USEフラグというものを用いて、自分の使いたい機能だけをオン・オフにしてコンパイルできます。
ですが、手動でシステムを管理しなければならないわけではなく、Portageによってemergeなどのコマンドを使うことで、自動で簡単に、*BSDで言う「make world」のように、自分のコンピュータ環境を最新に保てる、かつ、全部いっぺんにコンパイルすることができます。依存関係などの解決も優れています。
また、initシステム(RCスクリプト)やネットワーク設定などは「全て独自仕様」です。それは、決して役に立たない違いではなく、「手動で管理するならこれが一番ベストである」と言えるような、BSDライクな優れた独自性を持っています。
早い話、「Linuxディストリビューションというシステムをきちんと作ると当たり前にこうなる」というディストリビューションです。
一度ハンドブックからインストールして、使ってみれば、絶対に好きになります。Red Hat/Debianを使っていつまでもインストールと設定しか出来なかった昔の自分が嘘のようです。Linuxとはこういうものです。一度、Gentooを使ってみてください。後悔はしません。
注意事項:バイナリパッケージをないと書きましたが、本当は一部の巨大なアプリケーションに限ってバイナリパッケージも用意されています。ですが、普通は使いません。また、initやネットワークを独自仕様と書きましたが、共通のものを選択してインストール・設定することもできます。systemdを使うという手もありです。
僕は、Gentoo Linuxの良い点は、カーネルを手動でコンパイルして導入することではないかと思います。
Gentoo Linuxでは、システムの標準カーネルというのはなく、ソースパッケージを展開・導入して、自分で手動でコンパイルしてビルド・導入します。
このため、「Linuxカーネルとはなんであるか」が分かりやすく、開発者目線でシステムを構築することができます。
Gentoo Linuxは、メタディストリビューションという信念を持っています。これは、「ユーザーが自分のオリジナルのディストリビューションを作る」ということです。
Gentooには、ディストリビューションが押し付ける標準がありません。「Gentooとは選択です」というモットーのもと、自らが選択してシステムを柔軟に構築できるのです。
ただし、Gentoo Linuxには、「パッケージのビルドに時間がかかる」という欠点もあります。
Gentoo Linuxは、ソースパッケージをダウンロードし、Portageとemergeによってこのパッケージを自分のパソコンでビルドします。ビルドは自動ですが、不必要ではありません。パッケージはrsyncによって同期されるBashスクリプト(ebuildスクリプト)であり、パッケージのダウンロード・ビルド・インストールが自動化されていますが、バイナリパッケージは基本的に用意されていない(一部の巨大パッケージだけ例外的に用意されている)ため、ビルドに時間がかかるのです。
このビルドに時間がかかるという欠点は、普段使いのLinuxユーザーには致命的です。延々とビルドが終わるまで待たなければなりません。
この欠点さえなければ、Gentoo Linuxは最高のディストリビューションだと僕は思います。もし、バイナリベースのGentooと同じようなディストリビューションを探しているなら、Arch Linuxがおすすめです。
また、ソースベースのディストリビューションを使うことは、つまらないことばかりではありません。makeとgccによるビルド時の出力がすべて端末に吐かれるのが、面白いからです。すべてのパッケージにおける、C言語などで書かれたソースファイルをビルドしていく過程を眺めることで、Linuxのパッケージ導入の裏側を垣間見ることができます。すべてのビルド過程を眺めるのは面白いので、一度体験してみることをおすすめします。
パッケージのビルドが終わったら、最後に導入されたファイルリストが出力されます。このため、システムに関しての変更がきちんと分かります。ディストリビューションをインストールする際にも、他のディストリビューションのようにグラフィカルなインストーラはなく、インストールは手動でコマンドを打ち込み、設定ファイルを自力で編集します。インストールだけで、多くのLinuxやUNIXに関する知見が得られます。独自仕様は満載ですが、これほど面白いOSはないと思います。
また、GentooはgccやmakeのようなUNIXの開発ツールと親和性が高いです。FreeBSDのように、make.confに記述されたコンパイラやmake、Portageのオプションに従って、柔軟にシステムが構築できます。 USEフラグを使えば、「GNOMEサポートはいらない」とか「GTKよりもQtを使う」といったebuildスクリプトのビルドのカスタマイズは自由自在です。Intel以外のアーキテクチャにも広く対応しており、ebuildスクリプトを自分で書いたり、誰かが書いた非公式のebuildスクリプトを使うこともできます。
Gentooにはstage1, stage2, stage3というものがある。これは、どこまで最適化を行い、どこまでコンパイルするかという問題です。stage3が一番手軽ですが、コンパイラなどは最適化コンパイルしません。stage1では、まず一時システムを最適化コンパイルした上で(好みの最適化を行った自分独自の版のGCCを使う)、そのベースシステムから完全なシステムをコンパイルします。LFSのやり方と似ています。
PortageはPythonで書かれたとてもユニークなパッケージ管理システム。まず、システムにebuildと呼ばれるシェルスクリプトを、最新版(のミラー)と常に同期する。そして、いつでもそのパッケージから、プログラムを自動ダウンロード、コンパイル、インストールできる。この時、設定で全てのパッケージに対して最適化オプションやUSEフラグ(パッケージごとに付けられているタグのようなもので、どんな機能を有効にするか、無効にするかを簡単に指定できる。gtk+サポートはするがqtサポートはしないなど。)を設定することが出来る。
Portageツリーを最新にするには以下を実行する。これはrsyncのフロントエンド。
emerge --sync
パッケージを導入・更新するには以下を実行する。
emerge --ask パッケージ名
Portageはソースベースのパッケージ管理システムであるため、バイナリからインストールされるのではなく、ebuildスクリプトに基づいてコンパイルが行われる。そのため、少しコンパイルに時間がかかる。GNOMEやMozillaなど、場合によっては何時間もかかることがある。しかしながら、コンパイルの様子が出力されるので、「このプログラムはこんな構成でソースファイルが書かれているのだな」ということが分かる。
システム全体を更新するには以下を実行する。
emerge --update --ask @world
また、PortageはFreeBSDのPortsと呼ばれるパッケージ管理システムを参考にしており、FreeBSDのようにシステム全体を簡単に完全に再ビルドできる。
詳しい使い方は以下を参照のこと。
Portageの設定ファイルはmake.conf。ここで、コンパイルオプション(たとえば最適化をどの程度有効にするオプションをコンパイラに与えるか)やUSEフラグ(GTKのサポートをする・しないなど)を設定できる。
USEフラグの例(X11/GNOME/GTK/systemdサポートを追加し、KDE/Qtサポートを削除する):
USE="X gnome gtk systemd -kde -qt4 -qt5"
以下は開発版(不安定版)のebuildのインストールを許可する(~が開発版を表す):
ACCEPT_KEYWORDS="~amd64"
make.confの設定例の詳細については以下を参照のこと。
2024.06.12編集
Gentoo Linuxでは、GCCの最適化フラグをmake.confにおいてCFLAGSとCXXFLAGSで設定することができる。
たとえば、
CFLAGS="-march=native -O2 -pipe" CXXFLAGS="${CFLAGS}"
とするのが一般的。(/etc/portage/make.conf - Gentoo Wikiからの引用です。)
make.confにおけるCFLAGSの設定例は以下が参考になる。
GNUツールチェインやMakeも参照のこと。
2024.06.12
Gentooには自動インストーラーが存在しない。全てのインストールと設定は手動で行う。もちろん、Bashを使いながら、chroot, parted/fdisk, mkfs.ext2, mountなどを駆使して行う。設定ファイルはviやnano(簡単で小さなテキストエディタ)を使って行う。
また、GentooではLinuxカーネルはソースから手動でmakeでコンパイルする。このため、カスタマイズ性が高い。
ネットワークの設定は自動で設定するか、手動設定としては一般的なものとしてnet-setup(対話形式のネットワーク設定スクリプト)を使い、システムの設定ファイルは/etc/conf.d/以下のファイルを編集する。
Netifrcも参照のこと。
Gentooが採用しているOpenRCでは、init(RCスクリプト)の設定は、サービスの起動は
# /etc/init.d/daemonname start
とか。あるいは停止はstop, 再起動はrestartなどとする。
サービスの追加と削除は
# rc-update add daemonname default
あるいは、
# rc-update del daemonname default
などとする。
initとデーモンも参照のこと。
参考文献:
以下のGentoo誕生秘話は、僕がネット上にあるLinuxの文書の中で一番好きな文書です。とても面白い。
Google Chrome OSはGentoo LinuxのPortageをベースに開発されている。さすがGoogle、Linuxのことを良くわかっている。だが、ソースベースのパッケージ管理システムでどのようにバイナリ配布を行うのかがちょっと不安だ。Gentooではバイナリパッケージの配布は一部しか行われていない(全く未対応ではない)。全て自分でコンパイルするのが通常である。
Gentoo Linuxを使うことで分かることとは何か。それは、「Linuxシステムはテキストが動いているだけ」だということです。
ここで言うテキストとは、プログラムのソースコードのことです。
Gentooは、Portageというソースベースのパッケージ管理システムを採用しています。ソースベースとは、既成のバイナリを使わず、ソースコードからコンパイルするということです。
Portageは、適度に自動化されていながら、透明性が保たれているパッケージ管理システムであり、すべてのソースファイルをビルドしていく過程を自分の目で眺めることができます。
Portageで、プログラムがビルドされていく様子を眺めていくと、「悟り」に近い状態になります。すなわち、「Linuxのすべてはソースコードというテキストから成り立っている」ということが分かるのです。
Linuxにおいて、プログラムとは本来カーネルとユーザーランドの機械語のバイナリファイルです。多くの解説が述べているように、プログラムはCPUによって直接実行できるバイナリ形式でしか動きません。
ですが、Portageを触ることで、「バイナリがテキストのソースコードから自動生成されていく過程」をつぶさに知ることができます。
Gentooは、IntelのCPU以外の多くのCPUアーキテクチャに対応していますが、それもすべてソースベースです。Portageのそのような特徴から、「ソースコードというテキストをバイナリにコンパイルすることでしかプログラムは動かない」ということが分かります。
そして、Portageはそのようなパッケージ管理システムにおいて必要となる作業をすべて自動化しているため、テキストがLinuxのすべてであり、Linuxはテキストを大元に動いているということが分かるのです。
また、Gentooは非常にUNIXの勉強になるディストリビューションです。その理由は、手動でインストールを行うハンドブックにあります。
Gentooには、ディストリビューションのインストーラがありません。その代わり、ブートできて最小限の環境が起動する小さなCDをISOイメージを焼いて作り、そのCDからブートした上で、コマンドを操作して手動でディストリビューションをインストールします。
手動でインストールするからといって、気構える必要はありません。ハンドブックにそのために必要なことが全部記述されているからです。
このハンドブックを読みながら、手動でLinuxをインストールするということが、とても勉強になります。
自分でchrootを使って新しい環境に入るということ、パーティションはfdiskで作るということ、ファイルシステムは自分で選んだ種類のファイルシステムをフォーマットしてマウントすること、マウント設定の/etc/fstabを自分で書くということ、ネットワーク設定は設定ファイルにIPアドレスなどの設定情報を書くということ、ユーザーは自分で作るということなどが、きちんとハンドブックの説明と自分でコマンドを実行することで分かります。
手動で自分で設定を書くために、インストーラが何を代わりにやってくれているかということが分かり、インストーラ任せにすることなく、「この設定は自分で設定した」ということが分かるのです。
また、cronデーモンやシステムロガーは自分で導入します。ネットワークの設定も、基本的な用語の説明がハンドブックに書かれています。そして、Portageやrc-updateを使うことでシステムをひとつひとつコマンドで構築します。Portageやrc-updateは自動化はされていますが、適度に透明性のあるツールとなっており、実際Portageの設定などもmake.confに自分で記述し、その通りにソフトウェアを自動的にビルドしてくれます。make.confにパッケージ管理システムの設定を手動で記述し、ほかの設定も自分で記述するため、Linuxのシステムにおける設定可能な項目は何があるのか、どのように設定するのかということがすべて分かるのです。
Gentoo Linuxの特徴として言えるのは、「独自仕様が多い」ということです。
Gentoo Linuxは、はっきり言って独自仕様の塊です。パッケージ管理システムのPortageだけではなく、至るところに独自仕様があります。
Red HatでもDebianでもない、「Gentooだけの独自の世界」が広がっています。
そして、Gentooにはインストーラがありません。自分で手動でコマンドを用いて導入と管理を行います。
このため、Gentooのインストールは、「インストールの戦い」と言われています。Gentoo Linuxをインストールするのは簡単なことではなく、実力が必要なのです。
ですが、そのような「インストールに知識が必要」ということが、Gentoo Linuxのとてもよい点です。なぜなら、Gentoo Linuxをインストールして管理するということそれ自体が、Linuxシステムの管理の方法を学ぶことに繋がるからです。
Gentoo LinuxはFreeBSDを参考にして作られたLinuxディストリビューションであり、至るところにBSDの考え方が見られます。ですが、Linux環境としても随一の優れた環境だと思います。
今でこそ、Arch Linuxが普及したため、Arch Linuxと同じような目的と思想を持ったディストリビューションとしてのGentoo Linuxは衰退してしまいましたが、かつてのGentoo熱は凄かったです。本当に、Gentoo Linuxはほかのどのディストリビューションよりも面白く、そして勉強になるディストリビューションでした。
僕はGentoo Linuxを愛しています。今でこそ僕はDebianを使いますが、Gentooに対する愛は変わっていません。僕はGentoo Linuxを永遠に愛しているのです。
2023.09.12
OpenRCについてはinitとデーモンを参照のこと。
NetifrcについてはLinux ネットワーク設定C(Netifrc)を参照のこと。
Gentoo Linuxにはさまざまな部分にFreeBSDからの影響が見られる。特にFreeBSDのportsやmake.conf、rc.confなどは大いに参考にされている。
FreeBSDも参照のこと。
Gentoo Linuxのパッケージシステム。
Gentoo Handbookは、Gentoo LinuxをインストールするだけでUNIX/Linuxの基本的なシステムが分かる、大変素晴らしい文書です。