この記事は eeic (東京大学工学部電気電子・電子情報工学科)その2 Advent Calendar 2016 の13日目の記事です。
昨日 (12/12) 分はnakachan94さん担当の大学生活で死にたくなったときにです。明日 (12/14) 分は62_stormkさん担当の弱者視点のEEICライフ(途中中断)です。
書き上げる頃にはすでに12/14になっていますがキニシテハイケナイ。

:pray::pray::pray:ナマステみなさんおはようございます。みなさんは、PCのOS/ディストリビューションとして何を使っていますか?いつかの自己紹介のときにGentoo Linuxと言ったらドン引きされたマンです。
でも、言うほどGentoo Linuxってドン引きするようなものじゃなくね?みたいな気持ちを胸に、この記事を書いています。

Gentoo Linuxってなによ

公式サイトによれば、

Welcome to Gentoo, a flexible, source-based Linux distribution that becomes just about any system you need—and much more.

超意訳すると、あなたが必要とするようなシステムになる、フレキシブルLinuxディストリビューションです。

重要な特徴は、ソースベースであること、つまり、基本的には使うPCでコンパイルを必要とするディストリビューションだということです。
この一文だけでうわあとなる人が多いようですが、ビルド自体はUbuntuのような主要ディストリビューションでも (ビルドサーバーが肩代わりする形で) 行われているものです。それをローカルでやって何が変わるというのでしょうか?

そんなことして何が楽しいのさ

軽い

ぼくの一世代前のPCは増設後メモリ2GBのAthlon 64 X2のような名前のCPUでしたが、Windows Vistaがプリインストールされていて、みなさんだったら想像は付くと思うのですが、重くて使い物にしたくようなPCでした。
そこで、少しでも軽くしようとしてUbuntu Linuxを入れたのですが、それでもeclipseを動かすと普通に重い。
じゃあということで導入したのがGentoo Linuxでした。重量系で噂のGNOME3を入れても驚きの軽さ 1。eclipseも ある程度 スイスイ動く。基本的人権を確保した瞬間でした。

Gentoo Linuxでは、USE flagというしくみで本当に必要な機能のみを導入することができるので軽くしやすいです 2

Linux力や問題解決能力が身につく

UbuntuだとTUIやGUIである程度設定してくれたりしますが、Gentooは自分で必要なものをインストールするタイプなので、この機能にはこういう名前のソフトウェアを使えばいいのだという知識が身につきやすい気がします。

ちなみに、普通に暮らしてたらGentooであっても引っかかりポイントはあまりないのですが、それでもたまに引っかかることが有ります。
その時は人脈やTwitterやぐぐるを駆使して問題解決を目指してみましょう。昨日の自分とは変われますよ?

めんどくさくなったので箇条書きでまとめると、

利点

  • (普段使用時のオペレーションは) 比較的軽い
  • Linux力、CLI力、問題解決能力のような (学科民にとっては) 将来必要になるであろう能力を実践的に身につけることができる
  • firefox-bin, libreoffice-binのようなバイナリパッケージも一部存在する
  • Ubuntuよりもパッケージのバージョンが新しいことが多い
  • 新しいことが多い割に最新のものを強制しないので、ある程度枯れていてなおかつバグの少なそうなバージョンを使用できる 3
  • 暇な時期には無限に遊べる
  • ビルド時の流れるコンソールを見て興奮できる

欠点

  • ビルドが重い 4
  • 他のパッケージのビルドに必要なヘッダファイルなどもインストールされるので他の有名ディストリよりもストレージ消費が大きい
  • Linuxを全く触ったことのない人には厳しいかも
  • 全てにおいて死ぬほど楽をしたい人には向かない
  • パッケージマネージャーの依存解決が遅い 5
  • 万が一ハマると大変
  • (場合によっては) 若干の英語力とggる力が必要になる

といったところでしょうか (他にもある気がするけどぱっと思いつかない)

Gentoo Linuxのインストール方法

基本的なインストールの仕方は公式ハンドブック (AMD64版)に譲ることにします。

ハンドブックはGentoo MinimalインストールCDを使用する形で書かれていますが、GUIを使用できるLiveDVDやUbuntu Install Diskを使用するほうが楽だと思います。

USEフラグの設定はめんどくさいのでflaggieをインストールして使用すると楽です。

MacBookにインストールする

おそらく学科の大多数の人はどうせインストールするならWindows+Mac+Linuxのトリプルブートをしたいと思います [要出典]。
私が試したのは2014年3月頃に買った新品のMacBook AirとWindows 8.1なので、それ以外の時期に買ったものだったりWindows 10だと状況が違うかもしれませんが。
ちなみに、たぶんプリインストールされた最近のWindows機にインストールするより簡単だと思います。

