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

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

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

Gentoo は Arch よりも怖くない

Gentoo Linux ディストリビューション

"Gentoo Linux"*1 をインストールすることをためらったり、常用するOSにしたくなかったりするのには理由があるはずです。ebuild を書いてみようという以前に、Gentoo をインストールしない人が多いということがそもそもで、Gentoo ユーザが増えないのだと思います。

以前の繰り返しになりますが、Gentoo を使わない理由としては

  • インストールが難しい
  • ビルド(主にコンパイル)に時間と電力がかかる
  • アップグレードしたら動かなくなる可能性が怖い

というのがあげられると思います。

1点目については、インストールを少し容易にする手段はありますが、全自動にはならない、全自動にはならないからこそよいという発想なんだと思ってください。

カーネルコンフィグレーションが最大の難関だと思いますが、これに関してはまず、よそのディストリビューションの .config をもらってくれば、とりあえず動くカーネルが作れます。適合するバージョンがなければ、Gentoo でインストールするカーネルの方を旧バージョンにして合わせればよいです*2

2点目ですが、近年の AMD64 (x86_64) の PC の性能は高くなり、消費電力は減っている傾向がありますので、昔よりはビルドがずっと容易です。 また例えば、Google Chromeバイナリしかないので、バイナリパッケージです。FirefoxLibreOfficeバイナリパッケージもあります。 それでも、 WebKit GTK+ のようにバイナリパッケージがないものがあります。GNOME をインストールしたいときなどには必須なので、ビルドに何時間もかかることにはなりますが。

3点目の「アップグレードしたら動かなくなる」というリスクに関しては、ほぼ杞憂です。

それがもしも "ArchLinux" だったら pacman -Syu (アップグレード可能なパッケージを全更新)したら起動しなくなった(終了)という事件がときどきあります。 その ArchLinux に比べると、 Gentoo には「アップグレードしたら動かなくなる」というリスクに関して回避策があります

それは インストールするパッケージを stable に限るということ

また、たとえ unstable のパッケージのインストールを許可しているシステムであったとしても、失敗しても旧バージョンを再インストール可能という特徴があります。

ArchLinux を含め多くのディストリビューションは、ビルド済のバイナリでパッケージを配布しています。そして、それらソフトウェアのバージョンは固定で、ディストリビューション側で勝手に上げてしまうので、選択の余地はありません。 Gentoo は、バージョンを選べます。

例えば Debian GNU/Linux だと testing と unstable と stable の3種類に分かれているように、それぞれにパッケージのバージョンが固定で、「つまみ食い」は不可能です。 なぜならば、いまどきのソフトウェアの多くは shared object (≒ダイナミックリンクライブラリ)で、プログラム自体にはライブラリを組み込まないからで、だから互換性のあるバージョンに固定しておかないと動きません。

ちなみに ArchLinux が、「アップグレードで動かなくなる事件」がときどき起こるのは、新バージョンのテスト期間が短くて、かなり早くメインのリポジトリに入ってしまうというというのが一因です。そうしてメインのリポジトリに入ったのをインストールしてみたら想定の範囲外のことが起こったというわけです。 Debian の stable や CentOS のように、余計な変更を加えないディストリビューションであれば、パッケージをアップグレードしても順調に動くように作られていますし、それはつまり、パッケージのバージョンがあまり上がらずに固定されてしまうということです。

それに対して Gentoo はそもそも、原則として自前でビルドするわけですから、動くようにリンクするんですから、そりゃあ動きます。 だから、同じシステムで、設定次第で stable を選ぶことも unstable を選ぶことも可能です。 パッケージのバージョンを選べ、失敗しても以前のものを再インストールして修復するということも可能です。

ただし、このメリットを実現するためのデメリットとして、ライブラリを互換性のないバージョン(ABI incompatible)にアップグレードしたら、そのライブラリにリンクしているソフトウェアもアップグレードしないといけないということがあります。 つまり、アップグレードの内容によっては他のパッケージもビルドし直しになり、時間がかかることになります。*3

また、通常は ebuild が正しく書かれていてパッケージマネージャが再ビルドしてくれるのですが、何かの拍子にうまくいかないこともたまにあります。 そのときに「リンクが壊れて動かなくなったら再ビルド」という知識がないと、「アップグレードしたら動かなくなった」ということに、たしかになってしまうかもしれません。 それはつまり単に、「あなたが知っているか否か」という問題です。

*1:OSの呼称は、本当は「GNU/Linux(/ほか)」ですが、Gentooを含め多くのディストリビューションが「Linux」をあたかもOSであるかのようにしてディストリビューションの名にしています。「Linux」はカーネルでしかありませんからOSではありませんし、「GNU」を省くのは迫害(イジメ)だからこそ、私はここにこだわります。世間が「GNU」と書かないのは、フリーソフトウェア思想(≒コミュニズム)を黙殺して資本主義を推進するためです(冷戦も終わったのに未だに大資本私有を礼賛して無批判に続けているから世界がおかしいんですが、その自己洞察もないんですよね)。

*2:メジャーバージョンが合っていれば( x.y.z の x と y が同じであれば)大概は、 make oldconfig をしたときに選択肢が出てこずすんなりいきます。

*3:これを軽減する策として、ccache の利用があります。