MacでトリプルブートするならrEFIndという固定概念が有りましたが、なぜかrEFIndではWindowsが起動できませんでした。

しょうがないので、rEFIndを使わずに起動するように設定したところ、起動ディスク設定のメニューからGentooで再起動を選べたり、
boot_os_selection.png
Altキーを押しながらPCを起動すると3つのOSから選べるようになりました
2016-12-14 01.02.01.jpg

私がトリプルブートをするときに参考にしたページはDebian EFI mode boot on a Macbook Pro, without rEFItです。Debianと書いてありますがLinuxならどれでもおっけーのはず。

(下の項を書いてて、ふと気がついてArchWikiを見に行ったら、同じようなことが書いてありました。マアソウデスヨネー、一応残しておくことにします。

このページを参考に進めていきます。

まずは、MacなどでApple HFS形式でパーティションを作ります。あとで見分けがつくよう、名前をつけておくことをおすすめします。この記事中ではGentBootと呼ぶことにします。大きなサイズはいらないはずですが、512MB分用意しました 6

Linux側でそのHFSパーティションの中にEFI向けブートローダーのファイルを置きます (作成方法は後で書く)。パスは一応似非ながらもEFIなので、(GentBoot)/boot/efi/EFI/gentoo/grubx64.efi にしました。

再起動して、Macに切り替えます。mactel-bootを使えばLinux上でできるっぽいですが、デフォルトのPortageレポジトリに見当たらなかったので……。再度Linuxに切り替えるためにはLinux CDから起動するなど面倒な手順が (おそらく) 必要になるので注意してください。

先のGentBootをマウントします。

# cd /Volumes
# diskutil list  # GentBootのIDENTIFIERを確認します。disk0s5として話を進めます。
# mkdir GentBoot
# diskutil mount -mountPoint /Volumes/GentBoot /dev/disk0s5
Volume GentBoot on /dev/disk0s5 mounted
# cd GentBoot

起動パーティションとして認識させるために、色々やっていきます。

# mkdir -p System/Library/CoreServices/
# ln EFI/gentoo/grubx64.efi System/Library/CoreServices/boot.efi
# echo 'This file is required for booting' > mach_kernel

下の内容で/Volumes/GentBoot/System/Library/CoreServices/SystemVersion.plistを用意します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>ProductBuildVersion</key>
        <string></string>
        <key>ProductName</key>
        <string>Linux</string>
        <key>ProductVersion</key>
        <string>Gentoo</string>
</dict>
</plist>

blessコマンドを使用して起動パーティションとして認識させます。おそらくEl Capitan以降は追加の処理が必要です。blessだけ行い、Network Recovery Modeから起動ディスクの選択をしてもうまくいくっぽいです。

# bless --folder `pwd` --file System/Library/CoreServices/boot.efi --setBoot

オプションで、アイコンを設定します。Gentooのロゴでも萌えキャラでもなんでもいいので、128x128 (もっと大きくてもいいかもしれない) のicnsファイルを用意して、(GentBoot)/.VolumeIcon.icnsに置きます。pngファイルからnpmのpng2icnsとかオンラインコンバータを使うといいと思います7

セキュアブートが有効になったプリインストールWindows機にインストールする

セキュアブートは死んでください 8

Sakaki's EFI Install Guide/Configuring Secure Bootを参照するといいかもしれません (試す環境がない……)

今あるOSを使いながらGentooを触ってみたいと言う方へ

仮想マシン生活も楽しいですが、Gentoo Prefixというものがあるので、それはそれで楽しくなれるかもしれません。ちなみに私はPrefixのインストールに成功したことがありません。

まとめ

最後は駆け足になってしまいましたが、Gentooは楽しいですよ! あなたもGentooしませんか?

Gentoo Advent Calendar 2016Gentooの優れているところも参照してみてください。

脚注


  1. 個人の感想です。 

  2. もちろん全ての機能で取捨選択ができるわけではありません。 

  3. 全てが最リリース新に追従しているわけではありませんが、一部のパッケージについてはgit HEADに追従することも可能です。 

  4. distccやccacheを使えばある程度ビルド負荷を下げることは出来ます。 

  5. 実際にはビルド時間のほうが長くなることが多いので無視できる。 

  6. Macでパーティションを作成するときの最小サイズなのか、そのサイズじゃないと成功しなかったか、は申し訳ありませんが記憶にありません 

  7. YosemiteかMavericksにはDebian EFI mode boot on a Macbook Pro, without rEFItのようにrsvg-convertやpng2icnsコマンドがあったはずなのですが、Sierraにはなさそうでした。 

  8. 死ねと言っていますがあくまで個人の感想です。